diff options
Diffstat (limited to 'win32/uname.c')
-rw-r--r-- | win32/uname.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/win32/uname.c b/win32/uname.c new file mode 100644 index 000000000..1c73d073e --- /dev/null +++ b/win32/uname.c | |||
@@ -0,0 +1,50 @@ | |||
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 | OSVERSIONINFOEX os_info; | ||
9 | SYSTEM_INFO sys_info; | ||
10 | DWORD len; | ||
11 | |||
12 | strcpy(name->sysname, "Windows_NT"); | ||
13 | |||
14 | len = sizeof(name->nodename) - 1; | ||
15 | if ( !GetComputerName(name->nodename, &len) ) { | ||
16 | strcpy(name->nodename, unk); | ||
17 | } | ||
18 | |||
19 | memset(&os_info, 0, sizeof(OSVERSIONINFOEX)); | ||
20 | os_info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); | ||
21 | |||
22 | strcpy(name->release, unk); | ||
23 | strcpy(name->version, unk); | ||
24 | if (GetVersionEx(&os_info)) { | ||
25 | sprintf(name->release, "%d.%d", os_info.dwMajorVersion, | ||
26 | os_info.dwMinorVersion); | ||
27 | sprintf(name->version, "%d", os_info.dwBuildNumber); | ||
28 | } | ||
29 | |||
30 | strcpy(name->machine, unk); | ||
31 | GetSystemInfo(&sys_info); | ||
32 | switch (sys_info.wProcessorArchitecture) { | ||
33 | case PROCESSOR_ARCHITECTURE_AMD64: | ||
34 | strcpy(name->machine, "x86_64"); | ||
35 | break; | ||
36 | case PROCESSOR_ARCHITECTURE_IA64: | ||
37 | strcpy(name->machine, "ia64"); | ||
38 | break; | ||
39 | case PROCESSOR_ARCHITECTURE_INTEL: | ||
40 | if (sys_info.wProcessorLevel < 6) { | ||
41 | strcpy(name->machine, "i386"); | ||
42 | } | ||
43 | else { | ||
44 | strcpy(name->machine, "i686"); | ||
45 | } | ||
46 | break; | ||
47 | } | ||
48 | |||
49 | return 0; | ||
50 | } | ||