diff options
author | Vicent Martà <tanoku@gmail.com> | 2011-09-22 10:28:05 -0700 |
---|---|---|
committer | Vicent Martà <tanoku@gmail.com> | 2011-09-22 10:28:05 -0700 |
commit | 01ab592b82c4051df2be6066d7dfa59696cd453d (patch) | |
tree | 934a6951ee3d005395a8632197d7fb1722a216bb /src/util.c | |
parent | 87a26ad55e3d7a7b4753a9cf70f1481f2c61b2cd (diff) | |
parent | ad196c6ae669e2d69503eba942402e7215ea7b82 (diff) | |
download | libgit2-01ab592b82c4051df2be6066d7dfa59696cd453d.tar.gz |
Merge pull request #421 from nulltoken/ntk/fix/config-get-set-long
config: make git_config_[get|set]_long() able to properly deal with 8 bytes wide values
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; |