From b221d1b36d0ed5ce22f21a986a352f6a92345c30 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 18 Feb 2008 10:10:58 +0000 Subject: [PATCH] Open files with O_BINARY on windows. (#517140) 2008-02-18 Alexander Larsson * glocalfile.c: * glocalfileoutputstream.c: Open files with O_BINARY on windows. (#517140) svn path=/trunk/; revision=6531 --- gio/ChangeLog | 6 ++++++ gio/glocalfile.c | 6 +++++- gio/glocalfileoutputstream.c | 16 ++++++++++------ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/gio/ChangeLog b/gio/ChangeLog index 0ffa8f5..e8698ab 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,3 +1,9 @@ +2008-02-18 Alexander Larsson + + * glocalfile.c: + * glocalfileoutputstream.c: + Open files with O_BINARY on windows. (#517140) + 2008-02-14 Alexander Larsson * glocalfileoutputstream.c: diff --git a/gio/glocalfile.c b/gio/glocalfile.c index 66535b4..c9f6e59 100644 --- a/gio/glocalfile.c +++ b/gio/glocalfile.c @@ -46,6 +46,10 @@ #include #endif +#ifndef O_BINARY +#define O_BINARY 0 +#endif + #if defined(HAVE_STATFS) && defined(HAVE_STATVFS) /* Some systems have both statfs and statvfs, pick the most "native" for these */ @@ -1110,7 +1114,7 @@ g_local_file_read (GFile *file, int fd; struct stat buf; - fd = g_open (local->filename, O_RDONLY, 0); + fd = g_open (local->filename, O_RDONLY|O_BINARY, 0); if (fd == -1) { int errsv = errno; diff --git a/gio/glocalfileoutputstream.c b/gio/glocalfileoutputstream.c index 7f0d65f..ea304e9 100644 --- a/gio/glocalfileoutputstream.c +++ b/gio/glocalfileoutputstream.c @@ -48,6 +48,10 @@ #endif #endif +#ifndef O_BINARY +#define O_BINARY 0 +#endif + #include "gioalias.h" #define g_local_file_output_stream_get_type _g_local_file_output_stream_get_type @@ -456,7 +460,7 @@ _g_local_file_output_stream_create (const char *filename, else mode = 0666; - fd = g_open (filename, O_CREAT | O_EXCL | O_WRONLY, mode); + fd = g_open (filename, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, mode); if (fd == -1) { int errsv = errno; @@ -497,7 +501,7 @@ _g_local_file_output_stream_append (const char *filename, else mode = 0666; - fd = g_open (filename, O_CREAT | O_APPEND | O_WRONLY, mode); + fd = g_open (filename, O_CREAT | O_APPEND | O_WRONLY | O_BINARY, mode); if (fd == -1) { int errsv = errno; @@ -611,9 +615,9 @@ handle_overwrite_open (const char *filename, /* We only need read access to the original file if we are creating a backup. * We also add O_CREATE to avoid a race if the file was just removed */ if (create_backup) - open_flags = O_RDWR | O_CREAT; + open_flags = O_RDWR | O_CREAT | O_BINARY; else - open_flags = O_WRONLY | O_CREAT; + open_flags = O_WRONLY | O_CREAT | O_BINARY; /* Some systems have O_NOFOLLOW, which lets us avoid some races * when finding out if the file we opened was a symlink */ @@ -766,7 +770,7 @@ handle_overwrite_open (const char *filename, } bfd = g_open (backup_filename, - O_WRONLY | O_CREAT | O_EXCL, + O_WRONLY | O_CREAT | O_EXCL | O_BINARY, original_stat.st_mode & 0777); if (bfd == -1) @@ -890,7 +894,7 @@ _g_local_file_output_stream_replace (const char *filename, mode = 0666; /* If the file doesn't exist, create it */ - fd = g_open (filename, O_CREAT | O_EXCL | O_WRONLY, mode); + fd = g_open (filename, O_CREAT | O_EXCL | O_WRONLY | O_BINARY, mode); if (fd == -1 && errno == EEXIST) { -- 2.7.4