[glib/wip/nacho/registry-writable: 2/3] registrybackend: get whether a backend is writable or not



commit 7aa7609ebb7d7b798b84c97c7785d433228154c8
Author: Ignacio Casal Quinteiro <icq gnome org>
Date:   Mon Feb 1 17:17:47 2016 +0100

    registrybackend: get whether a backend is writable or not

 gio/gregistrysettingsbackend.c |   27 ++++++++++++++++++++++++++-
 1 files changed, 26 insertions(+), 1 deletions(-)
---
diff --git a/gio/gregistrysettingsbackend.c b/gio/gregistrysettingsbackend.c
index 81885d6..e05ebdf 100644
--- a/gio/gregistrysettingsbackend.c
+++ b/gio/gregistrysettingsbackend.c
@@ -1126,11 +1126,35 @@ g_registry_backend_reset (GSettingsBackend *backend,
   g_settings_backend_changed (backend, key_name, origin_tag);
 }
 
-/* Not implemented and probably beyond the scope of this backend */
 static gboolean
 g_registry_backend_get_writable (GSettingsBackend *backend,
                                  const gchar      *key_name)
 {
+  GRegistryBackend *self = G_REGISTRY_BACKEND (backend);
+  gchar *path_name, *value_name;
+  HKEY hpath;
+  LONG result;
+
+  path_name = parse_key (key_name, self->base_path, NULL);
+
+  /* Note: we create the key if it wasn't created yet, but it is not much
+   * of a problem since at the end of the day we have to create it anyway
+   * to read or to write from it
+   */
+  result = RegCreateKeyExA (HKEY_CURRENT_USER, path_name, 0, NULL, 0,
+                            KEY_WRITE, NULL, &hpath, NULL);
+  if (result != ERROR_SUCCESS)
+    {
+      trace ("Error opening/creating key to check writability: %s.\n",
+             path_name);
+      g_free (path_name);
+
+      return FALSE;
+    }
+
+  g_free (path_name);
+  RegCloseKey (hpath);
+
   return TRUE;
 }
 
@@ -2016,6 +2040,7 @@ static void
 g_registry_backend_init (GRegistryBackend *self)
 {
   RegistryCacheItem *item;
+
   self->base_path = g_strdup_printf ("Software\\GSettings");
 
   item = g_slice_new (RegistryCacheItem);


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