xref: /reactos/sdk/lib/crt/stdio/findgen.c (revision 8a978a17)
1 
2 /*
3  * @implemented
4  */
5 intptr_t _tfindfirst(const _TCHAR* _name, struct _tfinddata_t* result)
6 {
7     WIN32_FIND_DATA FindFileData;
8     HANDLE hFindFile;
9 
10     hFindFile = FindFirstFile(_name, &FindFileData);
11     if (hFindFile == INVALID_HANDLE_VALUE) {
12         _dosmaperr(GetLastError());
13         return -1;
14     }
15 
16     result->attrib = FindFileData.dwFileAttributes;
17     result->time_create = (time_t)FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
18     result->time_access = (time_t)FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
19     result->time_write = (time_t)FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
20     result->size = (((__int64)FindFileData.nFileSizeHigh)<<32) + FindFileData.nFileSizeLow;
21     _tcsncpy(result->name,FindFileData.cFileName,MAX_PATH);
22 
23     return (intptr_t)hFindFile;
24 }
25 
26 /*
27  * @implemented
28  */
29 int _tfindnext(intptr_t handle, struct _tfinddata_t* result)
30 {
31     WIN32_FIND_DATA FindFileData;
32 
33     if (!FindNextFile((HANDLE)handle, &FindFileData)) {
34     	_dosmaperr(GetLastError());
35         return -1;
36 	}
37 
38     result->attrib = FindFileData.dwFileAttributes;
39     result->time_create = (time_t)FileTimeToUnixTime(&FindFileData.ftCreationTime,NULL);
40     result->time_access = (time_t)FileTimeToUnixTime(&FindFileData.ftLastAccessTime,NULL);
41     result->time_write = (time_t)FileTimeToUnixTime(&FindFileData.ftLastWriteTime,NULL);
42     result->size = (((__int64)FindFileData.nFileSizeHigh)<<32) + FindFileData.nFileSizeLow;
43     _tcsncpy(result->name,FindFileData.cFileName, MAX_PATH);
44 
45     return 0;
46 }
47