From 8c47a98c9166ff23c3bcbb3e1ef8430b349cf71e Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Tue, 19 Feb 2019 10:59:45 +0000 Subject: win32: stat(2) succeeds if fetching extra metadata fails Some files can't be opened to fetch additional metadata. When that happens allow stat(2) to successfully return what data it has. In a few cases where the inode number is used to determine if files are identical ignore invalid inode numbers. --- win32/mingw.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) (limited to 'win32') diff --git a/win32/mingw.c b/win32/mingw.c index 3713fea95..84522d3ea 100644 --- a/win32/mingw.c +++ b/win32/mingw.c @@ -441,22 +441,14 @@ static int do_lstat(int follow, const char *file_name, struct mingw_stat *buf) #if ENABLE_FEATURE_EXTRA_FILE_DATA fh = CreateFile(file_name, 0, 0, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); - if (fh == INVALID_HANDLE_VALUE) - goto error; - - if (GetFileInformationByHandle(fh, &hdata)) { + if (fh != INVALID_HANDLE_VALUE && + GetFileInformationByHandle(fh, &hdata)) { buf->st_dev = hdata.dwVolumeSerialNumber; buf->st_ino = hdata.nFileIndexLow | (((ino_t)hdata.nFileIndexHigh)<<32); buf->st_nlink = S_ISDIR(buf->st_mode) ? 2 : hdata.nNumberOfLinks; - CloseHandle(fh); - } - else { - error: - errno = err_win_to_posix(GetLastError()); - CloseHandle(fh); - return -1; } + CloseHandle(fh); #endif /* -- cgit v1.2.3-55-g6feb