From owner-svn-src-projects@FreeBSD.ORG Thu Oct 8 21:52:14 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 434901065672; Thu, 8 Oct 2009 21:52:14 +0000 (UTC) (envelope-from rwatson@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3231E8FC1A; Thu, 8 Oct 2009 21:52:14 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n98LqDSn034510; Thu, 8 Oct 2009 21:52:13 GMT (envelope-from rwatson@svn.freebsd.org) Received: (from rwatson@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n98LqDdg034504; Thu, 8 Oct 2009 21:52:13 GMT (envelope-from rwatson@svn.freebsd.org) Message-Id: <200910082152.n98LqDdg034504@svn.freebsd.org> From: Robert Watson Date: Thu, 8 Oct 2009 21:52:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r197879 - in projects/capabilities8: include lib/libc/gen X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 08 Oct 2009 21:52:14 -0000 Author: rwatson Date: Thu Oct 8 21:52:13 2009 New Revision: 197879 URL: http://svn.freebsd.org/changeset/base/197879 Log: Manually merge r197804 from head to capabilities8: 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. Sponsored by: Google Modified: projects/capabilities8/include/libgen.h projects/capabilities8/lib/libc/gen/Makefile.inc projects/capabilities8/lib/libc/gen/Symbol.map projects/capabilities8/lib/libc/gen/basename.3 projects/capabilities8/lib/libc/gen/basename.c Modified: projects/capabilities8/include/libgen.h ============================================================================== --- projects/capabilities8/include/libgen.h Thu Oct 8 21:48:51 2009 (r197878) +++ projects/capabilities8/include/libgen.h Thu Oct 8 21:52:13 2009 (r197879) @@ -36,6 +36,7 @@ __BEGIN_DECLS char *basename(const char *); +char *basename_r(const char *, char *); char *dirname(const char *); #if 0 char *regcmp(const char *, ...); Modified: projects/capabilities8/lib/libc/gen/Makefile.inc ============================================================================== --- projects/capabilities8/lib/libc/gen/Makefile.inc Thu Oct 8 21:48:51 2009 (r197878) +++ projects/capabilities8/lib/libc/gen/Makefile.inc Thu Oct 8 21:52:13 2009 (r197879) @@ -76,6 +76,7 @@ MAN+= alarm.3 arc4random.3 \ MLINKS+=arc4random.3 arc4random_addrandom.3 arc4random.3 arc4random_stir.3 \ arc4random.3 arc4random_buf.3 arc4random.3 arc4random_uniform.3 +MLINKS+=basename.3 basename_r.3 MLINKS+=ctermid.3 ctermid_r.3 MLINKS+=devname.3 devname_r.3 MLINKS+=devname.3 fdevname.3 Modified: projects/capabilities8/lib/libc/gen/Symbol.map ============================================================================== --- projects/capabilities8/lib/libc/gen/Symbol.map Thu Oct 8 21:48:51 2009 (r197878) +++ projects/capabilities8/lib/libc/gen/Symbol.map Thu Oct 8 21:52:13 2009 (r197879) @@ -328,6 +328,7 @@ FBSD_1.0 { FBSD_1.1 { arc4random_buf; arc4random_uniform; + basename_r; fdevname; fdevname_r; fdopendir; Modified: projects/capabilities8/lib/libc/gen/basename.3 ============================================================================== --- projects/capabilities8/lib/libc/gen/basename.3 Thu Oct 8 21:48:51 2009 (r197878) +++ projects/capabilities8/lib/libc/gen/basename.3 Thu Oct 8 21:52:13 2009 (r197879) @@ -27,7 +27,7 @@ .\" $OpenBSD: basename.3,v 1.12 2000/04/18 03:01:25 aaron Exp $ .\" $FreeBSD$ .\" -.Dd October 12, 2006 +.Dd October 6, 2009 .Dt BASENAME 3 .Os .Sh NAME @@ -37,6 +37,8 @@ .In libgen.h .Ft char * .Fn basename "const char *path" +.Ft char * +.Fn basename_r "const char *path" "char *bname" .Sh DESCRIPTION The .Fn basename @@ -58,6 +60,12 @@ If is a null pointer or the empty string, a pointer to the string .Qq \&. is returned. +.Pp +The +.Fn basename_r +variation accepts a buffer of at least +.Dv MAXPATHLEN +bytes in which to store the resulting component. .Sh IMPLEMENTATION NOTES The .Fn basename @@ -65,15 +73,17 @@ function returns a pointer to internal storage space allocated on the first call that will be overwritten by subsequent calls. +.Fn basename_r +is therefore preferred for threaded applications. .Sh RETURN VALUES On successful completion, .Fn basename -returns a pointer to the last component of +and +.Fn basename_r +return pointers to the last component of .Fa path . .Pp -If -.Fn basename -fails, a null pointer is returned and the global variable +If they fail, a null pointer is returned and the global variable .Va errno is set to indicate the error. .Sh ERRORS Modified: projects/capabilities8/lib/libc/gen/basename.c ============================================================================== --- projects/capabilities8/lib/libc/gen/basename.c Thu Oct 8 21:48:51 2009 (r197878) +++ projects/capabilities8/lib/libc/gen/basename.c Thu Oct 8 21:52:13 2009 (r197879) @@ -40,18 +40,12 @@ __FBSDID("$FreeBSD$"); #include 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)); +}