X-Git-Url: http://git.madism.org/?p=apps%2Fmadmutt.git;a=blobdiff_plain;f=init.c;h=13797c30349dcb0325304c78e8468545256a0e64;hp=7e7b455b13dd53193516198c81d8bb98554813d8;hb=c0d71a35d690605434605578a0d34ce101f754bb;hpb=230399f9632c37b66c1c117a17e8327eae6b3235 diff --git a/init.c b/init.c index 7e7b455..13797c3 100644 --- a/init.c +++ b/init.c @@ -10,19 +10,8 @@ * please see the file GPL in the top level source directory. */ -#if HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include - #include +#include #include #include @@ -249,14 +238,14 @@ static void sys_to_string (char* dst, ssize_t dstlen, int clean = 0; /* get some $madmutt_ values dynamically */ - if (ascii_strcmp ("madmutt_pwd", option->option) == 0) { + if (m_strcmp("madmutt_pwd", option->option) == 0) { val = p_new(char, _POSIX_PATH_MAX); val = getcwd (val, _POSIX_PATH_MAX-1); clean = 1; - } else if (ascii_strcmp ("madmutt_folder_path", option->option) == 0 && + } else if (m_strcmp("madmutt_folder_path", option->option) == 0 && CurrentFolder && *CurrentFolder) { val = CurrentFolder; - } else if (ascii_strcmp ("madmutt_folder_name", option->option) == 0 && + } else if (m_strcmp("madmutt_folder_name", option->option) == 0 && CurrentFolder && *CurrentFolder) { ssize_t Maildirlength = m_strlen(Maildir); @@ -269,7 +258,7 @@ static void sys_to_string (char* dst, ssize_t dstlen, Maildirlength) == 0 && m_strlen(CurrentFolder) > Maildirlength) { val = CurrentFolder + Maildirlength; - if (Maildir[strlen(Maildir)-1]!='/') + if (Maildir[Maildirlength]!='/') val += 1; /* if not $folder, just use everything after last / */ } else if ((t = strrchr (CurrentFolder, '/')) != NULL) @@ -562,7 +551,7 @@ static void syn_del (void** p) { p_delete(p); } -void toggle_quadoption (int opt) +static void toggle_quadoption (int opt) { int n = opt / 4; int b = (opt % 4) * 2; @@ -636,26 +625,25 @@ static void add_to_list (string_list_t ** list, const char *str) } } -static int add_to_rx_list (list2_t** list, const char *s, int flags, - BUFFER * err) +static int +add_to_rx_list(rx_t **list, const char *s, int flags, BUFFER *err) { - rx_t* rx; - int i = 0; + rx_t* rx; - if (!s || !*s) - return 0; + if (!s || !*s) + return 0; - if (!(rx = rx_compile (s, flags))) { - snprintf (err->data, err->dsize, "Bad regexp: %s\n", s); - return -1; - } + if (rx_lookup(list, s)) + return 0; - i = rx_lookup ((*list), rx->pattern); - if (i >= 0) - rx_delete(&rx); - else - list_push_back (list, rx); - return 0; + rx = rx_compile(s, flags); + if (!rx) { + snprintf(err->data, err->dsize, "Bad regexp: %s\n", s); + return -1; + } + + rx_list_append(list, rx); + return 0; } static int add_to_spam_list (SPAM_LIST ** list, const char *pat, @@ -785,23 +773,21 @@ static void remove_from_list (string_list_t ** l, const char *str) } } -static int remove_from_rx_list (list2_t** l, const char *str) +static int remove_from_rx_list(rx_t **l, const char *str) { - int i = 0; + if (m_strcmp("*", str) == 0) { + rx_list_wipe(l); + return 0; + } - if (m_strcmp("*", str) == 0) { - list_del (l, (list_del_t*) rx_delete); - return (0); - } - else { - i = rx_lookup ((*l), str); - if (i >= 0) { - rx_t* r = list_pop_idx ((*l), i); - rx_delete(&r); - return (0); + l = rx_lookup(l, str); + if (l) { + rx_t *r = rx_list_pop(l); + rx_delete(&r); + return 0; } - } - return (-1); + + return -1; } static int parse_ifdef (BUFFER * tmp, BUFFER * s, unsigned long data, @@ -1007,7 +993,7 @@ static int parse_spam_list (BUFFER * buf, BUFFER * s, unsigned long data, /* "*" is a special case. */ if (!m_strcmp(buf->data, "*")) { mutt_free_spam_list (&SpamList); - list_del (&NoSpamList, (list_del_t*) rx_delete); + rx_list_wipe(&NoSpamList); return 0; } @@ -1689,32 +1675,29 @@ static int check_dsn_return (const char* option __attribute__ ((unused)), unsign } /* check whether value for $dsn_notify would be valid */ -static int check_dsn_notify (const char* option __attribute__ ((unused)), unsigned long p, - char* errbuf, ssize_t errlen) { - list2_t* list = NULL; - ssize_t i = 0; - int rc = 1; - char* val = (char*) p; - - if (!val || !*val) - return (1); - list = list_from_str (val, ","); - if (list_empty (list)) - return (1); +static int +check_dsn_notify (const char* option __attribute__ ((unused)), + unsigned long val, char* errbuf, ssize_t errlen) +{ + const char *p = (const char*)val; + + while (p && *p) { + const char *q = m_strchrnul(p, ','); + int len = q - p; + + if (!m_strncmp(p, "never", len) && !m_strncmp(p, "delay", len) + && !m_strncmp(p, "failure", len) && !m_strncmp(p, "success", len)) + { + if (errbuf) + snprintf(errbuf, errlen, _("'%.*s' is invalid for $%s"), + len, p, "dsn_notify"); + return 0; + } - for (i = 0; i < list->length; i++) - if (m_strncmp(list->data[i], "never", 5) != 0 && - m_strncmp(list->data[i], "failure", 7) != 0 && - m_strncmp(list->data[i], "delay", 5) != 0 && - m_strncmp(list->data[i], "success", 7) != 0) { - if (errbuf) - snprintf (errbuf, errlen, _("'%s' is invalid for $%s"), - (char*) list->data[i], "dsn_notify"); - rc = 0; - break; + p = q + 1; } - list_del (&list, (list_del_t*)xmemfree); - return (rc); + + return 1; } static int check_num (const char* option, unsigned long p, @@ -1822,7 +1805,7 @@ static int parse_set (BUFFER * tmp, BUFFER * s, unsigned long data, } /* see if we need to add $user_ var */ - if (!option && ascii_strncmp ("user_", tmp->data, 5) == 0) { + if (!option && m_strncmp("user_", tmp->data, 5) == 0) { /* there's no option named like this yet so only add one * if the action isn't any of: reset, unset, query */ if (!(reset || unset || query || *s->dptr != '=')) { @@ -2780,61 +2763,30 @@ int mutt_get_hook_type (const char *name) return 0; } -/* compare two option_t*'s for sorting -t/-T output */ -static int opt_cmp (const void* a, const void* b) { - return (m_strcmp((*(struct option_t**) a)->option, - (*(struct option_t**) b)->option)); -} - -/* callback for hash_map() to put all non-synonym vars into list */ -static void opt_sel_full (const char* key __attribute__ ((unused)), - void* data, - unsigned long more) { - list2_t** l = (list2_t**) more; - struct option_t* option = (struct option_t*) data; - - if (DTYPE (option->type) == DT_SYN) - return; - list_push_back (l, option); -} +/* dump out the value of all the variables we have */ +int mutt_dump_variables (int full) { + ssize_t i = 0; -/* callback for hash_map() to put all changed non-synonym vars into list */ -static void opt_sel_diff (const char* key __attribute__ ((unused)), - void* data, - unsigned long more) { - list2_t** l = (list2_t**) more; - struct option_t* option = (struct option_t*) data; - char buf[LONG_STRING]; + /* get all non-synonyms into list... */ + for (i = 0; MuttVars[i].option; i++) { + struct option_t *option = MuttVars + i; + char buf[LONG_STRING]; - if (DTYPE (option->type) == DT_SYN) - return; + if (DTYPE(option->type) == DT_SYN) + continue; - mutt_option_value (option->option, buf, sizeof(buf)); - if (m_strcmp(buf, option->init) != 0) - list_push_back (l, option); -} - -/* dump out the value of all the variables we have */ -int mutt_dump_variables (int full) { - ssize_t i = 0; - char outbuf[STRING]; - list2_t* tmp = NULL; - struct option_t* option = NULL; + if (!full) { + mutt_option_value(option->option, buf, sizeof(buf)); + if (!m_strcmp(buf, option->init)) + continue; + } - /* get all non-synonyms into list... */ - hash_map (ConfigOptions, full ? opt_sel_full : opt_sel_diff, - (unsigned long) &tmp); - - if (!list_empty(tmp)) { - /* ...and dump list sorted */ - qsort (tmp->data, tmp->length, sizeof(void*), opt_cmp); - for (i = 0; i < tmp->length; i++) { - option = (struct option_t*) tmp->data[i]; - FuncTable[DTYPE (option->type)].opt_to_string - (outbuf, sizeof(outbuf), option); - printf ("%s\n", outbuf); + printf("set "); + FuncTable[DTYPE(option->type)].opt_to_string + (buf, sizeof(buf), option); + printf ("%s\n", buf); } - } - list_del (&tmp, NULL); - return 0; + + printf ("\n# vi""m:set ft=muttrc:\n"); + return 0; }