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 <= lenTRUE | 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 */ | - |
| | |