{
return do_lstat(0, file_name, buf);
}
+
int mingw_stat(const char *file_name, struct stat *buf)
{
- return do_lstat(1, file_name, buf);
+ wchar_t wfile_name[MAX_PATH];
+ HANDLE hnd;
+ int result;
+
+ /* open the file and let Windows resolve the links */
+ if (xutftowcs_path(wfile_name, file_name) < 0)
+ return -1;
+ hnd = CreateFileW(wfile_name, 0,
+ FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL,
+ OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
+ if (hnd == INVALID_HANDLE_VALUE) {
+ errno = err_win_to_posix(GetLastError());
+ return -1;
+ }
+ result = get_file_info_by_handle(hnd, buf);
+ CloseHandle(hnd);
+ return result;
}
int mingw_fstat(int fd, struct stat *buf)