Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef DIRNAME_H_
00022 # define DIRNAME_H_ 1
00023
00024 # include <stdbool.h>
00025 # include <stddef.h>
00026
00027 # ifndef DIRECTORY_SEPARATOR
00028 # define DIRECTORY_SEPARATOR '/'
00029 # endif
00030
00031 # ifndef ISSLASH
00032 # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
00033 # endif
00034
00035 # ifndef FILE_SYSTEM_PREFIX_LEN
00036 # if FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX
00037
00038
00039 # define _IS_DRIVE_LETTER(c) (((unsigned int) (c) | ('a' - 'A')) - 'a' \
00040 <= 'z' - 'a')
00041 # define FILE_SYSTEM_PREFIX_LEN(Filename) \
00042 (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':' ? 2 : 0)
00043 # else
00044 # define FILE_SYSTEM_PREFIX_LEN(Filename) 0
00045 # endif
00046 # endif
00047
00048 # ifndef FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
00049 # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0
00050 # endif
00051
00052 # ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT
00053 # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
00054 # endif
00055
00056 # if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE
00057 # define IS_ABSOLUTE_FILE_NAME(F) ISSLASH ((F)[FILE_SYSTEM_PREFIX_LEN (F)])
00058 # else
00059 # define IS_ABSOLUTE_FILE_NAME(F) \
00060 (ISSLASH ((F)[0]) || 0 < FILE_SYSTEM_PREFIX_LEN (F))
00061 # endif
00062 # define IS_RELATIVE_FILE_NAME(F) (! IS_ABSOLUTE_FILE_NAME (F))
00063
00064 # if GNULIB_DIRNAME
00065 char *base_name (char const *file);
00066 char *dir_name (char const *file);
00067 # endif
00068
00069 char *mdir_name (char const *file);
00070 size_t base_len (char const *file);
00071 size_t dir_len (char const *file);
00072 char *last_component (char const *file);
00073
00074 bool strip_trailing_slashes (char *file);
00075
00076 #endif