Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Straub <bs@github.com>2013-02-01 22:00:55 +0400
committerBen Straub <bs@github.com>2013-02-01 22:00:55 +0400
commitc4beee768135f70b91b2c0bfa1dbc99a58c1f311 (patch)
tree43a721f7b4147b016ce7d8dc37d3a987839374dd
parent8c36a3cdba57ce5fb81d81dc3186f3ff9f2702f7 (diff)
Introduce git__substrdup
-rw-r--r--src/netops.c10
-rw-r--r--src/util.h14
2 files changed, 14 insertions, 10 deletions
diff --git a/src/netops.c b/src/netops.c
index fd788bc1d..cc94d0350 100644
--- a/src/netops.c
+++ b/src/netops.c
@@ -606,26 +606,26 @@ int gitno_extract_url_parts(
start = url;
if (at && at < slash) {
start = at+1;
- *username = git__strndup(url, at - url);
+ *username = git__substrdup(url, at - url);
}
if (colon && colon < at) {
git__free(*username);
- *username = git__strndup(url, colon-url);
- *password = git__strndup(colon+1, at-colon-1);
+ *username = git__substrdup(url, colon-url);
+ *password = git__substrdup(colon+1, at-colon-1);
colon = strchr(at, ':');
}
if (colon == NULL) {
*port = git__strdup(default_port);
} else {
- *port = git__strndup(colon + 1, slash - colon - 1);
+ *port = git__substrdup(colon + 1, slash - colon - 1);
}
GITERR_CHECK_ALLOC(*port);
end = colon == NULL ? slash : colon;
- *host = git__strndup(start, end - start);
+ *host = git__substrdup(start, end - start);
GITERR_CHECK_ALLOC(*host);
return 0;
diff --git a/src/util.h b/src/util.h
index e75d777a8..e9edd84a3 100644
--- a/src/util.h
+++ b/src/util.h
@@ -51,11 +51,7 @@ GIT_INLINE(char *) git__strndup(const char *str, size_t n)
while (length < n && str[length])
++length;
- ptr = (char*)malloc(length + 1);
- if (!ptr) {
- giterr_set_oom();
- return NULL;
- }
+ ptr = (char*)git__malloc(length + 1);
if (length)
memcpy(ptr, str, length);
@@ -65,6 +61,14 @@ GIT_INLINE(char *) git__strndup(const char *str, size_t n)
return ptr;
}
+/* NOTE: This doesn't do null or '\0' checking. Watch those boundaries! */
+GIT_INLINE(char *) git__substrdup(const char *start, size_t n)
+{
+ char *ptr = (char*)git__calloc(n+1, sizeof(char));
+ memcpy(ptr, start, n);
+ return ptr;
+}
+
GIT_INLINE(void *) git__realloc(void *ptr, size_t size)
{
void *new_ptr = realloc(ptr, size);