Commit ad8e8fa768c44e3a4e0c12c831fd76ef863a5419

Edward Thomson 2015-09-17T12:23:19

win32: return EACCES in `p_lstat` Don't coalesce all errors into ENOENT. At least identify EACCES. All callers should be handling this case already, as the POSIX `lstat` will return this.

diff --git a/src/win32/posix_w32.c b/src/win32/posix_w32.c
index 504562b..e7aa6fc 100644
--- a/src/win32/posix_w32.c
+++ b/src/win32/posix_w32.c
@@ -146,12 +146,19 @@ static int lstat_w(
 		return git_win32__file_attribute_to_stat(buf, &fdata, path);
 	}
 
-	errno = ENOENT;
+	switch (GetLastError()) {
+	case ERROR_ACCESS_DENIED:
+		errno = EACCES;
+		break;
+	default:
+		errno = ENOENT;
+		break;
+	}
 
 	/* To match POSIX behavior, set ENOTDIR when any of the folders in the
 	 * file path is a regular file, otherwise set ENOENT.
 	 */
-	if (posix_enotdir) {
+	if (errno == ENOENT && posix_enotdir) {
 		size_t path_len = wcslen(path);
 
 		/* scan up path until we find an existing item */