diff --git a/gio/glocalfile.c b/gio/glocalfile.c index 9e4aace78..84ba0e20e 100644 --- a/gio/glocalfile.c +++ b/gio/glocalfile.c @@ -1297,8 +1297,8 @@ g_local_file_read (GFile *file, GError **error) { GLocalFile *local = G_LOCAL_FILE (file); - int fd; - struct stat buf; + int fd, ret; + GLocalFileStat buf; fd = g_open (local->filename, O_RDONLY|O_BINARY, 0); if (fd == -1) @@ -1312,7 +1312,13 @@ g_local_file_read (GFile *file, return NULL; } - if (fstat(fd, &buf) == 0 && S_ISDIR (buf.st_mode)) +#ifdef G_OS_WIN32 + ret = _fstati64 (fd, &buf); +#else + ret = fstat (fd, &buf); +#endif + + if (ret == 0 && S_ISDIR (buf.st_mode)) { close (fd); g_set_error_literal (error, G_IO_ERROR, diff --git a/gio/glocalfileoutputstream.c b/gio/glocalfileoutputstream.c index 40576a9cc..650550e75 100644 --- a/gio/glocalfileoutputstream.c +++ b/gio/glocalfileoutputstream.c @@ -909,10 +909,16 @@ handle_overwrite_open (const char *filename, ) ) { - struct stat tmp_statbuf; - + GLocalFileStat tmp_statbuf; + int tres; + +#ifdef G_OS_WIN32 + tres = _fstati64 (tmpfd, &tmp_statbuf); +#else + tres = fstat (tmpfd, &tmp_statbuf); +#endif /* Check that we really needed to change something */ - if (fstat (tmpfd, &tmp_statbuf) != 0 || + if (tres != 0 || original_stat.st_uid != tmp_statbuf.st_uid || original_stat.st_gid != tmp_statbuf.st_gid || original_stat.st_mode != tmp_statbuf.st_mode)