[?OT?] strndup exists in FreeBSD?
fbsd.questions at rachie.is-a-geek.net
Mon Apr 14 23:26:43 UTC 2008
On Tuesday 15 April 2008 01:06:24 Giorgos Keramidas wrote:
> On Mon, 14 Apr 2008 15:43:24 -0700, "Steve Franks" <stevefranks at ieee.org>
> > I'm getting an undefined reference to strndup, so clearly there's a
> > header somewhere with it - doesn't seem to be in my default libc,
> > however on 7.0-amd64?
> I don't see an strndup() function in our libc.
> keramida at kobe:/usr/src/lib/libc/string$ grep ^strdup *.c
> keramida at kobe:/usr/src/lib/libc/string$ grep ^strndup *.c
> keramida at kobe:/usr/src/lib/libc/string$
> While it seems like a cool function name, what's the point of having it?
> If you know how much you want to copy, it's trivial to allocate a buffer
> large enough and strlcpy() into it. If you don't know how much you want
> to copy, then strdup() is ok anyway :)
It can be convenient for trickery:
dir = strndup(file, (strrchr(file, '/')-file)));
Or space optimization:
char *p, *path;
path = malloc(MAXPATHLEN);
(void)strlcpy(path, argv[i], MAXPATHLEN);
p = strndup(path, strlen(path));
But, personally I prefer taking the long route or wasting a few bytes over
Problem with today's modular software: they start with the modules
and never get to the software part.
More information about the freebsd-questions