@@ -323,10 +323,11 @@ encoding = [OFLocalization encoding]; if ((dir = opendir([path cStringWithEncoding: encoding])) == NULL) @throw [OFOpenItemFailedException exceptionWithPath: path + mode: nil errNo: errno]; # if !defined(HAVE_READDIR_R) && defined(OF_HAVE_THREADS) [readdirMutex lock]; # endif @@ -391,10 +392,11 @@ if (GetLastError() == ERROR_FILE_NOT_FOUND) errNo = ENOENT; @throw [OFOpenItemFailedException exceptionWithPath: path + mode: nil errNo: errNo]; } @try { do { @@ -411,11 +413,12 @@ objc_autoreleasePoolPop(pool2); } while (FindNextFileW(handle, &fd)); if (GetLastError() != ERROR_NO_MORE_FILES) @throw [OFReadFailedException exceptionWithObject: self - requestedLength: 0]; + requestedLength: 0 + errNo: EIO]; } @finally { FindClose(handle); } objc_autoreleasePoolPop(pool); @@ -940,11 +943,12 @@ if (!CreateHardLinkW([destination UTF16String], [source UTF16String], NULL)) @throw [OFLinkFailedException exceptionWithSourcePath: source - destinationPath: destination]; + destinationPath: destination + errNo: 0]; objc_autoreleasePoolPop(pool); } #endif @@ -987,11 +991,12 @@ if (!func_CreateSymbolicLinkW([destination UTF16String], [source UTF16String], 0)) @throw [OFCreateSymbolicLinkFailedException exceptionWithSourcePath: source - destinationPath: destination]; + destinationPath: destination + errNo: 0]; objc_autoreleasePoolPop(pool); } #endif @@ -1031,11 +1036,12 @@ @throw [OFInvalidArgumentException exception]; if ((handle = CreateFileW([path UTF16String], 0, (FILE_SHARE_READ | FILE_SHARE_WRITE), NULL, OPEN_EXISTING, FILE_FLAG_OPEN_REPARSE_POINT, NULL)) == INVALID_HANDLE_VALUE) - @throw [OFStatItemFailedException exceptionWithPath: path]; + @throw [OFStatItemFailedException exceptionWithPath: path + errNo: 0]; @try { union { char bytes[MAXIMUM_REPARSE_DATA_BUFFER_SIZE]; REPARSE_DATA_BUFFER data; @@ -1045,15 +1051,17 @@ if (!DeviceIoControl(handle, FSCTL_GET_REPARSE_POINT, NULL, 0, buffer.bytes, MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &size, NULL)) @throw [OFStatItemFailedException - exceptionWithPath: path]; + exceptionWithPath: path + errNo: 0]; if (buffer.data.ReparseTag != IO_REPARSE_TAG_SYMLINK) @throw [OFStatItemFailedException - exceptionWithPath: path]; + exceptionWithPath: path + errNo: 0]; #define slrb buffer.data.SymbolicLinkReparseBuffer tmp = slrb.PathBuffer + (slrb.SubstituteNameOffset / sizeof(wchar_t));