]> git.ipfire.org Git - thirdparty/man-pages.git/blobdiff - man3/basename.3
encrypt.3: srcfix: rewrap source lines
[thirdparty/man-pages.git] / man3 / basename.3
index b400ac8132fb6bb2e65e3b833f1d73c40e5e2ae5..d7f2eedb36b85b39ca94f5d64d25be95da939a6e 100644 (file)
@@ -1,5 +1,6 @@
-.\" Copyright (c) 2000 by Michael Kerrisk (mtk-manpages@gmx.net)
+.\" Copyright (c) 2000 by Michael Kerrisk <mtk.manpages@gmail.com>
 .\"
+.\" %%%LICENSE_START(VERBATIM)
 .\" Permission is granted to make and distribute verbatim copies of this
 .\" manual provided the copyright notice and this permission notice are
 .\" preserved on all copies.
@@ -8,47 +9,51 @@
 .\" manual under the conditions for verbatim copying, provided that the
 .\" entire resulting derived work is distributed under the terms of a
 .\" permission notice identical to this one.
-.\" 
+.\"
 .\" Since the Linux kernel and libraries are constantly changing, this
 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
 .\" responsibility for errors or omissions, or for damages resulting from
-.\" the use of the information contained herein. 
-.\" 
+.\" the use of the information contained herein.  The author(s) may not
+.\" have taken the same level of care in the production of this manual,
+.\" which is licensed free of charge, as they might when working
+.\" professionally.
+.\"
 .\" Formatted or processed versions of this manual, if unaccompanied by
 .\" the source, must acknowledge the copyright and authors of this work.
-.\" License.
+.\" %%%LICENSE_END
+.\"
 .\" Created, 14 Dec 2000 by Michael Kerrisk
 .\"
-.TH DIRNAME 3  2000-12-14 "GNU" "Linux Programmer's Manual"
+.TH BASENAME 3  2017-09-15 "GNU" "Linux Programmer's Manual"
 .SH NAME
-dirname, basename \- parse pathname components
+basename, dirname \- parse pathname components
 .SH SYNOPSIS
 .nf
 .B #include <libgen.h>
-.sp
+.PP
 .BI "char *dirname(char *" path );
-.br
+.PP
 .BI "char *basename(char *" path );
 .fi
 .SH DESCRIPTION
 Warning: there are two different functions
 .BR basename ()
 - see below.
-.LP
+.PP
 The functions
 .BR dirname ()
 and
 .BR basename ()
-break a null-terminated pathname string into directory 
-and filename components.  
-In the usual case, 
+break a null-terminated pathname string into directory
+and filename components.
+In the usual case,
 .BR dirname ()
