mirror of
https://github.com/git/git.git
synced 2026-01-17 06:13:11 +00:00
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 <blees@dcon.de> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
This commit is contained in:
committed by
Johannes Schindelin
parent
854dde881a
commit
1571b0c930
@@ -736,8 +736,8 @@ int mingw_lstat(const char *file_name, struct stat *buf)
|
||||
buf->st_nlink = 1;
|
||||
buf->st_mode = file_attr_to_st_mode(fdata.dwFileAttributes,
|
||||
findbuf.dwReserved0);
|
||||
buf->st_size = fdata.nFileSizeLow |
|
||||
(((off_t)fdata.nFileSizeHigh)<<32);
|
||||
buf->st_size = S_ISLNK(buf->st_mode) ? MAX_LONG_PATH :
|
||||
fdata.nFileSizeLow | (((off_t) fdata.nFileSizeHigh) << 32);
|
||||
buf->st_dev = buf->st_rdev = 0; /* not used by Git */
|
||||
filetime_to_timespec(&(fdata.ftLastAccessTime), &(buf->st_atim));
|
||||
filetime_to_timespec(&(fdata.ftLastWriteTime), &(buf->st_mtim));
|
||||
|
||||
@@ -151,8 +151,8 @@ static struct fsentry *fseentry_create_entry(struct fsentry *list,
|
||||
|
||||
fse->st_mode = file_attr_to_st_mode(fdata->dwFileAttributes,
|
||||
fdata->dwReserved0);
|
||||
fse->st_size = (((off64_t) (fdata->nFileSizeHigh)) << 32)
|
||||
| fdata->nFileSizeLow;
|
||||
fse->st_size = S_ISLNK(fse->st_mode) ? MAX_LONG_PATH :
|
||||
fdata->nFileSizeLow | (((off_t) fdata->nFileSizeHigh) << 32);
|
||||
filetime_to_timespec(&(fdata->ftLastAccessTime), &(fse->st_atim));
|
||||
filetime_to_timespec(&(fdata->ftLastWriteTime), &(fse->st_mtim));
|
||||
filetime_to_timespec(&(fdata->ftCreationTime), &(fse->st_ctim));
|
||||
|
||||
Reference in New Issue
Block a user