diff options
author | rwatson <rwatson@FreeBSD.org> | 2009-10-06 14:05:57 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2009-10-06 14:05:57 +0000 |
commit | fd2a94971be3ae7d27b361e6a81e7dea97a15966 (patch) | |
tree | a93ad50032ecad21316acf5415e575f4f5e2fc27 /lib/libc/gen/basename.c | |
parent | b1ce942125b70ba14ecffee512770eea9eb85b0f (diff) | |
download | FreeBSD-src-fd2a94971be3ae7d27b361e6a81e7dea97a15966.zip FreeBSD-src-fd2a94971be3ae7d27b361e6a81e7dea97a15966.tar.gz |
Add basename_r(3) to complement basename(3). basename_r(3) which accepts
a caller-allocated buffer of at least MAXPATHLEN, rather than using a
global buffer.
MFC after: 1 month
Sponsored by: Google
Diffstat (limited to 'lib/libc/gen/basename.c')
-rw-r--r-- | lib/libc/gen/basename.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/lib/libc/gen/basename.c b/lib/libc/gen/basename.c index 9552ab3..9588c28 100644 --- a/lib/libc/gen/basename.c +++ b/lib/libc/gen/basename.c @@ -40,18 +40,12 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> char * -basename(path) +basename_r(path, bname) const char *path; + char *bname; { - static char *bname = NULL; const char *endp, *startp; - if (bname == NULL) { - bname = (char *)malloc(MAXPATHLEN); - if (bname == NULL) - return(NULL); - } - /* Empty or NULL string gets treated as "." */ if (path == NULL || *path == '\0') { (void)strcpy(bname, "."); @@ -82,3 +76,17 @@ basename(path) bname[endp - startp + 1] = '\0'; return(bname); } + +char * +basename(path) + const char *path; +{ + static char *bname = NULL; + + if (bname == NULL) { + bname = (char *)malloc(MAXPATHLEN); + if (bname == NULL) + return (NULL); + } + return (basename_r(path, bname)); +} |