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));
|
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 *
|
char *
|
||||||
ralloc_asprintf(const void *ctx, const char *fmt, ...)
|
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);
|
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.
|
* Print to a string.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user