summaryrefslogtreecommitdiff
path: root/src/util.c
diff options
context:
space:
mode:
authorVicent Martí <tanoku@gmail.com>2011-09-22 10:28:05 -0700
committerVicent Martí <tanoku@gmail.com>2011-09-22 10:28:05 -0700
commit01ab592b82c4051df2be6066d7dfa59696cd453d (patch)
tree934a6951ee3d005395a8632197d7fb1722a216bb /src/util.c
parent87a26ad55e3d7a7b4753a9cf70f1481f2c61b2cd (diff)
parentad196c6ae669e2d69503eba942402e7215ea7b82 (diff)
downloadlibgit2-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.c21
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;