Make mapping of empty files work. (#321530)
authorMatthias Clasen <mclasen@redhat.com>
Sat, 3 Dec 2005 06:44:02 +0000 (06:44 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sat, 3 Dec 2005 06:44:02 +0000 (06:44 +0000)
2005-12-03  Matthias Clasen  <mclasen@redhat.com>

        * glib/gmappedfile.c: Make mapping of empty files
        work.  (#321530)

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-12
glib/gmappedfile.c

index 30e4ff7..8cc4eef 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2005-12-03  Matthias Clasen  <mclasen@redhat.com>
 
+       * glib/gmappedfile.c: Make mapping of empty files
+       work.  (#321530)
+       
        * glib/gfileutils.c: Don't fork a new process just to 
        fix the permissions of the created temp file.  (#321318,
        Alexis S. L. Carvalho)
index 30e4ff7..8cc4eef 100644 (file)
@@ -1,5 +1,8 @@
 2005-12-03  Matthias Clasen  <mclasen@redhat.com>
 
+       * glib/gmappedfile.c: Make mapping of empty files
+       work.  (#321530)
+       
        * glib/gfileutils.c: Don't fork a new process just to 
        fix the permissions of the created temp file.  (#321318,
        Alexis S. L. Carvalho)
index 30e4ff7..8cc4eef 100644 (file)
@@ -1,5 +1,8 @@
 2005-12-03  Matthias Clasen  <mclasen@redhat.com>
 
+       * glib/gmappedfile.c: Make mapping of empty files
+       work.  (#321530)
+       
        * glib/gfileutils.c: Don't fork a new process just to 
        fix the permissions of the created temp file.  (#321318,
        Alexis S. L. Carvalho)
index 9935356..d3d4de8 100644 (file)
@@ -137,6 +137,14 @@ g_mapped_file_new (const gchar  *filename,
       goto out;
     }
 
+  if (st.st_size == 0)
+    {
+      file->length = 0;
+      file->contents = "";
+      close (fd);
+      return file;
+    }
+
   file->contents = MAP_FAILED;
 
 #ifdef HAVE_MMAP
@@ -251,13 +259,16 @@ g_mapped_file_free (GMappedFile *file)
 {
   g_return_if_fail (file != NULL);
 
+  if (file->length)
+  {
 #ifdef HAVE_MMAP
-  munmap (file->contents, file->length);
+    munmap (file->contents, file->length);
 #endif
 #ifdef G_OS_WIN32
-  UnmapViewOfFile (file->contents);
-  CloseHandle (file->mapping);
+    UnmapViewOfFile (file->contents);
+    CloseHandle (file->mapping);
 #endif
+  }
 
   g_free (file);
 }