3 #include <msvcrt/string.h>
4 #include <msvcrt/internal/file.h>
10 int _wfindfirst(const wchar_t* _name, struct _wfinddata_t* result)
12 WIN32_FIND_DATAW FindFileData;
13 wchar_t dir[MAX_PATH];
17 if ( _name == NULL || _name[0] == 0 ) {
18 len = GetCurrentDirectoryW(MAX_PATH-4, dir);
19 if (dir[len-1] != L'\\') {
28 hFindFile = (long)FindFirstFileW(dir, &FindFileData);
29 if (hFindFile == -1) {
30 memset(result,0,sizeof(struct _wfinddata_t));
34 result->attrib = FindFileData.dwFileAttributes;
35 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
36 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
37 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
38 result->size = FindFileData.nFileSizeLow;
39 wcsncpy(result->name,FindFileData.cFileName,MAX_PATH);
41 // if no wildcard the find file handle can be closed right away
42 // a return value of 0 can flag this.
43 if (!wcschr(dir, L'*') && !wcschr(dir, L'?')) {
44 _findclose(hFindFile);
54 int _findfirsti64(const char *_name, struct _finddatai64_t *result)
56 WIN32_FIND_DATAA FindFileData;
61 if ( _name == NULL || _name[0] == 0 )
63 len = GetCurrentDirectoryA(MAX_PATH-4,dir);
64 if (dir[len-1] != '\\')
74 hFindFile = (long)FindFirstFileA(dir, &FindFileData);
77 memset(result,0,sizeof(struct _finddatai64_t));
81 result->attrib = FindFileData.dwFileAttributes;
82 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
83 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
84 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
86 (((__int64)FindFileData.nFileSizeLow)<<32) + FindFileData.nFileSizeLow;
87 strncpy(result->name,FindFileData.cFileName,MAX_PATH);
89 // if no wildcard the find file handle can be closed right away
90 // a return value of 0 can flag this.
92 if (!strchr(dir,'*') && !strchr(dir,'?')) {
93 _findclose(hFindFile);
102 int _findnexti64(int handle, struct _finddatai64_t *result)
104 WIN32_FIND_DATAA FindFileData;
106 // check no wildcards or invalid handle
107 if (handle == 0 || handle == -1)
110 if (!FindNextFileA((void *)handle, &FindFileData))
113 result->attrib = FindFileData.dwFileAttributes;
114 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
115 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
116 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
118 (((__int64)FindFileData.nFileSizeLow)<<32) + FindFileData.nFileSizeLow;
119 strncpy(result->name,FindFileData.cFileName,MAX_PATH);
127 int _wfindfirsti64(const wchar_t *_name, struct _wfinddatai64_t *result)
129 WIN32_FIND_DATAW FindFileData;
130 wchar_t dir[MAX_PATH];
134 if (_name == NULL || _name[0] == 0)
136 len = GetCurrentDirectoryW(MAX_PATH-4,dir);
137 if (dir[len-1] != L'\\')
147 hFindFile = (long)FindFirstFileW(dir, &FindFileData);
150 memset(result,0,sizeof(struct _wfinddatai64_t));
154 result->attrib = FindFileData.dwFileAttributes;
155 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
156 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
157 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
159 (((__int64)FindFileData.nFileSizeLow)<<32) + FindFileData.nFileSizeLow;
160 wcsncpy(result->name,FindFileData.cFileName,MAX_PATH);
162 // if no wildcard the find file handle can be closed right away
163 // a return value of 0 can flag this.
165 if (!wcschr(dir,L'*') && !wcschr(dir,L'?'))
167 _findclose(hFindFile);
177 int _wfindnext(int handle, struct _wfinddata_t *result)
179 WIN32_FIND_DATAW FindFileData;
181 // check no wildcards or invalid handle
182 if (handle == 0 || handle == -1)
185 if (!FindNextFileW((void *)handle, &FindFileData))
188 result->attrib = FindFileData.dwFileAttributes;
189 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
190 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
191 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
192 result->size = FindFileData.nFileSizeLow;
193 wcsncpy(result->name,FindFileData.cFileName, MAX_PATH);
201 int _wfindnexti64(int handle, struct _wfinddatai64_t *result)
203 WIN32_FIND_DATAW FindFileData;
205 // check no wildcards or invalid handle
206 if (handle == 0 || handle == -1)
209 if (!FindNextFileW((void *)handle, &FindFileData))
212 result->attrib = FindFileData.dwFileAttributes;
213 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
214 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
215 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
217 (((__int64)FindFileData.nFileSizeLow)<<32) + FindFileData.nFileSizeLow;
218 wcsncpy(result->name,FindFileData.cFileName,MAX_PATH);