Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Jun 2009 14:11:46 GMT
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 164172 for review
Message-ID:  <200906121411.n5CEBkOE078120@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=164172

Change 164172 by rwatson@rwatson_freebsd_capabilities on 2009/06/12 14:10:55

	Add basename_r(3).

Affected files ...

.. //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/Makefile.inc#7 edit
.. //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/basename.3#2 edit
.. //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/basename.c#2 edit

Differences ...

==== //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/Makefile.inc#7 (text+ko) ====

@@ -76,6 +76,7 @@
 
 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

==== //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/basename.3#2 (text+ko) ====

@@ -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 @@
 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 @@
 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

==== //depot/projects/trustedbsd/capabilities/src/lib/libc/gen/basename.c#2 (text+ko) ====

@@ -40,18 +40,12 @@
 #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 @@
 	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));
+}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906121411.n5CEBkOE078120>