diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2013-03-27 10:13:07 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2013-03-27 10:13:07 (GMT) |
commit | ea1476c544dc734fc01fa6896ba5942948913eee (patch) | |
tree | 4f362ebcdf26c7826359ad5b3b40da29e97378dc /win/tclWinFile.c | |
parent | 7f649ad0bb5cffdd357e0d3e9f0d6c15d69e6722 (diff) | |
parent | 1abdef6a10523363f5da7923ff02d13f5bfcd92e (diff) | |
download | tcl-bug_3562640.zip tcl-bug_3562640.tar.gz tcl-bug_3562640.tar.bz2 |
merge core-8-4-branchbug_3562640
Diffstat (limited to 'win/tclWinFile.c')
-rw-r--r-- | win/tclWinFile.c | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/win/tclWinFile.c b/win/tclWinFile.c index 8ea6548..0ff219d 100644 --- a/win/tclWinFile.c +++ b/win/tclWinFile.c @@ -1337,11 +1337,14 @@ NativeAccess( if (attr == 0xffffffff) { /* - * File doesn't exist. + * File might not exist. */ - TclWinConvertError(GetLastError()); - return -1; + DWORD lasterror = GetLastError(); + if (lasterror != ERROR_SHARING_VIOLATION) { + TclWinConvertError(lasterror); + return -1; + } } if (mode == F_OK) { @@ -1889,8 +1892,21 @@ NativeStat(nativePath, statPtr, checkLinks) if((*tclWinProcs->getFileAttributesExProc)(nativePath, GetFileExInfoStandard, &data) != TRUE) { - Tcl_SetErrno(ENOENT); - return -1; + HANDLE hFind; + WIN32_FIND_DATAT ffd; + DWORD lasterror = GetLastError(); + + if (lasterror != ERROR_SHARING_VIOLATION) { + TclWinConvertError(lasterror); + return -1; + } + hFind = (*tclWinProcs->findFirstFileProc)(nativePath, &ffd); + if (hFind == INVALID_HANDLE_VALUE) { + TclWinConvertError(GetLastError()); + return -1; + } + memcpy(&data, &ffd, sizeof(data)); + FindClose(hFind); } |