Cygwin: wincap: add wincap_10_1709, add has_posix_file_info item

Various new file info class members adding important POSIX semantics
have been added with W10 1709.  We may want to utilize them, so add
a matching wincaps.

Rearrange checking the W10 build number to prefer the latest builds
over the older builds.  Rename wincap_10 to wincap_10_1507 for
enhanced clarity.

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2018-12-23 00:21:21 +01:00
parent 29cfc892a5
commit 092a768885
2 changed files with 38 additions and 6 deletions

View File

@ -8,6 +8,7 @@ Cygwin license. Please consult the file "CYGWIN_LICENSE" for
details. */
#include "winsup.h"
#include "miscfuncs.h"
#include "security.h"
#include "ntdll.h"
@ -34,6 +35,7 @@ wincaps wincap_vista __attribute__((section (".cygwin_dll_common"), shared)) = {
has_unprivileged_createsymlink:false,
has_unbiased_interrupt_time:false,
has_precise_interrupt_time:false,
has_posix_file_info:false,
},
};
@ -54,6 +56,7 @@ wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = {
has_unprivileged_createsymlink:false,
has_unbiased_interrupt_time:true,
has_precise_interrupt_time:false,
has_posix_file_info:false,
},
};
@ -74,10 +77,11 @@ wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = {
has_unprivileged_createsymlink:false,
has_unbiased_interrupt_time:true,
has_precise_interrupt_time:false,
has_posix_file_info:false,
},
};
wincaps wincap_10 __attribute__((section (".cygwin_dll_common"), shared)) = {
wincaps wincap_10_1507 __attribute__((section (".cygwin_dll_common"), shared)) = {
def_guard_pages:2,
{
is_server:false,
@ -94,6 +98,7 @@ wincaps wincap_10 __attribute__((section (".cygwin_dll_common"), shared)) = {
has_unprivileged_createsymlink:false,
has_unbiased_interrupt_time:true,
has_precise_interrupt_time:true,
has_posix_file_info:false,
},
};
@ -114,6 +119,7 @@ wincaps wincap_10_1511 __attribute__((section (".cygwin_dll_common"), shared)) =
has_unprivileged_createsymlink:false,
has_unbiased_interrupt_time:true,
has_precise_interrupt_time:true,
has_posix_file_info:false,
},
};
@ -134,6 +140,28 @@ wincaps wincap_10_1703 __attribute__((section (".cygwin_dll_common"), shared)) =
has_unprivileged_createsymlink:true,
has_unbiased_interrupt_time:true,
has_precise_interrupt_time:true,
has_posix_file_info:false,
},
};
wincaps wincap_10_1709 __attribute__((section (".cygwin_dll_common"), shared)) = {
def_guard_pages:2,
{
is_server:false,
needs_count_in_si_lpres2:false,
has_gaa_largeaddress_bug:false,
has_broken_alloc_console:true,
has_console_logon_sid:true,
has_precise_system_time:true,
has_microsoft_accounts:true,
has_processor_groups:true,
has_broken_prefetchvm:false,
has_new_pebteb_region:true,
has_broken_whoami:false,
has_unprivileged_createsymlink:true,
has_unbiased_interrupt_time:true,
has_precise_interrupt_time:true,
has_posix_file_info:true,
},
};
@ -171,18 +199,20 @@ wincapc::init ()
caps = &wincap_8;
break;
default:
caps = &wincap_10;
caps = &wincap_10_1507;
break;
}
break;
case 10:
default:
if (version.dwBuildNumber < 10586)
caps = &wincap_10;
else if (version.dwBuildNumber < 15063)
if (likely (version.dwBuildNumber >= 16299))
caps = &wincap_10_1709;
else if (version.dwBuildNumber >= 15063)
caps = &wincap_10_1703;
else if (version.dwBuildNumber >= 10586)
caps = &wincap_10_1511;
else
caps = &wincap_10_1703;
caps = & wincap_10_1507;
}
((wincaps *)caps)->is_server = (version.wProductType != VER_NT_WORKSTATION);

View File

@ -29,6 +29,7 @@ struct wincaps
unsigned has_unprivileged_createsymlink : 1;
unsigned has_unbiased_interrupt_time : 1;
unsigned has_precise_interrupt_time : 1;
unsigned has_posix_file_info : 1;
};
};
@ -78,6 +79,7 @@ public:
bool IMPLEMENT (has_unprivileged_createsymlink)
bool IMPLEMENT (has_unbiased_interrupt_time)
bool IMPLEMENT (has_precise_interrupt_time)
bool IMPLEMENT (has_posix_file_info)
#undef IMPLEMENT
};