]> git.notmuchmail.org Git - notmuch/blobdiff - notmuch-config.c
python: add missing conversions from and to utf-8
[notmuch] / notmuch-config.c
index e98c39755f2f6e52d389481d06fbc333fd570c64..d697138af10150bc03c7cd4bd3a1d3fe73bfe87f 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <pwd.h>
 #include <netdb.h>
 
 #include <pwd.h>
 #include <netdb.h>
+#include <assert.h>
 
 static const char toplevel_config_comment[] =
     " .notmuch-config - Configuration file for the notmuch mail system\n"
 
 static const char toplevel_config_comment[] =
     " .notmuch-config - Configuration file for the notmuch mail system\n"
@@ -69,7 +70,7 @@ static const char maildir_config_comment[] =
     "\tsynchronize_flags      Valid values are true and false.\n"
     "\n"
     "\tIf true, then the following maildir flags (in message filenames)\n"
     "\tsynchronize_flags      Valid values are true and false.\n"
     "\n"
     "\tIf true, then the following maildir flags (in message filenames)\n"
-    "\twill be syncrhonized with the corresponding notmuch tags:\n"
+    "\twill be synchronized with the corresponding notmuch tags:\n"
     "\n"
     "\t\tFlag  Tag\n"
     "\t\t----  -------\n"
     "\n"
     "\t\tFlag  Tag\n"
     "\t\t----  -------\n"
@@ -77,7 +78,7 @@ static const char maildir_config_comment[] =
     "\t\tF     flagged\n"
     "\t\tP     passed\n"
     "\t\tR     replied\n"
     "\t\tF     flagged\n"
     "\t\tP     passed\n"
     "\t\tR     replied\n"
-    "\t\tS     unread (added when 'S' tag is not present)\n"
+    "\t\tS     unread (added when 'S' flag is not present)\n"
     "\n"
     "\tThe \"notmuch new\" command will notice flag changes in filenames\n"
     "\tand update tags, while the \"notmuch tag\" and \"notmuch restore\"\n"
     "\n"
     "\tThe \"notmuch new\" command will notice flag changes in filenames\n"
     "\tand update tags, while the \"notmuch tag\" and \"notmuch restore\"\n"
@@ -109,13 +110,15 @@ notmuch_config_destructor (notmuch_config_t *config)
 static char *
 get_name_from_passwd_file (void *ctx)
 {
 static char *
 get_name_from_passwd_file (void *ctx)
 {
-    long pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX);
-    char *pw_buf = talloc_zero_size (ctx, pw_buf_size);
+    long pw_buf_size;
+    char *pw_buf;
     struct passwd passwd, *ignored;
     char *name;
     int e;
 
     struct passwd passwd, *ignored;
     char *name;
     int e;
 
+    pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX);
     if (pw_buf_size == -1) pw_buf_size = 64;
     if (pw_buf_size == -1) pw_buf_size = 64;
