GetLastError strangeness with FindClose

Alex Pasadyn ajp at mail.utexas.edu
Sat Aug 16 11:55:09 CDT 2003


Hi all,
I observed a program that was bailing out with an absolutely baffling 
error message.  I have traced it to its cause, but now I'm stuck. 
Basically, it was telling me that it had an error in FindNextFile of 
"success".  I did a relay trace and found out that it was calling 
FindFirstFile, FindNextFile a bunch of times, FindClose, and then 
GetLastError.

So, I put together a little test:

#include <windows.h>
#include <stdio.h>

WIN32_FIND_DATA fd;
HANDLE h;

int main(int argc, char *argv[])
{

     h = FindFirstFile("*", &fd);
     if (h == INVALID_HANDLE_VALUE)
     {
         printf("Error finding first file: %d\n", GetLastError());
         return 1;
     }
     printf("found file: %s\n", fd.cFileName);
     while (FindNextFile(h, &fd))
     {
         printf("found file: %s\n", fd.cFileName);
     }
     FindClose(h);
     switch (GetLastError())
     {
     case ERROR_NO_MORE_FILES:
         printf("all done!\n");
         return 0;
     default:
         printf("Error finding next file: %d\n", GetLastError());
         return 1;
     }
     return 1;
}


Now, on Windows, the output is:
G:\testfnf>testfnf
found file: .
found file: ..
found file: testfnf.cpp
found file: testfnf.exe
all done!

And with Wine the output is:
[ajp at toaster testfnf]$ ~/wine/wine testfnf.exe
found file: .
found file: ..
found file: testfnf.cpp
found file: testfnf.exe
Error finding next file: 0

So, it looks like somewhere in FindClose Wine is resetting the last 
error.  I started digging through there and the functions it calls but I 
was unable to find where it was getting reset.  Can anyone shed some 
light on this?  Is there any way to break on that value changing?

Thanks,
-ajp




More information about the wine-devel mailing list