diff -r 26bdaa1790b3 init.c --- a/init.c Fri Jul 07 11:35:46 2006 +0900 +++ b/init.c Fri Jul 07 12:39:53 2006 +0900 @@ -1788,10 +1788,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 +1904,20 @@ static int parse_set (BUFFER *tmp, BUFFE if (query) { - snprintf (err->data, err->dsize, option (MuttVars[idx].data) + if (errlen >= err->dsize) + return (-1); + if (errlen) + { + strfcpy (err->data + errlen, _("; "), err->dsize - errlen); + errlen += strlen (_("; ")); + } + l = snprintf (err->data + errlen, err->dsize - errlen, option (MuttVars[idx].data) ? _("%s is set") : _("%s is unset"), tmp->data); - return 0; + if (l > 0) + errlen += l; + else + return (-1); + continue; } CHECK_PAGER; @@ -1939,8 +1953,19 @@ static int parse_set (BUFFER *tmp, BUFFE { if ((val = myvar_get (myvar))) { - snprintf (err->data, err->dsize, "%s=\"%s\"", myvar, val); - break; + if (errlen >= err->dsize) + return (-1); + if (errlen) + { + strfcpy (err->data + errlen, _("; "), err->dsize - errlen); + errlen += strlen (_("; ")); + } + l = snprintf (err->data + errlen, err->dsize - errlen, "%s=\"%s\"", myvar, val); + if (l > 0) + errlen += l; + else + return (-1); + continue; } else { @@ -1948,19 +1973,33 @@ 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 */ + if (errlen >= err->dsize) + return (-1); + if (errlen) + { + strfcpy (err->data + errlen, _("; "), err->dsize - errlen); + errlen += strlen (_("; ")); + } + l = snprintf (err->data + errlen, err->dsize - errlen, "%s=\"%s\"", + MuttVars[idx].option, NONULL (val)); + if (l > 0) + errlen += l; + else + return (-1); + continue; } - 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 +2058,20 @@ 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; + if (errlen >= err->dsize) + return (-1); + if (errlen) + { + strfcpy (err->data + errlen, _("; "), err->dsize - errlen); + errlen += strlen (_("; ")); + } + l = snprintf (err->data + errlen, err->dsize - errlen, "%s=\"%s\"", + MuttVars[idx].option, NONULL (ptr->pattern)); + if (l > 0) + errlen += l; + else + return (-1); + continue; } if (option(OPTATTACHMSG) && !mutt_strcmp(MuttVars[idx].option, "reply_regexp")) @@ -2121,8 +2171,20 @@ static int parse_set (BUFFER *tmp, BUFFE p = "unknown"; break; } - snprintf (err->data, err->dsize, "%s=%s", MuttVars[idx].option, p); - break; + if (errlen >= err->dsize) + return (-1); + if (errlen) + { + strfcpy (err->data + errlen, _("; "), err->dsize - errlen); + errlen += strlen (_("; ")); + } + l = snprintf (err->data + errlen, err->dsize - errlen, "%s=%s", + MuttVars[idx].option, p); + if (l > 0) + errlen += l; + else + return (-1); + continue; } CHECK_PAGER; @@ -2146,8 +2208,20 @@ 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; + if (errlen >= err->dsize) + return (-1); + if (errlen) + { + strfcpy (err->data + errlen, _("; "), err->dsize - errlen); + errlen += strlen (_("; ")); + } + l = snprintf (err->data + errlen, err->dsize - errlen, "%s=%d", + MuttVars[idx].option, *ptr); + if (l > 0) + errlen += l; + else + return (-1); + continue; } CHECK_PAGER; @@ -2184,9 +2258,20 @@ 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; + if (errlen >= err->dsize) + return (-1); + if (errlen) + { + strfcpy (err->data + errlen, _("; "), err->dsize - errlen); + errlen += strlen (_("; ")); + } + l = snprintf (err->data + errlen, err->dsize - errlen, "%s=%s", + MuttVars[idx].option, vals [ quadoption (MuttVars[idx].data) ]); + if (l > 0) + errlen += l; + else + return (-1); + continue; } CHECK_PAGER; @@ -2254,11 +2339,23 @@ 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, + if (errlen >= err->dsize) + return (-1); + if (errlen) + { + strfcpy (err->data + errlen, _("; "), err->dsize - errlen); + errlen += strlen (_("; ")); + } + l = 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; + if (l > 0) + errlen += l; + else + return (-1); + continue; } CHECK_PAGER; s->dptr++;