OpenCoverage

bind.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/lib/readline/bind.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* bind.c -- key binding and startup file support for the readline library. */-
2-
3/* Copyright (C) 1987-2017 Free Software Foundation, Inc.-
4-
5 This file is part of the GNU Readline Library (Readline), a library-
6 for reading lines of text with interactive input and history editing.-
7-
8 Readline is free software: you can redistribute it and/or modify-
9 it under the terms of the GNU General Public License as published by-
10 the Free Software Foundation, either version 3 of the License, or-
11 (at your option) any later version.-
12-
13 Readline is distributed in the hope that it will be useful,-
14 but WITHOUT ANY WARRANTY; without even the implied warranty of-
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
16 GNU General Public License for more details.-
17-
18 You should have received a copy of the GNU General Public License-
19 along with Readline. If not, see <http://www.gnu.org/licenses/>.-
20*/-
21-
22#define READLINE_LIBRARY-
23-
24#if defined (__TANDEM)-
25# include <floss.h>-
26#endif-
27-
28#if defined (HAVE_CONFIG_H)-
29# include <config.h>-
30#endif-
31-
32#include <stdio.h>-
33#include <sys/types.h>-
34#include <fcntl.h>-
35#if defined (HAVE_SYS_FILE_H)-
36# include <sys/file.h>-
37#endif /* HAVE_SYS_FILE_H */-
38-
39#if defined (HAVE_UNISTD_H)-
40# include <unistd.h>-
41#endif /* HAVE_UNISTD_H */-
42-
43#if defined (HAVE_STDLIB_H)-
44# include <stdlib.h>-
45#else-
46# include "ansi_stdlib.h"-
47#endif /* HAVE_STDLIB_H */-
48-
49#include <errno.h>-
50-
51#if !defined (errno)-
52extern int errno;-
53#endif /* !errno */-
54-
55#include "posixstat.h"-
56-
57/* System-specific feature definitions and include files. */-
58#include "rldefs.h"-
59-
60/* Some standard library routines. */-
61#include "readline.h"-
62#include "history.h"-
63-
64#include "rlprivate.h"-
65#include "rlshell.h"-
66#include "xmalloc.h"-
67-
68#if !defined (strchr) && !defined (__STDC__)-
69extern char *strchr (), *strrchr ();-
70#endif /* !strchr && !__STDC__ */-
71-
72/* Variables exported by this file. */-
73Keymap rl_binding_keymap;-
74-
75static int _rl_skip_to_delim PARAMS((char *, int, int));-
76-
77#if defined (USE_VARARGS) && defined (PREFER_STDARG)-
78static void _rl_init_file_error (const char *, ...) __attribute__((__format__ (printf, 1, 2)));-
79#else-
80static void _rl_init_file_error ();-
81#endif-
82-
83static rl_command_func_t *_rl_function_of_keyseq_internal PARAMS((const char *, size_t, Keymap, int *));-
84-
85static char *_rl_read_file PARAMS((char *, size_t *));-
86static int _rl_read_init_file PARAMS((const char *, int));-
87static int glean_key_from_name PARAMS((char *));-
88-
89static int find_boolean_var PARAMS((const char *));-
90static int find_string_var PARAMS((const char *));-
91-
92static const char *boolean_varname PARAMS((int));-
93static const char *string_varname PARAMS((int));-
94-
95static char *_rl_get_string_variable_value PARAMS((const char *));-
96static int substring_member_of_array PARAMS((const char *, const char * const *));-
97-
98static int currently_reading_init_file;-
99-
100/* used only in this file */-
101static int _rl_prefer_visible_bell = 1;-
102-
103#define OP_EQ 1-
104#define OP_NE 2-
105#define OP_GT 3-
106#define OP_GE 4-
107#define OP_LT 5-
108#define OP_LE 6-
109-
110#define OPSTART(c) ((c) == '=' || (c) == '!' || (c) == '<' || (c) == '>')-
111#define CMPSTART(c) ((c) == '=' || (c) == '!')-
112-
113/* **************************************************************** */-
114/* */-
115/* Binding keys */-
116/* */-
117/* **************************************************************** */-
118-
119/* rl_add_defun (char *name, rl_command_func_t *function, int key)-
120 Add NAME to the list of named functions. Make FUNCTION be the function-
121 that gets called. If KEY is not -1, then bind it. */-
122int-
123rl_add_defun (const char *name, rl_command_func_t *function, int key)-
124{-
125 if (key != -1)
key != -1Description
TRUEnever evaluated
FALSEnever evaluated
0
126 rl_bind_key (key, function);
never executed: rl_bind_key (key, function);
0
127 rl_add_funmap_entry (name, function);-
128 return 0;
never executed: return 0;
0
129}-
130-
131/* Bind KEY to FUNCTION. Returns non-zero if KEY is out of range. */-
132int-
133rl_bind_key (int key, rl_command_func_t *function)-
134{-
135 char keyseq[3];-
136 int l;-
137-
138 if (key < 0)
key < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
139 return (key);
never executed: return (key);
0
140-
141 if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii)
(key) > 0x07fDescription
TRUEnever evaluated
FALSEnever evaluated
(key) <= 255Description
TRUEnever evaluated
FALSEnever evaluated
_rl_convert_me...chars_to_asciiDescription
TRUEnever evaluated
FALSEnever evaluated
0
142 {-
143 if (_rl_keymap[ESC].type == ISKMAP)
_rl_keymap[(('...1f)].type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
144 {-
145 Keymap escmap;-
146-
147 escmap = FUNCTION_TO_KEYMAP (_rl_keymap, ESC);-
148 key = UNMETA (key);-
149 escmap[key].type = ISFUNC;-
150 escmap[key].function = function;-
151 return (0);
never executed: return (0);
0
152 }-
153 return (key);
never executed: return (key);
0
154 }-
155-
156 /* If it's bound to a function or macro, just overwrite. Otherwise we have-
157 to treat it as a key sequence so rl_generic_bind handles shadow keymaps-
158 for us. If we are binding '\' make sure to escape it so it makes it-
159 through the call to rl_translate_keyseq. */-
160 if (_rl_keymap[key].type != ISKMAP)
_rl_keymap[key].type != 1Description
TRUEnever evaluated
FALSEnever evaluated
0
161 {-
162 _rl_keymap[key].type = ISFUNC;-
163 _rl_keymap[key].function = function;-
164 }
never executed: end of block
0
165 else-
166 {-
167 l = 0;-
168 if (key == '\\')
key == '\\'Description
TRUEnever evaluated
FALSEnever evaluated
0
169 keyseq[l++] = '\\';
never executed: keyseq[l++] = '\\';
0
170 keyseq[l++] = key;-
171 keyseq[l] = '\0';-
172 rl_bind_keyseq (keyseq, function);-
173 }
never executed: end of block
0
174 rl_binding_keymap = _rl_keymap;-
175 return (0);
never executed: return (0);
0
176}-
177-
178/* Bind KEY to FUNCTION in MAP. Returns non-zero in case of invalid-
179 KEY. */-
180int-
181rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map)-
182{-
183 int result;-
184 Keymap oldmap;-
185-
186 oldmap = _rl_keymap;-
187 _rl_keymap = map;-
188 result = rl_bind_key (key, function);-
189 _rl_keymap = oldmap;-
190 return (result);
never executed: return (result);
0
191}-
192-
193/* Bind key sequence KEYSEQ to DEFAULT_FUNC if KEYSEQ is unbound. Right-
194 now, this is always used to attempt to bind the arrow keys. */-
195int-
196rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *default_func, Keymap kmap)-
197{-
198 char *keyseq;-
199-
200 keyseq = rl_untranslate_keyseq ((unsigned char)key);-
201 return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, kmap));
never executed: return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, kmap));
0
202}-
203-
204int-
205rl_bind_key_if_unbound (int key, rl_command_func_t *default_func)-
206{-
207 char *keyseq;-
208-
209 keyseq = rl_untranslate_keyseq ((unsigned char)key);-
210 return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, _rl_keymap));
never executed: return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, _rl_keymap));
0
211}-
212-
213/* Make KEY do nothing in the currently selected keymap.-
214 Returns non-zero in case of error. This is not the same as self-insert;-
215 this makes it a dead key. */-
216int-
217rl_unbind_key (int key)-
218{-
219 return (rl_bind_key (key, (rl_command_func_t *)NULL));
never executed: return (rl_bind_key (key, (rl_command_func_t *) ((void *)0) ));
0
220}-
221-
222/* Make KEY do nothing in MAP. Returns non-zero in case of error. */-
223int-
224rl_unbind_key_in_map (int key, Keymap map)-
225{-
226 return (rl_bind_key_in_map (key, (rl_command_func_t *)NULL, map));
never executed: return (rl_bind_key_in_map (key, (rl_command_func_t *) ((void *)0) , map));
0
227}-
228-
229/* Unbind all keys bound to FUNCTION in MAP. */-
230int-
231rl_unbind_function_in_map (rl_command_func_t *func, Keymap map)-
232{-
233 register int i, rval;-
234-
235 for (i = rval = 0; i < KEYMAP_SIZE; i++)
i < 257Description
TRUEnever evaluated
FALSEnever evaluated
0
236 {-
237 if (map[i].type == ISFUNC && map[i].function == func)
map[i].type == 0Description
TRUEnever evaluated
FALSEnever evaluated
map[i].function == funcDescription
TRUEnever evaluated
FALSEnever evaluated
0
238 {-
239 map[i].function = (rl_command_func_t *)NULL;-
240 rval = 1;-
241 }
never executed: end of block
0
242 }
never executed: end of block
0
243 return rval;
never executed: return rval;
0
244}-
245-
246/* Unbind all keys bound to COMMAND, which is a bindable command name, in MAP */-
247int-
248rl_unbind_command_in_map (const char *command, Keymap map)-
249{-
250 rl_command_func_t *func;-
251-
252 func = rl_named_function (command);-
253 if (func == 0)
func == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
254 return 0;
never executed: return 0;
0
255 return (rl_unbind_function_in_map (func, map));
never executed: return (rl_unbind_function_in_map (func, map));
0
256}-
257-
258/* Bind the key sequence represented by the string KEYSEQ to-
259 FUNCTION, starting in the current keymap. This makes new-
260 keymaps as necessary. */-
261int-
262rl_bind_keyseq (const char *keyseq, rl_command_func_t *function)-
263{-
264 return (rl_generic_bind (ISFUNC, keyseq, (char *)function, _rl_keymap));
never executed: return (rl_generic_bind (0, keyseq, (char *)function, _rl_keymap));
0
265}-
266-
267/* Bind the key sequence represented by the string KEYSEQ to-
268 FUNCTION. This makes new keymaps as necessary. The initial-
269 place to do bindings is in MAP. */-
270int-
271rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)-
272{-
273 return (rl_generic_bind (ISFUNC, keyseq, (char *)function, map));
never executed: return (rl_generic_bind (0, keyseq, (char *)function, map));
0
274}-
275-
276/* Backwards compatibility; equivalent to rl_bind_keyseq_in_map() */-
277int-
278rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map)-
279{-
280 return (rl_generic_bind (ISFUNC, keyseq, (char *)function, map));
never executed: return (rl_generic_bind (0, keyseq, (char *)function, map));
0
281}-
282-
283/* Bind key sequence KEYSEQ to DEFAULT_FUNC if KEYSEQ is unbound. Right-
284 now, this is always used to attempt to bind the arrow keys, hence the-
285 check for rl_vi_movement_mode. */-
286int-
287rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *default_func, Keymap kmap)-
288{-
289 rl_command_func_t *func;-
290 char *keys;-
291 int keys_len;-
292-
293 if (keyseq)
keyseqDescription
TRUEnever evaluated
FALSEnever evaluated
0
294 {-
295 /* Handle key sequences that require translations and `raw' ones that-
296 don't. This might be a problem with backslashes. */-
297 keys = (char *)xmalloc (1 + (2 * strlen (keyseq)));-
298 if (rl_translate_keyseq (keyseq, keys, &keys_len))
rl_translate_k...ys, &keys_len)Description
TRUEnever evaluated
FALSEnever evaluated
0
299 {-
300 xfree (keys);-
301 return -1;
never executed: return -1;
0
302 }-
303 func = rl_function_of_keyseq_len (keys, keys_len, kmap, (int *)NULL);-
304 xfree (keys);-
305#if defined (VI_MODE)-
306 if (!func || func == rl_do_lowercase_version || func == rl_vi_movement_mode)
!funcDescription
TRUEnever evaluated
FALSEnever evaluated
func == rl_do_...ercase_versionDescription
TRUEnever evaluated
FALSEnever evaluated
func == rl_vi_movement_modeDescription
TRUEnever evaluated
FALSEnever evaluated
0
307#else-
308 if (!func || func == rl_do_lowercase_version)-
309#endif-
310 return (rl_bind_keyseq_in_map (keyseq, default_func, kmap));
never executed: return (rl_bind_keyseq_in_map (keyseq, default_func, kmap));
0
311 else-
312 return 1;
never executed: return 1;
0
313 }-
314 return 0;
never executed: return 0;
0
315}-
316-
317int-
318rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *default_func)-
319{-
320 return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, _rl_keymap));
never executed: return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, _rl_keymap));
0
321}-
322-
323/* Bind the key sequence represented by the string KEYSEQ to-
324 the string of characters MACRO. This makes new keymaps as-
325 necessary. The initial place to do bindings is in MAP. */-
326int-
327rl_macro_bind (const char *keyseq, const char *macro, Keymap map)-
328{-
329 char *macro_keys;-
330 int macro_keys_len;-
331-
332 macro_keys = (char *)xmalloc ((2 * strlen (macro)) + 1);-
333-
334 if (rl_translate_keyseq (macro, macro_keys, &macro_keys_len))
rl_translate_k...acro_keys_len)Description
TRUEnever evaluated
FALSEnever evaluated
0
335 {-
336 xfree (macro_keys);-
337 return -1;
never executed: return -1;
0
338 }-
339 rl_generic_bind (ISMACR, keyseq, macro_keys, map);-
340 return 0;
never executed: return 0;
0
341}-
342-
343/* Bind the key sequence represented by the string KEYSEQ to-
344 the arbitrary pointer DATA. TYPE says what kind of data is-
345 pointed to by DATA, right now this can be a function (ISFUNC),-
346 a macro (ISMACR), or a keymap (ISKMAP). This makes new keymaps-
347 as necessary. The initial place to do bindings is in MAP. */-
348int-
349rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)-
350{-
351 char *keys;-
352 int keys_len, prevkey;-
353 register int i;-
354 KEYMAP_ENTRY k;-
355 Keymap prevmap; -
356-
357 k.function = 0;-
358-
359 /* If no keys to bind to, exit right away. */-
360 if (keyseq == 0 || *keyseq == 0)
keyseq == 0Description
TRUEnever evaluated
FALSEnever evaluated
*keyseq == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
361 {-
362 if (type == ISMACR)
type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
363 xfree (data);
never executed: xfree (data);
0
364 return -1;
never executed: return -1;
0
365 }-
366-
367 keys = (char *)xmalloc (1 + (2 * strlen (keyseq)));-
368-
369 /* Translate the ASCII representation of KEYSEQ into an array of-
370 characters. Stuff the characters into KEYS, and the length of-
371 KEYS into KEYS_LEN. */-
372 if (rl_translate_keyseq (keyseq, keys, &keys_len))
rl_translate_k...ys, &keys_len)Description
TRUEnever evaluated
FALSEnever evaluated
0
373 {-
374 xfree (keys);-
375 return -1;
never executed: return -1;
0
376 }-
377-
378 prevmap = map;-
379 prevkey = keys[0];-
380-
381 /* Bind keys, making new keymaps as necessary. */-
382 for (i = 0; i < keys_len; i++)
i < keys_lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
383 {-
384 unsigned char uc = keys[i];-
385 int ic;-
386-
387 if (i > 0)
i > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
388 prevkey = ic;
never executed: prevkey = ic;
0
389-
390 ic = uc;-
391 if (ic < 0 || ic >= KEYMAP_SIZE)
ic < 0Description
TRUEnever evaluated
FALSEnever evaluated
ic >= 257Description
TRUEnever evaluated
FALSEnever evaluated
0
392 {-
393 xfree (keys);-
394 return -1;
never executed: return -1;
0
395 }-
396-
397 if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii)
(ic) > 0x07fDescription
TRUEnever evaluated
FALSEnever evaluated
(ic) <= 255Description
TRUEnever evaluated
FALSEnever evaluated
_rl_convert_me...chars_to_asciiDescription
TRUEnever evaluated
FALSEnever evaluated
0
398 {-
399 ic = UNMETA (ic);-
400 if (map[ESC].type == ISKMAP)
map[(('[') & 0x1f)].type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
401 {-
402 prevmap = map;-
403 map = FUNCTION_TO_KEYMAP (map, ESC);-
404 }
never executed: end of block
0
405 }
never executed: end of block
0
406-
407 if ((i + 1) < keys_len)
(i + 1) < keys_lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
408 {-
409 if (map[ic].type != ISKMAP)
map[ic].type != 1Description
TRUEnever evaluated
FALSEnever evaluated
0
410 {-
411 /* We allow subsequences of keys. If a keymap is being-
412 created that will `shadow' an existing function or macro-
413 key binding, we save that keybinding into the ANYOTHERKEY-
414 index in the new map. The dispatch code will look there-
415 to find the function to execute if the subsequence is not-
416 matched. ANYOTHERKEY was chosen to be greater than-
417 UCHAR_MAX. */-
418 k = map[ic];-
419-
420 map[ic].type = ISKMAP;-
421 map[ic].function = KEYMAP_TO_FUNCTION (rl_make_bare_keymap());-
422 }
never executed: end of block
0
423 prevmap = map;-
424 map = FUNCTION_TO_KEYMAP (map, ic);-
425 /* The dispatch code will return this function if no matching-
426 key sequence is found in the keymap. This (with a little-
427 help from the dispatch code in readline.c) allows `a' to be-
428 mapped to something, `abc' to be mapped to something else,-
429 and the function bound to `a' to be executed when the user-
430 types `abx', leaving `bx' in the input queue. */-
431 if (k.function && ((k.type == ISFUNC && k.function != rl_do_lowercase_version) || k.type == ISMACR))
k.functionDescription
TRUEnever evaluated
FALSEnever evaluated
k.type == 0Description
TRUEnever evaluated
FALSEnever evaluated
k.function != ...ercase_versionDescription
TRUEnever evaluated
FALSEnever evaluated
k.type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
432 {-
433 map[ANYOTHERKEY] = k;-
434 k.function = 0;-
435 }
never executed: end of block
0
436 }
never executed: end of block
0
437 else-
438 {-
439 if (map[ic].type == ISMACR)
map[ic].type == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
440 xfree ((char *)map[ic].function);
never executed: xfree ((char *)map[ic].function);
0
441 else if (map[ic].type == ISKMAP)
map[ic].type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
442 {-
443 prevmap = map;-
444 map = FUNCTION_TO_KEYMAP (map, ic);-
445 ic = ANYOTHERKEY;-
446 /* If we're trying to override a keymap with a null function-
447 (e.g., trying to unbind it), we can't use a null pointer-
448 here because that's indistinguishable from having not been-
449 overridden. We use a special bindable function that does-
450 nothing. */-
451 if (type == ISFUNC && data == 0)
type == 0Description
TRUEnever evaluated
FALSEnever evaluated
data == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
452 data = (char *)_rl_null_function;
never executed: data = (char *)_rl_null_function;
0
453 }
never executed: end of block
0
454-
455 map[ic].function = KEYMAP_TO_FUNCTION (data);-
456 map[ic].type = type;-
457 }
never executed: end of block
0
458-
459 rl_binding_keymap = map;-
460-
461 }
never executed: end of block
0
462-
463 /* If we unbound a key (type == ISFUNC, data == 0), and the prev keymap-
464 points to the keymap where we unbound the key (sanity check), and the-
465 current binding keymap is empty (rl_empty_keymap() returns non-zero),-
466 and the binding keymap has ANYOTHERKEY set with type == ISFUNC-
467 (overridden function), delete the now-empty keymap, take the previously--
468 overridden function and remove the override. */-
469 /* Right now, this only works one level back. */-
470 if (type == ISFUNC && data == 0 &&
type == 0Description
TRUEnever evaluated
FALSEnever evaluated
data == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
471 prevmap[prevkey].type == ISKMAP &&
prevmap[prevkey].type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
472 (FUNCTION_TO_KEYMAP(prevmap, prevkey) == rl_binding_keymap) &&
((Keymap)(prev...inding_keymap)Description
TRUEnever evaluated
FALSEnever evaluated
0
473 rl_binding_keymap[ANYOTHERKEY].type == ISFUNC &&
rl_binding_key... -1].type == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
474 rl_empty_keymap (rl_binding_keymap))
rl_empty_keyma...inding_keymap)Description
TRUEnever evaluated
FALSEnever evaluated
0
475 {-
476 prevmap[prevkey].type = rl_binding_keymap[ANYOTHERKEY].type;-
477 prevmap[prevkey].function = rl_binding_keymap[ANYOTHERKEY].function;-
478 rl_discard_keymap (rl_binding_keymap);-
479 rl_binding_keymap = prevmap;-
480 }
never executed: end of block
0
481-
482 xfree (keys);-
483 return 0;
never executed: return 0;
0
484}-
485-
486/* Translate the ASCII representation of SEQ, stuffing the values into ARRAY,-
487 an array of characters. LEN gets the final length of ARRAY. Return-
488 non-zero if there was an error parsing SEQ. */-
489int-
490rl_translate_keyseq (const char *seq, char *array, int *len)-
491{-
492 register int i, c, l, temp;-
493-
494 for (i = l = 0; c = seq[i]; i++)
c = seq[i]Description
TRUEnever evaluated
FALSEnever evaluated
0
495 {-
496 if (c == '\\')
c == '\\'Description
TRUEnever evaluated
FALSEnever evaluated
0
497 {-
498 c = seq[++i];-
499-
500 if (c == 0)
c == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
501 {-
502 array[l++] = '\\'; /* preserve trailing backslash */-
503 break;
never executed: break;
0
504 }-
505-
506 /* Handle \C- and \M- prefixes. */-
507 if ((c == 'C' || c == 'M') && seq[i + 1] == '-')
c == 'C'Description
TRUEnever evaluated
FALSEnever evaluated
c == 'M'Description
TRUEnever evaluated
FALSEnever evaluated
seq[i + 1] == '-'Description
TRUEnever evaluated
FALSEnever evaluated
0
508 {-
509 /* Handle special case of backwards define. */-
510 if (strncmp (&seq[i], "C-\\M-", 5) == 0)
never executed: __result = (((const unsigned char *) (const char *) ( &seq[i] ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "C-\\M-" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(__extension__..." , 5 ))) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( 5 )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons..._p ( &seq[i] )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( &seq[...size_t) ( 5 ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...p ( "C-\\M-" )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( "C-\\...size_t) ( 5 ))Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
511 {-
512 array[l++] = ESC; /* ESC is meta-prefix */-
513 i += 5;-
514 array[l++] = CTRL (_rl_to_upper (seq[i]));
never executed: end of block
never executed: __res = toupper ( (unsigned char)seq[i] );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)seq[i] )];
sizeof ( (unsi...r)seq[i] ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons... char)seq[i] )Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha...) == (seq[i]))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
515 }
never executed: end of block
0
516 else if (c == 'M')
c == 'M'Description
TRUEnever evaluated
FALSEnever evaluated
0
517 {-
518 i++; /* seq[i] == '-' */-
519 /* XXX - obey convert-meta setting */-
520 if (_rl_convert_meta_chars_to_ascii && _rl_keymap[ESC].type == ISKMAP)
_rl_convert_me...chars_to_asciiDescription
TRUEnever evaluated
FALSEnever evaluated
_rl_keymap[(('...1f)].type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
521 array[l++] = ESC; /* ESC is meta-prefix */
never executed: array[l++] = (('[') & 0x1f);
0
522 else if (seq[i+1] == '\\' && seq[i+2] == 'C' && seq[i+3] == '-')
seq[i+1] == '\\'Description
TRUEnever evaluated
FALSEnever evaluated
seq[i+2] == 'C'Description
TRUEnever evaluated
FALSEnever evaluated
seq[i+3] == '-'Description
TRUEnever evaluated
FALSEnever evaluated
0
523 {-
524 i += 4;-
525 temp = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i]));
never executed: end of block
never executed: __res = toupper ( (unsigned char)seq[i] );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)seq[i] )];
sizeof ( (unsi...r)seq[i] ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons... char)seq[i] )Description
TRUEnever evaluated
FALSEnever evaluated
(seq[i] == '?')Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha...) == (seq[i]))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
526 array[l++] = META (temp);-
527 }
never executed: end of block
0
528 else-
529 {-
530 /* This doesn't yet handle things like \M-\a, which may-
531 or may not have any reasonable meaning. You're-
532 probably better off using straight octal or hex. */-
533 i++;-
534 array[l++] = META (seq[i]);-
535 }
never executed: end of block
0
536 }-
537 else if (c == 'C')
c == 'C'Description
TRUEnever evaluated
FALSEnever evaluated
0
538 {-
539 i += 2;-
540 /* Special hack for C-?... */-
541 array[l++] = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i]));
never executed: end of block
never executed: __res = toupper ( (unsigned char)seq[i] );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)seq[i] )];
sizeof ( (unsi...r)seq[i] ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons... char)seq[i] )Description
TRUEnever evaluated
FALSEnever evaluated
(seq[i] == '?')Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha...) == (seq[i]))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
542 }
never executed: end of block
0
543 if (seq[i] == '\0')
seq[i] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
544 break;
never executed: break;
0
545 continue;
never executed: continue;
0
546 } -
547-
548 /* Translate other backslash-escaped characters. These are the-
549 same escape sequences that bash's `echo' and `printf' builtins-
550 handle, with the addition of \d -> RUBOUT. A backslash-
551 preceding a character that is not special is stripped. */-
552 switch (c)-
553 {-
554 case 'a':
never executed: case 'a':
0
555 array[l++] = '\007';-
556 break;
never executed: break;
0
557 case 'b':
never executed: case 'b':
0
558 array[l++] = '\b';-
559 break;
never executed: break;
0
560 case 'd':
never executed: case 'd':
0
561 array[l++] = RUBOUT; /* readline-specific */-
562 break;
never executed: break;
0
563 case 'e':
never executed: case 'e':
0
564 array[l++] = ESC;-
565 break;
never executed: break;
0
566 case 'f':
never executed: case 'f':
0
567 array[l++] = '\f';-
568 break;
never executed: break;
0
569 case 'n':
never executed: case 'n':
0
570 array[l++] = NEWLINE;-
571 break;
never executed: break;
0
572 case 'r':
never executed: case 'r':
0
573 array[l++] = RETURN;-
574 break;
never executed: break;
0
575 case 't':
never executed: case 't':
0
576 array[l++] = TAB;-
577 break;
never executed: break;
0
578 case 'v':
never executed: case 'v':
0
579 array[l++] = 0x0B;-
580 break;
never executed: break;
0
581 case '\\':
never executed: case '\\':
0
582 array[l++] = '\\';-
583 break;
never executed: break;
0
584 case '0': case '1': case '2': case '3':
never executed: case '0':
never executed: case '1':
never executed: case '2':
never executed: case '3':
0
585 case '4': case '5': case '6': case '7':
never executed: case '4':
never executed: case '5':
never executed: case '6':
never executed: case '7':
0
586 i++;-
587 for (temp = 2, c -= '0'; ISOCTAL ((unsigned char)seq[i]) && temp--; i++)
((unsigned char)seq[i]) >= '0'Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned char)seq[i]) <= '7'Description
TRUEnever evaluated
FALSEnever evaluated
temp--Description
TRUEnever evaluated
FALSEnever evaluated
0
588 c = (c * 8) + OCTVALUE (seq[i]);
never executed: c = (c * 8) + ((seq[i]) - '0');
0
589 i--; /* auto-increment in for loop */-
590 array[l++] = c & largest_char;-
591 break;
never executed: break;
0
592 case 'x':
never executed: case 'x':
0
593 i++;-
594 for (temp = 2, c = 0; ISXDIGIT ((unsigned char)seq[i]) && temp--; i++)
((*__ctype_b_l...nt) _ISxdigit)Description
TRUEnever evaluated
FALSEnever evaluated
temp--Description
TRUEnever evaluated
FALSEnever evaluated
0
595 c = (c * 16) + HEXVALUE (seq[i]);
never executed: c = (c * 16) + (((seq[i]) >= 'a' && (seq[i]) <= 'f') ? (seq[i])-'a'+10 : (seq[i]) >= 'A' && (seq[i]) <= 'F' ? (seq[i])-'A'+10 : (seq[i])-'0');
(seq[i]) >= 'a'Description
TRUEnever evaluated
FALSEnever evaluated
(seq[i]) <= 'f'Description
TRUEnever evaluated
FALSEnever evaluated
(seq[i]) >= 'A'Description
TRUEnever evaluated
FALSEnever evaluated
(seq[i]) <= 'F'Description
TRUEnever evaluated
FALSEnever evaluated
0
596 if (temp == 2)
temp == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
597 c = 'x';
never executed: c = 'x';
0
598 i--; /* auto-increment in for loop */-
599 array[l++] = c & largest_char;-
600 break;
never executed: break;
0
601 default: /* backslashes before non-special chars just add the char */
never executed: default:
0
602 array[l++] = c;-
603 break; /* the backslash is stripped */
never executed: break;
0
604 }-
605 continue;
never executed: continue;
0
606 }-
607-
608 array[l++] = c;-
609 }
never executed: end of block
0
610-
611 *len = l;-
612 array[l] = '\0';-
613 return (0);
never executed: return (0);
0
614}-
615-
616static int-
617_rl_isescape (int c)-
618{-
619 switch (c)-
620 {-
621 case '\007':
never executed: case '\007':
0
622 case '\b':
never executed: case '\b':
0
623 case '\f':
never executed: case '\f':
0
624 case '\n':
never executed: case '\n':
0
625 case '\r':
never executed: case '\r':
0
626 case TAB:
never executed: case '\t':
0
627 case 0x0b: return (1);
never executed: return (1);
never executed: case 0x0b:
0
628 default: return (0);
never executed: return (0);
never executed: default:
0
629 }-
630}-
631-
632static int-
633_rl_escchar (int c)-
634{-
635 switch (c)-
636 {-
637 case '\007': return ('a');
never executed: return ('a');
never executed: case '\007':
0
638 case '\b': return ('b');
never executed: return ('b');
never executed: case '\b':
0
639 case '\f': return ('f');
never executed: return ('f');
never executed: case '\f':
0
640 case '\n': return ('n');
never executed: return ('n');
never executed: case '\n':
0
641 case '\r': return ('r');
never executed: return ('r');
never executed: case '\r':
0
642 case TAB: return ('t');
never executed: return ('t');
never executed: case '\t':
0
643 case 0x0b: return ('v');
never executed: return ('v');
never executed: case 0x0b:
0
644 default: return (c);
never executed: return (c);
never executed: default:
0
645 }-
646}-
647-
648char *-
649rl_untranslate_keyseq (int seq)-
650{-
651 static char kseq[16];-
652 int i, c;-
653-
654 i = 0;-
655 c = seq;-
656 if (META_CHAR (c))
(c) > 0x07fDescription
TRUEnever evaluated
FALSEnever evaluated
(c) <= 255Description
TRUEnever evaluated
FALSEnever evaluated
0
657 {-
658 kseq[i++] = '\\';-
659 kseq[i++] = 'M';-
660 kseq[i++] = '-';-
661 c = UNMETA (c);-
662 }
never executed: end of block
0
663 else if (c == ESC)
c == (('[') & 0x1f)Description
TRUEnever evaluated
FALSEnever evaluated
0
664 {-
665 kseq[i++] = '\\';-
666 c = 'e';-
667 }
never executed: end of block
0
668 else if (CTRL_CHAR (c))
(c) < 0x020Description
TRUEnever evaluated
FALSEnever evaluated
(((c) & 0x80) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
669 {-
670 kseq[i++] = '\\';-
671 kseq[i++] = 'C';-
672 kseq[i++] = '-';-
673 c = _rl_to_lower (UNCTRL (c));
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: end of block
never executed: __res = tolower ( (unsigned char)((((unsigned char)(((c)|0x40)) == (((c)|0x40))) && (1 && ((*__ctype_b_loc ())[(int) (( (unsigned char)((c)|0x40) ))] & (unsigned short int) _ISlower) )) ? (__extension__ ({ int __res; if (sizeof ( (unsigned char)((c)|0x40)...d char)((c)|0x40) ); __res = __c < -128 || __c > 255 ? __c : (*__ctype_toupper_loc ())[__c]; } else __res = toupper ( (unsigned char)((c)|0x40) ); } else __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )]; __res; })) : (((c)|0x40))) );
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: __res = (*__ctype_tolower_loc ())[(int) ( (unsigned char)((((unsigned char)(((c)|0x40)) == (((c)|0x40))) && (1 && ((*__ctype_b_loc ())[(int) (( (unsigned char)((c)|0x40) ))] & (unsigned short int) _ISlower) )) ? (__extension__ ({ int __res; if (sizeof ( (... char)((c)|0x40) ); __res = __c < -128 || __c > 255 ? __c : (*__ctype_toupper_loc ())[__c]; } else __res = toupper ( (unsigned char)((c)|0x40) ); } else __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )]; __res; })) : (((c)|0x40))) )];
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...|0x40))) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...((c)|0x40))) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha...((c)|0x40)))))Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha... (((c)|0x40)))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha... (((c)|0x40)))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
674 }
never executed: end of block
0
675 else if (c == RUBOUT)
c == 0x7fDescription
TRUEnever evaluated
FALSEnever evaluated
0
676 {-
677 kseq[i++] = '\\';-
678 kseq[i++] = 'C';-
679 kseq[i++] = '-';-
680 c = '?';-
681 }
never executed: end of block
0
682-
683 if (c == ESC)
c == (('[') & 0x1f)Description
TRUEnever evaluated
FALSEnever evaluated
0
684 {-
685 kseq[i++] = '\\';-
686 c = 'e';-
687 }
never executed: end of block
0
688 else if (c == '\\' || c == '"')
c == '\\'Description
TRUEnever evaluated
FALSEnever evaluated
c == '"'Description
TRUEnever evaluated
FALSEnever evaluated
0
689 {-
690 kseq[i++] = '\\';-
691 }
never executed: end of block
0
692-
693 kseq[i++] = (unsigned char) c;-
694 kseq[i] = '\0';-
695 return kseq;
never executed: return kseq;
0
696}-
697-
698char *-
699_rl_untranslate_macro_value (char *seq, int use_escapes)-
700{-
701 char *ret, *r, *s;-
702 int c;-
703-
704 r = ret = (char *)xmalloc (7 * strlen (seq) + 1);-
705 for (s = seq; *s; s++)
*sDescription
TRUEnever evaluated
FALSEnever evaluated
0
706 {-
707 c = *s;-
708 if (META_CHAR (c))
(c) > 0x07fDescription
TRUEnever evaluated
FALSEnever evaluated
(c) <= 255Description
TRUEnever evaluated
FALSEnever evaluated
0
709 {-
710 *r++ = '\\';-
711 *r++ = 'M';-
712 *r++ = '-';-
713 c = UNMETA (c);-
714 }
never executed: end of block
0
715 else if (c == ESC)
c == (('[') & 0x1f)Description
TRUEnever evaluated
FALSEnever evaluated
0
716 {-
717 *r++ = '\\';-
718 c = 'e';-
719 }
never executed: end of block
0
720 else if (CTRL_CHAR (c))
(c) < 0x020Description
TRUEnever evaluated
FALSEnever evaluated
(((c) & 0x80) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
721 {-
722 *r++ = '\\';-
723 if (use_escapes && _rl_isescape (c))
use_escapesDescription
TRUEnever evaluated
FALSEnever evaluated
_rl_isescape (c)Description
TRUEnever evaluated
FALSEnever evaluated
0
724 c = _rl_escchar (c);
never executed: c = _rl_escchar (c);
0
725 else-
726 {-
727 *r++ = 'C';-
728 *r++ = '-';-
729 c = _rl_to_lower (UNCTRL (c));
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: end of block
never executed: __res = tolower ( (unsigned char)((((unsigned char)(((c)|0x40)) == (((c)|0x40))) && (1 && ((*__ctype_b_loc ())[(int) (( (unsigned char)((c)|0x40) ))] & (unsigned short int) _ISlower) )) ? (__extension__ ({ int __res; if (sizeof ( (unsigned char)((c)|0x40)...d char)((c)|0x40) ); __res = __c < -128 || __c > 255 ? __c : (*__ctype_toupper_loc ())[__c]; } else __res = toupper ( (unsigned char)((c)|0x40) ); } else __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )]; __res; })) : (((c)|0x40))) );
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
never executed: __res = (*__ctype_tolower_loc ())[(int) ( (unsigned char)((((unsigned char)(((c)|0x40)) == (((c)|0x40))) && (1 && ((*__ctype_b_loc ())[(int) (( (unsigned char)((c)|0x40) ))] & (unsigned short int) _ISlower) )) ? (__extension__ ({ int __res; if (sizeof ( (... char)((c)|0x40) ); __res = __c < -128 || __c > 255 ? __c : (*__ctype_toupper_loc ())[__c]; } else __res = toupper ( (unsigned char)((c)|0x40) ); } else __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )]; __res; })) : (((c)|0x40))) )];
never executed: end of block
never executed: __res = toupper ( (unsigned char)((c)|0x40) );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)((c)|0x40) )];
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...|0x40))) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...((c)|0x40))) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
sizeof ( (unsi...c)|0x40) ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...r)((c)|0x40) )Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha...((c)|0x40)))))Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha... (((c)|0x40)))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISupper)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha... (((c)|0x40)))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
730 }
never executed: end of block
0
731 }-
732 else if (c == RUBOUT)
c == 0x7fDescription
TRUEnever evaluated
FALSEnever evaluated
0
733 {-
734 *r++ = '\\';-
735 *r++ = 'C';-
736 *r++ = '-';-
737 c = '?';-
738 }
never executed: end of block
0
739-
740 if (c == ESC)
c == (('[') & 0x1f)Description
TRUEnever evaluated
FALSEnever evaluated
0
741 {-
742 *r++ = '\\';-
743 c = 'e';-
744 }
never executed: end of block
0
745 else if (c == '\\' || c == '"')
c == '\\'Description
TRUEnever evaluated
FALSEnever evaluated
c == '"'Description
TRUEnever evaluated
FALSEnever evaluated
0
746 *r++ = '\\';
never executed: *r++ = '\\';
0
747-
748 *r++ = (unsigned char)c;-
749 }
never executed: end of block
0
750 *r = '\0';-
751 return ret;
never executed: return ret;
0
752}-
753-
754/* Return a pointer to the function that STRING represents.-
755 If STRING doesn't have a matching function, then a NULL pointer-
756 is returned. */-
757rl_command_func_t *-
758rl_named_function (const char *string)-
759{-
760 register int i;-
761-
762 rl_initialize_funmap ();-
763-
764 for (i = 0; funmap[i]; i++)
funmap[i]Description
TRUEnever evaluated
FALSEnever evaluated
0
765 if (_rl_stricmp (funmap[i]->name, string) == 0)
strcasecmp (fu..., string) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
766 return (funmap[i]->function);
never executed: return (funmap[i]->function);
0
767 return ((rl_command_func_t *)NULL);
never executed: return ((rl_command_func_t *) ((void *)0) );
0
768}-
769-
770/* Return the function (or macro) definition which would be invoked via-
771 KEYSEQ if executed in MAP. If MAP is NULL, then the current keymap is-
772 used. TYPE, if non-NULL, is a pointer to an int which will receive the-
773 type of the object pointed to. One of ISFUNC (function), ISKMAP (keymap),-
774 or ISMACR (macro). */-
775static rl_command_func_t *-
776_rl_function_of_keyseq_internal (const char *keyseq, size_t len, Keymap map, int *type)-
777{-
778 register int i;-
779-
780 if (map == 0)
map == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
781 map = _rl_keymap;
never executed: map = _rl_keymap;
0
782-
783 for (i = 0; keyseq && i < len; i++)
keyseqDescription
TRUEnever evaluated
FALSEnever evaluated
i < lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
784 {-
785 unsigned char ic = keyseq[i];-
786-
787 if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii)
(ic) > 0x07fDescription
TRUEnever evaluated
FALSEnever evaluated
(ic) <= 255Description
TRUEnever evaluated
FALSEnever evaluated
_rl_convert_me...chars_to_asciiDescription
TRUEnever evaluated
FALSEnever evaluated
0
788 {-
789 if (map[ESC].type == ISKMAP)
map[(('[') & 0x1f)].type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
790 {-
791 map = FUNCTION_TO_KEYMAP (map, ESC);-
792 ic = UNMETA (ic);-
793 }
never executed: end of block
0
794 /* XXX - should we just return NULL here, since this obviously-
795 doesn't match? */-
796 else-
797 {-
798 if (type)
typeDescription
TRUEnever evaluated
FALSEnever evaluated
0
799 *type = map[ESC].type;
never executed: *type = map[(('[') & 0x1f)].type;
0
800-
801 return (map[ESC].function);
never executed: return (map[(('[') & 0x1f)].function);
0
802 }-
803 }-
804-
805 if (map[ic].type == ISKMAP)
map[ic].type == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
806 {-
807 /* If this is the last key in the key sequence, return the-
808 map. */-
809 if (keyseq[i + 1] == '\0')
keyseq[i + 1] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
810 {-
811 if (type)
typeDescription
TRUEnever evaluated
FALSEnever evaluated
0
812 *type = ISKMAP;
never executed: *type = 1;
0
813-
814 return (map[ic].function);
never executed: return (map[ic].function);
0
815 }-
816 else-
817 map = FUNCTION_TO_KEYMAP (map, ic);
never executed: map = (Keymap)(map[ic].function);
0
818 }-
819 /* If we're not at the end of the key sequence, and the current key-
820 is bound to something other than a keymap, then the entire key-
821 sequence is not bound. */-
822 else if (map[ic].type != ISKMAP && keyseq[i+1])
map[ic].type != 1Description
TRUEnever evaluated
FALSEnever evaluated
keyseq[i+1]Description
TRUEnever evaluated
FALSEnever evaluated
0
823 return ((rl_command_func_t *)NULL);
never executed: return ((rl_command_func_t *) ((void *)0) );
0
824 else /* map[ic].type != ISKMAP && keyseq[i+1] == 0 */-
825 {-
826 if (type)
typeDescription
TRUEnever evaluated
FALSEnever evaluated
0
827 *type = map[ic].type;
never executed: *type = map[ic].type;
0
828-
829 return (map[ic].function);
never executed: return (map[ic].function);
0
830 }-
831 }-
832 return ((rl_command_func_t *) NULL);
never executed: return ((rl_command_func_t *) ((void *)0) );
0
833}-
834-
835rl_command_func_t *-
836rl_function_of_keyseq (const char *keyseq, Keymap map, int *type)-
837{-
838 return _rl_function_of_keyseq_internal (keyseq, strlen (keyseq), map, type);
never executed: return _rl_function_of_keyseq_internal (keyseq, strlen (keyseq), map, type);
0
839}-
840-
841rl_command_func_t *-
842rl_function_of_keyseq_len (const char *keyseq, size_t len, Keymap map, int *type)-
843{-
844 return _rl_function_of_keyseq_internal (keyseq, len, map, type);
never executed: return _rl_function_of_keyseq_internal (keyseq, len, map, type);
0
845}-
846-
847/* The last key bindings file read. */-
848static char *last_readline_init_file = (char *)NULL;-
849-
850/* The file we're currently reading key bindings from. */-
851static const char *current_readline_init_file;-
852static int current_readline_init_include_level;-
853static int current_readline_init_lineno;-
854-
855/* Read FILENAME into a locally-allocated buffer and return the buffer.-
856 The size of the buffer is returned in *SIZEP. Returns NULL if any-
857 errors were encountered. */-
858static char *-
859_rl_read_file (char *filename, size_t *sizep)-
860{-
861 struct stat finfo;-
862 size_t file_size;-
863 char *buffer;-
864 int i, file;-
865-
866 file = -1;-
867 if (((file = open (filename, O_RDONLY, 0666)) < 0) || (fstat (file, &finfo) < 0))
((file = open ... , 0666)) < 0)Description
TRUEnever evaluated
FALSEnever evaluated
(fstat (file, &finfo) < 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
868 {-
869 if (file >= 0)
file >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
870 close (file);
never executed: close (file);
0
871 return ((char *)NULL);
never executed: return ((char *) ((void *)0) );
0
872 }-
873-
874 file_size = (size_t)finfo.st_size;-
875-
876 /* check for overflow on very large files */-
877 if (file_size != finfo.st_size || file_size + 1 < file_size)
file_size != finfo.st_sizeDescription
TRUEnever evaluated
FALSEnever evaluated
file_size + 1 < file_sizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
878 {-
879 if (file >= 0)
file >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
880 close (file);
never executed: close (file);
0
881#if defined (EFBIG)-
882 errno = EFBIG;-
883#endif-
884 return ((char *)NULL);
never executed: return ((char *) ((void *)0) );
0
885 }-
886-
887 /* Read the file into BUFFER. */-
888 buffer = (char *)xmalloc (file_size + 1);-
889 i = read (file, buffer, file_size);-
890 close (file);-
891-
892 if (i < 0)
i < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
893 {-
894 xfree (buffer);-
895 return ((char *)NULL);
never executed: return ((char *) ((void *)0) );
0
896 }-
897-
898 RL_CHECK_SIGNALS ();
never executed: _rl_signal_handler (_rl_caught_signal);
_rl_caught_signalDescription
TRUEnever evaluated
FALSEnever evaluated
0
899-
900 buffer[i] = '\0';-
901 if (sizep)
sizepDescription
TRUEnever evaluated
FALSEnever evaluated
0
902 *sizep = i;
never executed: *sizep = i;
0
903-
904 return (buffer);
never executed: return (buffer);
0
905}-
906-
907/* Re-read the current keybindings file. */-
908int-
909rl_re_read_init_file (int count, int ignore)-
910{-
911 int r;-
912 r = rl_read_init_file ((const char *)NULL);-
913 rl_set_keymap_from_edit_mode ();-
914 return r;
never executed: return r;
0
915}-
916-
917/* Do key bindings from a file. If FILENAME is NULL it defaults-
918 to the first non-null filename from this list:-
919 1. the filename used for the previous call-
920 2. the value of the shell variable `INPUTRC'-
921 3. ~/.inputrc-
922 4. /etc/inputrc-
923 If the file existed and could be opened and read, 0 is returned,-
924 otherwise errno is returned. */-
925int-
926rl_read_init_file (const char *filename)-
927{-
928 /* Default the filename. */-
929 if (filename == 0)
filename == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
930 filename = last_readline_init_file;
never executed: filename = last_readline_init_file;
0
931 if (filename == 0)
filename == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
932 filename = sh_get_env_value ("INPUTRC");
never executed: filename = sh_get_env_value ("INPUTRC");
0
933 if (filename == 0 || *filename == 0)
filename == 0Description
TRUEnever evaluated
FALSEnever evaluated
*filename == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
934 {-
935 filename = DEFAULT_INPUTRC;-
936 /* Try to read DEFAULT_INPUTRC; fall back to SYS_INPUTRC on failure */-
937 if (_rl_read_init_file (filename, 0) == 0)
_rl_read_init_...ename, 0) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
938 return 0;
never executed: return 0;
0
939 filename = SYS_INPUTRC;-
940 }
never executed: end of block
0
941-
942#if defined (__MSDOS__)-
943 if (_rl_read_init_file (filename, 0) == 0)-
944 return 0;-
945 filename = "~/_inputrc";-
946#endif-
947 return (_rl_read_init_file (filename, 0));
never executed: return (_rl_read_init_file (filename, 0));
0
948}-
949-
950static int-
951_rl_read_init_file (const char *filename, int include_level)-
952{-
953 register int i;-
954 char *buffer, *openname, *line, *end;-
955 size_t file_size;-
956-
957 current_readline_init_file = filename;-
958 current_readline_init_include_level = include_level;-
959-
960 openname = tilde_expand (filename);-
961 buffer = _rl_read_file (openname, &file_size);-
962 xfree (openname);-
963-
964 RL_CHECK_SIGNALS ();
never executed: _rl_signal_handler (_rl_caught_signal);
_rl_caught_signalDescription
TRUEnever evaluated
FALSEnever evaluated
0
965 if (buffer == 0)
buffer == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
966 return (errno);
never executed: return ( (*__errno_location ()) );
0
967 -
968 if (include_level == 0 && filename != last_readline_init_file)
include_level == 0Description
TRUEnever evaluated
FALSEnever evaluated
filename != la...line_init_fileDescription
TRUEnever evaluated
FALSEnever evaluated
0
969 {-
970 FREE (last_readline_init_file);
never executed: free (last_readline_init_file);
last_readline_init_fileDescription
TRUEnever evaluated
FALSEnever evaluated
0
971 last_readline_init_file = savestring (filename);-
972 }
never executed: end of block
0
973-
974 currently_reading_init_file = 1;-
975-
976 /* Loop over the lines in the file. Lines that start with `#' are-
977 comments; all other lines are commands for readline initialization. */-
978 current_readline_init_lineno = 1;-
979 line = buffer;-
980 end = buffer + file_size;-
981 while (line < end)
line < endDescription
TRUEnever evaluated
FALSEnever evaluated
0
982 {-
983 /* Find the end of this line. */-
984 for (i = 0; line + i != end && line[i] != '\n'; i++);
never executed: ;
line + i != endDescription
TRUEnever evaluated
FALSEnever evaluated
line[i] != '\n'Description
TRUEnever evaluated
FALSEnever evaluated
0
985-
986#if defined (__CYGWIN__)-
987 /* ``Be liberal in what you accept.'' */-
988 if (line[i] == '\n' && line[i-1] == '\r')-
989 line[i - 1] = '\0';-
990#endif-
991-
992 /* Mark end of line. */-
993 line[i] = '\0';-
994-
995 /* Skip leading whitespace. */-
996 while (*line && whitespace (*line))
*lineDescription
TRUEnever evaluated
FALSEnever evaluated
((*line) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((*line) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
997 {-
998 line++;-
999 i--;-
1000 }
never executed: end of block
0
1001-
1002 /* If the line is not a comment, then parse it. */-
1003 if (*line && *line != '#')
*lineDescription
TRUEnever evaluated
FALSEnever evaluated
*line != '#'Description
TRUEnever evaluated
FALSEnever evaluated
0
1004 rl_parse_and_bind (line);
never executed: rl_parse_and_bind (line);
0
1005-
1006 /* Move to the next line. */-
1007 line += i + 1;-
1008 current_readline_init_lineno++;-
1009 }
never executed: end of block
0
1010-
1011 xfree (buffer);-
1012 currently_reading_init_file = 0;-
1013 return (0);
never executed: return (0);
0
1014}-
1015-
1016static void-
1017#if defined (PREFER_STDARG)-
1018_rl_init_file_error (const char *format, ...)-
1019#else-
1020_rl_init_file_error (va_alist)-
1021 va_dcl-
1022#endif-
1023{-
1024 va_list args;-
1025#if defined (PREFER_VARARGS)-
1026 char *format;-
1027#endif-
1028-
1029#if defined (PREFER_STDARG)-
1030 va_start (args, format);-
1031#else-
1032 va_start (args);-
1033 format = va_arg (args, char *);-
1034#endif-
1035-
1036 fprintf (stderr, "readline: ");-
1037 if (currently_reading_init_file)
currently_reading_init_fileDescription
TRUEnever evaluated
FALSEnever evaluated
0
1038 fprintf (stderr, "%s: line %d: ", current_readline_init_file,
never executed: fprintf ( stderr , "%s: line %d: ", current_readline_init_file, current_readline_init_lineno);
0
1039 current_readline_init_lineno);
never executed: fprintf ( stderr , "%s: line %d: ", current_readline_init_file, current_readline_init_lineno);
0
1040-
1041 vfprintf (stderr, format, args);-
1042 fprintf (stderr, "\n");-
1043 fflush (stderr);-
1044-
1045 va_end (args);-
1046}
never executed: end of block
0
1047-
1048/* **************************************************************** */-
1049/* */-
1050/* Parser Helper Functions */-
1051/* */-
1052/* **************************************************************** */-
1053-
1054static int-
1055parse_comparison_op (s, indp)-
1056 const char *s;-
1057 int *indp;-
1058{-
1059 int i, peekc, op;-
1060-
1061 if (OPSTART (s[*indp]) == 0)
((s[*indp]) ==...) == '>') == 0Description
TRUEnever evaluated
FALSEnever evaluated
(s[*indp]) == '='Description
TRUEnever evaluated
FALSEnever evaluated
(s[*indp]) == '!'Description
TRUEnever evaluated
FALSEnever evaluated
(s[*indp]) == '<'Description
TRUEnever evaluated
FALSEnever evaluated
(s[*indp]) == '>'Description
TRUEnever evaluated
FALSEnever evaluated
0
1062 return -1;
never executed: return -1;
0
1063 i = *indp;-
1064 peekc = s[i] ? s[i+1] : 0;
s[i]Description
TRUEnever evaluated
FALSEnever evaluated
0
1065 op = -1;-
1066-
1067 if (s[i] == '=')
s[i] == '='Description
TRUEnever evaluated
FALSEnever evaluated
0
1068 {-
1069 op = OP_EQ;-
1070 if (peekc == '=')
peekc == '='Description
TRUEnever evaluated
FALSEnever evaluated
0
1071 i++;
never executed: i++;
0
1072 i++;-
1073 }
never executed: end of block
0
1074 else if (s[i] == '!' && peekc == '=')
s[i] == '!'Description
TRUEnever evaluated
FALSEnever evaluated
peekc == '='Description
TRUEnever evaluated
FALSEnever evaluated
0
1075 {-
1076 op = OP_NE;-
1077 i += 2;-
1078 }
never executed: end of block
0
1079 else if (s[i] == '<' && peekc == '=')
s[i] == '<'Description
TRUEnever evaluated
FALSEnever evaluated
peekc == '='Description
TRUEnever evaluated
FALSEnever evaluated
0
1080 {-
1081 op = OP_LE;-
1082 i += 2;-
1083 }
never executed: end of block
0
1084 else if (s[i] == '>' && peekc == '=')
s[i] == '>'Description
TRUEnever evaluated
FALSEnever evaluated
peekc == '='Description
TRUEnever evaluated
FALSEnever evaluated
0
1085 {-
1086 op = OP_GE;-
1087 i += 2;-
1088 }
never executed: end of block
0
1089 else if (s[i] == '<')
s[i] == '<'Description
TRUEnever evaluated
FALSEnever evaluated
0
1090 {-
1091 op = OP_LT;-
1092 i += 1;-
1093 }
never executed: end of block
0
1094 else if (s[i] == '>')
s[i] == '>'Description
TRUEnever evaluated
FALSEnever evaluated
0
1095 {-
1096 op = OP_GT;-
1097 i += 1;-
1098 }
never executed: end of block
0
1099-
1100 *indp = i;-
1101 return op;
never executed: return op;
0
1102}-
1103-
1104/* **************************************************************** */-
1105/* */-
1106/* Parser Directives */-
1107/* */-
1108/* **************************************************************** */-
1109-
1110typedef int _rl_parser_func_t PARAMS((char *));-
1111-
1112/* Things that mean `Control'. */-
1113const char * const _rl_possible_control_prefixes[] = {-
1114 "Control-", "C-", "CTRL-", (const char *)NULL-
1115};-
1116-
1117const char * const _rl_possible_meta_prefixes[] = {-
1118 "Meta", "M-", (const char *)NULL-
1119};-
1120-
1121/* Conditionals. */-
1122-
1123/* Calling programs set this to have their argv[0]. */-
1124const char *rl_readline_name = "other";-
1125-
1126/* Stack of previous values of parsing_conditionalized_out. */-
1127static unsigned char *if_stack = (unsigned char *)NULL;-
1128static int if_stack_depth;-
1129static int if_stack_size;-
1130-
1131/* Push _rl_parsing_conditionalized_out, and set parser state based-
1132 on ARGS. */-
1133static int-
1134parser_if (char *args)-
1135{-
1136 int i, llen, boolvar, strvar;-
1137-
1138 boolvar = strvar = -1;-
1139-
1140 /* Push parser state. */-
1141 if (if_stack_depth + 1 >= if_stack_size)
if_stack_depth... if_stack_sizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
1142 {-
1143 if (!if_stack)
!if_stackDescription
TRUEnever evaluated
FALSEnever evaluated
0
1144 if_stack = (unsigned char *)xmalloc (if_stack_size = 20);
never executed: if_stack = (unsigned char *)xmalloc (if_stack_size = 20);
0
1145 else-
1146 if_stack = (unsigned char *)xrealloc (if_stack, if_stack_size += 20);
never executed: if_stack = (unsigned char *)xrealloc (if_stack, if_stack_size += 20);
0
1147 }-
1148 if_stack[if_stack_depth++] = _rl_parsing_conditionalized_out;-
1149-
1150 /* If parsing is turned off, then nothing can turn it back on except-
1151 for finding the matching endif. In that case, return right now. */-
1152 if (_rl_parsing_conditionalized_out)
_rl_parsing_co...tionalized_outDescription
TRUEnever evaluated
FALSEnever evaluated
0
1153 return 0;
never executed: return 0;
0
1154-
1155 llen = strlen (args);-
1156-
1157 /* Isolate first argument. */-
1158 for (i = 0; args[i] && !whitespace (args[i]); i++);
never executed: ;
args[i]Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1159-
1160 if (args[i])
args[i]Description
TRUEnever evaluated
FALSEnever evaluated
0
1161 args[i++] = '\0';
never executed: args[i++] = '\0';
0
1162-
1163 /* Handle "$if term=foo" and "$if mode=emacs" constructs. If this-
1164 isn't term=foo, or mode=emacs, then check to see if the first-
1165 word in ARGS is the same as the value stored in rl_readline_name. */-
1166 if (rl_terminal_name && _rl_strnicmp (args, "term=", 5) == 0)
rl_terminal_nameDescription
TRUEnever evaluated
FALSEnever evaluated
strncasecmp (a...erm=", 5) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1167 {-
1168 char *tem, *tname;-
1169-
1170 /* Terminals like "aaa-60" are equivalent to "aaa". */-
1171 tname = savestring (rl_terminal_name);-
1172 tem = strchr (tname, '-');
__builtin_constant_p ( '-' )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_con...nt_p ( tname )Description
TRUEnever evaluated
FALSEnever evaluated
( '-' ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
1173 if (tem)
temDescription
TRUEnever evaluated
FALSEnever evaluated
0
1174 *tem = '\0';
never executed: *tem = '\0';
0
1175-
1176 /* Test the `long' and `short' forms of the terminal name so that-
1177 if someone has a `sun-cmd' and does not want to have bindings-
1178 that will be executed if the terminal is a `sun', they can put-
1179 `$if term=sun-cmd' into their .inputrc. */-
1180 _rl_parsing_conditionalized_out = _rl_stricmp (args + 5, tname) &&
strcasecmp (args + 5, tname)Description
TRUEnever evaluated
FALSEnever evaluated
0
1181 _rl_stricmp (args + 5, rl_terminal_name);
strcasecmp (ar...terminal_name)Description
TRUEnever evaluated
FALSEnever evaluated
0
1182 xfree (tname);-
1183 }
never executed: end of block
0
1184#if defined (VI_MODE)-
1185 else if (_rl_strnicmp (args, "mode=", 5) == 0)
strncasecmp (a...ode=", 5) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1186 {-
1187 int mode;-
1188-
1189 if (_rl_stricmp (args + 5, "emacs") == 0)
strcasecmp (ar... "emacs") == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1190 mode = emacs_mode;
never executed: mode = 1;
0
1191 else if (_rl_stricmp (args + 5, "vi") == 0)
strcasecmp (ar... 5, "vi") == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1192 mode = vi_mode;
never executed: mode = 0;
0
1193 else-
1194 mode = no_mode;
never executed: mode = -1;
0
1195-
1196 _rl_parsing_conditionalized_out = mode != rl_editing_mode;-
1197 }
never executed: end of block
0
1198#endif /* VI_MODE */-
1199 else if (_rl_strnicmp (args, "version", 7) == 0)
strncasecmp (a...sion", 7) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1200 {-
1201 int rlversion, versionarg, op, previ, major, minor;-
1202-
1203 _rl_parsing_conditionalized_out = 1;-
1204 rlversion = RL_VERSION_MAJOR*10 + RL_VERSION_MINOR;-
1205 /* if "version" is separated from the operator by whitespace, or the-
1206 operand is separated from the operator by whitespace, restore it.-
1207 We're more liberal with allowed whitespace for this variable. */-
1208 if (i > 0 && i <= llen && args[i-1] == '\0')
i > 0Description
TRUEnever evaluated
FALSEnever evaluated
i <= llenDescription
TRUEnever evaluated
FALSEnever evaluated
args[i-1] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
1209 args[i-1] = ' ';
never executed: args[i-1] = ' ';
0
1210 args[llen] = '\0'; /* just in case */-
1211 for (i = 7; whitespace (args[i]); i++)
((args[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1212 ;
never executed: ;
0
1213 if (OPSTART(args[i]) == 0)
((args[i]) == ...) == '>') == 0Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) == '='Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) == '!'Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) == '<'Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) == '>'Description
TRUEnever evaluated
FALSEnever evaluated
0
1214 {-
1215 _rl_init_file_error ("comparison operator expected, found `%s'", args[i] ? args + i : "end-of-line");-
1216 return 0;
never executed: return 0;
0
1217 }-
1218 previ = i;-
1219 op = parse_comparison_op (args, &i);-
1220 if (op <= 0)
op <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1221 {-
1222 _rl_init_file_error ("comparison operator expected, found `%s'", args+previ);-
1223 return 0;
never executed: return 0;
0
1224 }-
1225 for ( ; args[i] && whitespace (args[i]); i++)
args[i]Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1226 ;
never executed: ;
0
1227 if (args[i] == 0 || _rl_digit_p (args[i]) == 0)
args[i] == 0Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) >= ...) <= '9') == 0Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) >= '0'Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) <= '9'Description
TRUEnever evaluated
FALSEnever evaluated
0
1228 {-
1229 _rl_init_file_error ("numeric argument expected, found `%s'", args+i);-
1230 return 0;
never executed: return 0;
0
1231 }-
1232 major = minor = 0;-
1233 previ = i;-
1234 for ( ; args[i] && _rl_digit_p (args[i]); i++)
args[i]Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) >= '0'Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) <= '9'Description
TRUEnever evaluated
FALSEnever evaluated
0
1235 major = major*10 + _rl_digit_value (args[i]);
never executed: major = major*10 + ((args[i]) - '0');
0
1236 if (args[i] == '.')
args[i] == '.'Description
TRUEnever evaluated
FALSEnever evaluated
0
1237 {-
1238 if (args[i + 1] && _rl_digit_p (args [i + 1]) == 0)
args[i + 1]Description
TRUEnever evaluated
FALSEnever evaluated
((args [i + 1]...) <= '9') == 0Description
TRUEnever evaluated
FALSEnever evaluated
(args [i + 1]) >= '0'Description
TRUEnever evaluated
FALSEnever evaluated
(args [i + 1]) <= '9'Description
TRUEnever evaluated
FALSEnever evaluated
0
1239 {-
1240 _rl_init_file_error ("numeric argument expected, found `%s'", args+previ);-
1241 return 0;
never executed: return 0;
0
1242 }-
1243 for (++i; args[i] && _rl_digit_p (args[i]); i++)
args[i]Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) >= '0'Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) <= '9'Description
TRUEnever evaluated
FALSEnever evaluated
0
1244 minor = minor*10 + _rl_digit_value (args[i]);
never executed: minor = minor*10 + ((args[i]) - '0');
0
1245 }
never executed: end of block
0
1246 /* optional - check for trailing garbage on the line, allow whitespace-
1247 and a trailing comment */-
1248 previ = i;-
1249 for ( ; args[i] && whitespace (args[i]); i++)
args[i]Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1250 ;
never executed: ;
0
1251 if (args[i] && args[i] != '#')
args[i]Description
TRUEnever evaluated
FALSEnever evaluated
args[i] != '#'Description
TRUEnever evaluated
FALSEnever evaluated
0
1252 {-
1253 _rl_init_file_error ("trailing garbage on line: `%s'", args+previ);-
1254 return 0;
never executed: return 0;
0
1255 }-
1256 versionarg = major*10 + minor;-
1257-
1258 switch (op)-
1259 {-
1260 case OP_EQ:
never executed: case 1:
0
1261 _rl_parsing_conditionalized_out = rlversion == versionarg;-
1262 break;
never executed: break;
0
1263 case OP_NE:
never executed: case 2:
0
1264 _rl_parsing_conditionalized_out = rlversion != versionarg;-
1265 break;
never executed: break;
0
1266 case OP_GT:
never executed: case 3:
0
1267 _rl_parsing_conditionalized_out = rlversion > versionarg;-
1268 break;
never executed: break;
0
1269 case OP_GE:
never executed: case 4:
0
1270 _rl_parsing_conditionalized_out = rlversion >= versionarg;-
1271 break;
never executed: break;
0
1272 case OP_LT:
never executed: case 5:
0
1273 _rl_parsing_conditionalized_out = rlversion < versionarg;-
1274 break;
never executed: break;
0
1275 case OP_LE:
never executed: case 6:
0
1276 _rl_parsing_conditionalized_out = rlversion <= versionarg;-
1277 break;
never executed: break;
0
1278 }-
1279 }
never executed: end of block
0
1280 /* Check to see if the first word in ARGS is the same as the-
1281 value stored in rl_readline_name. */-
1282 else if (_rl_stricmp (args, rl_readline_name) == 0)
strcasecmp (ar...ine_name) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1283 _rl_parsing_conditionalized_out = 0;
never executed: _rl_parsing_conditionalized_out = 0;
0
1284 else if ((boolvar = find_boolean_var (args)) >= 0 || (strvar = find_string_var (args)) >= 0)
(boolvar = fin...r (args)) >= 0Description
TRUEnever evaluated
FALSEnever evaluated
(strvar = find...r (args)) >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1285 {-
1286 int op, previ;-
1287 size_t vlen;-
1288 const char *vname;-
1289 char *valuearg, *vval, prevc;-
1290-
1291 _rl_parsing_conditionalized_out = 1;-
1292 vname = (boolvar >= 0) ? boolean_varname (boolvar) : string_varname (strvar);
(boolvar >= 0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1293 vlen = strlen (vname);-
1294 if (i > 0 && i <= llen && args[i-1] == '\0')
i > 0Description
TRUEnever evaluated
FALSEnever evaluated
i <= llenDescription
TRUEnever evaluated
FALSEnever evaluated
args[i-1] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
1295 args[i-1] = ' ';
never executed: args[i-1] = ' ';
0
1296 args[llen] = '\0'; /* just in case */-
1297 for (i = vlen; whitespace (args[i]); i++)
((args[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1298 ;
never executed: ;
0
1299 if (CMPSTART(args[i]) == 0)
((args[i]) == ...) == '!') == 0Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) == '='Description
TRUEnever evaluated
FALSEnever evaluated
(args[i]) == '!'Description
TRUEnever evaluated
FALSEnever evaluated
0
1300 {-
1301 _rl_init_file_error ("equality comparison operator expected, found `%s'", args[i] ? args + i : "end-of-line");-
1302 return 0;
never executed: return 0;
0
1303 }-
1304 previ = i;-
1305 op = parse_comparison_op (args, &i);-
1306 if (op != OP_EQ && op != OP_NE)
op != 1Description
TRUEnever evaluated
FALSEnever evaluated
op != 2Description
TRUEnever evaluated
FALSEnever evaluated
0
1307 {-
1308 _rl_init_file_error ("equality comparison operator expected, found `%s'", args+previ);-
1309 return 0;
never executed: return 0;
0
1310 }-
1311 for ( ; args[i] && whitespace (args[i]); i++)
args[i]Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1312 ;
never executed: ;
0
1313 if (args[i] == 0)
args[i] == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1314 {-
1315 _rl_init_file_error ("argument expected, found `%s'", args+i);-
1316 return 0;
never executed: return 0;
0
1317 }-
1318 previ = i;-
1319 valuearg = args + i;-
1320 for ( ; args[i] && whitespace (args[i]) == 0; i++)
args[i]Description
TRUEnever evaluated
FALSEnever evaluated
(((args[i]) ==...== '\t')) == 0Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((args[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1321 ;
never executed: ;
0
1322 prevc = args[i];-
1323 args[i] = '\0'; /* null-terminate valuearg */-
1324 vval = rl_variable_value (vname);-
1325 if (op == OP_EQ)
op == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1326 _rl_parsing_conditionalized_out = _rl_stricmp (vval, valuearg) != 0;
never executed: _rl_parsing_conditionalized_out = strcasecmp (vval, valuearg) != 0;
0
1327 else if (op == OP_NE)
op == 2Description
TRUEnever evaluated
FALSEnever evaluated
0
1328 _rl_parsing_conditionalized_out = _rl_stricmp (vval, valuearg) == 0;
never executed: _rl_parsing_conditionalized_out = strcasecmp (vval, valuearg) == 0;
0
1329 args[i] = prevc;-
1330 }
never executed: end of block
0
1331 else-
1332 _rl_parsing_conditionalized_out = 1;
never executed: _rl_parsing_conditionalized_out = 1;
0
1333 return 0;
never executed: return 0;
0
1334}-
1335-
1336/* Invert the current parser state if there is anything on the stack. */-
1337static int-
1338parser_else (char *args)-
1339{-
1340 register int i;-
1341-
1342 if (if_stack_depth == 0)
if_stack_depth == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1343 {-
1344 _rl_init_file_error ("$else found without matching $if");-
1345 return 0;
never executed: return 0;
0
1346 }-
1347-
1348#if 0-
1349 /* Check the previous (n - 1) levels of the stack to make sure that-
1350 we haven't previously turned off parsing. */-
1351 for (i = 0; i < if_stack_depth - 1; i++)-
1352#else-
1353 /* Check the previous (n) levels of the stack to make sure that-
1354 we haven't previously turned off parsing. */-
1355 for (i = 0; i < if_stack_depth; i++)
i < if_stack_depthDescription
TRUEnever evaluated
FALSEnever evaluated
0
1356#endif-
1357 if (if_stack[i] == 1)
if_stack[i] == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
1358 return 0;
never executed: return 0;
0
1359-
1360 /* Invert the state of parsing if at top level. */-
1361 _rl_parsing_conditionalized_out = !_rl_parsing_conditionalized_out;-
1362 return 0;
never executed: return 0;
0
1363}-
1364-
1365/* Terminate a conditional, popping the value of-
1366 _rl_parsing_conditionalized_out from the stack. */-
1367static int-
1368parser_endif (char *args)-
1369{-
1370 if (if_stack_depth)
if_stack_depthDescription
TRUEnever evaluated
FALSEnever evaluated
0
1371 _rl_parsing_conditionalized_out = if_stack[--if_stack_depth];
never executed: _rl_parsing_conditionalized_out = if_stack[--if_stack_depth];
0
1372 else-
1373 _rl_init_file_error ("$endif without matching $if");
never executed: _rl_init_file_error ("$endif without matching $if");
0
1374 return 0;
never executed: return 0;
0
1375}-
1376-
1377static int-
1378parser_include (char *args)-
1379{-
1380 const char *old_init_file;-
1381 char *e;-
1382 int old_line_number, old_include_level, r;-
1383-
1384 if (_rl_parsing_conditionalized_out)
_rl_parsing_co...tionalized_outDescription
TRUEnever evaluated
FALSEnever evaluated
0
1385 return (0);
never executed: return (0);
0
1386-
1387 old_init_file = current_readline_init_file;-
1388 old_line_number = current_readline_init_lineno;-
1389 old_include_level = current_readline_init_include_level;-
1390-
1391 e = strchr (args, '\n');
__builtin_constant_p ( '\n' )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_constant_p ( args )Description
TRUEnever evaluated
FALSEnever evaluated
( '\n' ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
1392 if (e)
eDescription
TRUEnever evaluated
FALSEnever evaluated
0
1393 *e = '\0';
never executed: *e = '\0';
0
1394 r = _rl_read_init_file ((const char *)args, old_include_level + 1);-
1395-
1396 current_readline_init_file = old_init_file;-
1397 current_readline_init_lineno = old_line_number;-
1398 current_readline_init_include_level = old_include_level;-
1399-
1400 return r;
never executed: return r;
0
1401}-
1402 -
1403/* Associate textual names with actual functions. */-
1404static const struct {-
1405 const char * const name;-
1406 _rl_parser_func_t *function;-
1407} parser_directives [] = {-
1408 { "if", parser_if },-
1409 { "endif", parser_endif },-
1410 { "else", parser_else },-
1411 { "include", parser_include },-
1412 { (char *)0x0, (_rl_parser_func_t *)0x0 }-
1413};-
1414-
1415/* Handle a parser directive. STATEMENT is the line of the directive-
1416 without any leading `$'. */-
1417static int-
1418handle_parser_directive (char *statement)-
1419{-
1420 register int i;-
1421 char *directive, *args;-
1422-
1423 /* Isolate the actual directive. */-
1424-
1425 /* Skip whitespace. */-
1426 for (i = 0; whitespace (statement[i]); i++);
never executed: ;
((statement[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((statement[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1427-
1428 directive = &statement[i];-
1429-
1430 for (; statement[i] && !whitespace (statement[i]); i++);
never executed: ;
statement[i]Description
TRUEnever evaluated
FALSEnever evaluated
((statement[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((statement[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1431-
1432 if (statement[i])
statement[i]Description
TRUEnever evaluated
FALSEnever evaluated
0
1433 statement[i++] = '\0';
never executed: statement[i++] = '\0';
0
1434-
1435 for (; statement[i] && whitespace (statement[i]); i++);
never executed: ;
statement[i]Description
TRUEnever evaluated
FALSEnever evaluated
((statement[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((statement[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1436-
1437 args = &statement[i];-
1438-
1439 /* Lookup the command, and act on it. */-
1440 for (i = 0; parser_directives[i].name; i++)
parser_directives[i].nameDescription
TRUEnever evaluated
FALSEnever evaluated
0
1441 if (_rl_stricmp (directive, parser_directives[i].name) == 0)
strcasecmp (di...[i].name) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1442 {-
1443 (*parser_directives[i].function) (args);-
1444 return (0);
never executed: return (0);
0
1445 }-
1446-
1447 /* display an error message about the unknown parser directive */-
1448 _rl_init_file_error ("%s: unknown parser directive", directive);-
1449 return (1);
never executed: return (1);
0
1450}-
1451-
1452/* Start at STRING[START] and look for DELIM. Return I where STRING[I] ==-
1453 DELIM or STRING[I] == 0. DELIM is usually a double quote. */-
1454static int-
1455_rl_skip_to_delim (char *string, int start, int delim)-
1456{-
1457 int i, c, passc;-
1458-
1459 for (i = start,passc = 0; c = string[i]; i++)
c = string[i]Description
TRUEnever evaluated
FALSEnever evaluated
0
1460 {-
1461 if (passc)
passcDescription
TRUEnever evaluated
FALSEnever evaluated
0
1462 {-
1463 passc = 0;-
1464 if (c == 0)
c == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1465 break;
never executed: break;
0
1466 continue;
never executed: continue;
0
1467 }-
1468-
1469 if (c == '\\')
c == '\\'Description
TRUEnever evaluated
FALSEnever evaluated
0
1470 {-
1471 passc = 1;-
1472 continue;
never executed: continue;
0
1473 }-
1474-
1475 if (c == delim)
c == delimDescription
TRUEnever evaluated
FALSEnever evaluated
0
1476 break;
never executed: break;
0
1477 }
never executed: end of block
0
1478-
1479 return i;
never executed: return i;
0
1480}-
1481-
1482/* Read the binding command from STRING and perform it.-
1483 A key binding command looks like: Keyname: function-name\0,-
1484 a variable binding command looks like: set variable value.-
1485 A new-style keybinding looks like "\C-x\C-x": exchange-point-and-mark. */-
1486int-
1487rl_parse_and_bind (char *string)-
1488{-
1489 char *funname, *kname;-
1490 register int c, i;-
1491 int key, equivalency, foundmod, foundsep;-
1492-
1493 while (string && whitespace (*string))
stringDescription
TRUEnever evaluated
FALSEnever evaluated
((*string) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((*string) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1494 string++;
never executed: string++;
0
1495-
1496 if (string == 0 || *string == 0 || *string == '#')
string == 0Description
TRUEnever evaluated
FALSEnever evaluated
*string == 0Description
TRUEnever evaluated
FALSEnever evaluated
*string == '#'Description
TRUEnever evaluated
FALSEnever evaluated
0
1497 return 0;
never executed: return 0;
0
1498-
1499 /* If this is a parser directive, act on it. */-
1500 if (*string == '$')
*string == '$'Description
TRUEnever evaluated
FALSEnever evaluated
0
1501 {-
1502 handle_parser_directive (&string[1]);-
1503 return 0;
never executed: return 0;
0
1504 }-
1505-
1506 /* If we aren't supposed to be parsing right now, then we're done. */-
1507 if (_rl_parsing_conditionalized_out)
_rl_parsing_co...tionalized_outDescription
TRUEnever evaluated
FALSEnever evaluated
0
1508 return 0;
never executed: return 0;
0
1509-
1510 i = 0;-
1511 /* If this keyname is a complex key expression surrounded by quotes,-
1512 advance to after the matching close quote. This code allows the-
1513 backslash to quote characters in the key expression. */-
1514 if (*string == '"')
*string == '"'Description
TRUEnever evaluated
FALSEnever evaluated
0
1515 {-
1516 i = _rl_skip_to_delim (string, 1, '"');-
1517-
1518 /* If we didn't find a closing quote, abort the line. */-
1519 if (string[i] == '\0')
string[i] == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
1520 {-
1521 _rl_init_file_error ("%s: no closing `\"' in key binding", string);-
1522 return 1;
never executed: return 1;
0
1523 }-
1524 else-
1525 i++; /* skip past closing double quote */
never executed: i++;
0
1526 }-
1527-
1528 /* Advance to the colon (:) or whitespace which separates the two objects. */-
1529 for (; (c = string[i]) && c != ':' && c != ' ' && c != '\t'; i++ );
never executed: ;
(c = string[i])Description
TRUEnever evaluated
FALSEnever evaluated
c != ':'Description
TRUEnever evaluated
FALSEnever evaluated
c != ' 'Description
TRUEnever evaluated
FALSEnever evaluated
c != '\t'Description
TRUEnever evaluated
FALSEnever evaluated
0
1530-
1531 if (i == 0)
i == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1532 {-
1533 _rl_init_file_error ("`%s': invalid key binding: missing key sequence", string);-
1534 return 1;
never executed: return 1;
0
1535 }-
1536-
1537 equivalency = (c == ':' && string[i + 1] == '=');
c == ':'Description
TRUEnever evaluated
FALSEnever evaluated
string[i + 1] == '='Description
TRUEnever evaluated
FALSEnever evaluated
0
1538-
1539 foundsep = c != 0;-
1540-
1541 /* Mark the end of the command (or keyname). */-
1542 if (string[i])
string[i]Description
TRUEnever evaluated
FALSEnever evaluated
0
1543 string[i++] = '\0';
never executed: string[i++] = '\0';
0
1544-
1545 /* If doing assignment, skip the '=' sign as well. */-
1546 if (equivalency)
equivalencyDescription
TRUEnever evaluated
FALSEnever evaluated
0
1547 string[i++] = '\0';
never executed: string[i++] = '\0';
0
1548-
1549 /* If this is a command to set a variable, then do that. */-
1550 if (_rl_stricmp (string, "set") == 0)
strcasecmp (st...g, "set") == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1551 {-
1552 char *var, *value, *e;-
1553 int s;-
1554-
1555 var = string + i;-
1556 /* Make VAR point to start of variable name. */-
1557 while (*var && whitespace (*var)) var++;
never executed: var++;
*varDescription
TRUEnever evaluated
FALSEnever evaluated
((*var) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((*var) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1558-
1559 /* Make VALUE point to start of value string. */-
1560 value = var;-
1561 while (*value && whitespace (*value) == 0) value++;
never executed: value++;
*valueDescription
TRUEnever evaluated
FALSEnever evaluated
(((*value) == ...== '\t')) == 0Description
TRUEnever evaluated
FALSEnever evaluated
((*value) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((*value) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1562 if (*value)
*valueDescription
TRUEnever evaluated
FALSEnever evaluated
0
1563 *value++ = '\0';
never executed: *value++ = '\0';
0
1564 while (*value && whitespace (*value)) value++;
never executed: value++;
*valueDescription
TRUEnever evaluated
FALSEnever evaluated
((*value) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((*value) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1565-
1566 /* Strip trailing whitespace from values of boolean variables. */-
1567 if (find_boolean_var (var) >= 0)
find_boolean_var (var) >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1568 {-
1569 /* remove trailing whitespace */-
1570remove_trailing:-
1571 e = value + strlen (value) - 1;-
1572 while (e >= value && whitespace (*e))
e >= valueDescription
TRUEnever evaluated
FALSEnever evaluated
((*e) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((*e) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1573 e--;
never executed: e--;
0
1574 e++; /* skip back to whitespace or EOS */-
1575 -
1576 if (*e && e >= value)
*eDescription
TRUEnever evaluated
FALSEnever evaluated
e >= valueDescription
TRUEnever evaluated
FALSEnever evaluated
0
1577 *e = '\0';
never executed: *e = '\0';
0
1578 }
never executed: end of block
0
1579 else if ((i = find_string_var (var)) >= 0)
(i = find_stri...ar (var)) >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1580 {-
1581 /* Allow quoted strings in variable values */-
1582 if (*value == '"')
*value == '"'Description
TRUEnever evaluated
FALSEnever evaluated
0
1583 {-
1584 i = _rl_skip_to_delim (value, 1, *value);-
1585 value[i] = '\0';-
1586 value++; /* skip past the quote */-
1587 }
never executed: end of block
0
1588 else-
1589 goto remove_trailing;
never executed: goto remove_trailing;
0
1590 }-
1591 -
1592 rl_variable_bind (var, value);-
1593 return 0;
never executed: return 0;
0
1594 }-
1595-
1596 /* Skip any whitespace between keyname and funname. */-
1597 for (; string[i] && whitespace (string[i]); i++);
never executed: ;
string[i]Description
TRUEnever evaluated
FALSEnever evaluated
((string[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((string[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1598 funname = &string[i];-
1599-
1600 /* Now isolate funname.-
1601 For straight function names just look for whitespace, since-
1602 that will signify the end of the string. But this could be a-
1603 macro definition. In that case, the string is quoted, so skip-
1604 to the matching delimiter. We allow the backslash to quote the-
1605 delimiter characters in the macro body. */-
1606 /* This code exists to allow whitespace in macro expansions, which-
1607 would otherwise be gobbled up by the next `for' loop.*/-
1608 /* XXX - it may be desirable to allow backslash quoting only if " is-
1609 the quoted string delimiter, like the shell. */-
1610 if (*funname == '\'' || *funname == '"')
*funname == '\''Description
TRUEnever evaluated
FALSEnever evaluated
*funname == '"'Description
TRUEnever evaluated
FALSEnever evaluated
0
1611 {-
1612 i = _rl_skip_to_delim (string, i+1, *funname);-
1613 if (string[i])
string[i]Description
TRUEnever evaluated
FALSEnever evaluated
0
1614 i++;
never executed: i++;
0
1615 else-
1616 {-
1617 _rl_init_file_error ("`%s': missing closing quote for macro", funname);-
1618 return 1;
never executed: return 1;
0
1619 }-
1620 }-
1621-
1622 /* Advance to the end of the string. */-
1623 for (; string[i] && whitespace (string[i]) == 0; i++);
never executed: ;
string[i]Description
TRUEnever evaluated
FALSEnever evaluated
(((string[i]) ...== '\t')) == 0Description
TRUEnever evaluated
FALSEnever evaluated
((string[i]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((string[i]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
1624-
1625 /* No extra whitespace at the end of the string. */-
1626 string[i] = '\0';-
1627-
1628 /* Handle equivalency bindings here. Make the left-hand side be exactly-
1629 whatever the right-hand evaluates to, including keymaps. */-
1630 if (equivalency)
equivalencyDescription
TRUEnever evaluated
FALSEnever evaluated
0
1631 {-
1632 return 0;
never executed: return 0;
0
1633 }-
1634-
1635 if (foundsep == 0)
foundsep == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1636 {-
1637 _rl_init_file_error ("%s: no key sequence terminator", string);-
1638 return 1;
never executed: return 1;
0
1639 }-
1640-
1641 /* If this is a new-style key-binding, then do the binding with-
1642 rl_bind_keyseq (). Otherwise, let the older code deal with it. */-
1643 if (*string == '"')
*string == '"'Description
TRUEnever evaluated
FALSEnever evaluated
0
1644 {-
1645 char *seq;-
1646 register int j, k, passc;-
1647-
1648 seq = (char *)xmalloc (1 + strlen (string));-
1649 for (j = 1, k = passc = 0; string[j]; j++)
string[j]Description
TRUEnever evaluated
FALSEnever evaluated
0
1650 {-
1651 /* Allow backslash to quote characters, but leave them in place.-
1652 This allows a string to end with a backslash quoting another-
1653 backslash, or with a backslash quoting a double quote. The-
1654 backslashes are left in place for rl_translate_keyseq (). */-
1655 if (passc || (string[j] == '\\'))
passcDescription
TRUEnever evaluated
FALSEnever evaluated
(string[j] == '\\')Description
TRUEnever evaluated
FALSEnever evaluated
0
1656 {-
1657 seq[k++] = string[j];-
1658 passc = !passc;-
1659 continue;
never executed: continue;
0
1660 }-
1661-
1662 if (string[j] == '"')
string[j] == '"'Description
TRUEnever evaluated
FALSEnever evaluated
0
1663 break;
never executed: break;
0
1664-
1665 seq[k++] = string[j];-
1666 }
never executed: end of block
0
1667 seq[k] = '\0';-
1668-
1669 /* Binding macro? */-
1670 if (*funname == '\'' || *funname == '"')
*funname == '\''Description
TRUEnever evaluated
FALSEnever evaluated
*funname == '"'Description
TRUEnever evaluated
FALSEnever evaluated
0
1671 {-
1672 j = strlen (funname);-
1673-
1674 /* Remove the delimiting quotes from each end of FUNNAME. */-
1675 if (j && funname[j - 1] == *funname)
jDescription
TRUEnever evaluated
FALSEnever evaluated
funname[j - 1] == *funnameDescription
TRUEnever evaluated
FALSEnever evaluated
0
1676 funname[j - 1] = '\0';
never executed: funname[j - 1] = '\0';
0
1677-
1678 rl_macro_bind (seq, &funname[1], _rl_keymap);-
1679 }
never executed: end of block
0
1680 else-
1681 rl_bind_keyseq (seq, rl_named_function (funname));
never executed: rl_bind_keyseq (seq, rl_named_function (funname));
0
1682-
1683 xfree (seq);-
1684 return 0;
never executed: return 0;
0
1685 }-
1686-
1687 /* Get the actual character we want to deal with. */-
1688 kname = strrchr (string, '-');-
1689 if (kname == 0)
kname == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1690 kname = string;
never executed: kname = string;
0
1691 else-
1692 kname++;
never executed: kname++;
0
1693-
1694 key = glean_key_from_name (kname);-
1695-
1696 /* Add in control and meta bits. */-
1697 foundmod = 0;-
1698 if (substring_member_of_array (string, _rl_possible_control_prefixes))
substring_memb...trol_prefixes)Description
TRUEnever evaluated
FALSEnever evaluated
0
1699 {-
1700 key = CTRL (_rl_to_upper (key));
never executed: end of block
never executed: __res = toupper ( (unsigned char)key );
never executed: __res = (*__ctype_toupper_loc ())[(int) ( (unsigned char)key )];
sizeof ( (unsi...char)key ) > 1Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...ned char)key )Description
TRUEnever evaluated
FALSEnever evaluated
((unsigned cha...key) == (key))Description
TRUEnever evaluated
FALSEnever evaluated
((*__ctype_b_l...int) _ISlower)Description
TRUEnever evaluated
FALSEnever evaluated
__c < -128Description
TRUEnever evaluated
FALSEnever evaluated
__c > 255Description
TRUEnever evaluated
FALSEnever evaluated
0
1701 foundmod = 1;-
1702 }
never executed: end of block
0
1703-
1704 if (substring_member_of_array (string, _rl_possible_meta_prefixes))
substring_memb...meta_prefixes)Description
TRUEnever evaluated
FALSEnever evaluated
0
1705 {-
1706 key = META (key);-
1707 foundmod = 1;-
1708 }
never executed: end of block
0
1709-
1710 if (foundmod == 0 && kname != string)
foundmod == 0Description
TRUEnever evaluated
FALSEnever evaluated
kname != stringDescription
TRUEnever evaluated
FALSEnever evaluated
0
1711 {-
1712 _rl_init_file_error ("%s: unknown key modifier", string);-
1713 return 1;
never executed: return 1;
0
1714 }-
1715-
1716 /* Temporary. Handle old-style keyname with macro-binding. */-
1717 if (*funname == '\'' || *funname == '"')
*funname == '\''Description
TRUEnever evaluated
FALSEnever evaluated
*funname == '"'Description
TRUEnever evaluated
FALSEnever evaluated
0
1718 {-
1719 char useq[2];-
1720 int fl = strlen (funname);-
1721-
1722 useq[0] = key; useq[1] = '\0';-
1723 if (fl && funname[fl - 1] == *funname)
flDescription
TRUEnever evaluated
FALSEnever evaluated
funname[fl - 1] == *funnameDescription
TRUEnever evaluated
FALSEnever evaluated
0
1724 funname[fl - 1] = '\0';
never executed: funname[fl - 1] = '\0';
0
1725-
1726 rl_macro_bind (useq, &funname[1], _rl_keymap);-
1727 }
never executed: end of block
0
1728#if defined (PREFIX_META_HACK)-
1729 /* Ugly, but working hack to keep prefix-meta around. */-
1730 else if (_rl_stricmp (funname, "prefix-meta") == 0)
strcasecmp (fu...ix-meta") == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1731 {-
1732 char seq[2];-
1733-
1734 seq[0] = key;-
1735 seq[1] = '\0';-
1736 rl_generic_bind (ISKMAP, seq, (char *)emacs_meta_keymap, _rl_keymap);-
1737 }
never executed: end of block
0
1738#endif /* PREFIX_META_HACK */-
1739 else-
1740 rl_bind_key (key, rl_named_function (funname));
never executed: rl_bind_key (key, rl_named_function (funname));
0
1741-
1742 return 0;
never executed: return 0;
0
1743}-
1744-
1745/* Simple structure for boolean readline variables (i.e., those that can-
1746 have one of two values; either "On" or 1 for truth, or "Off" or 0 for-
1747 false. */-
1748-
1749#define V_SPECIAL 0x1-
1750-
1751static const struct {-
1752 const char * const name;-
1753 int *value;-
1754 int flags;-
1755} boolean_varlist [] = {-
1756 { "bind-tty-special-chars", &_rl_bind_stty_chars, 0 },-
1757 { "blink-matching-paren", &rl_blink_matching_paren, V_SPECIAL },-
1758 { "byte-oriented", &rl_byte_oriented, 0 },-
1759#if defined (COLOR_SUPPORT)-
1760 { "colored-completion-prefix",&_rl_colored_completion_prefix, 0 },-
1761 { "colored-stats", &_rl_colored_stats, 0 },-
1762#endif-
1763 { "completion-ignore-case", &_rl_completion_case_fold, 0 },-
1764 { "completion-map-case", &_rl_completion_case_map, 0 },-
1765 { "convert-meta", &_rl_convert_meta_chars_to_ascii, 0 },-
1766 { "disable-completion", &rl_inhibit_completion, 0 },-
1767 { "echo-control-characters", &_rl_echo_control_chars, 0 },-
1768 { "enable-bracketed-paste", &_rl_enable_bracketed_paste, 0 },-
1769 { "enable-keypad", &_rl_enable_keypad, 0 },-
1770 { "enable-meta-key", &_rl_enable_meta, 0 },-
1771 { "expand-tilde", &rl_complete_with_tilde_expansion, 0 },-
1772 { "history-preserve-point", &_rl_history_preserve_point, 0 },-
1773 { "horizontal-scroll-mode", &_rl_horizontal_scroll_mode, 0 },-
1774 { "input-meta", &_rl_meta_flag, 0 },-
1775 { "mark-directories", &_rl_complete_mark_directories, 0 },-
1776 { "mark-modified-lines", &_rl_mark_modified_lines, 0 },-
1777 { "mark-symlinked-directories", &_rl_complete_mark_symlink_dirs, 0 },-
1778 { "match-hidden-files", &_rl_match_hidden_files, 0 },-
1779 { "menu-complete-display-prefix", &_rl_menu_complete_prefix_first, 0 },-
1780 { "meta-flag", &_rl_meta_flag, 0 },-
1781 { "output-meta", &_rl_output_meta_chars, 0 },-
1782 { "page-completions", &_rl_page_completions, 0 },-
1783 { "prefer-visible-bell", &_rl_prefer_visible_bell, V_SPECIAL },-
1784 { "print-completions-horizontally", &_rl_print_completions_horizontally, 0 },-
1785 { "revert-all-at-newline", &_rl_revert_all_at_newline, 0 },-
1786 { "show-all-if-ambiguous", &_rl_complete_show_all, 0 },-
1787 { "show-all-if-unmodified", &_rl_complete_show_unmodified, 0 },-
1788 { "show-mode-in-prompt", &_rl_show_mode_in_prompt, 0 },-
1789 { "skip-completed-text", &_rl_skip_completed_text, 0 },-
1790#if defined (VISIBLE_STATS)-
1791 { "visible-stats", &rl_visible_stats, 0 },-
1792#endif /* VISIBLE_STATS */-
1793 { (char *)NULL, (int *)NULL, 0 }-
1794};-
1795-
1796static int-
1797find_boolean_var (const char *name)-
1798{-
1799 register int i;-
1800-
1801 for (i = 0; boolean_varlist[i].name; i++)
boolean_varlist[i].nameDescription
TRUEevaluated 33 times by 1 test
Evaluated by:
  • Self test
FALSEevaluated 1 time by 1 test
Evaluated by:
  • Self test
1-33
1802 if (_rl_stricmp (name, boolean_varlist[i].name) == 0)
strcasecmp (na...[i].name) == 0Description
TRUEnever evaluated
FALSEevaluated 33 times by 1 test
Evaluated by:
  • Self test
0-33
1803 return i;
never executed: return i;
0
1804 return -1;
executed 1 time by 1 test: return -1;
Executed by:
  • Self test
1
1805}-
1806-
1807static const char *-
1808boolean_varname (int i)-
1809{-
1810 return ((i >= 0) ? boolean_varlist[i].name : (char *)NULL);
never executed: return ((i >= 0) ? boolean_varlist[i].name : (char *) ((void *)0) );
0
1811} -
1812-
1813/* Hooks for handling special boolean variables, where a-
1814 function needs to be called or another variable needs-
1815 to be changed when they're changed. */-
1816static void-
1817hack_special_boolean_var (int i)-
1818{-
1819 const char *name;-
1820-
1821 name = boolean_varlist[i].name;-
1822-
1823 if (_rl_stricmp (name, "blink-matching-paren") == 0)
strcasecmp (na...g-paren") == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1824 _rl_enable_paren_matching (rl_blink_matching_paren);
never executed: _rl_enable_paren_matching (rl_blink_matching_paren);
0
1825 else if (_rl_stricmp (name, "prefer-visible-bell") == 0)
strcasecmp (na...le-bell") == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1826 {-
1827 if (_rl_prefer_visible_bell)
_rl_prefer_visible_bellDescription
TRUEnever evaluated
FALSEnever evaluated
0
1828 _rl_bell_preference = VISIBLE_BELL;
never executed: _rl_bell_preference = 2;
0
1829 else-
1830 _rl_bell_preference = AUDIBLE_BELL;
never executed: _rl_bell_preference = 1;
0
1831 }-
1832 else if (_rl_stricmp (name, "show-mode-in-prompt") == 0)
strcasecmp (na...-prompt") == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1833 _rl_reset_prompt ();
never executed: _rl_reset_prompt ();
0
1834}
never executed: end of block
0
1835-
1836typedef int _rl_sv_func_t PARAMS((const char *));-
1837-
1838/* These *must* correspond to the array indices for the appropriate-
1839 string variable. (Though they're not used right now.) */-
1840#define V_BELLSTYLE 0-
1841#define V_COMBEGIN 1-
1842#define V_EDITMODE 2-
1843#define V_ISRCHTERM 3-
1844#define V_KEYMAP 4-
1845-
1846#define V_STRING 1-
1847#define V_INT 2-
1848-
1849/* Forward declarations */-
1850static int sv_bell_style PARAMS((const char *));-
1851static int sv_combegin PARAMS((const char *));-
1852static int sv_dispprefix PARAMS((const char *));-
1853static int sv_compquery PARAMS((const char *));-
1854static int sv_compwidth PARAMS((const char *));-
1855static int sv_editmode PARAMS((const char *));-
1856static int sv_emacs_modestr PARAMS((const char *));-
1857static int sv_histsize PARAMS((const char *));-
1858static int sv_isrchterm PARAMS((const char *));-
1859static int sv_keymap PARAMS((const char *));-
1860static int sv_seqtimeout PARAMS((const char *));-
1861static int sv_viins_modestr PARAMS((const char *));-
1862static int sv_vicmd_modestr PARAMS((const char *));-
1863-
1864static const struct {-
1865 const char * const name;-
1866 int flags;-
1867 _rl_sv_func_t *set_func;-
1868} string_varlist[] = {-
1869 { "bell-style", V_STRING, sv_bell_style },-
1870 { "comment-begin", V_STRING, sv_combegin },-
1871 { "completion-display-width", V_INT, sv_compwidth },-
1872 { "completion-prefix-display-length", V_INT, sv_dispprefix },-
1873 { "completion-query-items", V_INT, sv_compquery },-
1874 { "editing-mode", V_STRING, sv_editmode },-
1875 { "emacs-mode-string", V_STRING, sv_emacs_modestr }, -
1876 { "history-size", V_INT, sv_histsize },-
1877 { "isearch-terminators", V_STRING, sv_isrchterm },-
1878 { "keymap", V_STRING, sv_keymap },-
1879 { "keyseq-timeout", V_INT, sv_seqtimeout },-
1880 { "vi-cmd-mode-string", V_STRING, sv_vicmd_modestr }, -
1881 { "vi-ins-mode-string", V_STRING, sv_viins_modestr }, -
1882 { (char *)NULL, 0, (_rl_sv_func_t *)0 }-
1883};-
1884-
1885static int-
1886find_string_var (const char *name)-
1887{-
1888 register int i;-
1889-
1890 for (i = 0; string_varlist[i].name; i++)
string_varlist[i].nameDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • Self test
FALSEnever evaluated
0-6
1891 if (_rl_stricmp (name, string_varlist[i].name) == 0)
strcasecmp (na...[i].name) == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • Self test
FALSEevaluated 5 times by 1 test
Evaluated by:
  • Self test
1-5
1892 return i;
executed 1 time by 1 test: return i;
Executed by:
  • Self test
1
1893 return -1;
never executed: return -1;
0
1894}-
1895-
1896static const char *-