Open files with O_BINARY on windows. (#517140)
authorAlexander Larsson <alexl@redhat.com>
Mon, 18 Feb 2008 10:10:58 +0000 (10:10 +0000)
committerAlexander Larsson <alexl@src.gnome.org>
Mon, 18 Feb 2008 10:10:58 +0000 (10:10 +0000)
2008-02-18  Alexander Larsson  <alexl@redhat.com>

        * glocalfile.c:
        * glocalfileoutputstream.c:
Open files with O_BINARY on windows. (#517140)

svn path=/trunk/; revision=6531

gio/ChangeLog
gio/glocalfile.c
gio/glocalfileoutputstream.c

index 0ffa8f5..e8698ab 100644 (file)
@@ -1,3 +1,9 @@
+2008-02-18  Alexander Larsson  <alexl@redhat.com>
+
+        * glocalfile.c:
+        * glocalfileoutputstream.c:
+       Open files with O_BINARY on windows. (#517140)
+
 2008-02-14  Alexander Larsson  <alexl@redhat.com>
 
         * glocalfileoutputstream.c:
index 66535b4..c9f6e59 100644 (file)
 #include <sys/mount.h>
 #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;
index 7f0d65f..ea304e9 100644 (file)
 #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)
     {