changeset 12090:b0d4133f4100

Assume version info is available.
author Paolo Bonzini <bonzini@gnu.org>
date Fri, 02 Oct 2009 13:22:24 +0200
parents dd424efcfda8
children 4884000a2d0c
files ChangeLog lib/uname.c
diffstat 2 files changed, 70 insertions(+), 83 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-10-02  Paolo Bonzini  <bonzini@gnu.org>
+
+	* lib/uname.c: Include <stdlib.h>
+	(uname): Assume version info is available.
+
 2009-10-02  Jim Meyering  <meyering@redhat.com>
 
 	gnu-web-doc-update: correct --help output
--- a/lib/uname.c
+++ b/lib/uname.c
@@ -23,6 +23,7 @@
 #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
 
 #include <stdio.h>
+#include <stdlib.h>
 #include <unistd.h>
 #include <windows.h>
 
@@ -35,7 +36,6 @@
 uname (struct utsname *buf)
 {
   OSVERSIONINFO version;
-  BOOL have_version;
   const char *super_version;
 
   /* Fill in nodename.  */
@@ -44,35 +44,31 @@
 
   /* Determine major-major Windows version.  */
   version.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
-  have_version = GetVersionEx (&version);
-  if (have_version)
+  if (!GetVersionEx (&version))
+    abort ();
+  if (version.dwPlatformId == VER_PLATFORM_WIN32_NT)
     {
-      if (version.dwPlatformId == VER_PLATFORM_WIN32_NT)
-	{
-	  /* Windows NT or newer.  */
-	  super_version = "NT";
-	}
-      else if (version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
+      /* 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;
-	    }
+	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 = "";
     }
   else
     super_version = "";
@@ -84,17 +80,11 @@
      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.  */
@@ -102,66 +92,58 @@
        $ ./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)
+	  OSVERSIONINFOEX versionex;
+
+	  versionex.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
+	  if (GetVersionEx ((OSVERSIONINFO *) &versionex)
+	      && versionex.wProductType != VER_NT_WORKSTATION)
+	    strcpy (buf->release, "Windows Server 2008");
+	  else
 	    switch (version.dwMinorVersion)
 	      {
 	      case 0:
-		strcpy (buf->release, "Windows 2000");
+		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");
+	      default: /* versions not yet known */
+		strcpy (buf->release, "Windows 7");
 		break;
 	      }
-	  else if (version.dwMajorVersion == 6)
-	    {
-	      OSVERSIONINFOEX versionex;
-
-	      versionex.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
-	      if (GetVersionEx ((OSVERSIONINFO *) &versionex)
-		  && versionex.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.  */
   {
@@ -170,7 +152,7 @@
     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)