From 3bda284e8fa1df1912c146f1732cc052a3356aa0 Mon Sep 17 00:00:00 2001
From: gcontini <1121667+gcontini@users.noreply.github.com>
Date: 周六, 31 10月 2020 10:27:59 +0800
Subject: [PATCH] disk id loop - Windows

---
 src/library/hw_identifier/disk_strategy.cpp |   11 +++++------
 src/library/os/windows/os_win.cpp           |   11 ++++++-----
 2 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/src/library/hw_identifier/disk_strategy.cpp b/src/library/hw_identifier/disk_strategy.cpp
index d0ebaed..c93f559 100644
--- a/src/library/hw_identifier/disk_strategy.cpp
+++ b/src/library/hw_identifier/disk_strategy.cpp
@@ -13,17 +13,16 @@
 namespace hw_identifier {
 
 static array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> generate_id_by_sn(const DiskInfo &disk_info) {
-	array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> a_disk_id;
-	a_disk_id.fill(0);
-	size_t size = min(a_disk_id.size(), sizeof(disk_info.disk_sn));
+	array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> a_disk_id = {};
+	size_t size = min((size_t) HW_IDENTIFIER_PROPRIETARY_DATA,
+			sizeof(disk_info.disk_sn));
 	memcpy(&a_disk_id[0], disk_info.disk_sn, size);
 
 	return a_disk_id;
 }
 
 static array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> generate_id_by_label(const DiskInfo &disk_info) {
-	array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> a_disk_id;
-	a_disk_id.fill(0);
+	array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA> a_disk_id = {};
 	strncpy((char *)&a_disk_id[0], disk_info.label, a_disk_id.size() - 1);
 	return a_disk_id;
 }
@@ -31,7 +30,7 @@
 static FUNCTION_RETURN generate_disk_pc_id(vector<array<uint8_t, HW_IDENTIFIER_PROPRIETARY_DATA>> &v_disk_id) {
 	std::vector<DiskInfo> disk_infos;
 	FUNCTION_RETURN result_diskinfos = getDiskInfos(disk_infos);
-	if (result_diskinfos != FUNC_RET_OK && result_diskinfos != FUNC_RET_BUFFER_TOO_SMALL) {
+	if (result_diskinfos != FUNC_RET_OK) {
 		return result_diskinfos;
 	}
 	if (disk_infos.size() == 0) {
diff --git a/src/library/os/windows/os_win.cpp b/src/library/os/windows/os_win.cpp
index ccb3652..54dbc75 100644
--- a/src/library/os/windows/os_win.cpp
+++ b/src/library/os/windows/os_win.cpp
@@ -23,11 +23,11 @@
 
 // http://www.ok-soft-gmbh.com/ForStackOverflow/EnumMassStorage.c
 // http://stackoverflow.com/questions/3098696/same-code-returns-diffrent-result-on-windows7-32-bit-system
-#define MAX_UNITS 30
+#define MAX_UNITS 40
 // bug check return with diskinfos == null func_ret_ok
 FUNCTION_RETURN getDiskInfos(std::vector<DiskInfo>& diskInfos) {
 	DWORD fileMaxLen;
-	size_t ndrives = 0;
+	size_t ndrives = 0, drives_scanned = 0;
 	DWORD fileFlags;
 	char volName[MAX_PATH], fileSysName[MAX_PATH];
 	DWORD volSerial = 0;
@@ -40,7 +40,7 @@
 	if (dwResult > 0) {
 		return_value = FUNC_RET_OK;
 		char* szSingleDrive = szLogicalDrives;
-		while (*szSingleDrive && ndrives < MAX_UNITS) {
+		while (*szSingleDrive && drives_scanned < MAX_UNITS) {
 			// get the next drive
 			UINT driveType = GetDriveType(szSingleDrive);
 			if (driveType == DRIVE_FIXED) {
@@ -49,8 +49,7 @@
 				if (success) {
 					LOG_DEBUG("drive: %s,volume Name: %s, Volume Serial: 0x%x,Filesystem: %s", szSingleDrive, volName,
 							  volSerial, fileSysName);
-					DiskInfo diskInfo;
-					memset(&diskInfo, 0, sizeof(diskInfo));
+					DiskInfo diskInfo = {};
 					diskInfo.id = (int)ndrives;
 					diskInfo.label_initialized = true;
 					strncpy(diskInfo.device, volName, min(std::size_t{MAX_PATH}, sizeof(volName)) - 1);
@@ -67,6 +66,8 @@
 			} else {
 				LOG_DEBUG("This volume is not fixed : %s, type: %d", szSingleDrive);
 			}
+			szSingleDrive += strlen(szSingleDrive) + 1;
+			drives_scanned++;
 		}
 	}
 	if (diskInfos.size() > 0) {

--
Gitblit v1.9.1