3 #include <msvcrt/string.h>
4 #include <msvcrt/internal/file.h>
7 int _findclose(int handle)
9 // check no wildcards or invalid handle
10 if (handle == 0 || handle == -1)
12 return FindClose((void*)handle);
15 int _findfirst(const char* _name, struct _finddata_t* result)
17 WIN32_FIND_DATAA FindFileData;
22 if (_name == NULL || _name[0] == 0) {
23 len = GetCurrentDirectoryA(MAX_PATH-4,dir);
24 if (dir[len-1] != '\\') {
33 hFindFile = (long)FindFirstFileA(dir, &FindFileData);
34 if (hFindFile == -1) {
35 memset(result,0,sizeof(struct _finddata_t));
39 result->attrib = FindFileData.dwFileAttributes;
40 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
41 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
42 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
43 result->size = FindFileData.nFileSizeLow;
44 strncpy(result->name,FindFileData.cFileName,MAX_PATH);
46 // if no wildcard the find file handle can be closed right away
47 // a return value of 0 can flag this.
49 if (!strchr(dir,'*') && !strchr(dir,'?')) {
50 _findclose(hFindFile);
57 int _findnext(int handle, struct _finddata_t* result)
59 WIN32_FIND_DATAA FindFileData;
61 // check no wildcards or invalid handle
62 if (handle == 0 || handle == -1)
65 if (!FindNextFileA((void*)handle, &FindFileData))
68 result->attrib = FindFileData.dwFileAttributes;
69 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
70 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
71 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
72 result->size = FindFileData.nFileSizeLow;
73 strncpy(result->name,FindFileData.cFileName, MAX_PATH);