Commit ce33645f by Vicent Marti

pool: Cleanup error handling in pool_strdup

Note that `git_pool_strdup` cannot really return any error codes,
 because the pool doesn't set errors on OOM.

 The only place where `giterr_set_oom` is called is in
 `git_pool_strndup`, in a conditional check that is always optimized
 away. `n + 1` cannot be zero if `n` is unsigned because the compiler
 doesn't take wraparound into account.

 This check has been removed altogether because `size_t` is not
 particularly going to overflow.
parent 452c7de6
......@@ -190,19 +190,15 @@ void *git_pool_malloc(git_pool *pool, uint32_t items)
char *git_pool_strndup(git_pool *pool, const char *str, size_t n)
{
void *ptr = NULL;
char *ptr = NULL;
assert(pool && str && pool->item_size == sizeof(char));
if (n + 1 == 0) {
giterr_set_oom();
return NULL;
}
if ((ptr = git_pool_malloc(pool, (uint32_t)(n + 1))) != NULL) {
memcpy(ptr, str, n);
*(((char *)ptr) + n) = '\0';
ptr[n] = '\0';
}
pool->has_string_alloc = 1;
return ptr;
......@@ -217,14 +213,7 @@ char *git_pool_strdup(git_pool *pool, const char *str)
char *git_pool_strdup_safe(git_pool *pool, const char *str)
{
if (!str)
return NULL;
else {
char *result = git_pool_strdup(pool, str);
if (!result)
giterr_clear();
return result;
}
return str ? git_pool_strdup(pool, str) : NULL;
}
char *git_pool_strcat(git_pool *pool, const char *a, const char *b)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment