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 )
24 len
= GetCurrentDirectoryA(MAX_PATH
-4,dir
);
25 if (dir
[len
-1] != '\\')
35 hFindFile
= (long)FindFirstFileA( dir
, &FindFileData
);
38 memset(result
,0,sizeof(struct _finddata_t
));
42 result
->attrib
= FindFileData
.dwFileAttributes
;
43 result
->time_create
= FileTimeToUnixTime(&FindFileData
.ftCreationTime
,NULL
);
44 result
->time_access
= FileTimeToUnixTime(&FindFileData
.ftLastAccessTime
,NULL
);
45 result
->time_write
= FileTimeToUnixTime(&FindFileData
.ftLastWriteTime
,NULL
);
46 result
->size
= FindFileData
.nFileSizeLow
;
47 strncpy(result
->name
,FindFileData
.cFileName
,MAX_PATH
);
49 // if no wildcard the find file handle can be closed right away
50 // a return value of 0 can flag this.
52 if (!strchr(dir
,'*') && !strchr(dir
,'?'))
54 _findclose(hFindFile
);
61 int _findfirsti64(const char *_name
, struct _finddatai64_t
*result
)
63 WIN32_FIND_DATAA FindFileData
;
68 if ( _name
== NULL
|| _name
[0] == 0 )
70 len
= GetCurrentDirectoryA(MAX_PATH
-4,dir
);
71 if (dir
[len
-1] != '\\')
81 hFindFile
= (long)FindFirstFileA(dir
, &FindFileData
);
84 memset(result
,0,sizeof(struct _finddatai64_t
));
88 result
->attrib
= FindFileData
.dwFileAttributes
;
89 result
->time_create
= FileTimeToUnixTime(&FindFileData
.ftCreationTime
,NULL
);
90 result
->time_access
= FileTimeToUnixTime(&FindFileData
.ftLastAccessTime
,NULL
);
91 result
->time_write
= FileTimeToUnixTime(&FindFileData
.ftLastWriteTime
,NULL
);
93 (((__int64
)FindFileData
.nFileSizeLow
)<<32) + FindFileData
.nFileSizeLow
;
94 strncpy(result
->name
,FindFileData
.cFileName
,MAX_PATH
);
96 // if no wildcard the find file handle can be closed right away
97 // a return value of 0 can flag this.
99 if (!strchr(dir
,'*') && !strchr(dir
,'?'))
101 _findclose(hFindFile
);
108 int _findnext(int handle
, struct _finddata_t
*result
)
110 WIN32_FIND_DATAA FindFileData
;
112 // check no wildcards or invalid handle
113 if (handle
== 0 || handle
== -1)
116 if (!FindNextFileA((void *)handle
, &FindFileData
))
119 result
->attrib
= FindFileData
.dwFileAttributes
;
120 result
->time_create
= FileTimeToUnixTime(&FindFileData
.ftCreationTime
,NULL
);
121 result
->time_access
= FileTimeToUnixTime(&FindFileData
.ftLastAccessTime
,NULL
);
122 result
->time_write
= FileTimeToUnixTime(&FindFileData
.ftLastWriteTime
,NULL
);
123 result
->size
= FindFileData
.nFileSizeLow
;
124 strncpy(result
->name
,FindFileData
.cFileName
, MAX_PATH
);
129 int _findnexti64(int handle
, struct _finddatai64_t
*result
)
131 WIN32_FIND_DATAA FindFileData
;
133 // check no wildcards or invalid handle
134 if (handle
== 0 || handle
== -1)
137 if (!FindNextFileA((void *)handle
, &FindFileData
))
140 result
->attrib
= FindFileData
.dwFileAttributes
;
141 result
->time_create
= FileTimeToUnixTime(&FindFileData
.ftCreationTime
,NULL
);
142 result
->time_access
= FileTimeToUnixTime(&FindFileData
.ftLastAccessTime
,NULL
);
143 result
->time_write
= FileTimeToUnixTime(&FindFileData
.ftLastWriteTime
,NULL
);
145 (((__int64
)FindFileData
.nFileSizeLow
)<<32) + FindFileData
.nFileSizeLow
;
146 strncpy(result
->name
,FindFileData
.cFileName
,MAX_PATH
);
151 int _wfindfirst(const wchar_t *_name
, struct _wfinddata_t
*result
)
153 WIN32_FIND_DATAW FindFileData
;
154 wchar_t dir
[MAX_PATH
];
158 if ( _name
== NULL
|| _name
[0] == 0 )
160 len
= GetCurrentDirectoryW(MAX_PATH
-4, dir
);
161 if (dir
[len
-1] != L
'\\')
171 hFindFile
= (long)FindFirstFileW(dir
, &FindFileData
);
174 memset(result
,0,sizeof(struct _wfinddata_t
));
178 result
->attrib
= FindFileData
.dwFileAttributes
;
179 result
->time_create
= FileTimeToUnixTime(&FindFileData
.ftCreationTime
,NULL
);
180 result
->time_access
= FileTimeToUnixTime(&FindFileData
.ftLastAccessTime
,NULL
);
181 result
->time_write
= FileTimeToUnixTime(&FindFileData
.ftLastWriteTime
,NULL
);
182 result
->size
= FindFileData
.nFileSizeLow
;
183 wcsncpy(result
->name
,FindFileData
.cFileName
,MAX_PATH
);
185 // if no wildcard the find file handle can be closed right away
186 // a return value of 0 can flag this.
188 if (!wcschr(dir
, L
'*') && !wcschr(dir
, L
'?'))
190 _findclose(hFindFile
);
197 int _wfindfirsti64(const wchar_t *_name
, struct _wfinddatai64_t
*result
)
199 WIN32_FIND_DATAW FindFileData
;
200 wchar_t dir
[MAX_PATH
];
204 if (_name
== NULL
|| _name
[0] == 0)
206 len
= GetCurrentDirectoryW(MAX_PATH
-4,dir
);
207 if (dir
[len
-1] != L
'\\')
217 hFindFile
= (long)FindFirstFileW(dir
, &FindFileData
);
220 memset(result
,0,sizeof(struct _wfinddatai64_t
));
224 result
->attrib
= FindFileData
.dwFileAttributes
;
225 result
->time_create
= FileTimeToUnixTime(&FindFileData
.ftCreationTime
,NULL
);
226 result
->time_access
= FileTimeToUnixTime(&FindFileData
.ftLastAccessTime
,NULL
);
227 result
->time_write
= FileTimeToUnixTime(&FindFileData
.ftLastWriteTime
,NULL
);
229 (((__int64
)FindFileData
.nFileSizeLow
)<<32) + FindFileData
.nFileSizeLow
;
230 wcsncpy(result
->name
,FindFileData
.cFileName
,MAX_PATH
);
232 // if no wildcard the find file handle can be closed right away
233 // a return value of 0 can flag this.
235 if (!wcschr(dir
,L
'*') && !wcschr(dir
,L
'?'))
237 _findclose(hFindFile
);
244 int _wfindnext(int handle
, struct _wfinddata_t
*result
)
246 WIN32_FIND_DATAW FindFileData
;
248 // check no wildcards or invalid handle
249 if (handle
== 0 || handle
== -1)
252 if (!FindNextFileW((void *)handle
, &FindFileData
))
255 result
->attrib
= FindFileData
.dwFileAttributes
;
256 result
->time_create
= FileTimeToUnixTime(&FindFileData
.ftCreationTime
,NULL
);
257 result
->time_access
= FileTimeToUnixTime(&FindFileData
.ftLastAccessTime
,NULL
);
258 result
->time_write
= FileTimeToUnixTime(&FindFileData
.ftLastWriteTime
,NULL
);
259 result
->size
= FindFileData
.nFileSizeLow
;
260 wcsncpy(result
->name
,FindFileData
.cFileName
, MAX_PATH
);
265 int _wfindnexti64(int handle
, struct _wfinddatai64_t
*result
)
267 WIN32_FIND_DATAW FindFileData
;
269 // check no wildcards or invalid handle
270 if (handle
== 0 || handle
== -1)
273 if (!FindNextFileW((void *)handle
, &FindFileData
))
276 result
->attrib
= FindFileData
.dwFileAttributes
;
277 result
->time_create
= FileTimeToUnixTime(&FindFileData
.ftCreationTime
,NULL
);
278 result
->time_access
= FileTimeToUnixTime(&FindFileData
.ftLastAccessTime
,NULL
);
279 result
->time_write
= FileTimeToUnixTime(&FindFileData
.ftLastWriteTime
,NULL
);
281 (((__int64
)FindFileData
.nFileSizeLow
)<<32) + FindFileData
.nFileSizeLow
;
282 wcsncpy(result
->name
,FindFileData
.cFileName
,MAX_PATH
);