diff options
Diffstat (limited to 'win32/uname.c')
-rw-r--r-- | win32/uname.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/win32/uname.c b/win32/uname.c new file mode 100644 index 000000000..3b3e21f8d --- /dev/null +++ b/win32/uname.c | |||
@@ -0,0 +1,48 @@ | |||
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 | strcpy(name->release, unk); | ||
21 | strcpy(name->version, unk); | ||
22 | if (GetVersionEx(&os_info)) { | ||
23 | sprintf(name->release, "%u.%u", (unsigned int)os_info.dwMajorVersion, | ||
24 | (unsigned int)os_info.dwMinorVersion); | ||
25 | sprintf(name->version, "%u", (unsigned int)os_info.dwBuildNumber); | ||
26 | } | ||
27 | |||
28 | strcpy(name->machine, unk); | ||
29 | GetSystemInfo(&sys_info); | ||
30 | switch (sys_info.wProcessorArchitecture) { | ||
31 | case PROCESSOR_ARCHITECTURE_AMD64: | ||
32 | strcpy(name->machine, "x86_64"); | ||
33 | break; | ||
34 | case PROCESSOR_ARCHITECTURE_IA64: | ||
35 | strcpy(name->machine, "ia64"); | ||
36 | break; | ||
37 | case PROCESSOR_ARCHITECTURE_INTEL: | ||
38 | if (sys_info.wProcessorLevel < 6) { | ||
39 | strcpy(name->machine, "i386"); | ||
40 | } | ||
41 | else { | ||
42 | strcpy(name->machine, "i686"); | ||
43 | } | ||
44 | break; | ||
45 | } | ||
46 | |||
47 | return 0; | ||
48 | } | ||