3 #include <msvcrt/string.h>
4 #include <msvcrt/internal/file.h>
7 int _wfindfirst(const wchar_t* _name, struct _wfinddata_t* result)
9 WIN32_FIND_DATAW FindFileData;
10 wchar_t dir[MAX_PATH];
14 if ( _name == NULL || _name[0] == 0 ) {
15 len = GetCurrentDirectoryW(MAX_PATH-4, dir);
16 if (dir[len-1] != L'\\') {
25 hFindFile = (long)FindFirstFileW(dir, &FindFileData);
26 if (hFindFile == -1) {
27 memset(result,0,sizeof(struct _wfinddata_t));
31 result->attrib = FindFileData.dwFileAttributes;
32 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
33 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
34 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
35 result->size = FindFileData.nFileSizeLow;
36 wcsncpy(result->name,FindFileData.cFileName,MAX_PATH);
38 // if no wildcard the find file handle can be closed right away
39 // a return value of 0 can flag this.
40 if (!wcschr(dir, L'*') && !wcschr(dir, L'?')) {
41 _findclose(hFindFile);
48 int _findfirsti64(const char *_name, struct _finddatai64_t *result)
50 WIN32_FIND_DATAA FindFileData;
55 if ( _name == NULL || _name[0] == 0 )
57 len = GetCurrentDirectoryA(MAX_PATH-4,dir);
58 if (dir[len-1] != '\\')
68 hFindFile = (long)FindFirstFileA(dir, &FindFileData);
71 memset(result,0,sizeof(struct _finddatai64_t));
75 result->attrib = FindFileData.dwFileAttributes;
76 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
77 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
78 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
80 (((__int64)FindFileData.nFileSizeLow)<<32) + FindFileData.nFileSizeLow;
81 strncpy(result->name,FindFileData.cFileName,MAX_PATH);
83 // if no wildcard the find file handle can be closed right away
84 // a return value of 0 can flag this.
86 if (!strchr(dir,'*') && !strchr(dir,'?')) {
87 _findclose(hFindFile);
93 int _findnexti64(int handle, struct _finddatai64_t *result)
95 WIN32_FIND_DATAA FindFileData;
97 // check no wildcards or invalid handle
98 if (handle == 0 || handle == -1)
101 if (!FindNextFileA((void *)handle, &FindFileData))
104 result->attrib = FindFileData.dwFileAttributes;
105 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
106 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
107 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
109 (((__int64)FindFileData.nFileSizeLow)<<32) + FindFileData.nFileSizeLow;
110 strncpy(result->name,FindFileData.cFileName,MAX_PATH);
115 int _wfindfirsti64(const wchar_t *_name, struct _wfinddatai64_t *result)
117 WIN32_FIND_DATAW FindFileData;
118 wchar_t dir[MAX_PATH];
122 if (_name == NULL || _name[0] == 0)
124 len = GetCurrentDirectoryW(MAX_PATH-4,dir);
125 if (dir[len-1] != L'\\')
135 hFindFile = (long)FindFirstFileW(dir, &FindFileData);
138 memset(result,0,sizeof(struct _wfinddatai64_t));
142 result->attrib = FindFileData.dwFileAttributes;
143 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
144 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
145 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
147 (((__int64)FindFileData.nFileSizeLow)<<32) + FindFileData.nFileSizeLow;
148 wcsncpy(result->name,FindFileData.cFileName,MAX_PATH);
150 // if no wildcard the find file handle can be closed right away
151 // a return value of 0 can flag this.
153 if (!wcschr(dir,L'*') && !wcschr(dir,L'?'))
155 _findclose(hFindFile);
162 int _wfindnext(int handle, struct _wfinddata_t *result)
164 WIN32_FIND_DATAW FindFileData;
166 // check no wildcards or invalid handle
167 if (handle == 0 || handle == -1)
170 if (!FindNextFileW((void *)handle, &FindFileData))
173 result->attrib = FindFileData.dwFileAttributes;
174 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
175 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
176 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
177 result->size = FindFileData.nFileSizeLow;
178 wcsncpy(result->name,FindFileData.cFileName, MAX_PATH);
183 int _wfindnexti64(int handle, struct _wfinddatai64_t *result)
185 WIN32_FIND_DATAW FindFileData;
187 // check no wildcards or invalid handle
188 if (handle == 0 || handle == -1)
191 if (!FindNextFileW((void *)handle, &FindFileData))
194 result->attrib = FindFileData.dwFileAttributes;
195 result->time_create = FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
196 result->time_access = FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
197 result->time_write = FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
199 (((__int64)FindFileData.nFileSizeLow)<<32) + FindFileData.nFileSizeLow;
200 wcsncpy(result->name,FindFileData.cFileName,MAX_PATH);