Moved config current only implementation to subdirectory
[cascardo/atompub.git] / config / gkeyfile / gkeyfile.c
diff --git a/config/gkeyfile/gkeyfile.c b/config/gkeyfile/gkeyfile.c
new file mode 100644 (file)
index 0000000..358354d
--- /dev/null
@@ -0,0 +1,63 @@
+/*
+ *  Copyright (C) 2007-2008 Thadeu Lima de Souza Cascardo
+ *  <cascardo@holoscopio.com>
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License along
+ *  with this program; if not, write to the Free Software Foundation, Inc.,
+ *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+
+#include <atompub/atom.h>
+#include <glib.h>
+
+static gchar *
+gkeyfile_atom_config_get_str (AtomCtx *ctx, gchar *group, gchar * key)
+{
+  GKeyFile *keyfile;
+  gchar *value;
+  GError *error = NULL;
+  keyfile = atom_config_data (atom_config (ctx));
+  value = g_key_file_get_string (keyfile, group, key, &error);
+  if (value == NULL)
+    {
+      AtomError *aerr = atom_error_new ();
+      atom_error_code_set (aerr, 500);
+      atom_error_message_set (aerr, error->message);
+      atom_error_set (ctx, aerr);
+      g_error_free (error);
+    }
+  return value;
+}
+
+AtomConfig *
+gkeyfile_atom_config_init (AtomCtx *ctx, char *name)
+{
+  AtomConfig *config;
+  GKeyFile *keyfile;
+  GError *error = NULL;
+  keyfile = g_key_file_new ();
+  if (!g_key_file_load_from_file (keyfile, name,
+                                 G_KEY_FILE_NONE, &error))
+    {
+      AtomError *aerr = atom_error_new ();
+      atom_error_code_set (aerr, 500);
+      atom_error_message_set (aerr, error->message);
+      atom_error_set (ctx, aerr);
+      g_error_free (error);
+      return;
+    }
+  config = atom_config_new ();
+  atom_config_get_str_set (config, gkeyfile_atom_config_get_str);
+  atom_config_data_set (config, keyfile);
+}