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;
}
static int parse_unit_factor(const char *end, uintmax_t *factor)
static uintmax_t get_unit_factor(const char *end)
{
if (!*end) {
*factor = 1;
if (!*end)
return 1;
}
else if (!strcasecmp(end, "k")) {
*factor = 1024;
return 1;
}
else if (!strcasecmp(end, "m")) {
*factor = 1024 * 1024;
return 1;
}
else if (!strcasecmp(end, "g")) {
*factor = 1024 * 1024 * 1024;
return 1;
}
else if (!strcasecmp(end, "k"))
return 1024;
else if (!strcasecmp(end, "m"))
return 1024 * 1024;
else if (!strcasecmp(end, "g"))
return 1024 * 1024 * 1024;
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);
if (errno == ERANGE)
return 0;
if (!parse_unit_factor(end, &factor)) {
factor = get_unit_factor(end);
if (!factor) {
errno = EINVAL;
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);
if (errno == ERANGE)
return 0;
if (!parse_unit_factor(end, &factor)) {
factor = get_unit_factor(end);
if (!factor) {
errno = EINVAL;
return 0;
}