util/ralloc: add ralloc_str_append() helper
This function differs from ralloc_strcat() and ralloc_strncat() in that it does not do any strlen() calls which can become costly on large strings. Reviewed-by: Thomas Helland <thomashelland90@gmail.com>
This commit is contained in:
@@ -403,6 +403,25 @@ ralloc_strncat(char **dest, const char *str, size_t n)
|
||||
return cat(dest, str, strnlen(str, n));
|
||||
}
|
||||
|
||||
bool
|
||||
ralloc_str_append(char **dest, const char *str,
|
||||
size_t existing_length, size_t str_size)
|
||||
{
|
||||
char *both;
|
||||
assert(dest != NULL && *dest != NULL);
|
||||
|
||||
both = resize(*dest, existing_length + str_size + 1);
|
||||
if (unlikely(both == NULL))
|
||||
return false;
|
||||
|
||||
memcpy(both + existing_length, str, str_size);
|
||||
both[existing_length + str_size] = '\0';
|
||||
|
||||
*dest = both;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
char *
|
||||
ralloc_asprintf(const void *ctx, const char *fmt, ...)
|
||||
{
|
||||
|
@@ -292,6 +292,24 @@ bool ralloc_strcat(char **dest, const char *str);
|
||||
*/
|
||||
bool ralloc_strncat(char **dest, const char *str, size_t n);
|
||||
|
||||
/**
|
||||
* Concatenate two strings, allocating the necessary space.
|
||||
*
|
||||
* This appends \p n bytes of \p str to \p *dest, using ralloc_resize
|
||||
* to expand \p *dest to the appropriate size. \p dest will be updated to the
|
||||
* new pointer unless allocation fails.
|
||||
*
|
||||
* The result will always be null-terminated.
|
||||
*
|
||||
* This function differs from ralloc_strcat() and ralloc_strncat() in that it
|
||||
* does not do any strlen() calls which can become costly on large strings.
|
||||
*
|
||||
* \return True unless allocation failed.
|
||||
*/
|
||||
bool
|
||||
ralloc_str_append(char **dest, const char *str,
|
||||
size_t existing_length, size_t str_size);
|
||||
|
||||
/**
|
||||
* Print to a string.
|
||||
*
|
||||
|
Reference in New Issue
Block a user