summaryrefslogtreecommitdiffstats
path: root/platform
diff options
context:
space:
mode:
authorPāvels Nadtočajevs <7645683+bruvzg@users.noreply.github.com>2024-11-11 22:08:35 +0200
committerPāvels Nadtočajevs <7645683+bruvzg@users.noreply.github.com>2024-11-12 10:34:24 +0200
commita6dfd1cf6ef90f4e732727649ebc0c3234ec90b6 (patch)
treefe8de784345edc3a1760e175331b556ec9d3cc35 /platform
parentec6a1c0e792ac8be44990749800a4654a293b9ee (diff)
downloadredot-engine-a6dfd1cf6ef90f4e732727649ebc0c3234ec90b6.tar.gz
Implement `get_model_name` on macOS and Windows.
Diffstat (limited to 'platform')
-rw-r--r--platform/macos/os_macos.h2
-rw-r--r--platform/macos/os_macos.mm9
-rw-r--r--platform/windows/os_windows.cpp28
-rw-r--r--platform/windows/os_windows.h2
4 files changed, 41 insertions, 0 deletions
diff --git a/platform/macos/os_macos.h b/platform/macos/os_macos.h
index 303fc112bf..4fb4507837 100644
--- a/platform/macos/os_macos.h
+++ b/platform/macos/os_macos.h
@@ -114,6 +114,8 @@ public:
virtual String get_unique_id() const override;
virtual String get_processor_name() const override;
+ virtual String get_model_name() const override;
+
virtual bool is_sandboxed() const override;
virtual Vector<String> get_granted_permissions() const override;
virtual void revoke_granted_permissions() override;
diff --git a/platform/macos/os_macos.mm b/platform/macos/os_macos.mm
index d9086b8c38..08ff391aab 100644
--- a/platform/macos/os_macos.mm
+++ b/platform/macos/os_macos.mm
@@ -67,6 +67,15 @@ void OS_MacOS::initialize() {
initialize_core();
}
+String OS_MacOS::get_model_name() const {
+ char buffer[256];
+ size_t buffer_len = 256;
+ if (sysctlbyname("hw.model", &buffer, &buffer_len, nullptr, 0) == 0 && buffer_len != 0) {
+ return String::utf8(buffer, buffer_len);
+ }
+ return OS_Unix::get_model_name();
+}
+
String OS_MacOS::get_processor_name() const {
char buffer[256];
size_t buffer_len = 256;
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index bff3443214..e3d494baa8 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -1740,6 +1740,34 @@ String OS_Windows::get_locale() const {
return "en";
}
+String OS_Windows::get_model_name() const {
+ HKEY hkey;
+ if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Hardware\\Description\\System\\BIOS", 0, KEY_QUERY_VALUE, &hkey) != ERROR_SUCCESS) {
+ return OS::get_model_name();
+ }
+
+ String sys_name;
+ String board_name;
+ WCHAR buffer[256];
+ DWORD buffer_len = 256;
+ DWORD vtype = REG_SZ;
+ if (RegQueryValueExW(hkey, L"SystemProductName", nullptr, &vtype, (LPBYTE)buffer, &buffer_len) == ERROR_SUCCESS && buffer_len != 0) {
+ sys_name = String::utf16((const char16_t *)buffer, buffer_len).strip_edges();
+ }
+ buffer_len = 256;
+ if (RegQueryValueExW(hkey, L"BaseBoardProduct", nullptr, &vtype, (LPBYTE)buffer, &buffer_len) == ERROR_SUCCESS && buffer_len != 0) {
+ board_name = String::utf16((const char16_t *)buffer, buffer_len).strip_edges();
+ }
+ RegCloseKey(hkey);
+ if (!sys_name.is_empty() && sys_name.to_lower() != "system product name") {
+ return sys_name;
+ }
+ if (!board_name.is_empty() && board_name.to_lower() != "base board product") {
+ return board_name;
+ }
+ return OS::get_model_name();
+}
+
String OS_Windows::get_processor_name() const {
const String id = "Hardware\\Description\\System\\CentralProcessor\\0";
diff --git a/platform/windows/os_windows.h b/platform/windows/os_windows.h
index 4f9bc049ee..34af004822 100644
--- a/platform/windows/os_windows.h
+++ b/platform/windows/os_windows.h
@@ -210,6 +210,8 @@ public:
virtual String get_processor_name() const override;
+ virtual String get_model_name() const override;
+
virtual uint64_t get_embedded_pck_offset() const override;
virtual String get_config_path() const override;