123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- /* Extract the last component (base name) of a file name.
- Copyright (C) 1998, 2001, 2003-2006, 2009-2022 Free Software Foundation,
- Inc.
- This file is free software: you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as
- published by the Free Software Foundation; either version 2.1 of the
- License, or (at your option) any later version.
- This file is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public License
- along with this program. If not, see <https://www.gnu.org/licenses/>. */
- #ifndef _BASENAME_LGPL_H
- #define _BASENAME_LGPL_H
- #include <stddef.h>
- #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
- # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
- #endif
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* Return the address of the last file name component of FILENAME.
- If FILENAME has some trailing slash(es), they are considered to be
- part of the last component.
- If FILENAME has no relative file name components because it is a file
- system root, return the empty string.
- Examples:
- FILENAME RESULT
- "foo.c" "foo.c"
- "foo/bar.c" "bar.c"
- "/foo/bar.c" "bar.c"
- "foo/bar/" "bar/"
- "foo/bar//" "bar//"
- "/" ""
- "//" ""
- "" ""
- The return value is a tail of the given FILENAME; do NOT free() it! */
- /* This function was traditionally called 'basename', but we avoid this
- function name because
- * Various platforms have different functions in their libc.
- In particular, the glibc basename(), defined in <string.h>, does
- not consider trailing slashes to be part of the component:
- FILENAME RESULT
- "foo/bar/" ""
- "foo/bar//" ""
- * The 'basename' command eliminates trailing slashes and for a root
- produces a non-empty result:
- FILENAME RESULT
- "foo/bar/" "bar"
- "foo/bar//" "bar"
- "/" "/"
- "//" "/"
- */
- extern char *last_component (char const *filename) _GL_ATTRIBUTE_PURE;
- /* Return the length of the basename FILENAME.
- Typically FILENAME is the value returned by base_name or last_component.
- Act like strlen (FILENAME), except omit all trailing slashes. */
- extern size_t base_len (char const *filename) _GL_ATTRIBUTE_PURE;
- #ifdef __cplusplus
- } /* extern "C" */
- #endif
- #endif /* _BASENAME_LGPL_H */
|