-returns the string up to, but not including, the final '/', and
+returns the string up to, but not including, the final \(aq/\(aq, and
 .BR basename ()
-returns the component following the final '/'.
-Trailing '/' characters are not counted as part of the pathname.
+returns the component following the final \(aq/\(aq.
+Trailing \(aq/\(aq characters are not counted as part of the pathname.
 .PP
-If 
+If
 .I path
 does not contain a slash,
 .BR dirname ()
@@ -56,16 +61,16 @@ returns the string "." while
 .BR basename ()
 returns a copy of
 .IR path .
-If 
+If
 .I path
 is the string "/", then both
 .BR dirname ()
-and 
+and
 .BR basename ()
 return the string "/".
-If 
+If
 .I path
-is a NULL pointer or points to an empty string, then both
+is a null pointer or points to an empty string, then both
 .BR dirname ()
 and
 .BR basename ()
@@ -73,17 +78,17 @@ return the string ".".
 .PP
 Concatenating the string returned by
 .BR dirname (),
-a "/", and the string returned by 
+a "/", and the string returned by
 .BR basename ()
 yields a complete pathname.
 .PP
-Both 
+Both
 .BR dirname ()
 and
 .BR basename ()
-may modify the contents of 
-.IR path , 
-so it may be desirable to pass a copy when calling one of 
+may modify the contents of
+.IR path ,
+so it may be desirable to pass a copy when calling one of
 these functions.
 .PP
 These functions may return pointers to statically allocated memory
@@ -96,75 +101,100 @@ should not be modified or freed until the pointer returned by
 the function is no longer required.
 .PP
 The following list of examples (taken from SUSv2)
-shows the strings returned by 
+shows the strings returned by
 .BR dirname ()
 and
 .BR basename ()
 for different paths:
-.sp
-.nf
-.B 
-path           dirname         basename
-"/usr/lib"     "/usr"          "lib"
-"/usr/"                "/"             "usr"
-"usr"          "."             "usr"
-"/"            "/"             "/"
-"."            "."             "."
-".."           "."             ".."
-.fi
-.SH EXAMPLE
 .RS
-.nf
-char *dirc, *basec, *bname, *dname;
-char *path = "/etc/passwd";
-
-dirc = strdup(path);
-basec = strdup(path);
-dname = dirname(dirc);
-bname = basename(basec);
-printf("dirname=%s, basename=%s\\n", dname, bname);
-.fi
+.TS
+lb lb lb
+l l l l.
+path           dirname basename
+/usr/lib       /usr    lib
+/usr/          /       usr
+usr            .       usr
+/              /       /
+\&.            .       .
+\&..           .       ..
+.TE
 .RE
-.SH "RETURN VALUE"
-Both 
+.SH RETURN VALUE
+Both
 .BR dirname ()
 and
 .BR basename ()
 return pointers to null-terminated strings.
+(Do not pass these pointers to
+.BR free (3).)
+.SH ATTRIBUTES
+For an explanation of the terms used in this section, see
+.BR attributes (7).
+.TS
+allbox;
+lbw21 lb lb
+l l l.
+Interface      Attribute       Value
+T{
+.BR basename (),
+.BR dirname ()
+T}     Thread safety   MT-Safe
+.TE
+.SH CONFORMING TO
+POSIX.1-2001, POSIX.1-2008.
 .SH NOTES
 There are two different versions of
 .BR basename ()
 - the POSIX version described above, and the GNU version, which one gets
 after
-.br
-.nf
-
-.B "    #define _GNU_SOURCE"
-.br
+.PP
+.in +4n
+.EX
+.BR "    #define _GNU_SOURCE" "         /* See feature_test_macros(7) */"
 .B "    #include <string.h>"
-
-.fi
+.EE
+.in
+.PP
 The GNU version never modifies its argument, and returns the
 empty string when
 .I path
 has a trailing slash, and in particular also when it is "/".
 There is no GNU version of
 .BR dirname ().
-.LP
+.PP
 With glibc, one gets the POSIX version of
 .BR basename ()
-when <libgen.h> is included, and the GNU version otherwise.
+when
+.I <libgen.h>
+is included, and the GNU version otherwise.
 .SH BUGS
-In the glibc implementation of the POSIX versions of these functions
-they modify their argument, and segfault when called with a static string
-like "/usr/".
+In the glibc implementation,
+the POSIX versions of these functions modify the
+.I path
+argument, and segfault when called with a static string
+such as "/usr/".
+.PP
 Before glibc 2.2.1, the glibc version of
 .BR dirname ()
-did not correctly handle pathnames with trailing '/' characters,
+did not correctly handle pathnames with trailing \(aq/\(aq characters,
 and generated a segfault if given a NULL argument.
-.SH "CONFORMING TO"
-POSIX.1-2001
-.SH "SEE ALSO"
+.SH EXAMPLE
+The following code snippet demonstrates the use of
+.BR basename ()
+and
+.BR dirname ():
+.in +4n
+.EX
+char *dirc, *basec, *bname, *dname;
+char *path = "/etc/passwd";
+
+dirc = strdup(path);
+basec = strdup(path);
+dname = dirname(dirc);
+bname = basename(basec);
+printf("dirname=%s, basename=%s\\n", dname, bname);
+.EE
+.in
+.SH SEE ALSO
 .BR basename (1),
-.BR dirname (1),
-.BR feature_test_macros (7)
+.BR dirname (1)