> 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. \\ [EMAIL PROTECTED]
\\ -- Joseph Merrick \\ [EMAIL PROTECTED]
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message