3 #include <msvcrt/string.h>
4 #include <msvcrt/internal/file.h>
10 int _findclose(int handle)
12 // check no wildcards or invalid handle
13 if (handle == 0 || handle == -1)
15 return FindClose((void*)handle);
21 int _findfirst(const char* _name, struct _finddata_t* result)
23 WIN32_FIND_DATAA FindFileData;
28 if (_name == NULL || _name[0] == 0) {
29 len = GetCurrentDirectoryA(MAX_PATH-4,dir);
30 if (dir[len-1] != '\\') {
39 hFindFile = (long)FindFirstFileA(dir, &FindFileData);
40 if (hFindFile == -1) {
41 memset(result,0,sizeof(struct _finddata_t));
45 result->attrib = FindFileData.dwFileAttributes;
46 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
47 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
48 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
49 result->size = FindFileData.nFileSizeLow;
50 strncpy(result->name,FindFileData.cFileName,MAX_PATH);
52 // if no wildcard the find file handle can be closed right away
53 // a return value of 0 can flag this.
55 if (!strchr(dir,'*') && !strchr(dir,'?')) {
56 _findclose(hFindFile);
66 int _findnext(int handle, struct _finddata_t* result)
68 WIN32_FIND_DATAA FindFileData;
70 // check no wildcards or invalid handle
71 if (handle == 0 || handle == -1)
74 if (!FindNextFileA((void*)handle, &FindFileData))
77 result->attrib = FindFileData.dwFileAttributes;
78 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
79 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
80 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
81 result->size = FindFileData.nFileSizeLow;
82 strncpy(result->name,FindFileData.cFileName, MAX_PATH);