diff --git a/sysinfo_win32.cpp b/sysinfo_win32.cpp index e1290350..5b61f032 100644 --- a/sysinfo_win32.cpp +++ b/sysinfo_win32.cpp @@ -21,11 +21,12 @@ cruft::util::operator<< (std::ostream &os, sysinfo const &) os << "{ "; { - OSVERSIONINFO version; + OSVERSIONINFO version {}; + version.dwOSVersionInfoSize = sizeof (OSVERSIONINFO); if (!GetVersionExA (&version)) win32::error::throw_code (); - os << "os: { name: win32, " + os << "os: { name: win32" << ", version: " << +version.dwMajorVersion << '.' << +version.dwMinorVersion << '.' << +version.dwPlatformId @@ -36,23 +37,33 @@ cruft::util::operator<< (std::ostream &os, sysinfo const &) std::string name; { - if (!GetComputerNameExA (ComputerNamePhysicalNetBIOS, nullptr, &size)) + if (0 == GetComputerNameExA (ComputerNamePhysicalNetBIOS, nullptr, &size)) { + auto const code = win32::error::last_code (); + if (code != ERROR_MORE_DATA) + win32::error::throw_code (code); + } + name.resize (size); + + if (0 == GetComputerNameExA (ComputerNamePhysicalNetBIOS, &name[0], &size)) win32::error::throw_code (); name.resize (size); - if (!GetComputerNameExA (ComputerNamePhysicalNetBIOS, &name[0], &size)) - win32::error::throw_code (); os << ", hostname: " << name; } { size = 0; - if (!GetUserNameA (nullptr, &size)) - win32::error::throw_code (); + if (0 == GetUserNameA (nullptr, &size)) { + auto const code = win32::error::last_code (); + if (code != ERROR_INSUFFICIENT_BUFFER) + win32::error::throw_code (code); + + } name.resize (size); - if (!GetUserNameA (&name[0], &size)) + if (0 == GetUserNameA (&name[0], &size)) win32::error::throw_code (); + name.resize (size); os << ", username: " << name; } @@ -61,7 +72,7 @@ cruft::util::operator<< (std::ostream &os, sysinfo const &) MEMORYSTATUSEX status {}; status.dwLength = sizeof (status); - if (!GlobalMemoryStatusEx (&status)) + if (0 == GlobalMemoryStatusEx (&status)) win32::error::throw_code (); os << ", ram: { total: " << status.ullTotalPhys << ", available: " << status.ullAvailPhys << " },";