GLocalFile: Use _fstati64 rather than stat on Win32

We want this to get 64bit timestamps and file lenghts.
This commit is contained in:
Kean Johnston
2011-04-15 10:15:04 +02:00
committed by Alexander Larsson
parent a3722d0408
commit 8b50e2f547
2 changed files with 18 additions and 6 deletions

View File

@@ -1297,8 +1297,8 @@ g_local_file_read (GFile *file,
GError **error) GError **error)
{ {
GLocalFile *local = G_LOCAL_FILE (file); GLocalFile *local = G_LOCAL_FILE (file);
int fd; int fd, ret;
struct stat buf; GLocalFileStat buf;
fd = g_open (local->filename, O_RDONLY|O_BINARY, 0); fd = g_open (local->filename, O_RDONLY|O_BINARY, 0);
if (fd == -1) if (fd == -1)
@@ -1312,7 +1312,13 @@ g_local_file_read (GFile *file,
return NULL; 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); close (fd);
g_set_error_literal (error, G_IO_ERROR, g_set_error_literal (error, G_IO_ERROR,

View File

@@ -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 */ /* 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_uid != tmp_statbuf.st_uid ||
original_stat.st_gid != tmp_statbuf.st_gid || original_stat.st_gid != tmp_statbuf.st_gid ||
original_stat.st_mode != tmp_statbuf.st_mode) original_stat.st_mode != tmp_statbuf.st_mode)