die_errno(): double % in strerror() output just in case
[tr: handle border case where % is placed at end of buffer] Signed-off-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Thomas Rast <trast@student.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
b875036e5a
commit
f8b5a8e13c
18
usage.c
18
usage.c
@ -64,8 +64,24 @@ void die_errno(const char *fmt, ...)
|
||||
{
|
||||
va_list params;
|
||||
char fmt_with_err[1024];
|
||||
char str_error[256], *err;
|
||||
int i, j;
|
||||
|
||||
snprintf(fmt_with_err, sizeof(fmt_with_err), "%s: %s", fmt, strerror(errno));
|
||||
err = strerror(errno);
|
||||
for (i = j = 0; err[i] && j < sizeof(str_error) - 1; ) {
|
||||
if ((str_error[j++] = err[i++]) != '%')
|
||||
continue;
|
||||
if (j < sizeof(str_error) - 1) {
|
||||
str_error[j++] = '%';
|
||||
} else {
|
||||
/* No room to double the '%', so we overwrite it with
|
||||
* '\0' below */
|
||||
j--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
str_error[j] = 0;
|
||||
snprintf(fmt_with_err, sizeof(fmt_with_err), "%s: %s", fmt, str_error);
|
||||
|
||||
va_start(params, fmt);
|
||||
die_routine(fmt_with_err, params);
|
||||
|
Loading…
Reference in New Issue
Block a user