1 #include <msvcrt/sys/types.h>
2 #include <msvcrt/sys/stat.h>
3 #include <msvcrt/fcntl.h>
5 #include <msvcrt/errno.h>
10 int _stat(const char *path, struct stat *buffer)
13 WIN32_FIND_DATAA findData;
21 if(strchr(path, '*') || strchr(path, '?'))
27 findHandle = FindFirstFileA(path, &findData);
28 if (findHandle == INVALID_HANDLE_VALUE)
34 FindClose(findHandle);
36 memset (buffer, 0, sizeof(struct stat));
38 buffer->st_ctime = FileTimeToUnixTime(&findData.ftCreationTime,NULL);
39 buffer->st_atime = FileTimeToUnixTime(&findData.ftLastAccessTime,NULL);
40 buffer->st_mtime = FileTimeToUnixTime(&findData.ftLastWriteTime,NULL);
42 // statbuf->st_dev = fd;
43 buffer->st_size = findData.nFileSizeLow;
44 buffer->st_mode = S_IREAD;
45 if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
46 buffer->st_mode |= S_IFDIR;
48 buffer->st_mode |= S_IFREG;
49 if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
50 buffer->st_mode |= S_IWRITE;
55 __int64 _stati64 (const char *path, struct _stati64 *buffer)
58 WIN32_FIND_DATAA findData;
66 if(strchr(path, '*') || strchr(path, '?'))
72 findHandle = FindFirstFileA(path, &findData);
73 if (findHandle == INVALID_HANDLE_VALUE)
79 FindClose(findHandle);
81 memset (buffer, 0, sizeof(struct stat));
83 buffer->st_ctime = FileTimeToUnixTime(&findData.ftCreationTime,NULL);
84 buffer->st_atime = FileTimeToUnixTime(&findData.ftLastAccessTime,NULL);
85 buffer->st_mtime = FileTimeToUnixTime(&findData.ftLastWriteTime,NULL);
87 // statbuf->st_dev = fd;
88 buffer->st_size = (((__int64)findData.nFileSizeHigh) << 32) +
89 findData.nFileSizeLow;
90 buffer->st_mode = S_IREAD;
91 if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
92 buffer->st_mode |= S_IFDIR;
94 buffer->st_mode |= S_IFREG;
95 if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
96 buffer->st_mode |= S_IWRITE;
101 int _wstat (const wchar_t *path, struct stat *buffer)
104 WIN32_FIND_DATAW findData;
112 if(wcschr(path, L'*') || wcschr(path, L'?'))
118 findHandle = FindFirstFileW(path, &findData);
119 if (findHandle == INVALID_HANDLE_VALUE)
125 FindClose(findHandle);
127 memset (buffer, 0, sizeof(struct stat));
129 buffer->st_ctime = FileTimeToUnixTime(&findData.ftCreationTime,NULL);
130 buffer->st_atime = FileTimeToUnixTime(&findData.ftLastAccessTime,NULL);
131 buffer->st_mtime = FileTimeToUnixTime(&findData.ftLastWriteTime,NULL);
133 // statbuf->st_dev = fd;
134 buffer->st_size = findData.nFileSizeLow;
135 buffer->st_mode = S_IREAD;
136 if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
137 buffer->st_mode |= S_IFDIR;
139 buffer->st_mode |= S_IFREG;
140 if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
141 buffer->st_mode |= S_IWRITE;
146 __int64 _wstati64 (const wchar_t *path, struct _stati64 *buffer)
149 WIN32_FIND_DATAW findData;
157 if(wcschr(path, L'*') || wcschr(path, L'?'))
163 findHandle = FindFirstFileW(path, &findData);
164 if (findHandle == INVALID_HANDLE_VALUE)
170 FindClose(findHandle);
172 memset (buffer, 0, sizeof(struct stat));
174 buffer->st_ctime = FileTimeToUnixTime(&findData.ftCreationTime,NULL);
175 buffer->st_atime = FileTimeToUnixTime(&findData.ftLastAccessTime,NULL);
176 buffer->st_mtime = FileTimeToUnixTime(&findData.ftLastWriteTime,NULL);
178 // statbuf->st_dev = fd;
179 buffer->st_size = (((__int64)findData.nFileSizeHigh) << 32) +
180 findData.nFileSizeLow;
181 buffer->st_mode = S_IREAD;
182 if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
183 buffer->st_mode |= S_IFDIR;
185 buffer->st_mode |= S_IFREG;
186 if (!(findData.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
187 buffer->st_mode |= S_IWRITE;