aboutsummaryrefslogtreecommitdiff
path: root/win32/uname.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--win32/uname.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/win32/uname.c b/win32/uname.c
new file mode 100644
index 000000000..9474e5c04
--- /dev/null
+++ b/win32/uname.c
@@ -0,0 +1,47 @@
1#include "libbb.h"
2/* After libbb.h, since it needs sys/types.h on some systems */
3#include <sys/utsname.h>
4
5int uname(struct utsname *name)
6{
7 const char *unk = "unknown";
8 OSVERSIONINFO os_info;
9 SYSTEM_INFO sys_info;
10
11 strcpy(name->sysname, "Windows_NT");
12
13 if ( gethostname(name->nodename, sizeof(name->nodename)) != 0 ) {
14 strcpy(name->nodename, unk);
15 }
16
17 memset(&os_info, 0, sizeof(OSVERSIONINFO));
18 os_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
19
20 GetVersionEx(&os_info);
21 sprintf(name->release, "%u.%u", (unsigned int)os_info.dwMajorVersion,
22 (unsigned int)os_info.dwMinorVersion);
23 sprintf(name->version, "%u", (unsigned int)os_info.dwBuildNumber);
24
25 GetSystemInfo(&sys_info);
26 switch (sys_info.wProcessorArchitecture) {
27 case PROCESSOR_ARCHITECTURE_AMD64:
28 strcpy(name->machine, "x86_64");
29 break;
30 case PROCESSOR_ARCHITECTURE_INTEL:
31 strcpy(name->machine, "i686");
32 if (sys_info.wProcessorLevel < 6) {
33 name->machine[1] = '3';
34 }
35 break;
36#if defined(PROCESSOR_ARCHITECTURE_ARM64)
37 case PROCESSOR_ARCHITECTURE_ARM64:
38 strcpy(name->machine, "aarch64");
39 break;
40#endif
41 default:
42 strcpy(name->machine, unk);
43 break;
44 }
45
46 return 0;
47}