diff options
| author | nulltoken <emeric.fermas@gmail.com> | 2011-09-21 23:17:39 +0200 |
|---|---|---|
| committer | nulltoken <emeric.fermas@gmail.com> | 2011-09-22 18:58:47 +0200 |
| commit | ad196c6ae669e2d69503eba942402e7215ea7b82 (patch) | |
| tree | 68b2d1a76fbbbfdda942491c1211a74a11b46c16 /src/util.c | |
| parent | e1b86444676b70154bf8ab450d429bdef57a8276 (diff) | |
| download | libgit2-ad196c6ae669e2d69503eba942402e7215ea7b82.tar.gz | |
config: make git_config_[get|set]_long() able to properly deal with 8 bytes wide values
Should fix issue #419.
Signed-off-by: nulltoken <emeric.fermas@gmail.com>
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; |
