public inbox for cygwin-cvs@sourceware.org help / color / mirror / Atom feed
From: Corinna Vinschen <corinna@sourceware.org> To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: wincap: split has_posix_file_info Date: Mon, 14 Jan 2019 19:38:00 -0000 [thread overview] Message-ID: <20190114193839.27815.qmail@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=5275b3e3f20387716c4216905a57155ce63c4360 commit 5275b3e3f20387716c4216905a57155ce63c4360 Author: Corinna Vinschen <corinna@vinschen.de> Date: Mon Jan 14 20:38:24 2019 +0100 Cygwin: wincap: split has_posix_file_info While FileRenameInformationEx is defined starting with Windows 10 1709 per MSDN, it only starts working in W10 1809, apparently. Users of 1803 report "Function not implemented". Introduce wincap_10_1809 and change the version check in wincapc::init accordingly. Split has_posix_file_info into has_posix_unlink_semantics and has_posix_rename_semantics. Enable the latter only starting with W10 1809. Signed-off-by: Corinna Vinschen <corinna@vinschen.de> Diff: --- winsup/cygwin/syscalls.cc | 5 +++-- winsup/cygwin/wincap.cc | 51 ++++++++++++++++++++++++++++++++++++++--------- winsup/cygwin/wincap.h | 6 ++++-- 3 files changed, 49 insertions(+), 13 deletions(-) diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 2628d94..04035a9 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -698,7 +698,8 @@ unlink_nt (path_conv &pc) /* First check if we can use POSIX unlink semantics: W10 1709++, local NTFS. With POSIX unlink semantics the entire job gets MUCH easier and faster. Just try to do it and if it fails, it fails. */ - if (wincap.has_posix_file_info () && !pc.isremote () && pc.fs_is_ntfs ()) + if (wincap.has_posix_unlink_semantics () + && !pc.isremote () && pc.fs_is_ntfs ()) { FILE_DISPOSITION_INFORMATION_EX fdie; @@ -2520,7 +2521,7 @@ rename2 (const char *oldpath, const char *newpath, unsigned int at2flags) } /* POSIX semantics only on local NTFS drives. */ - use_posix_semantics = wincap.has_posix_file_info () + use_posix_semantics = wincap.has_posix_rename_semantics () && !oldpc.isremote () && oldpc.fs_is_ntfs (); diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc index d9aea8a..4c1c7b4 100644 --- a/winsup/cygwin/wincap.cc +++ b/winsup/cygwin/wincap.cc @@ -35,8 +35,9 @@ 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, + has_posix_unlink_semantics:false, has_case_sensitive_dirs:false, + has_posix_rename_semantics:false, }, }; @@ -57,8 +58,9 @@ 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, + has_posix_unlink_semantics:false, has_case_sensitive_dirs:false, + has_posix_rename_semantics:false, }, }; @@ -79,8 +81,9 @@ 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, + has_posix_unlink_semantics:false, has_case_sensitive_dirs:false, + has_posix_rename_semantics:false, }, }; @@ -101,8 +104,9 @@ wincaps wincap_10_1507 __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, + has_posix_unlink_semantics:false, has_case_sensitive_dirs:false, + has_posix_rename_semantics:false, }, }; @@ -123,8 +127,9 @@ 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, + has_posix_unlink_semantics:false, has_case_sensitive_dirs:false, + has_posix_rename_semantics:false, }, }; @@ -145,8 +150,9 @@ 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, + has_posix_unlink_semantics:false, has_case_sensitive_dirs:false, + has_posix_rename_semantics:false, }, }; @@ -167,8 +173,9 @@ wincaps wincap_10_1709 __attribute__((section (".cygwin_dll_common"), shared)) = has_unprivileged_createsymlink:true, has_unbiased_interrupt_time:true, has_precise_interrupt_time:true, - has_posix_file_info:true, + has_posix_unlink_semantics:true, has_case_sensitive_dirs:false, + has_posix_rename_semantics:false, }, }; @@ -189,8 +196,32 @@ wincaps wincap_10_1803 __attribute__((section (".cygwin_dll_common"), shared)) = has_unprivileged_createsymlink:true, has_unbiased_interrupt_time:true, has_precise_interrupt_time:true, - has_posix_file_info:true, + has_posix_unlink_semantics:true, has_case_sensitive_dirs:true, + has_posix_rename_semantics:false, + }, +}; + +wincaps wincap_10_1809 __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_unlink_semantics:true, + has_case_sensitive_dirs:true, + has_posix_rename_semantics:true, }, }; @@ -234,7 +265,9 @@ wincapc::init () break; case 10: default: - if (likely (version.dwBuildNumber >= 17134)) + if (likely (version.dwBuildNumber >= 17763)) + caps = &wincap_10_1809; + else if (version.dwBuildNumber >= 17134) caps = &wincap_10_1803; else if (version.dwBuildNumber >= 16299) caps = &wincap_10_1709; diff --git a/winsup/cygwin/wincap.h b/winsup/cygwin/wincap.h index 967ddbd..d89fd71 100644 --- a/winsup/cygwin/wincap.h +++ b/winsup/cygwin/wincap.h @@ -29,8 +29,9 @@ 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; + unsigned has_posix_unlink_semantics : 1; unsigned has_case_sensitive_dirs : 1; + unsigned has_posix_rename_semantics : 1; }; }; @@ -80,8 +81,9 @@ public: bool IMPLEMENT (has_unprivileged_createsymlink) bool IMPLEMENT (has_unbiased_interrupt_time) bool IMPLEMENT (has_precise_interrupt_time) - bool IMPLEMENT (has_posix_file_info) + bool IMPLEMENT (has_posix_unlink_semantics) bool IMPLEMENT (has_case_sensitive_dirs) + bool IMPLEMENT (has_posix_rename_semantics) void disable_case_sensitive_dirs () {
reply other threads:[~2019-01-14 19:38 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20190114193839.27815.qmail@sourceware.org \ --to=corinna@sourceware.org \ --cc=cygwin-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).