diff -r 26bdaa1790b3 init.c --- a/init.c Fri Jul 07 11:35:46 2006 +0900 +++ b/init.c Fri Jul 07 14:04:05 2006 +0900 @@ -57,6 +57,21 @@ _("Not available in this menu.")); \ return (-1); \ } else + +#define APPEND_VALUE(prf) \ + if (errlen >= err->dsize) \ + return (-1); \ + if (errlen) \ + { \ + strfcpy (err->data + errlen, _("; "), err->dsize - errlen); \ + errlen += strlen (_("; ")); \ + } \ + l = prf; \ + if (l > 0) \ + errlen += l; \ + else \ + return (-1); \ + continue typedef struct myvar { @@ -1788,10 +1803,13 @@ static void mutt_restore_default (struct static int parse_set (BUFFER *tmp, BUFFER *s, unsigned long data, BUFFER *err) { - int query, unset, inv, reset, r = 0; + int query, unset, inv, reset, r = 0, l; int idx = -1; char *p, scratch[_POSIX_PATH_MAX]; char* myvar; + size_t errlen = 0; + + *err->data = '\0'; while (MoreArgs (s)) { @@ -1901,9 +1919,8 @@ static int parse_set (BUFFER *tmp, BUFFE if (query) { - snprintf (err->data, err->dsize, option (MuttVars[idx].data) - ? _("%s is set") : _("%s is unset"), tmp->data); - return 0; + APPEND_VALUE (snprintf (err->data + errlen, err->dsize - errlen, option (MuttVars[idx].data) + ? _("%s is set") : _("%s is unset"), tmp->data)); } CHECK_PAGER; @@ -1939,8 +1956,7 @@ static int parse_set (BUFFER *tmp, BUFFE { if ((val = myvar_get (myvar))) { - snprintf (err->data, err->dsize, "%s=\"%s\"", myvar, val); - break; + APPEND_VALUE (snprintf (err->data + errlen, err->dsize - errlen, "%s=\"%s\"", myvar, val)); } else { @@ -1948,19 +1964,21 @@ static int parse_set (BUFFER *tmp, BUFFE return (-1); } } - else if (DTYPE (MuttVars[idx].type) == DT_ADDR) + else { - _tmp[0] = '\0'; - rfc822_write_address (_tmp, sizeof (_tmp), *((ADDRESS **) MuttVars[idx].data), 0); - val = _tmp; + if (DTYPE (MuttVars[idx].type) == DT_ADDR) + { + _tmp[0] = '\0'; + rfc822_write_address (_tmp, sizeof (_tmp), *((ADDRESS **) MuttVars[idx].data), 0); + val = _tmp; + } + else + val = *((char **) MuttVars[idx].data); + + /* user requested the value of this variable */ + APPEND_VALUE (snprintf (err->data + errlen, err->dsize - errlen, "%s=\"%s\"", + MuttVars[idx].option, NONULL (val))); } - else - val = *((char **) MuttVars[idx].data); - - /* user requested the value of this variable */ - snprintf (err->data, err->dsize, "%s=\"%s\"", MuttVars[idx].option, - NONULL (val)); - break; } else { @@ -2019,9 +2037,8 @@ static int parse_set (BUFFER *tmp, BUFFE if (query || *s->dptr != '=') { /* user requested the value of this variable */ - snprintf (err->data, err->dsize, "%s=\"%s\"", MuttVars[idx].option, - NONULL (ptr->pattern)); - break; + APPEND_VALUE (snprintf (err->data + errlen, err->dsize - errlen, "%s=\"%s\"", + MuttVars[idx].option, NONULL (ptr->pattern))); } if (option(OPTATTACHMSG) && !mutt_strcmp(MuttVars[idx].option, "reply_regexp")) @@ -2121,8 +2138,8 @@ static int parse_set (BUFFER *tmp, BUFFE p = "unknown"; break; } - snprintf (err->data, err->dsize, "%s=%s", MuttVars[idx].option, p); - break; + APPEND_VALUE (snprintf (err->data + errlen, err->dsize - errlen, "%s=%s", + MuttVars[idx].option, p)); } CHECK_PAGER; @@ -2146,8 +2163,8 @@ static int parse_set (BUFFER *tmp, BUFFE if (query || *s->dptr != '=') { /* user requested the value of this variable */ - snprintf (err->data, err->dsize, "%s=%d", MuttVars[idx].option, *ptr); - break; + APPEND_VALUE (snprintf (err->data + errlen, err->dsize - errlen, "%s=%d", + MuttVars[idx].option, *ptr)); } CHECK_PAGER; @@ -2184,9 +2201,8 @@ static int parse_set (BUFFER *tmp, BUFFE { char *vals[] = { "no", "yes", "ask-no", "ask-yes" }; - snprintf (err->data, err->dsize, "%s=%s", MuttVars[idx].option, - vals [ quadoption (MuttVars[idx].data) ]); - break; + APPEND_VALUE (snprintf (err->data + errlen, err->dsize - errlen, "%s=%s", + MuttVars[idx].option, vals [ quadoption (MuttVars[idx].data) ])); } CHECK_PAGER; @@ -2254,11 +2270,11 @@ static int parse_set (BUFFER *tmp, BUFFE { p = mutt_getnamebyvalue (*((short *) MuttVars[idx].data) & SORT_MASK, map); - snprintf (err->data, err->dsize, "%s=%s%s%s", MuttVars[idx].option, + APPEND_VALUE (snprintf (err->data + errlen, err->dsize - errlen, "%s=%s%s%s", + MuttVars[idx].option, (*((short *) MuttVars[idx].data) & SORT_REVERSE) ? "reverse-" : "", (*((short *) MuttVars[idx].data) & SORT_LAST) ? "last-" : "", - p); - return 0; + p)); } CHECK_PAGER; s->dptr++;