From f91e9327a553b2ec65f8159215d8496ab3254ead Mon Sep 17 00:00:00 2001
From: chrfranke <chrfranke@4ea69e1a-61f1-4043-bf83-b5c94c648137>
Date: Fri, 14 Sep 2007 20:52:14 +0000
Subject: [PATCH] Fixed regression in SMART STATUS command on Win9x/ME

git-svn-id: https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk@2429 4ea69e1a-61f1-4043-bf83-b5c94c648137
---
 sm5/CHANGELOG    |  4 +++-
 sm5/os_win32.cpp | 12 ++++++------
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/sm5/CHANGELOG b/sm5/CHANGELOG
index 0b5488849..2ae11453b 100644
--- a/sm5/CHANGELOG
+++ b/sm5/CHANGELOG
@@ -1,6 +1,6 @@
 CHANGELOG for smartmontools
 
-$Id: CHANGELOG,v 1.632 2007/09/06 19:00:21 chrfranke Exp $
+$Id: CHANGELOG,v 1.633 2007/09/14 20:52:14 chrfranke Exp $
 
 The most recent version of this file is:
 http://smartmontools.cvs.sourceforge.net/smartmontools/sm5/CHANGELOG?view=markup
@@ -33,6 +33,8 @@ NOTES FOR FUTURE RELEASES: see TODO file.
 
 <DEVELOPERS: ADDITIONS TO THE CHANGE LOG GO JUST BELOW HERE, PLEASE>
 
+  [CF] Fixed regression in SMART STATUS command on Win9x/ME.
+
   [BA] Fixed 3ware issue with new controllers.  Documentation said
        that one could address up to 24 disks on a single controller,
        but in fact one was limited to 16 disks.  This is now fixed:
diff --git a/sm5/os_win32.cpp b/sm5/os_win32.cpp
index 3a78d357f..7c1ab22a4 100644
--- a/sm5/os_win32.cpp
+++ b/sm5/os_win32.cpp
@@ -44,7 +44,7 @@ extern int64_t bytes; // malloc() byte count
 
 
 // Needed by '-V' option (CVS versioning) of smartd/smartctl
-const char *os_XXXX_c_cvsid="$Id: os_win32.cpp,v 1.57 2007/08/19 14:29:45 chrfranke Exp $"
+const char *os_XXXX_c_cvsid="$Id: os_win32.cpp,v 1.58 2007/09/14 20:52:14 chrfranke Exp $"
 ATACMDS_H_CVSID CONFIG_H_CVSID EXTERN_H_CVSID INT64_H_CVSID SCSICMDS_H_CVSID UTILITY_H_CVSID;
 
 
@@ -197,12 +197,14 @@ static const char * skipdev(const char * s)
 int guess_device_type (const char * dev_name)
 {
 	dev_name = skipdev(dev_name);
+	if (!strncmp(dev_name, "scsi", 4))
+		return CONTROLLER_SCSI;
+	if (is_win9x())
+		return CONTROLLER_ATA;
 	if (!strncmp(dev_name, "hd", 2))
 		return CONTROLLER_ATA;
 	if (!strncmp(dev_name, "tw_cli", 6))
 		return CONTROLLER_ATA;
-	if (!strncmp(dev_name, "scsi", 4))
-		return CONTROLLER_SCSI;
 	if (!strncmp(dev_name, "st", 2))
 		return CONTROLLER_SCSI;
 	if (!strncmp(dev_name, "nst", 3))
@@ -680,11 +682,9 @@ static int smart_ioctl(HANDLE hdevice, int drive, IDEREGS * regs, char * data, u
 	}
 	else {
 		code = SMART_SEND_DRIVE_COMMAND; name = "SMART_SEND_DRIVE_COMMAND";
-		if (regs->bFeaturesReg == ATA_SMART_STATUS) {
+		if (regs->bFeaturesReg == ATA_SMART_STATUS)
 			size_out = sizeof(IDEREGS); // ioctl returns new IDEREGS as data
 			// Note: cBufferSize must be 0 on Win9x
-			inpar.cBufferSize = size_out;
-		}
 		else
 			size_out = 0;
 	}
-- 
GitLab