> On Fri, Jul 16, 1999 at 12:15:31AM +0200, Sheldon Hearn wrote:
> > 
> > As I understand it, the goal here is to return to the caller the number
> > of bytes copied (however you represent it), so that the caller can
> > easily determine whether or not dst is safe for operations demanding a
> > null-terminated string.
> [...] 
> > size_t
> > fooncat(char *s, const char *append, size_t count)
> > 
> > where the return value is the number of bytes {copied,appended}.
> 
> Eeks!  This will quickly lead to code like
> 
> if (fooncat(string, append, sizeof(string)) != strlen(append))
>    ...
> 
> which is rather evil, given that the second strlen(append) would be
> completely gratuitous if it weren't for the interface you're
> suggesting.

What's really stupid is that most of the time you're trying to use 
these functions to fix code that looks like:

        strcpy(buf, str1);
        strcat(buf, str2);
        strcat(buf, str3);

without overflowing buf.  This is dumb!  Use asprintf instead:

        asprinf(&buf, "%s%s%s", str1, str2, str3);

If you can't keep all of the string elements together at once, try:

        asprinf(&buf, "%s%s", str1, str2);
        ...
        asprintf(&buf2, "%s%s", buf, str3);
        free(buf);

No, it's not fast, but it _is_ robust.

-- 
\\  The mind's the standard       \\  Mike Smith
\\  of the man.                   \\  msm...@freebsd.org
\\    -- Joseph Merrick           \\  msm...@cdrom.com




To Unsubscribe: send mail to majord...@freebsd.org
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to