* wincap.cc (wincapc::init): Drop memset call since it can result in

a race condition.  Drop all considerations for pre-Windows 2000 systems
	since Cygwin won't start on them anyway.
This commit is contained in:
Corinna Vinschen 2012-07-24 13:56:14 +00:00
parent 5f3eab86a6
commit 67d71dbf10
2 changed files with 40 additions and 54 deletions

View File

@ -1,3 +1,9 @@
2012-07-24 Corinna Vinschen <corinna@vinschen.de>
* wincap.cc (wincapc::init): Drop memset call since it can result in
a race condition. Drop all considerations for pre-Windows 2000 systems
since Cygwin won't start on them anyway.
2012-07-23 Christopher Faylor <me.cygwin2012@cgf.cx> 2012-07-23 Christopher Faylor <me.cygwin2012@cgf.cx>
Change "set_thread_waiting" to "set_signal_arrived" throughout. Change "set_thread_waiting" to "set_signal_arrived" throughout.

View File

@ -347,71 +347,51 @@ wincapc::init ()
return; // already initialized return; // already initialized
GetSystemInfo (&system_info); GetSystemInfo (&system_info);
memset (&version, 0, sizeof version);
version.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX); version.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
if (!GetVersionEx (reinterpret_cast<LPOSVERSIONINFO>(&version))) GetVersionEx (reinterpret_cast<LPOSVERSIONINFO>(&version));
api_fatal ("Cygwin requires at least Windows 2000.");
switch (version.dwPlatformId) switch (version.dwMajorVersion)
{ {
case VER_PLATFORM_WIN32_NT: case 5:
switch (version.dwMajorVersion) switch (version.dwMinorVersion)
{ {
case 4: case 0:
/* I'd be very surprised if this code is ever hit, but it doesn't if (version.wServicePackMajor < 4)
hurt to keep it. */ caps = &wincap_2000;
api_fatal ("Cygwin requires at least Windows 2000."); else
caps = &wincap_2000sp4;
break; break;
case 5:
switch (version.dwMinorVersion) case 1:
caps = &wincap_xp;
switch (version.wServicePackMajor)
{ {
case 0: case 0:
if (version.wServicePackMajor < 4) caps = &wincap_xp;
caps = &wincap_2000; case 1:
else caps = &wincap_xpsp1;
caps = &wincap_2000sp4; default:
break; caps = &wincap_xpsp2;
case 1:
caps = &wincap_xp;
switch (version.wServicePackMajor)
{
case 0:
caps = &wincap_xp;
case 1:
caps = &wincap_xpsp1;
default:
caps = &wincap_xpsp2;
}
break;
default:
caps = &wincap_2003;
}
break;
case 6:
switch (version.dwMinorVersion)
{
case 0:
caps = &wincap_vista;
break;
case 1:
caps = &wincap_7;
break;
default:
caps = &wincap_8;
break;
} }
break; break;
default: default:
caps = &wincap_minimal; caps = &wincap_2003;
break;
} }
break; break;
case VER_PLATFORM_WIN32_WINDOWS: case 6:
/* I'd be very surprised if this code is ever hit, but it doesn't switch (version.dwMinorVersion)
hurt to keep it. */ {
api_fatal ("Windows 95/98/Me are not supported."); case 0:
caps = &wincap_vista;
break;
case 1:
caps = &wincap_7;
break;
default:
caps = &wincap_8;
break;
}
break; break;
default: default:
caps = &wincap_minimal; caps = &wincap_minimal;