Re: [PATCH 1/3] Added generic string handling code.
- From
- Timo Sirainen <tss@iki.fi>
- Date
- May 23, 2007, 10:49 UTC
- Message-ID
- <1179917386.32181.1643.camel@hurina>
- In-Reply-To
- <20070522134007.GK4489@pasky.or.cz>
On Tue, 2007-05-22 at 15:40 +0200, Petr Baudis wrote:
Show 12 quoted lines
> On Sun, May 20, 2007 at 04:24:29AM CEST, Timo Sirainen wrote: > > diff --git a/str.c b/str.c > > new file mode 100644 > > index 0000000..d46e7f4 > > --- /dev/null > > +++ b/str.c > > @@ -0,0 +1,40 @@ > > +#include "str.h" > > + > > +void _str_append(struct string *str, const char *cstr) > > _ is reserved namespace.
I remember __ is, but was _ too? A lot of programs are using that. :)
Show 13 quoted lines
> > +{
> > + unsigned int avail = str->size - str->len;
> > + unsigned int len = strlen(cstr);
> > +
> > + if (len >= avail) {
> > + len = avail - 1;
> > + str->overflowed = 1;
> > + }
> > + memcpy(str->buf + str->len, cstr, len);
> > + str->len += len;
> > + str->buf[str->len] = '\0';
>
> You can copy len + 1 and avoid this assignment.Not if the string overflowed.
Show 5 quoted lines
> > +} > > + > > +void _str_printfa(struct string *str, const char *fmt, ...) > > printfA?
"append". I think I got it originally from glib:
/* These aliases are included for compatibility. */ #define g_string_sprintf g_string_printf #define g_string_sprintfa g_string_append_printf
If there's a chance that this string handling code would get used, I could write another patch with a bit clearer names and support for dynamically growing strings too. Something like:
STATIC_STRING(name, 1234); sstr_append(name, "hello"); // or static_str_append()?
struct string *dyn = str_new(1024); // initial length str_append(dyn, "hello");