aboutsummaryrefslogtreecommitdiff
path: root/win32/uname.c
diff options
context:
space:
mode:
Diffstat (limited to 'win32/uname.c')
-rw-r--r--win32/uname.c50
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
5int 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}