[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 3/3 v2] Handle Windows CE and rewrite NT version handling.
From: |
Bruno Haible |
Subject: |
Re: [PATCH 3/3 v2] Handle Windows CE and rewrite NT version handling. |
Date: |
Sat, 3 Oct 2009 19:58:13 +0200 |
User-agent: |
KMail/1.9.9 |
Paolo Bonzini wrote:
> * lib/uname.c: Handle Windows CE and its processor types. Remove
> code for processors never supported by Windows 95/98/ME. Rewrite
> conversion of NT version numbers to product names.
Operating one change per commit, I'm applying the patch below. I
don't know why you wanted "uname -m" to output the processor type
in upper case or capitalized:
> + case PROCESSOR_ARCHITECTURE_MIPS:
> + strcpy (buf->machine, "MIPS");
> + break;
> + case PROCESSOR_ARCHITECTURE_ALPHA:
> + case PROCESSOR_ARCHITECTURE_ALPHA64:
> + strcpy (buf->machine, "Alpha");
> + break;
> + case PROCESSOR_ARCHITECTURE_PPC:
> + strcpy (buf->machine, "PowerPC");
> + break;
> + case PROCESSOR_ARCHITECTURE_SHX:
> + strcpy (buf->machine, "SH");
> + break;
> + case PROCESSOR_ARCHITECTURE_ARM:
> + strcpy (buf->machine, "ARM");
... when the Unix and Linux convention is to output a lowercase
processor type.
2009-10-03 Paolo Bonzini <address@hidden>
Bruno Haible <address@hidden>
* lib/uname.c (VER_PLATFORM_WIN32_CE, PROCESSOR_ARCHITECTURE_AMD64,
PROCESSOR_ARCHITECTURE_IA32_ON_WIN64): Define fallbacks.
(uname): Add support for Windows CE and various non-x86 CPU types.
--- lib/uname.c.orig 2009-10-03 19:50:22.000000000 +0200
+++ lib/uname.c 2009-10-03 19:48:35.000000000 +0200
@@ -27,7 +27,20 @@
#include <unistd.h>
#include <windows.h>
-/* Mingw headers don't have latest processor codes. */
+/* Mingw headers don't have all the platform codes. */
+#ifndef VER_PLATFORM_WIN32_CE
+# define VER_PLATFORM_WIN32_CE 3
+#endif
+
+/* Some headers don't have all the processor architecture codes. */
+#ifndef PROCESSOR_ARCHITECTURE_AMD64
+# define PROCESSOR_ARCHITECTURE_AMD64 9
+#endif
+#ifndef PROCESSOR_ARCHITECTURE_IA32_ON_WIN64
+# define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
+#endif
+
+/* Mingw headers don't have the latest processor codes. */
#ifndef PROCESSOR_AMD_X8664
# define PROCESSOR_AMD_X8664 8664
#endif
@@ -51,6 +64,11 @@
/* Windows NT or newer. */
super_version = "NT";
}
+ else if (version.dwPlatformId == VER_PLATFORM_WIN32_CE)
+ {
+ /* Windows CE or Embedded CE. */
+ super_version = "CE";
+ }
else if (version.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
{
/* Windows 95/98/ME. */
@@ -138,6 +156,13 @@
else
strcpy (buf->release, "Windows");
}
+ else if (version.dwPlatformId == VER_PLATFORM_WIN32_CE)
+ {
+ /* Windows CE or Embedded CE. */
+ sprintf (buf->release, "Windows CE %u.%u",
+ (unsigned int) version.dwMajorVersion,
+ (unsigned int) version.dwMinorVersion);
+ }
else
{
/* Windows 95/98/ME. */
@@ -150,11 +175,12 @@
SYSTEM_INFO info;
GetSystemInfo (&info);
- /* Check for Windows NT, since the info.wProcessorLevel is
+ /* Check for Windows NT or CE, since the info.wProcessorLevel is
garbage on Windows 95. */
- if (version.dwPlatformId == VER_PLATFORM_WIN32_NT)
+ if (version.dwPlatformId == VER_PLATFORM_WIN32_NT
+ || version.dwPlatformId == VER_PLATFORM_WIN32_CE)
{
- /* Windows NT or newer. */
+ /* Windows NT or newer, or Windows CE or Embedded CE. */
switch (info.wProcessorArchitecture)
{
case PROCESSOR_ARCHITECTURE_AMD64:
@@ -169,6 +195,25 @@
buf->machine[1] =
'0' + (info.wProcessorLevel <= 6 ? info.wProcessorLevel : 6);
break;
+ case PROCESSOR_ARCHITECTURE_IA32_ON_WIN64:
+ strcpy (buf->machine, "i686");
+ break;
+ case PROCESSOR_ARCHITECTURE_MIPS:
+ strcpy (buf->machine, "mips");
+ break;
+ case PROCESSOR_ARCHITECTURE_ALPHA:
+ case PROCESSOR_ARCHITECTURE_ALPHA64:
+ strcpy (buf->machine, "alpha");
+ break;
+ case PROCESSOR_ARCHITECTURE_PPC:
+ strcpy (buf->machine, "powerpc");
+ break;
+ case PROCESSOR_ARCHITECTURE_SHX:
+ strcpy (buf->machine, "sh");
+ break;
+ case PROCESSOR_ARCHITECTURE_ARM:
+ strcpy (buf->machine, "arm");
+ break;
default:
strcpy (buf->machine, "unknown");
break;