[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 3/5] Assume GetVersionEx info is available, try to use only one c
From: |
Paolo Bonzini |
Subject: |
[PATCH 3/5] Assume GetVersionEx info is available, try to use only one call. |
Date: |
Thu, 1 Oct 2009 14:15:09 +0200 |
This is actually a better way to organize the checks: first try
to get extended information, else fall back to OSVERSIONINFOA.
Given this, I can assert that Windows can provide version
information and proceed with the big reindentation.
* lib/uname.c: Check for OSVERSIONINFOEXA and fall back to
OSVERSIONINFOA. After that, assume version info is available
(big reindentation).
---
ChangeLog | 7 +++
lib/uname.c | 161 +++++++++++++++++++++++++++--------------------------------
2 files changed, 81 insertions(+), 87 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 1ab1255..e0819f3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2009-10-01 Paolo Bonzini <address@hidden>
+ Assume GetVersionEx info is available, try to use only one call.
+ * lib/uname.c: Check for OSVERSIONINFOEXA and fall back to
+ OSVERSIONINFOA. After that, assume version info is available
+ (big reindentation).
+
+2009-10-01 Paolo Bonzini <address@hidden>
+
Use only one OSVERSIONINFOEXA struct, use ANSI version.
* lib/uname.c: Use GetVersionExA, move API calls to the beginning.
diff --git a/lib/uname.c b/lib/uname.c
index d92e972..52519a6 100644
--- a/lib/uname.c
+++ b/lib/uname.c
@@ -24,6 +24,7 @@
#include <stdio.h>
#include <unistd.h>
+#include <assert.h>
#include <windows.h>
#include <assert.h>
@@ -45,40 +46,39 @@ uname (struct utsname *buf)
/* Determine major-major Windows version. OSVERSIONINFOEXA starts
with the same fields as OSVERSIONINFOA, request those first. */
- version.dwOSVersionInfoSize = sizeof (OSVERSIONINFOA);
+ version.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEXA);
have_version = GetVersionExA ((OSVERSIONINFOA *) &version);
- if (have_version)
+ if (!have_version)
{
- if (version.dwPlatformId == VER_PLATFORM_WIN32_NT)
- {
- /* Windows NT or newer. */
- super_version = "NT";
+ memset (&version, 0, sizeof (version));
+ version.dwOSVersionInfoSize = sizeof (OSVERSIONINFOA);
+ have_version = GetVersionExA ((OSVERSIONINFOA *) &version);
+ assert (have_version);
+ }
- version.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEXA);
- have_version = GetVersionExA ((OSVERSIONINFOA *) &version);
- assert (have_version);
- }
- else if (version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
+ if (version.dwPlatformId == VER_PLATFORM_WIN32_NT)
+ {
+ /* Windows NT or newer. */
+ super_version = "NT";
+ }
+ else if (version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
+ {
+ /* Windows 95/98/ME. */
+ switch (version.dwMinorVersion)
{
- /* Windows 95/98/ME. */
- switch (version.dwMinorVersion)
- {
- case 0:
- super_version = "95";
- break;
- case 10:
- super_version = "98";
- break;
- case 90:
- super_version = "ME";
- break;
- default:
- super_version = "";
- break;
- }
- }
- else
- super_version = "";
+ case 0:
+ super_version = "95";
+ break;
+ case 10:
+ super_version = "98";
+ break;
+ case 90:
+ super_version = "ME";
+ break;
+ default:
+ super_version = "";
+ break;
+ }
}
else
super_version = "";
@@ -90,17 +90,11 @@ uname (struct utsname *buf)
For example,
$ ./uname.exe -s => MINGW32_NT-5.1
*/
- if (have_version)
- sprintf (buf->sysname, "MINGW32_%s-%u.%u", super_version,
- (unsigned int) version.dwMajorVersion,
- (unsigned int) version.dwMinorVersion);
- else
- strcpy (buf->sysname, "MINGW32");
+ sprintf (buf->sysname, "MINGW32_%s-%u.%u", super_version,
+ (unsigned int) version.dwMajorVersion,
+ (unsigned int) version.dwMinorVersion);
#else
- if (have_version)
- sprintf (buf->sysname, "Windows%s", super_version);
- else
- strcpy (buf->sysname, "Windows");
+ sprintf (buf->sysname, "Windows%s", super_version);
#endif
/* Fill in release, version. */
@@ -108,63 +102,56 @@ uname (struct utsname *buf)
$ ./uname.exe -r => 1.0.11(0.46/3/2)
$ ./uname.exe -v => 2008-08-25 23:40
There is no point in imitating this behaviour. */
- if (have_version)
+ if (version.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
- if (version.dwPlatformId == VER_PLATFORM_WIN32_NT)
+ /* Windows NT or newer. */
+ if (version.dwMajorVersion <= 4)
+ sprintf (buf->release, "Windows NT %u.%u",
+ (unsigned int) version.dwMajorVersion,
+ (unsigned int) version.dwMinorVersion);
+ else if (version.dwMajorVersion == 5)
+ switch (version.dwMinorVersion)
+ {
+ case 0:
+ strcpy (buf->release, "Windows 2000");
+ break;
+ case 1:
+ strcpy (buf->release, "Windows XP");
+ break;
+ case 2:
+ strcpy (buf->release, "Windows Server 2003");
+ break;
+ default:
+ strcpy (buf->release, "Windows");
+ break;
+ }
+ else if (version.dwMajorVersion == 6)
{
- /* Windows NT or newer. */
- if (version.dwMajorVersion <= 4)
- sprintf (buf->release, "Windows NT %u.%u",
- (unsigned int) version.dwMajorVersion,
- (unsigned int) version.dwMinorVersion);
- else if (version.dwMajorVersion == 5)
- switch (version.dwMinorVersion)
- {
- case 0:
- strcpy (buf->release, "Windows 2000");
- break;
+ if (version.wProductType != VER_NT_WORKSTATION)
+ strcpy (buf->release, "Windows Server 2008");
+ else
+ switch (version.dwMinorVersion)
+ {
+ case 0:
+ strcpy (buf->release, "Windows Vista");
+ break;
case 1:
- strcpy (buf->release, "Windows XP");
- break;
- case 2:
- strcpy (buf->release, "Windows Server 2003");
- break;
- default:
- strcpy (buf->release, "Windows");
- break;
+ default: /* versions not yet known */
+ strcpy (buf->release, "Windows 7");
+ break;
}
- else if (version.dwMajorVersion == 6)
- {
- if (version.wProductType != VER_NT_WORKSTATION)
- strcpy (buf->release, "Windows Server 2008");
- else
- switch (version.dwMinorVersion)
- {
- case 0:
- strcpy (buf->release, "Windows Vista");
- break;
- case 1:
- default: /* versions not yet known */
- strcpy (buf->release, "Windows 7");
- break;
- }
- }
- else
- strcpy (buf->release, "Windows");
}
else
- {
- /* Windows 95/98/ME. */
- sprintf (buf->release, "Windows %s", super_version);
- }
- strcpy (buf->version, version.szCSDVersion);
+ strcpy (buf->release, "Windows");
}
else
{
- strcpy (buf->release, "Windows");
- strcpy (buf->version, "");
+ /* Windows 95/98/ME. */
+ sprintf (buf->release, "Windows %s", super_version);
}
+ strcpy (buf->version, version.szCSDVersion);
+
/* Fill in machine. */
{
SYSTEM_INFO info;
@@ -172,7 +159,7 @@ uname (struct utsname *buf)
GetSystemInfo (&info);
/* Check for Windows NT, since the info.wProcessorLevel is
garbage on Windows 95. */
- if (have_version && version.dwPlatformId == VER_PLATFORM_WIN32_NT)
+ if (version.dwPlatformId == VER_PLATFORM_WIN32_NT)
{
/* Windows NT or newer. */
switch (info.wProcessorArchitecture)
--
1.6.2.5
- Re: multiple target patterns, Paolo Bonzini, 2009/10/01
- [PATCH 1/5] win32: Use ANSI functions, Paolo Bonzini, 2009/10/01
- [PATCH 2/5] uname: use only one OSVERSIONINFOEXA struct, use ANSI version, Paolo Bonzini, 2009/10/01
- Re: [PATCH 4/5] Handle Windows CE and rewrite NT version handling., Bruno Haible, 2009/10/01
- Re: [PATCH 4/5] Handle Windows CE and rewrite NT version handling., Paolo Bonzini, 2009/10/01
- Re: [PATCH 4/5] Handle Windows CE and rewrite NT version handling., Bruno Haible, 2009/10/01
- Re: [PATCH 4/5] Handle Windows CE and rewrite NT version handling., Paolo Bonzini, 2009/10/01
- Re: [PATCH 2/5] uname: use only one OSVERSIONINFOEXA struct, use ANSI version, Bruno Haible, 2009/10/01
- Re: [PATCH 2/5] uname: use only one OSVERSIONINFOEXA struct, use ANSI version, Bruno Haible, 2009/10/01
- Re: [PATCH 2/5] uname: use only one OSVERSIONINFOEXA struct, use ANSI version, Paolo Bonzini, 2009/10/01