| Line | Source | Count |
| 1 | | - |
| 2 | | - |
| 3 | | - |
| 4 | | - |
| 5 | | - |
| 6 | | - |
| 7 | | - |
| 8 | | - |
| 9 | | - |
| 10 | | - |
| 11 | | - |
| 12 | | - |
| 13 | | - |
| 14 | | - |
| 15 | | - |
| 16 | | - |
| 17 | | - |
| 18 | | - |
| 19 | | - |
| 20 | | - |
| 21 | | - |
| 22 | | - |
| 23 | | - |
| 24 | | - |
| 25 | | - |
| 26 | | - |
| 27 | #define READLINE_LIBRARY | - |
| 28 | | - |
| 29 | #if defined (HAVE_CONFIG_H) | - |
| 30 | # include <config.h> | - |
| 31 | #endif | - |
| 32 | | - |
| 33 | #include "rlconf.h" | - |
| 34 | | - |
| 35 | #include <stdio.h> | - |
| 36 | | - |
| 37 | #include "posixstat.h" // stat related macros (S_ISREG, ...) | - |
| 38 | #include <fcntl.h> // S_ISUID | - |
| 39 | | - |
| 40 | #ifndef S_ISDIR | - |
| 41 | # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) | - |
| 42 | #endif | - |
| 43 | | - |
| 44 | | - |
| 45 | #if defined (HAVE_STRING_H) | - |
| 46 | # include <string.h> | - |
| 47 | #else /* !HAVE_STRING_H */ | - |
| 48 | # include <strings.h> | - |
| 49 | #endif /* !HAVE_STRING_H */ | - |
| 50 | | - |
| 51 | | - |
| 52 | #if defined (HAVE_STDLIB_H) | - |
| 53 | # include <stdlib.h> | - |
| 54 | #else | - |
| 55 | # include "ansi_stdlib.h" | - |
| 56 | #endif /* HAVE_STDLIB_H */ | - |
| 57 | | - |
| 58 | #include "readline.h" | - |
| 59 | #include "rldefs.h" | - |
| 60 | | - |
| 61 | #ifdef COLOR_SUPPORT | - |
| 62 | | - |
| 63 | #include "xmalloc.h" | - |
| 64 | #include "colors.h" | - |
| 65 | | - |
| 66 | static bool is_colored (enum indicator_no type); | - |
| 67 | static void restore_default_color (void); | - |
| 68 | | - |
| 69 | COLOR_EXT_TYPE *_rl_color_ext_list = 0; | - |
| 70 | | - |
| 71 | | - |
| 72 | void | - |
| 73 | _rl_put_indicator (const struct bin_str *ind) | - |
| 74 | { | - |
| 75 | fwrite (ind->string, ind->len, 1, rl_outstream); | - |
| 76 | } never executed: end of block | 0 |
| 77 | | - |
| 78 | static bool | - |
| 79 | is_colored (enum indicator_no colored_filetype) | - |
| 80 | { | - |
| 81 | size_t len = _rl_color_indicator[colored_filetype].len; | - |
| 82 | char const *s = _rl_color_indicator[colored_filetype].string; | - |
| 83 | return ! (len == 0 never executed: return ! (len == 0 || (len == 1 && (__extension__ (__builtin_constant_p ( 1 ) && ((__builtin_constant_p ( s ) && strlen ( s ) < ((size_t) ( 1 ))) || (__builtin_constant_p ( "0" ) && strlen ( "0" ) < ((size_t) ( 1 )))) ? __extension__ ({ size_t __s1_len, _... char *) (const char *) ( "00" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( "00" ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( s , "00" )))); }) : strncmp ( s , "00" , 2 ))) == 0)); | 0 |
| 84 | || (len == 1 && strncmp (s, "0", 1) == 0) never executed: return ! (len == 0 || (len == 1 && (__extension__ (__builtin_constant_p ( 1 ) && ((__builtin_constant_p ( s ) && strlen ( s ) < ((size_t) ( 1 ))) || (__builtin_constant_p ( "0" ) && strlen ( "0" ) < ((size_t) ( 1 )))) ? __extension__ ({ size_t __s1_len, _... char *) (const char *) ( "00" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( "00" ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( s , "00" )))); }) : strncmp ( s , "00" , 2 ))) == 0)); never executed: __result = (((const unsigned char *) (const char *) ( s ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( "0" ))[3] - __s2[3]); never executed: end of block never executed: end of block | TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 85 | || (len == 2 && strncmp (s, "00", 2) == 0)); never executed: return ! (len == 0 || (len == 1 && (__extension__ (__builtin_constant_p ( 1 ) && ((__builtin_constant_p ( s ) && strlen ( s ) < ((size_t) ( 1 ))) || (__builtin_constant_p ( "0" ) && strlen ( "0" ) < ((size_t) ( 1 )))) ? __extension__ ({ size_t __s1_len, _... char *) (const char *) ( "00" ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( "00" ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( s , "00" )))); }) : strncmp ( s , "00" , 2 ))) == 0)); never executed: __result = (((const unsigned char *) (const char *) ( s ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( "00" ))[3] - __s2[3]); never executed: end of block never executed: end of block | TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 86 | } | - |
| 87 | | - |
| 88 | static void | - |
| 89 | restore_default_color (void) | - |
| 90 | { | - |
| 91 | _rl_put_indicator (&_rl_color_indicator[C_LEFT]); | - |
| 92 | _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); | - |
| 93 | } never executed: end of block | 0 |
| 94 | | - |
| 95 | void | - |
| 96 | _rl_set_normal_color (void) | - |
| 97 | { | - |
| 98 | if (is_colored (C_NORM))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 99 | { | - |
| 100 | _rl_put_indicator (&_rl_color_indicator[C_LEFT]); | - |
| 101 | _rl_put_indicator (&_rl_color_indicator[C_NORM]); | - |
| 102 | _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); | - |
| 103 | } never executed: end of block | 0 |
| 104 | } never executed: end of block | 0 |
| 105 | | - |
| 106 | bool | - |
| 107 | _rl_print_prefix_color (void) | - |
| 108 | { | - |
| 109 | struct bin_str *s; | - |
| 110 | | - |
| 111 | | - |
| 112 | s = &_rl_color_indicator[C_PREFIX]; | - |
| 113 | if (s->string != NULL)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 114 | { | - |
| 115 | if (is_colored (C_NORM))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 116 | restore_default_color (); never executed: restore_default_color (); | 0 |
| 117 | _rl_put_indicator (&_rl_color_indicator[C_LEFT]); | - |
| 118 | _rl_put_indicator (s); | - |
| 119 | _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); | - |
| 120 | return 0; never executed: return 0; | 0 |
| 121 | } | - |
| 122 | else | - |
| 123 | return 1; never executed: return 1; | 0 |
| 124 | } | - |
| 125 | | - |
| 126 | | - |
| 127 | bool | - |
| 128 | _rl_print_color_indicator (const char *f) | - |
| 129 | { | - |
| 130 | enum indicator_no colored_filetype; | - |
| 131 | COLOR_EXT_TYPE *ext; | - |
| 132 | size_t len; | - |
| 133 | | - |
| 134 | const char* name; | - |
| 135 | char *filename; | - |
| 136 | struct stat astat, linkstat; | - |
| 137 | mode_t mode; | - |
| 138 | int linkok; | - |
| 139 | int stat_ok; | - |
| 140 | | - |
| 141 | name = f; | - |
| 142 | | - |
| 143 | | - |
| 144 | filename = 0; | - |
| 145 | if (rl_filename_stat_hook)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 146 | { | - |
| 147 | filename = savestring (f); | - |
| 148 | (*rl_filename_stat_hook) (&filename); | - |
| 149 | name = filename; | - |
| 150 | } never executed: end of block | 0 |
| 151 | | - |
| 152 | #if defined (HAVE_LSTAT) | - |
| 153 | stat_ok = lstat(name, &astat); | - |
| 154 | #else | - |
| 155 | stat_ok = stat(name, &astat); | - |
| 156 | #endif | - |
| 157 | if (stat_ok == 0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 158 | { | - |
| 159 | mode = astat.st_mode; | - |
| 160 | #if defined (HAVE_LSTAT) | - |
| 161 | if (S_ISLNK (mode))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 162 | { | - |
| 163 | linkok = stat (name, &linkstat) == 0; | - |
| 164 | if (linkok && strncmp (_rl_color_indicator[C_LINK].string, "target", 6) == 0) never executed: __result = (((const unsigned char *) (const char *) ( _rl_color_indicator[C_LINK].string ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( "target" ))[3] - __s2[3]); never executed: end of block never executed: end of block | TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 165 | mode = linkstat.st_mode; never executed: mode = linkstat.st_mode; | 0 |
| 166 | } never executed: end of block | 0 |
| 167 | else | - |
| 168 | #endif | - |
| 169 | linkok = 1; never executed: linkok = 1; | 0 |
| 170 | } | - |
| 171 | else | - |
| 172 | linkok = -1; never executed: linkok = -1; | 0 |
| 173 | | - |
| 174 | | - |
| 175 | | - |
| 176 | if (linkok == -1 && _rl_color_indicator[C_MISSING].string != NULL)| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 177 | colored_filetype = C_MISSING; never executed: colored_filetype = C_MISSING; | 0 |
| 178 | else if (linkok == 0 && S_ISLNK(mode) && _rl_color_indicator[C_ORPHAN].string != NULL)| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 179 | colored_filetype = C_ORPHAN; never executed: colored_filetype = C_ORPHAN; | 0 |
| 180 | else if(stat_ok != 0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 181 | { | - |
| 182 | static enum indicator_no filetype_indicator[] = FILETYPE_INDICATORS; | - |
| 183 | colored_filetype = filetype_indicator[normal]; | - |
| 184 | } never executed: end of block | 0 |
| 185 | else | - |
| 186 | { | - |
| 187 | if (S_ISREG (mode))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 188 | { | - |
| 189 | colored_filetype = C_FILE; | - |
| 190 | | - |
| 191 | #if defined (S_ISUID) | - |
| 192 | if ((mode & S_ISUID) != 0 && is_colored (C_SETUID))| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 193 | colored_filetype = C_SETUID; never executed: colored_filetype = C_SETUID; | 0 |
| 194 | else | - |
| 195 | #endif | - |
| 196 | #if defined (S_ISGID) | - |
| 197 | if ((mode & S_ISGID) != 0 && is_colored (C_SETGID))| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 198 | colored_filetype = C_SETGID; never executed: colored_filetype = C_SETGID; | 0 |
| 199 | else | - |
| 200 | #endif | - |
| 201 | if (is_colored (C_CAP) && 0) dead code: colored_filetype = C_CAP; | TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| - |
| 202 | colored_filetype = C_CAP; dead code: colored_filetype = C_CAP; | - |
| 203 | else if ((mode & S_IXUGO) != 0 && is_colored (C_EXEC))| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 204 | colored_filetype = C_EXEC; never executed: colored_filetype = C_EXEC; | 0 |
| 205 | else if ((1 < astat.st_nlink) && is_colored (C_MULTIHARDLINK))| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 206 | colored_filetype = C_MULTIHARDLINK; never executed: colored_filetype = C_MULTIHARDLINK; | 0 |
| 207 | } never executed: end of block | 0 |
| 208 | else if (S_ISDIR (mode))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 209 | { | - |
| 210 | colored_filetype = C_DIR; | - |
| 211 | | - |
| 212 | #if defined (S_ISVTX) | - |
| 213 | if ((mode & S_ISVTX) && (mode & S_IWOTH)| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 214 | && is_colored (C_STICKY_OTHER_WRITABLE))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 215 | colored_filetype = C_STICKY_OTHER_WRITABLE; never executed: colored_filetype = C_STICKY_OTHER_WRITABLE; | 0 |
| 216 | else | - |
| 217 | #endif | - |
| 218 | if ((mode & S_IWOTH) != 0 && is_colored (C_OTHER_WRITABLE))| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 219 | colored_filetype = C_OTHER_WRITABLE; never executed: colored_filetype = C_OTHER_WRITABLE; | 0 |
| 220 | #if defined (S_ISVTX) | - |
| 221 | else if ((mode & S_ISVTX) != 0 && is_colored (C_STICKY))| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 222 | colored_filetype = C_STICKY; never executed: colored_filetype = C_STICKY; | 0 |
| 223 | #endif | - |
| 224 | } never executed: end of block | 0 |
| 225 | #if defined (S_ISLNK) | - |
| 226 | else if (S_ISLNK (mode))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 227 | colored_filetype = C_LINK; never executed: colored_filetype = C_LINK; | 0 |
| 228 | #endif | - |
| 229 | else if (S_ISFIFO (mode))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 230 | colored_filetype = C_FIFO; never executed: colored_filetype = C_FIFO; | 0 |
| 231 | #if defined (S_ISSOCK) | - |
| 232 | else if (S_ISSOCK (mode))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 233 | colored_filetype = C_SOCK; never executed: colored_filetype = C_SOCK; | 0 |
| 234 | #endif | - |
| 235 | else if (S_ISBLK (mode))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 236 | colored_filetype = C_BLK; never executed: colored_filetype = C_BLK; | 0 |
| 237 | else if (S_ISCHR (mode))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 238 | colored_filetype = C_CHR; never executed: colored_filetype = C_CHR; | 0 |
| 239 | else | - |
| 240 | { | - |
| 241 | | - |
| 242 | colored_filetype = C_ORPHAN; | - |
| 243 | } never executed: end of block | 0 |
| 244 | } | - |
| 245 | | - |
| 246 | | - |
| 247 | ext = NULL; | - |
| 248 | if (colored_filetype == C_FILE)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 249 | { | - |
| 250 | | - |
| 251 | len = strlen (name); | - |
| 252 | name += len; | - |
| 253 | for (ext = _rl_color_ext_list; ext != NULL; ext = ext->next)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 254 | { | - |
| 255 | if (ext->ext.len <= len| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 256 | && strncmp (name - ext->ext.len, ext->ext.string, never executed: __result = (((const unsigned char *) (const char *) ( name - ext->ext.len ))[3] - __s2[3]); never executed: end of block never executed: end of block never executed: __result = (((const unsigned char *) (const char *) ( ext->ext.string ))[3] - __s2[3]); never executed: end of block never executed: end of block | TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 257 | ext->ext.len) == 0)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 258 | break; never executed: break; | 0 |
| 259 | } never executed: end of block | 0 |
| 260 | } never executed: end of block | 0 |
| 261 | | - |
| 262 | free (filename); | - |
| 263 | | - |
| 264 | { | - |
| 265 | const struct bin_str *const s | - |
| 266 | = ext ? &(ext->seq) : &_rl_color_indicator[colored_filetype];| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 267 | if (s->string != NULL)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 268 | { | - |
| 269 | | - |
| 270 | if (is_colored (C_NORM))| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 271 | restore_default_color (); never executed: restore_default_color (); | 0 |
| 272 | _rl_put_indicator (&_rl_color_indicator[C_LEFT]); | - |
| 273 | _rl_put_indicator (s); | - |
| 274 | _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); | - |
| 275 | return 0; never executed: return 0; | 0 |
| 276 | } | - |
| 277 | else | - |
| 278 | return 1; never executed: return 1; | 0 |
| 279 | } | - |
| 280 | } | - |
| 281 | | - |
| 282 | void | - |
| 283 | _rl_prep_non_filename_text (void) | - |
| 284 | { | - |
| 285 | if (_rl_color_indicator[C_END].string != NULL)| TRUE | never evaluated | | FALSE | never evaluated |
| 0 |
| 286 | _rl_put_indicator (&_rl_color_indicator[C_END]); never executed: _rl_put_indicator (&_rl_color_indicator[C_END]); | 0 |
| 287 | else | - |
| 288 | { | - |
| 289 | _rl_put_indicator (&_rl_color_indicator[C_LEFT]); | - |
| 290 | _rl_put_indicator (&_rl_color_indicator[C_RESET]); | - |
| 291 | _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); | - |
| 292 | } never executed: end of block | 0 |
| 293 | } | - |
| 294 | #endif /* COLOR_SUPPORT */ | - |
| | |