diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 7d124a3da..3dc1ecbf6 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,9 @@ +2012-07-24 Corinna Vinschen + + * 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 Change "set_thread_waiting" to "set_signal_arrived" throughout. diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc index c5cac6aa2..48b51c275 100644 --- a/winsup/cygwin/wincap.cc +++ b/winsup/cygwin/wincap.cc @@ -347,71 +347,51 @@ wincapc::init () return; // already initialized GetSystemInfo (&system_info); - memset (&version, 0, sizeof version); version.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX); - if (!GetVersionEx (reinterpret_cast(&version))) - api_fatal ("Cygwin requires at least Windows 2000."); + GetVersionEx (reinterpret_cast(&version)); - switch (version.dwPlatformId) + switch (version.dwMajorVersion) { - case VER_PLATFORM_WIN32_NT: - switch (version.dwMajorVersion) + case 5: + switch (version.dwMinorVersion) { - case 4: - /* I'd be very surprised if this code is ever hit, but it doesn't - hurt to keep it. */ - api_fatal ("Cygwin requires at least Windows 2000."); + case 0: + if (version.wServicePackMajor < 4) + caps = &wincap_2000; + else + caps = &wincap_2000sp4; break; - case 5: - switch (version.dwMinorVersion) + + case 1: + caps = &wincap_xp; + switch (version.wServicePackMajor) { - case 0: - if (version.wServicePackMajor < 4) - caps = &wincap_2000; - else - caps = &wincap_2000sp4; - break; - - 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; + case 0: + caps = &wincap_xp; + case 1: + caps = &wincap_xpsp1; + default: + caps = &wincap_xpsp2; } break; + default: - caps = &wincap_minimal; - break; + caps = &wincap_2003; } break; - case VER_PLATFORM_WIN32_WINDOWS: - /* I'd be very surprised if this code is ever hit, but it doesn't - hurt to keep it. */ - api_fatal ("Windows 95/98/Me are not supported."); + case 6: + switch (version.dwMinorVersion) + { + case 0: + caps = &wincap_vista; + break; + case 1: + caps = &wincap_7; + break; + default: + caps = &wincap_8; + break; + } break; default: caps = &wincap_minimal;