File 0001-gvdb-Restore-permissions-on-changed-files.patch of Package dconf

Index: dconf-0.49.0/subprojects/gvdb/gvdb/gvdb-builder.c
===================================================================
--- dconf-0.49.0.orig/subprojects/gvdb/gvdb/gvdb-builder.c
+++ dconf-0.49.0/subprojects/gvdb/gvdb/gvdb-builder.c
@@ -23,6 +23,7 @@
 #include "gvdb-format.h"
 
 #include <glib.h>
+#include <glib/gstdio.h>
 #include <fcntl.h>
 #if !defined(G_OS_WIN32) || !defined(_MSC_VER)
 #include <unistd.h>
@@ -541,17 +542,26 @@ gvdb_table_write_contents (GHashTable
 {
   GBytes *content;
   gboolean status;
+  GStatBuf buf;
+  gint stat_ret;
 
   g_return_val_if_fail (table != NULL, FALSE);
   g_return_val_if_fail (filename != NULL, FALSE);
   g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
 
+  stat_ret = g_stat (filename, &buf);
+
   content = gvdb_table_get_contents (table, byteswap);
 
   status = g_file_set_contents (filename, g_bytes_get_data (content, NULL), g_bytes_get_size (content), error);
 
   g_bytes_unref (content);
 
+  if (stat_ret == 0)
+    g_chmod (filename, buf.st_mode);
+  else
+    g_chmod (filename, 0644);
+
   return status;
 }
 
openSUSE Build Service is sponsored by