mirror of
https://github.com/mpv-player/mpv.git
synced 2025-12-28 05:33:14 +00:00
win32: get rid of mp_stat in the normal source code
mp_stat() instead of stat() was used in the normal code (i.e. even on Unix), because MinGW-w64 has an unbelievable macro-mess in place, which prevents solving this elegantly. Add some dirty workarounds to hide mp_stat() from the normal code properly. This now requires replacing all functions that use the struct stat type. This includes fstat, lstat, fstatat, and possibly others. (mpv currently uses stat and fstat only.)
This commit is contained in:
29
osdep/io.c
29
osdep/io.c
@@ -132,11 +132,36 @@ void mp_get_converted_argv(int *argc, char ***argv)
|
||||
*argv = win32_argv_utf8;
|
||||
}
|
||||
|
||||
int mp_stat(const char *path, struct stat *buf)
|
||||
static void copy_stat(struct mp_stat *dst, struct _stat64 *src)
|
||||
{
|
||||
dst->st_dev = src->st_dev;
|
||||
dst->st_ino = src->st_ino;
|
||||
dst->st_mode = src->st_mode;
|
||||
dst->st_nlink = src->st_nlink;
|
||||
dst->st_uid = src->st_uid;
|
||||
dst->st_gid = src->st_gid;
|
||||
dst->st_rdev = src->st_rdev;
|
||||
dst->st_size = src->st_size;
|
||||
dst->st_atime = src->st_atime;
|
||||
dst->st_mtime = src->st_mtime;
|
||||
dst->st_ctime = src->st_ctime;
|
||||
}
|
||||
|
||||
int mp_stat(const char *path, struct mp_stat *buf)
|
||||
{
|
||||
struct _stat64 buf_;
|
||||
wchar_t *wpath = mp_from_utf8(NULL, path);
|
||||
int res = _wstati64(wpath, buf);
|
||||
int res = _wstat64(wpath, &buf_);
|
||||
talloc_free(wpath);
|
||||
copy_stat(buf, &buf_);
|
||||
return res;
|
||||
}
|
||||
|
||||
int mp_fstat(int fd, struct mp_stat *buf)
|
||||
{
|
||||
struct _stat64 buf_;
|
||||
int res = _fstat64(fd, &buf_);
|
||||
copy_stat(buf, &buf_);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user