config: simplify parsing of unit factors

Just return the value of the factor or zero for unrecognized strings
instead of using an output reference and a separate return value to
indicate success.  This is shorter and simpler.

It basically reverts that function to before c8deb5a146 ("Improve error
messages when int/long cannot be parsed from config", 2007-12-25), while
keeping the better messages, so restore its old name, get_unit_factor(),
as well.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
René Scharfe 2019-06-22 12:03:40 +02:00 коммит произвёл Junio C Hamano
Родитель 664178e8e2
Коммит 39c575c969
1 изменённых файлов: 12 добавлений и 18 удалений

Просмотреть файл

@ -834,24 +834,16 @@ static int git_parse_source(config_fn_t fn, void *data,
return error_return; return error_return;
} }
static int parse_unit_factor(const char *end, uintmax_t *factor) static uintmax_t get_unit_factor(const char *end)
{ {
if (!*end) { if (!*end)
*factor = 1;
return 1; return 1;
} else if (!strcasecmp(end, "k"))
else if (!strcasecmp(end, "k")) { return 1024;
*factor = 1024; else if (!strcasecmp(end, "m"))
return 1; return 1024 * 1024;
} else if (!strcasecmp(end, "g"))
else if (!strcasecmp(end, "m")) { return 1024 * 1024 * 1024;
*factor = 1024 * 1024;
return 1;
}
else if (!strcasecmp(end, "g")) {
*factor = 1024 * 1024 * 1024;
return 1;
}
return 0; return 0;
} }
@ -867,7 +859,8 @@ static int git_parse_signed(const char *value, intmax_t *ret, intmax_t max)
val = strtoimax(value, &end, 0); val = strtoimax(value, &end, 0);
if (errno == ERANGE) if (errno == ERANGE)
return 0; return 0;
if (!parse_unit_factor(end, &factor)) { factor = get_unit_factor(end);
if (!factor) {
errno = EINVAL; errno = EINVAL;
return 0; return 0;
} }
@ -896,7 +889,8 @@ static int git_parse_unsigned(const char *value, uintmax_t *ret, uintmax_t max)
val = strtoumax(value, &end, 0); val = strtoumax(value, &end, 0);
if (errno == ERANGE) if (errno == ERANGE)
return 0; return 0;
if (!parse_unit_factor(end, &factor)) { factor = get_unit_factor(end);
if (!factor) {
errno = EINVAL; errno = EINVAL;
return 0; return 0;
} }