[dconf] service/: always use read() for reading gvdb



commit ef0ba9c225c6b84de77c46a6b39dec071f2378af
Author: Ryan Lortie <desrt desrt ca>
Date:   Fri Nov 9 13:23:09 2012 -0500

    service/: always use read() for reading gvdb
    
    More NFS safety: never mmap() a gvdb on the service side.

 service/dconf-gvdb-utils.c |   13 +++++++++++--
 1 files changed, 11 insertions(+), 2 deletions(-)
---
diff --git a/service/dconf-gvdb-utils.c b/service/dconf-gvdb-utils.c
index 79291d3..9e0c4b1 100644
--- a/service/dconf-gvdb-utils.c
+++ b/service/dconf-gvdb-utils.c
@@ -33,9 +33,18 @@ dconf_gvdb_utils_read_file (const gchar  *filename,
 {
   DConfChangeset *database;
   GError *my_error = NULL;
-  GvdbTable *table;
+  GvdbTable *table = NULL;
+  gchar *contents;
+  gsize size;
 
-  table = gvdb_table_new (filename, FALSE, &my_error);
+  if (g_file_get_contents (filename, &contents, &size, &my_error))
+    {
+      GBytes *bytes;
+
+      bytes = g_bytes_new_take (contents, size);
+      table = gvdb_table_new_from_bytes (bytes, FALSE, &my_error);
+      g_bytes_unref (bytes);
+    }
 
   /* It is perfectly fine if the file does not exist -- then it's
    * just empty.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]