X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=init.c;h=1d6c93356760fc8a6f9c417b3647afd51e0875ad;hb=2f2c527885bb77e4ba1e90f02812f3ee47985afa;hp=b9fbf582b5b52a7699570eaf608a6e4fda25f40f;hpb=7132fe3b1612c153f3638d1f9664ba9eab9063d6;p=apps%2Fmadmutt.git diff --git a/init.c b/init.c index b9fbf58..1d6c933 100644 --- a/init.c +++ b/init.c @@ -442,9 +442,10 @@ static int rx_from_string (struct option_t* dst, const char* val, regerror (e, rx, errbuf, errlen); regfree (rx); mem_free (&rx); + return (0); } - if (p->pattern) { + if (p->pattern && p->rx) { regfree (p->rx); mem_free (&p->rx); } @@ -1366,11 +1367,38 @@ static void del_option (void* p) { mem_free (&ptr); } +static int init_expand (char** dst, const char* src) { + BUFFER token, in; + size_t len = 0; + + mem_free (dst); + + if (src && *src) { + memset (&token, 0, sizeof (BUFFER)); + memset (&in, 0, sizeof (BUFFER)); + len = str_len (src) + 2; + in.data = mem_malloc (len+1); + snprintf (in.data, len, "\"%s\"", src); + in.dptr = in.data; + in.dsize = len; + mutt_extract_token (&token, &in, 0); + if (token.data && *token.data) + *dst = str_dup (token.data); + else + *dst = str_dup (""); + mem_free (&in.data); + mem_free (&token.data); + } else + *dst = str_dup (""); + return (1); +} + /* if additional data more == 1, we want to resolve synonyms */ static void mutt_restore_default (const char* name, void* p, unsigned long more) { char errbuf[STRING]; struct option_t* ptr = (struct option_t*) p; + char* init = NULL; if (DTYPE (ptr->type) == DT_SYN) { if (!more) @@ -1379,13 +1407,16 @@ static void mutt_restore_default (const char* name, void* p, } if (!ptr) return; - if (FuncTable[DTYPE (ptr->type)].opt_from_string && - FuncTable[DTYPE (ptr->type)].opt_from_string (ptr, ptr->init, errbuf, + if (FuncTable[DTYPE (ptr->type)].opt_from_string) { + init_expand (&init, ptr->init); + if (FuncTable[DTYPE (ptr->type)].opt_from_string (ptr, init, errbuf, sizeof (errbuf)) < 0) { - mutt_endwin (NULL); - fprintf (stderr, _("Invalid default setting found. Please report this " - "error:\n\"%s\"\n"), errbuf); - exit (1); + mutt_endwin (NULL); + fprintf (stderr, _("Invalid default setting found. Please report this " + "error:\n\"%s\"\n"), errbuf); + exit (1); + } + mem_free (&init); } if (ptr->flags & R_INDEX) @@ -2290,6 +2321,7 @@ void mutt_init (int skip_sys_rc, LIST * commands) Realname = str_dup (mutt_gecos_name (rnbuf, sizeof (rnbuf), pw)); Shell = str_dup (pw->pw_shell); + endpwent (); } else { if (!Homedir) {