+    pw_buf = talloc_size (ctx, pw_buf_size);
 
     while ((e = getpwuid_r (getuid (), &passwd, pw_buf,
                             pw_buf_size, &ignored)) == ERANGE) {
 
     while ((e = getpwuid_r (getuid (), &passwd, pw_buf,
                             pw_buf_size, &ignored)) == ERANGE) {
@@ -142,13 +145,16 @@ get_name_from_passwd_file (void *ctx)
 static char *
 get_username_from_passwd_file (void *ctx)
 {
 static char *
 get_username_from_passwd_file (void *ctx)
 {
-    long pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX);
-    char *pw_buf = talloc_zero_size (ctx, pw_buf_size);
+    long pw_buf_size;
+    char *pw_buf;
     struct passwd passwd, *ignored;
     char *name;
     int e;
 
     struct passwd passwd, *ignored;
     char *name;
     int e;
 
+    pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX);
     if (pw_buf_size == -1) pw_buf_size = 64;
     if (pw_buf_size == -1) pw_buf_size = 64;
+    pw_buf = talloc_zero_size (ctx, pw_buf_size);
+
     while ((e = getpwuid_r (getuid (), &passwd, pw_buf,
                             pw_buf_size, &ignored)) == ERANGE) {
         pw_buf_size = pw_buf_size * 2;
     while ((e = getpwuid_r (getuid (), &passwd, pw_buf,
                             pw_buf_size, &ignored)) == ERANGE) {
         pw_buf_size = pw_buf_size * 2;
@@ -515,92 +521,80 @@ notmuch_config_set_user_primary_email (notmuch_config_t *config,
     config->user_primary_email = NULL;
 }
 
     config->user_primary_email = NULL;
 }
 
-const char **
-notmuch_config_get_user_other_email (notmuch_config_t *config,
-                                    size_t *length)
+static const char **
+_config_get_list (notmuch_config_t *config,
+                 const char *section, const char *key,
+                 const char ***outlist, size_t *list_length, size_t *ret_length)
 {
 {
-    char **emails;
-    size_t emails_length;
-    unsigned int i;
-
-    if (config->user_other_email == NULL) {
-       emails = g_key_file_get_string_list (config->key_file,
-                                            "user", "other_email",
-                                            &emails_length, NULL);
-       if (emails) {
-           config->user_other_email = talloc_size (config,
-                                                   sizeof (char *) *
-                                                   (emails_length + 1));
-           for (i = 0; i < emails_length; i++)
-               config->user_other_email[i] = talloc_strdup (config->user_other_email,
-                                                            emails[i]);
-           config->user_other_email[i] = NULL;
-
-           g_strfreev (emails);
-
-           config->user_other_email_length = emails_length;
+    assert(outlist);
+
+    if (*outlist == NULL) {
+
+       char **inlist = g_key_file_get_string_list (config->key_file,
+                                            section, key, list_length, NULL);
+       if (inlist) {
+           unsigned int i;
+
+           *outlist = talloc_size (config, sizeof (char *) * (*list_length + 1));
+
+           for (i = 0; i < *list_length; i++)
+               (*outlist)[i] = talloc_strdup (*outlist, inlist[i]);
+
+           (*outlist)[i] = NULL;
+
+           g_strfreev (inlist);
        }
     }
 
        }
     }
 
-    *length = config->user_other_email_length;
-    return config->user_other_email;
+    if (ret_length)
+       *ret_length = *list_length;
+
+    return *outlist;
 }
 
 }
 
-void
-notmuch_config_set_user_other_email (notmuch_config_t *config,
-                                    const char *other_email[],
-                                    size_t length)
+const char **
+notmuch_config_get_user_other_email (notmuch_config_t *config,   size_t *length)
 {
 {
-    g_key_file_set_string_list (config->key_file,
-                               "user", "other_email",
-                               other_email, length);
-
-    talloc_free (config->user_other_email);
-    config->user_other_email = NULL;
+    return _config_get_list (config, "user", "other_email",
+                            &(config->user_other_email),
+                            &(config->user_other_email_length), length);
 }
 
 const char **
 }
 
 const char **
-notmuch_config_get_new_tags (notmuch_config_t *config,
-                            size_t *length)
+notmuch_config_get_new_tags (notmuch_config_t *config,   size_t *length)
 {
 {
-    char **tags;
-    size_t tags_length;
-    unsigned int i;
-
-    if (config->new_tags == NULL) {
-       tags = g_key_file_get_string_list (config->key_file,
-                                          "new", "tags",
-                                          &tags_length, NULL);
-       if (tags) {
-           config->new_tags = talloc_size (config,
-                                           sizeof (char *) *
-                                           (tags_length + 1));
-           for (i = 0; i < tags_length; i++)
-               config->new_tags[i] = talloc_strdup (config->new_tags,
-                                                    tags[i]);
-           config->new_tags[i] = NULL;
-
-           g_strfreev (tags);
-
-           config->new_tags_length = tags_length;
-       }
-    }
+    return _config_get_list (config, "new", "tags",
+                            &(config->new_tags),
+                            &(config->new_tags_length), length);
+}
 
 
-    *length = config->new_tags_length;
-    return config->new_tags;
+static void
+_config_set_list (notmuch_config_t *config,
+                 const char *group, const char *name,
+                 const char *list[],
+                 size_t length, const char ***config_var )
+{
+    g_key_file_set_string_list (config->key_file, group, name, list, length);
+    talloc_free (*config_var);
+    *config_var = NULL;
 }
 
 void
 }
 
 void
-notmuch_config_set_new_tags (notmuch_config_t *config,
-                            const char *new_tags[],
-                            size_t length)
+notmuch_config_set_user_other_email (notmuch_config_t *config,
+                                    const char *list[],
+                                    size_t length)
 {
 {
-    g_key_file_set_string_list (config->key_file,
-                               "new", "tags",
-                               new_tags, length);
+    _config_set_list (config, "user", "other_email", list, length,
+                    &(config->user_other_email));
+}
 
 
-    talloc_free (config->new_tags);
-    config->new_tags = NULL;
+void
+notmuch_config_set_new_tags (notmuch_config_t *config,
+                                    const char *list[],
+                                    size_t length)
+{
+    _config_set_list (config, "new", "tags", list, length,
+                    &(config->new_tags));
 }
 
 /* Given a configuration item of the form <group>.<key> return the
 }
 
 /* Given a configuration item of the form <group>.<key> return the
@@ -730,6 +724,8 @@ notmuch_config_command_set (void *ctx, char *item, int argc, char *argv[])
 int
 notmuch_config_command (void *ctx, int argc, char *argv[])
 {
 int
 notmuch_config_command (void *ctx, int argc, char *argv[])
 {
+    argc--; argv++; /* skip subcommand argument */
+
     if (argc < 2) {
        fprintf (stderr, "Error: notmuch config requires at least two arguments.\n");
        return 1;
     if (argc < 2) {
        fprintf (stderr, "Error: notmuch config requires at least two arguments.\n");
        return 1;