From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 130781 invoked by alias); 28 Jan 2020 19:06:43 -0000 Mailing-List: contact cygwin-cvs-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cygwin-cvs-owner@cygwin.com Received: (qmail 130686 invoked by uid 9996); 28 Jan 2020 19:06:41 -0000 Date: Tue, 28 Jan 2020 19:06:00 -0000 Message-ID: <20200128190641.130685.qmail@sourceware.org> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Ken Brown To: cygwin-cvs@sourceware.org Subject: [newlib-cygwin] Cygwin: fhandler_base::fstat_fs: accomodate the O_PATH flag X-Act-Checkin: newlib-cygwin X-Git-Author: Ken Brown X-Git-Refname: refs/heads/master X-Git-Oldrev: 4bfa93f1a00a09e4fb3bccea334ba22e4c05c3d6 X-Git-Newrev: 74e6e881433c45e758582adfdcb4be20ad5b52a9 X-SW-Source: 2020-q1/txt/msg00039.txt https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=74e6e881433c45e758582adfdcb4be20ad5b52a9 commit 74e6e881433c45e758582adfdcb4be20ad5b52a9 Author: Ken Brown Date: Fri Jan 24 14:54:47 2020 -0500 Cygwin: fhandler_base::fstat_fs: accomodate the O_PATH flag Treat a special file opened with O_PATH the same as a regular file, i.e., use its handle to get the stat information. Before this change, fstat_fs opened the file a second time, with the wrong flags and without closing the existing handle. A side effect was to change the openflags of the file, possibly causing further system calls to fail. Currently this change only affects FIFOs, but it will affect AF_LOCAL/AF_UNIX sockets too once they support O_PATH. Diff: --- winsup/cygwin/fhandler_disk_file.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/winsup/cygwin/fhandler_disk_file.cc b/winsup/cygwin/fhandler_disk_file.cc index 197f04f..d9213d7 100644 --- a/winsup/cygwin/fhandler_disk_file.cc +++ b/winsup/cygwin/fhandler_disk_file.cc @@ -359,7 +359,7 @@ fhandler_base::fstat_fs (struct stat *buf) if (get_stat_handle ()) { - if (!nohandle () && !is_fs_special ()) + if (!nohandle () && (!is_fs_special () || get_flags () & O_PATH)) res = pc.fs_is_nfs () ? fstat_by_nfs_ea (buf) : fstat_by_handle (buf); if (res) res = fstat_by_name (buf);