3 #include <crtdll/string.h>
4 #include <crtdll/internal/file.h>
8 int _findfirst(const char *_name, struct _finddata_t *result)
11 WIN32_FIND_DATA FindFileData;
16 if ( _name == NULL || _name[0] == 0 ) {
17 len = GetCurrentDirectory(MAX_PATH-4,dir);
18 if (dir[len-1] != '\\') {
26 hFindFile = (long)FindFirstFileA( dir, &FindFileData );
27 if ( hFindFile == -1 ) {
28 memset(result,0,sizeof(struct _finddata_t));
31 result->attrib = FindFileData.dwFileAttributes;
34 result->time_create = FileTimeToUnixTime( &FindFileData.ftCreationTime,NULL);
35 result->time_access = FileTimeToUnixTime( &FindFileData.ftLastAccessTime,NULL);
36 result->time_write = FileTimeToUnixTime( &FindFileData.ftLastWriteTime,NULL);
37 result->size = FindFileData.nFileSizeLow;
38 strncpy(result->name,FindFileData.cFileName,260);
40 // if no wildcard the find file handle can be closed right away
41 // a return value of 0 can flag this.
43 if(!strchr(dir,'*') && !strchr(dir,'?')) {
44 _findclose(hFindFile);
53 int _findnext(int handle, struct _finddata_t *result)
55 WIN32_FIND_DATA FindFileData;
57 // check no wildcards or invalid handle
58 if ( handle == 0 || handle == -1)
63 if ( !FindNextFile((void *)handle, &FindFileData ) )
66 result->attrib = FindFileData.dwFileAttributes;
67 result->time_create = FileTimeToUnixTime( &FindFileData.ftCreationTime,NULL);
68 result->time_access = FileTimeToUnixTime( &FindFileData.ftLastAccessTime,NULL);
69 result->time_write = FileTimeToUnixTime( &FindFileData.ftLastWriteTime,NULL);
70 result->size = FindFileData.nFileSizeLow;
71 strncpy(result->name,FindFileData.cFileName,260);
75 int _findclose(int handle)
77 // check no wildcards or invalid handle
78 if ( handle == 0 || handle == -1)
80 return FindClose((void *)handle);