From: corinna Date: Tue, 20 May 2008 18:19:32 +0000 (+0000) Subject: * path.cc (symlink_info::check_shortcut): Minimize requested file X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=921ab3c691a9a0440c95af2f56e5fe4766a507eb;p=pf3gnuchains%2Fpf3gnuchains3x.git * path.cc (symlink_info::check_shortcut): Minimize requested file access flags. (symlink_info::check_sysfile): Ditto. Add missing `else'. (symlink_info::check): Only retry to open file if first try failed with access denied. --- diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 64a566fc5d..c1d114b7af 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,5 +1,13 @@ 2008-05-20 Corinna Vinschen + * path.cc (symlink_info::check_shortcut): Minimize requested file + access flags. + (symlink_info::check_sysfile): Ditto. Add missing `else'. + (symlink_info::check): Only retry to open file if first try failed + with access denied. + +2008-05-20 Corinna Vinschen + * path.cc (fs_info::update): Re-add opening the unsplitted path for fillout_mntent's sake. diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index 84dca6db08..fb69531db0 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -1857,7 +1857,7 @@ symlink_info::check_shortcut (HANDLE in_h) FILE_STANDARD_INFORMATION fsi; InitializeObjectAttributes (&attr, &same, 0, in_h, NULL); - status = NtOpenFile (&h, FILE_GENERIC_READ, + status = NtOpenFile (&h, FILE_READ_DATA | SYNCHRONIZE, &attr, &io, FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT); @@ -1941,14 +1941,15 @@ symlink_info::check_sysfile (HANDLE in_h) IO_STATUS_BLOCK io; InitializeObjectAttributes (&attr, &same, 0, in_h, NULL); - status = NtOpenFile (&h, FILE_GENERIC_READ, + status = NtOpenFile (&h, FILE_READ_DATA | SYNCHRONIZE, &attr, &io, FILE_SHARE_VALID_FLAGS, FILE_OPEN_FOR_BACKUP_INTENT | FILE_SYNCHRONOUS_IO_NONALERT); if (!NT_SUCCESS (status)) set_error (EIO); - if (!NT_SUCCESS (status = NtReadFile (h, NULL, NULL, NULL, &io, cookie_buf, - sizeof (cookie_buf), NULL, NULL))) + else if (!NT_SUCCESS (status = NtReadFile (h, NULL, NULL, NULL, &io, + cookie_buf, sizeof (cookie_buf), + NULL, NULL))) { debug_printf ("ReadFile1 failed"); if (status != STATUS_END_OF_FILE) @@ -2367,7 +2368,7 @@ symlink_info::check (char *path, const suffix_info *suffixes, unsigned opt, FILE_OPEN_REPARSE_POINT | FILE_OPEN_FOR_BACKUP_INTENT, &nfs_aol_ffei, sizeof nfs_aol_ffei); - if (!NT_SUCCESS (status)) + if (status == STATUS_ACCESS_DENIED) /* No right to access EAs? */ { no_ea = true; status = NtCreateFile (&h,