Thread (3 messages) flat view 3 messages, 2 authors, 2016-06-15

Re: [PATCH] Add a fast version of fstat to cygwin port

From: Johannes Sixt <hidden>
Date: 2016-06-15 22:46:25

Alex Riesen schrieb:
Besides, the output of the fast stat and lstat is not compatible
with cygwin's fstat with regard to uid, gid and ctime fields.
Why do you need this? I don't think that fstat() is used in a critical
path. Do you see problems with the incompatible fields?
This is not strictly related to the other stat patches. The fstat
code is shamelessly stolen from the mingw port, sorry.
I wouldn't call it "stolen", but "copied". Because if you copy it, it
becomes your responsibility and all copied bugs are yours ;)
BTW, why do we have to #undef fstat, but not stat/lstat?
Because stat and lstat are #defined with an argument list, but in those
instances where the cygwin version of stat/lstat is meant, they are used
*without* argument list (see cygwin_stat/lstat_stub), and no macro
expansion happens, and therefore we don't need to #undef the macro.

OTOH, do_fstat calls into cygwin's fstat() if the file handle is not a
file and uses an argument list that would cause a macro expansion if it
were not #undef'd:
+#undef fstat
+static int cygwin_fstat(int fd, struct stat *buf)
+{
+	HANDLE fh = (HANDLE)_get_osfhandle(fd);
+	BY_HANDLE_FILE_INFORMATION fdata;
+
+	if (fh == INVALID_HANDLE_VALUE) {
+		errno = EBADF;
+		return -1;
+	}
+	/* direct non-file handles to cygwin's fstat() */
+	if (GetFileType(fh) != FILE_TYPE_DISK)
+		return fstat(fd, buf);
We never do that for stat/lstat.

-- Hannes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help