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