diff options
Diffstat (limited to '')
-rw-r--r-- | win32/uname.c | 47 |
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 | |||
5 | int 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 | } | ||