Add helper function to extend C strings

This is trivial to do with Qt, but when we want to be able to do this in C
code it takes a little more work. This creates a simple pattern to extend
an existing C string.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-02-14 17:48:19 -08:00
parent 87ee8e8aef
commit 12f422a1a3
2 changed files with 31 additions and 0 deletions

View file

@ -228,3 +228,32 @@ void put_quoted(struct membuffer *b, const char *text, int is_attribute, int is_
text = p;
}
}
char *add_to_string_va(const char *old, const char *fmt, va_list args)
{
char *res;
struct membuffer o = { 0 }, n = { 0 };
put_vformat(&n, fmt, args);
put_format(&o, "%s\n%s", old ?: "", mb_cstring(&n));
res = strdup(mb_cstring(&o));
free_buffer(&o);
free_buffer(&n);
free((void *)old);
return res;
}
/* this is a convenience function that cleverly adds text to a string, using our membuffer
* infrastructure.
* WARNING - this will free(old), the intended pattern is
* string = add_to_string(string, fmt, ...)
*/
char *add_to_string(const char *old, const char *fmt, ...)
{
char *res;
va_list args;
va_start(args, fmt);
res = add_to_string_va(old, fmt, args);
va_end(args);
return res;
}

View file

@ -27,6 +27,8 @@ extern void strip_mb(struct membuffer *);
extern const char *mb_cstring(struct membuffer *);
extern __printf(2, 0) void put_vformat(struct membuffer *, const char *, va_list);
extern __printf(2, 3) void put_format(struct membuffer *, const char *fmt, ...);
extern __printf(2, 0) char *add_to_string_va(const char *old, const char *fmt, va_list args);
extern __printf(2, 3) char *add_to_string(const char *old, const char *fmt, ...);
/* Output one of our "milli" values with type and pre/post data */
extern void put_milli(struct membuffer *, const char *, int, const char *);