Thread (37 messages) flat view 37 messages, 10 authors, 2016-06-15

Re: [PATCH] Add a new lstat implementation based on Win32 API, and make stat use that implementation too.

From: Johannes Sixt <hidden>
Date: 2016-06-15 22:43:32

On Sunday 02 September 2007 16:51, Marius Storm-Olsen wrote:
This gives us a significant speedup when adding, committing and stat'ing
files. (Also, since Windows doesn't really handle symlinks, it's fine that
stat just uses lstat)

Signed-off-by: Marius Storm-Olsen <redacted>
Your numbers show an improvement of 50% and more. That is terrific!

I'll test it out an put the patch into mingw.git. I hope you don't mind if I 
also include your analysis and statistics in the commit message. It's worth 
keeping around! BTW, which of your email addresses would you like registered 
as author?
+		ext = strrchr(file_name, '.');
+		if (ext && (!_stricmp(ext, ".exe") ||
+			    !_stricmp(ext, ".com") ||
+			    !_stricmp(ext, ".bat") ||
+			    !_stricmp(ext, ".cmd")))
+			fMode |= S_IEXEC;
+		}
I'm slightly negative about this. For a native Windows project the executable 
bit does not matter, and for a cross-platform project this check is not 
sufficient, but can even become annoying (think of a file 
named 'www.google.com'). So we can just as well spare the few cycles.
+		buf->st_size = fdata.nFileSizeLow; /* Can't use nFileSizeHigh, since
it's not a stat64 */
Here's an idea for the future: With this self-made stat() implementation it 
should also be possible to get rid of Windows's native struct stat: Make a 
private definition of it, too, and use all 64 bits.
 		return 0;
+	}
+	errno = ENOENT;
Of course we need a bit more detailed error conditions, most importantly 
EACCES should be distinguished.
+/* Make git on Windows use git_lstat and git_stat instead of lstat and
stat */ +int git_lstat(const char *file_name, struct stat *buf);
+int git_stat(const char *file_name, struct stat *buf);
+#define lstat(x,y) git_lstat(x,y)
+#define stat(x,y) git_stat(x,y)
I'd go the short route without git_stat() and

#define stat(x,y) git_lstat(x,y)

-- 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