From 919409cb28a2ef9e97d7b15046fed2c5a4d0500f Mon Sep 17 00:00:00 2001
From: gcontini <1121667+gcontini@users.noreply.github.com>
Date: 周日, 15 3月 2020 11:00:50 +0800
Subject: [PATCH] fix cpuid

---
 src/library/os/cpu_info.hpp         |    1 +
 src/library/os/windows/cpu_info.cpp |   10 ++++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/library/os/cpu_info.hpp b/src/library/os/cpu_info.hpp
index 662e181..e0ec59f 100644
--- a/src/library/os/cpu_info.hpp
+++ b/src/library/os/cpu_info.hpp
@@ -29,6 +29,7 @@
 	bool cpu_virtual() const;
 	uint32_t model() const;
 	std::string vendor() const;
+	// std::string brand() const;
 	VIRTUALIZATION_DETAIL getVirtualizationDetail() const;
 };
 
diff --git a/src/library/os/windows/cpu_info.cpp b/src/library/os/windows/cpu_info.cpp
index 192e178..f4b0e81 100644
--- a/src/library/os/windows/cpu_info.cpp
+++ b/src/library/os/windows/cpu_info.cpp
@@ -41,8 +41,14 @@
 string CpuInfo::vendor() const {
 	// hypervisor flag false, try to get the vendor name, see if it's a virtual cpu
 	int cpui[4] = {0};
-	__cpuid(cpui, 0x0);
-	return string(reinterpret_cast<const char *>(cpui), 12);
+	__cpuidex(cpui, 0x0, 0x0);
+
+	char vendor[13];
+	memset(vendor, 0, sizeof(vendor));
+	*reinterpret_cast<int *>(vendor) = cpui[1];
+	*reinterpret_cast<int *>(vendor +4) = cpui[3];
+	*reinterpret_cast<int *>(vendor + 8) = cpui[2];
+	return string(vendor, 12);
 }
 }  // namespace os
 } /* namespace license */

--
Gitblit v1.9.1