On Wed, Dec 21, 2005 at 10:28:50AM -0800, Alan M. Evans wrote:
> http://bugzilla.gnome.org/show_bug.cgi?id=164446
>
> A patch was already submitted in January. Still UNCONFIRMED.
Yes, I've had a look at that patch. It's not very efficient; it
allocates a new string buffer big enough to hold the string, then fills
it, then strdup()s it into the GString, then frees the first buffer.
That's unnecessary.
My method is:
void g_string_append_vprintf(GString *str, const gchar *fmt, va_list args)
{
gsize len = g_printf_string_upper_bound(fmt, args) + 1;
g_string_maybe_expand(str, len);
g_vsnprintf(str->str + str->len, len, fmt, args);
str->len += len;
}
This doesn't double-allocate the buffer and then incur an unnecessary
strcpy().
We can then trivially wrap
void g_string_vprintf(GString *str, const gchar* fmt, va_list args)
{
g_string_truncate(str, 0);
g_string_append_vprintf(str, fmt, args);
}
Finally this would allow another function I added, because I noticed I
keep doing:
GString *str = g_string_new(NULL);
g_string_append_printf(str, fmt, ...);
return str;
Instead, we just
return g_string_new_printf(fmt, ...);
Any thoughts on these? Should I submit a patch containing that lot?
--
Paul "LeoNerd" Evans
leonerd leonerd org uk
ICQ# 4135350 | Registered Linux# 179460
http://www.leonerd.org.uk/
Attachment:
signature.asc
Description: Digital signature