mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-08 19:51:31 +00:00
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.
This commit is contained in:
parent
452c7de668
commit
ce33645ff3
19
src/pool.c
19
src/pool.c
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user