Make saving work.
[tweakr] / modules / maemo-tweaks-desktop-save.c
index 9323ccf..3b56065 100644 (file)
@@ -2,6 +2,7 @@
  * vim:ts=4:sw=4:et:cindent:cino=(0
  */ 
 
+#include <stdlib.h>
 #include <glib.h>
 
 static gchar *groups[] =
@@ -19,20 +20,48 @@ int main (int argc, char *argv[])
 {
     GKeyFile *kf;
     gint i;
+    GError *error = NULL;
+    gchar *data;
+    gsize size;
 
     if (argc < 2)
     {
-        return -1;
+        exit (EXIT_FAILURE);;
     }
 
     kf = g_key_file_new ();
-    g_key_file_load_from_file (kf, TRANSITIONS, G_KEY_FILE_NONE, NULL);
+    if (!g_key_file_load_from_file (kf, TRANSITIONS,
+                                    G_KEY_FILE_KEEP_COMMENTS |
+                                    G_KEY_FILE_KEEP_TRANSLATIONS,
+                                    &error))
+    {
+        g_warning ("Error while reading %s: %s", TRANSITIONS, error->message);
+        g_error_free (error);
+        exit (EXIT_FAILURE);
+    }
+
+    for (i = 0; i < argc - 1; i++)
+    {
+        g_key_file_set_string (kf, groups[i], keys[i], argv[i+1]);
+    }
 
-    for (i = 1; i < argc; i++)
+    data = g_key_file_to_data (kf, &size, &error);
+    if (data == NULL)
     {
-        g_key_file_set_string (kf, groups[i], keys[i], argv[i]);
+        g_warning ("Error while writing keyfile data.");
+        g_error_free (error);
+        exit (EXIT_FAILURE);
     }
     
+    if (!g_file_set_contents (TRANSITIONS, data, size, &error))
+    {
+        g_warning ("Error writing %s", TRANSITIONS);
+        g_free (data);
+        g_error_free (error);
+        exit (EXIT_FAILURE);
+    }
+
+    g_free (data);
     g_key_file_free (kf);
 
     return 0;