From 0b87b6e081e75170ffa40e92aebde1e22ad3161e Mon Sep 17 00:00:00 2001 From: Brian Downing Date: Thu, 12 Jul 2007 08:32:26 -0500 Subject: Add functions for parsing integers with size suffixes Split out the nnn{k,m,g} parsing code from git_config_int into git_parse_long, so command-line parameters can enjoy the same functionality. Also add get_parse_ulong for unsigned values. Make git_config_int use git_parse_long, and add get_config_ulong as well. Signed-off-by: Brian Downing Acked-by: Nicolas Pitre Signed-off-by: Junio C Hamano --- config.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 46 insertions(+), 12 deletions(-) (limited to 'config.c') diff --git a/config.c b/config.c index 561ee3b57..f89a61191 100644 --- a/config.c +++ b/config.c @@ -233,21 +233,55 @@ static int git_parse_file(config_fn_t fn) die("bad config file line %d in %s", config_linenr, config_file_name); } -int git_config_int(const char *name, const char *value) +static unsigned long get_unit_factor(const char *end) +{ + if (!*end) + 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; + die("unknown unit: '%s'", end); +} + +int git_parse_long(const char *value, long *ret) +{ + if (value && *value) { + char *end; + long val = strtol(value, &end, 0); + *ret = val * get_unit_factor(end); + return 1; + } + return 0; +} + +int git_parse_ulong(const char *value, unsigned long *ret) { if (value && *value) { char *end; - int val = strtol(value, &end, 0); - if (!*end) - return val; - if (!strcasecmp(end, "k")) - return val * 1024; - if (!strcasecmp(end, "m")) - return val * 1024 * 1024; - if (!strcasecmp(end, "g")) - return val * 1024 * 1024 * 1024; - } - die("bad config value for '%s' in %s", name, config_file_name); + unsigned long val = strtoul(value, &end, 0); + *ret = val * get_unit_factor(end); + return 1; + } + return 0; +} + +int git_config_int(const char *name, const char *value) +{ + long ret; + if (!git_parse_long(value, &ret)) + die("bad config value for '%s' in %s", name, config_file_name); + return ret; +} + +unsigned long git_config_ulong(const char *name, const char *value) +{ + unsigned long ret; + if (!git_parse_ulong(value, &ret)) + die("bad config value for '%s' in %s", name, config_file_name); + return ret; } int git_config_bool(const char *name, const char *value) -- cgit v1.2.1