2 #include <msvcrt/sys/types.h>
3 #include <msvcrt/sys/stat.h>
4 #include <msvcrt/fcntl.h>
6 #include <msvcrt/errno.h>
7 #include <msvcrt/string.h>
8 #include <msvcrt/internal/file.h>
14 int _wstat (const wchar_t *path, struct stat *buffer)
16 WIN32_FILE_ATTRIBUTE_DATA fileAttributeData;
25 if(wcschr(path, L'*') || wcschr(path, L'?'))
31 if (!GetFileAttributesExW(path, GetFileExInfoStandard, &fileAttributeData))
37 memset (buffer, 0, sizeof(struct stat));
39 buffer->st_ctime = FileTimeToUnixTime(&fileAttributeData.ftCreationTime,NULL);
40 buffer->st_atime = FileTimeToUnixTime(&fileAttributeData.ftLastAccessTime,NULL);
41 buffer->st_mtime = FileTimeToUnixTime(&fileAttributeData.ftLastWriteTime,NULL);
43 // statbuf->st_dev = fd;
44 buffer->st_size = fileAttributeData.nFileSizeLow;
45 buffer->st_mode = S_IREAD;
46 if (fileAttributeData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
47 buffer->st_mode |= S_IFDIR;
50 buffer->st_mode |= S_IFREG;
51 ext = wcsrchr(path, L'.');
52 if (ext && (!_wcsicmp(ext, L".exe") ||
53 !_wcsicmp(ext, L".com") ||
54 !_wcsicmp(ext, L".bat") ||
55 !_wcsicmp(ext, L".cmd")))
56 buffer->st_mode |= S_IEXEC;
58 if (!(fileAttributeData.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
59 buffer->st_mode |= S_IWRITE;
67 __int64 _wstati64 (const wchar_t *path, struct _stati64 *buffer)
69 WIN32_FILE_ATTRIBUTE_DATA fileAttributeData;
78 if(wcschr(path, L'*') || wcschr(path, L'?'))
84 if (!GetFileAttributesExW(path, GetFileExInfoStandard, &fileAttributeData))
90 memset (buffer, 0, sizeof(struct _stati64));
92 buffer->st_ctime = FileTimeToUnixTime(&fileAttributeData.ftCreationTime,NULL);
93 buffer->st_atime = FileTimeToUnixTime(&fileAttributeData.ftLastAccessTime,NULL);
94 buffer->st_mtime = FileTimeToUnixTime(&fileAttributeData.ftLastWriteTime,NULL);
96 // statbuf->st_dev = fd;
97 buffer->st_size = ((((__int64)fileAttributeData.nFileSizeHigh) << 16) << 16) +
98 fileAttributeData.nFileSizeLow;
99 buffer->st_mode = S_IREAD;
100 if (fileAttributeData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
101 buffer->st_mode |= S_IFDIR;
104 buffer->st_mode |= S_IFREG;
105 ext = wcsrchr(path, L'.');
106 if (ext && (!_wcsicmp(ext, L".exe") ||
107 !_wcsicmp(ext, L".com") ||
108 !_wcsicmp(ext, L".bat") ||
109 !_wcsicmp(ext, L".cmd")))
110 buffer->st_mode |= S_IEXEC;
112 if (!(fileAttributeData.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
113 buffer->st_mode |= S_IWRITE;