diff options
Diffstat (limited to 'src/util.c')
-rw-r--r-- | src/util.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/util.c b/src/util.c index b46a2a15c..dc0eab38d 100644 --- a/src/util.c +++ b/src/util.c @@ -46,10 +46,10 @@ int git__fnmatch(const char *pattern, const char *name, int flags) } } -int git__strtol32(long *result, const char *nptr, const char **endptr, int base) +int git__strtol64(long long *result, const char *nptr, const char **endptr, int base) { const char *p; - long n, nn; + long long n, nn; int c, ovfl, v, neg, ndig; p = nptr; @@ -124,6 +124,23 @@ Return: return GIT_SUCCESS; } +int git__strtol32(int *result, const char *nptr, const char **endptr, int base) +{ + int tmp_int, error = GIT_SUCCESS; + long long tmp_long; + + if ((error = git__strtol64(&tmp_long, nptr, endptr, base)) < GIT_SUCCESS) + return error; + + tmp_int = tmp_long & 0xFFFFFFFF; + if (tmp_int != tmp_long) + return git__throw(GIT_EOVERFLOW, "Failed to convert. '%s' is too large", nptr); + + *result = tmp_int; + + return error; +} + void git__strntolower(char *str, size_t len) { size_t i; |