From: Tomi Ollila <tomi.oll...@iki.fi>

The function notmuch_talloc_g_key_file_get_string_list() wraps
call to g_key_file_get_string_list() in a way that the returned
string array is copied to talloc'd memory area. The returned
pointer is itself also a talloc context, child of the context
given as first argument.
---
 notmuch-config.c |   44 +++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/notmuch-config.c b/notmuch-config.c
index 485fa72..706f481 100644
--- a/notmuch-config.c
+++ b/notmuch-config.c
@@ -170,6 +170,44 @@ get_username_from_passwd_file (void *ctx)
     return name;
 }
 
+/** XXX move to (not-yet-existent) notmuch-talloc.c, or somewhere */
+static char **
+notmuch_talloc_g_key_file_get_string_list (const void * ctx,
+                                          GKeyFile *key_file,
+                                          const gchar *group_name,
+                                          const gchar *key,
+                                          gsize *length,
+                                          GError **error)
+{
+    char ** newlist;
+    gchar ** strlist = g_key_file_get_string_list (key_file, group_name, key,
+                                                  length, error);
+    if (strlist) {
+       int i;
+       int l = *length;
+
+       newlist = talloc_array (ctx, char *, l + 1);
+       if (newlist == NULL)
+           goto fail1;
+       for (i = 0; i < l; i++) {
+           if ( (newlist[i] = talloc_strdup (newlist, strlist[i])) == NULL)
+               goto fail2;
+       }
+       newlist[i] = NULL;
+       g_strfreev (strlist);
+
+       return newlist;
+    }
+    return NULL;
+
+fail2:
+    talloc_free (newlist);
+fail1:
+    g_strfreev (strlist);
+    *length = 0; /* like in g_key_file_get_string_list () */
+    return NULL;
+}
+
 /* Open the named notmuch configuration file. If the filename is NULL,
  * the value of the environment variable $NOTMUCH_CONFIG will be used.
  * If $NOTMUCH_CONFIG is unset, the default configuration file
@@ -229,7 +267,7 @@ notmuch_config_open (void *ctx,
        fprintf (stderr, "Out of memory.\n");
        return NULL;
     }
-    
+
     talloc_set_destructor (config, notmuch_config_destructor);
 
     if (filename) {
@@ -393,7 +431,7 @@ notmuch_config_open (void *ctx,
 }
 
 /* Close the given notmuch_config_t object, freeing all resources.
- * 
+ *
  * Note: Any changes made to the configuration are *not* saved by this
  * function. To save changes, call notmuch_config_save before
  * notmuch_config_close.
@@ -653,7 +691,7 @@ notmuch_config_command_get (void *ctx, char *item)
     } else if (strcmp(item, "user.other_email") == 0) {
        const char **other_email;
        size_t i, length;
-       
+
        other_email = notmuch_config_get_user_other_email (config, &length);
        for (i = 0; i < length; i++)
            printf ("%s\n", other_email[i]);
-- 
1.7.3.4

_______________________________________________
notmuch mailing list
notmuch@notmuchmail.org
http://notmuchmail.org/mailman/listinfo/notmuch

Reply via email to