> 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