#include "precompiled.h"
#include "wutsname.h"
#include "../wutil.h"
#include "wposix_internal.h"
int uname(struct utsname* un)
{
static OSVERSIONINFO vi;
vi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx(&vi);
// OS implementation name
strcpy_s(un->sysname, ARRAY_SIZE(un->sysname), wutil_WindowsFamily());
// release info
const char* vs = vi.szCSDVersion;
int sp;
if(sscanf(vs, "Service Pack %d", &sp) == 1)
sprintf(un->release, "SP %d", sp);
// version
sprintf(un->version, "%s.%lu", wutil_WindowsVersionString(), vi.dwBuildNumber & 0xFFFF);
// node name
DWORD buf_size = sizeof(un->nodename);
DWORD last_err = GetLastError();
BOOL ok = GetComputerName(un->nodename, &buf_size);
// GetComputerName sets last error even on success - suppress.
if(ok)
SetLastError(last_err);
else
debug_warn("GetComputerName failed");
// hardware type
static SYSTEM_INFO si;
GetSystemInfo(&si);
if(si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
strcpy_s(un->machine, ARRAY_SIZE(un->machine), "AMD64");
else
strcpy_s(un->machine, ARRAY_SIZE(un->machine), "IA-32");
return 0;
}