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
);