Skip to content

Commit cab2d36

Browse files
kbleesdscho
authored andcommitted
Win32: lstat(): return adequate stat.st_size for symlinks
Git typically doesn't trust the stat.st_size member of symlinks (e.g. see strbuf_readlink()). However, some functions take shortcuts if st_size is 0 (e.g. diff_populate_filespec()). In mingw_lstat() and fscache_lstat(), make sure to return an adequate size. The extra overhead of opening and reading the reparse point to calculate the exact size is not necessary, as git doesn't rely on the value anyway. Signed-off-by: Karsten Blees <[email protected]> Signed-off-by: Johannes Schindelin <[email protected]>
1 parent f4cbb8d commit cab2d36

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

compat/mingw.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -866,8 +866,8 @@ int mingw_lstat(const char *file_name, struct stat *buf)
866866
buf->st_nlink = 1;
867867
buf->st_mode = file_attr_to_st_mode(fdata.dwFileAttributes,
868868
findbuf.dwReserved0);
869-
buf->st_size = fdata.nFileSizeLow |
870-
(((off_t)fdata.nFileSizeHigh)<<32);
869+
buf->st_size = S_ISLNK(buf->st_mode) ? MAX_LONG_PATH :
870+
fdata.nFileSizeLow | (((off_t) fdata.nFileSizeHigh) << 32);
871871
buf->st_dev = buf->st_rdev = 0; /* not used by Git */
872872
filetime_to_timespec(&(fdata.ftLastAccessTime), &(buf->st_atim));
873873
filetime_to_timespec(&(fdata.ftLastWriteTime), &(buf->st_mtim));

0 commit comments

Comments
 (0)