From 52ead7877dfa24681bd17c9f82f6d3c1bb5a873a Mon Sep 17 00:00:00 2001 From: Eduardo Bart Date: Mon, 19 Nov 2012 22:30:20 -0200 Subject: [PATCH] Fix win32 lstat --- src/win32/posix_w32.c | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/win32/posix_w32.c b/src/win32/posix_w32.c index 7359e4e9f..06da7ca95 100644 --- a/src/win32/posix_w32.c +++ b/src/win32/posix_w32.c @@ -104,7 +104,7 @@ static int do_lstat( return 0; } - last_error = GetLastError(); + errno = ENOENT; /* ERROR_PATH_NOT_FOUND can mean either that a parent directory is * missing or that an expected directory is a regular file. If we need @@ -112,38 +112,26 @@ static int do_lstat( * (i.e. entry that is not a dir), and the first case should be ENOENT. */ - if (last_error == ERROR_PATH_NOT_FOUND && posix_enotdir) { + if (posix_enotdir) { /* scan up path until we find an existing item */ while (1) { /* remove last directory component */ for (--flen; flen > 0 && !WIN32_IS_WSEP(fbuf[flen]); --flen); - if (flen <= 0) { - last_error = ERROR_FILE_NOT_FOUND; + if (flen <= 0) break; - } fbuf[flen] = L'\0'; if (GetFileAttributesExW(fbuf, GetFileExInfoStandard, &fdata)) { - if (fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) - last_error = ERROR_FILE_NOT_FOUND; - else - last_error = ERROR_PATH_NOT_FOUND; - break; + if (!(fdata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { + errno = ENOTDIR; + break; + } } - - last_error = GetLastError(); - if (last_error == ERROR_FILE_NOT_FOUND) - break; } } - if (last_error == ERROR_FILE_NOT_FOUND) - errno = ENOENT; - else if (last_error == ERROR_PATH_NOT_FOUND) - errno = ENOTDIR; - return -1; }