OpenCoverage

kill.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/bash/src/lib/readline/kill.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* kill.c -- kill ring management. */-
2-
3/* Copyright (C) 1994-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 (HAVE_CONFIG_H)-
25# include <config.h>-
26#endif-
27-
28#include <sys/types.h>-
29-
30#if defined (HAVE_UNISTD_H)-
31# include <unistd.h> /* for _POSIX_VERSION */-
32#endif /* HAVE_UNISTD_H */-
33-
34#if defined (HAVE_STDLIB_H)-
35# include <stdlib.h>-
36#else-
37# include "ansi_stdlib.h"-
38#endif /* HAVE_STDLIB_H */-
39-
40#include <stdio.h>-
41-
42/* System-specific feature definitions and include files. */-
43#include "rldefs.h"-
44-
45/* Some standard library routines. */-
46#include "readline.h"-
47#include "history.h"-
48-
49#include "rlprivate.h"-
50#include "xmalloc.h"-
51-
52/* **************************************************************** */-
53/* */-
54/* Killing Mechanism */-
55/* */-
56/* **************************************************************** */-
57-
58/* What we assume for a max number of kills. */-
59#define DEFAULT_MAX_KILLS 10-
60-
61/* The real variable to look at to find out when to flush kills. */-
62static int rl_max_kills = DEFAULT_MAX_KILLS;-
63-
64/* Where to store killed text. */-
65static char **rl_kill_ring = (char **)NULL;-
66-
67/* Where we are in the kill ring. */-
68static int rl_kill_index;-
69-
70/* How many slots we have in the kill ring. */-
71static int rl_kill_ring_length;-
72-
73static int _rl_copy_to_kill_ring PARAMS((char *, int));-
74static int region_kill_internal PARAMS((int));-
75static int _rl_copy_word_as_kill PARAMS((int, int));-
76static int rl_yank_nth_arg_internal PARAMS((int, int, int));-
77-
78/* How to say that you only want to save a certain amount-
79 of kill material. */-
80int-
81rl_set_retained_kills (int num)-
82{-
83 return 0;
never executed: return 0;
0
84}-
85-
86/* Add TEXT to the kill ring, allocating a new kill ring slot as necessary.-
87 This uses TEXT directly, so the caller must not free it. If APPEND is-
88 non-zero, and the last command was a kill, the text is appended to the-
89 current kill ring slot, otherwise prepended. */-
90static int-
91_rl_copy_to_kill_ring (char *text, int append)-
92{-
93 char *old, *new;-
94 int slot;-
95-
96 /* First, find the slot to work with. */-
97 if (_rl_last_command_was_kill == 0 || rl_kill_ring == 0)
_rl_last_command_was_kill == 0Description
TRUEnever evaluated
FALSEnever evaluated
rl_kill_ring == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
98 {-
99 /* Get a new slot. */-
100 if (rl_kill_ring == 0)
rl_kill_ring == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
101 {-
102 /* If we don't have any defined, then make one. */-
103 rl_kill_ring = (char **)-
104 xmalloc (((rl_kill_ring_length = 1) + 1) * sizeof (char *));-
105 rl_kill_ring[slot = 0] = (char *)NULL;-
106 }
never executed: end of block
0
107 else-
108 {-
109 /* We have to add a new slot on the end, unless we have-
110 exceeded the max limit for remembering kills. */-
111 slot = rl_kill_ring_length;-
112 if (slot == rl_max_kills)
slot == rl_max_killsDescription
TRUEnever evaluated
FALSEnever evaluated
0
113 {-
114 register int i;-
115 xfree (rl_kill_ring[0]);-
116 for (i = 0; i < slot; i++)
i < slotDescription
TRUEnever evaluated
FALSEnever evaluated
0
117 rl_kill_ring[i] = rl_kill_ring[i + 1];
never executed: rl_kill_ring[i] = rl_kill_ring[i + 1];
0
118 }
never executed: end of block
0
119 else-
120 {-
121 slot = rl_kill_ring_length += 1;-
122 rl_kill_ring = (char **)xrealloc (rl_kill_ring, (slot + 1) * sizeof (char *));-
123 }
never executed: end of block
0
124 rl_kill_ring[--slot] = (char *)NULL;-
125 }
never executed: end of block
0
126 }-
127 else-
128 slot = rl_kill_ring_length - 1;
never executed: slot = rl_kill_ring_length - 1;
0
129-
130 /* If the last command was a kill, prepend or append. */-
131 if (_rl_last_command_was_kill && rl_kill_ring[slot] && rl_editing_mode != vi_mode)
_rl_last_command_was_killDescription
TRUEnever evaluated
FALSEnever evaluated
rl_kill_ring[slot]Description
TRUEnever evaluated
FALSEnever evaluated
rl_editing_mode != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
132 {-
133 old = rl_kill_ring[slot];-
134 new = (char *)xmalloc (1 + strlen (old) + strlen (text));-
135-
136 if (append)
appendDescription
TRUEnever evaluated
FALSEnever evaluated
0
137 {-
138 strcpy (new, old);-
139 strcat (new, text);-
140 }
never executed: end of block
0
141 else-
142 {-
143 strcpy (new, text);-
144 strcat (new, old);-
145 }
never executed: end of block
0
146 xfree (old);-
147 xfree (text);-
148 rl_kill_ring[slot] = new;-
149 }
never executed: end of block
0
150 else-
151 rl_kill_ring[slot] = text;
never executed: rl_kill_ring[slot] = text;
0
152-
153 rl_kill_index = slot;-
154 return 0;
never executed: return 0;
0
155}-
156-
157/* The way to kill something. This appends or prepends to the last-
158 kill, if the last command was a kill command. if FROM is less-
159 than TO, then the text is appended, otherwise prepended. If the-
160 last command was not a kill command, then a new slot is made for-
161 this kill. */-
162int-
163rl_kill_text (int from, int to)-
164{-
165 char *text;-
166-
167 /* Is there anything to kill? */-
168 if (from == to)
from == toDescription
TRUEnever evaluated
FALSEnever evaluated
0
169 {-
170 _rl_last_command_was_kill++;-
171 return 0;
never executed: return 0;
0
172 }-
173-
174 text = rl_copy_text (from, to);-
175-
176 /* Delete the copied text from the line. */-
177 rl_delete_text (from, to);-
178-
179 _rl_copy_to_kill_ring (text, from < to);-
180-
181 _rl_last_command_was_kill++;-
182 return 0;
never executed: return 0;
0
183}-
184-
185/* Now REMEMBER! In order to do prepending or appending correctly, kill-
186 commands always make rl_point's original position be the FROM argument,-
187 and rl_point's extent be the TO argument. */-
188-
189/* **************************************************************** */-
190/* */-
191/* Killing Commands */-
192/* */-
193/* **************************************************************** */-
194-
195/* Delete the word at point, saving the text in the kill ring. */-
196int-
197rl_kill_word (int count, int key)-
198{-
199 int orig_point;-
200-
201 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
202 return (rl_backward_kill_word (-count, key));
never executed: return (rl_backward_kill_word (-count, key));
0
203 else-
204 {-
205 orig_point = rl_point;-
206 rl_forward_word (count, key);-
207-
208 if (rl_point != orig_point)
rl_point != orig_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
209 rl_kill_text (orig_point, rl_point);
never executed: rl_kill_text (orig_point, rl_point);
0
210-
211 rl_point = orig_point;-
212 if (rl_editing_mode == emacs_mode)
rl_editing_mode == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
213 rl_mark = rl_point;
never executed: rl_mark = rl_point;
0
214 }
never executed: end of block
0
215 return 0;
never executed: return 0;
0
216}-
217-
218/* Rubout the word before point, placing it on the kill ring. */-
219int-
220rl_backward_kill_word (int count, int key)-
221{-
222 int orig_point;-
223-
224 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
225 return (rl_kill_word (-count, key));
never executed: return (rl_kill_word (-count, key));
0
226 else-
227 {-
228 orig_point = rl_point;-
229 rl_backward_word (count, key);-
230-
231 if (rl_point != orig_point)
rl_point != orig_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
232 rl_kill_text (orig_point, rl_point);
never executed: rl_kill_text (orig_point, rl_point);
0
233-
234 if (rl_editing_mode == emacs_mode)
rl_editing_mode == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
235 rl_mark = rl_point;
never executed: rl_mark = rl_point;
0
236 }
never executed: end of block
0
237 return 0;
never executed: return 0;
0
238}-
239-
240/* Kill from here to the end of the line. If DIRECTION is negative, kill-
241 back to the line start instead. */-
242int-
243rl_kill_line (int direction, int key)-
244{-
245 int orig_point;-
246-
247 if (direction < 0)
direction < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
248 return (rl_backward_kill_line (1, key));
never executed: return (rl_backward_kill_line (1, key));
0
249 else-
250 {-
251 orig_point = rl_point;-
252 rl_end_of_line (1, key);-
253 if (orig_point != rl_point)
orig_point != rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
254 rl_kill_text (orig_point, rl_point);
never executed: rl_kill_text (orig_point, rl_point);
0
255 rl_point = orig_point;-
256 if (rl_editing_mode == emacs_mode)
rl_editing_mode == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
257 rl_mark = rl_point;
never executed: rl_mark = rl_point;
0
258 }
never executed: end of block
0
259 return 0;
never executed: return 0;
0
260}-
261-
262/* Kill backwards to the start of the line. If DIRECTION is negative, kill-
263 forwards to the line end instead. */-
264int-
265rl_backward_kill_line (int direction, int key)-
266{-
267 int orig_point;-
268-
269 if (direction < 0)
direction < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
270 return (rl_kill_line (1, key));
never executed: return (rl_kill_line (1, key));
0
271 else-
272 {-
273 if (rl_point == 0)
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
274 rl_ding ();
never executed: rl_ding ();
0
275 else-
276 {-
277 orig_point = rl_point;-
278 rl_beg_of_line (1, key);-
279 if (rl_point != orig_point)
rl_point != orig_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
280 rl_kill_text (orig_point, rl_point);
never executed: rl_kill_text (orig_point, rl_point);
0
281 if (rl_editing_mode == emacs_mode)
rl_editing_mode == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
282 rl_mark = rl_point;
never executed: rl_mark = rl_point;
0
283 }
never executed: end of block
0
284 }-
285 return 0;
never executed: return 0;
0
286}-
287-
288/* Kill the whole line, no matter where point is. */-
289int-
290rl_kill_full_line (int count, int key)-
291{-
292 rl_begin_undo_group ();-
293 rl_point = 0;-
294 rl_kill_text (rl_point, rl_end);-
295 rl_mark = 0;-
296 rl_end_undo_group ();-
297 return 0;
never executed: return 0;
0
298}-
299-
300/* The next two functions mimic unix line editing behaviour, except they-
301 save the deleted text on the kill ring. This is safer than not saving-
302 it, and since we have a ring, nobody should get screwed. */-
303-
304/* This does what C-w does in Unix. We can't prevent people from-
305 using behaviour that they expect. */-
306int-
307rl_unix_word_rubout (int count, int key)-
308{-
309 int orig_point;-
310-
311 if (rl_point == 0)
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
312 rl_ding ();
never executed: rl_ding ();
0
313 else-
314 {-
315 orig_point = rl_point;-
316 if (count <= 0)
count <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
317 count = 1;
never executed: count = 1;
0
318-
319 while (count--)
count--Description
TRUEnever evaluated
FALSEnever evaluated
0
320 {-
321 while (rl_point && whitespace (rl_line_buffer[rl_point - 1]))
rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff... - 1]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...- 1]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
322 rl_point--;
never executed: rl_point--;
0
323-
324 while (rl_point && (whitespace (rl_line_buffer[rl_point - 1]) == 0))
rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
((((rl_line_bu...= '\t')) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff... - 1]) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...- 1]) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
0
325 rl_point--;
never executed: rl_point--;
0
326 }
never executed: end of block
0
327-
328 rl_kill_text (orig_point, rl_point);-
329 if (rl_editing_mode == emacs_mode)
rl_editing_mode == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
330 rl_mark = rl_point;
never executed: rl_mark = rl_point;
0
331 }
never executed: end of block
0
332-
333 return 0;
never executed: return 0;
0
334}-
335-
336/* This deletes one filename component in a Unix pathname. That is, it-
337 deletes backward to directory separator (`/') or whitespace. */-
338int-
339rl_unix_filename_rubout (int count, int key)-
340{-
341 int orig_point, c;-
342-
343 if (rl_point == 0)
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
344 rl_ding ();
never executed: rl_ding ();
0
345 else-
346 {-
347 orig_point = rl_point;-
348 if (count <= 0)
count <= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
349 count = 1;
never executed: count = 1;
0
350-
351 while (count--)
count--Description
TRUEnever evaluated
FALSEnever evaluated
0
352 {-
353 c = rl_line_buffer[rl_point - 1];-
354 while (rl_point && (whitespace (c) || c == '/'))
rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
((c) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((c) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
c == '/'Description
TRUEnever evaluated
FALSEnever evaluated
0
355 {-
356 rl_point--;-
357 c = rl_line_buffer[rl_point - 1];-
358 }
never executed: end of block
0
359-
360 while (rl_point && (whitespace (c) == 0) && c != '/')
rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
((((c) == ' ')...= '\t')) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
((c) == ' ')Description
TRUEnever evaluated
FALSEnever evaluated
((c) == '\t')Description
TRUEnever evaluated
FALSEnever evaluated
c != '/'Description
TRUEnever evaluated
FALSEnever evaluated
0
361 {-
362 rl_point--;-
363 c = rl_line_buffer[rl_point - 1];-
364 }
never executed: end of block
0
365 }
never executed: end of block
0
366-
367 rl_kill_text (orig_point, rl_point);-
368 if (rl_editing_mode == emacs_mode)
rl_editing_mode == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
369 rl_mark = rl_point;
never executed: rl_mark = rl_point;
0
370 }
never executed: end of block
0
371-
372 return 0;
never executed: return 0;
0
373}-
374-
375/* Here is C-u doing what Unix does. You don't *have* to use these-
376 key-bindings. We have a choice of killing the entire line, or-
377 killing from where we are to the start of the line. We choose the-
378 latter, because if you are a Unix weenie, then you haven't backspaced-
379 into the line at all, and if you aren't, then you know what you are-
380 doing. */-
381int-
382rl_unix_line_discard (int count, int key)-
383{-
384 if (rl_point == 0)
rl_point == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
385 rl_ding ();
never executed: rl_ding ();
0
386 else-
387 {-
388 rl_kill_text (rl_point, 0);-
389 rl_point = 0;-
390 if (rl_editing_mode == emacs_mode)
rl_editing_mode == 1Description
TRUEnever evaluated
FALSEnever evaluated
0
391 rl_mark = rl_point;
never executed: rl_mark = rl_point;
0
392 }
never executed: end of block
0
393 return 0;
never executed: return 0;
0
394}-
395-
396/* Copy the text in the `region' to the kill ring. If DELETE is non-zero,-
397 delete the text from the line as well. */-
398static int-
399region_kill_internal (int delete)-
400{-
401 char *text;-
402-
403 if (rl_mark != rl_point)
rl_mark != rl_pointDescription
TRUEnever evaluated
FALSEnever evaluated
0
404 {-
405 text = rl_copy_text (rl_point, rl_mark);-
406 if (delete)
deleteDescription
TRUEnever evaluated
FALSEnever evaluated
0
407 rl_delete_text (rl_point, rl_mark);
never executed: rl_delete_text (rl_point, rl_mark);
0
408 _rl_copy_to_kill_ring (text, rl_point < rl_mark);-
409 }
never executed: end of block
0
410-
411 _rl_last_command_was_kill++;-
412 return 0;
never executed: return 0;
0
413}-
414-
415/* Copy the text in the region to the kill ring. */-
416int-
417rl_copy_region_to_kill (int count, int key)-
418{-
419 return (region_kill_internal (0));
never executed: return (region_kill_internal (0));
0
420}-
421-
422/* Kill the text between the point and mark. */-
423int-
424rl_kill_region (int count, int key)-
425{-
426 int r, npoint;-
427-
428 npoint = (rl_point < rl_mark) ? rl_point : rl_mark;
(rl_point < rl_mark)Description
TRUEnever evaluated
FALSEnever evaluated
0
429 r = region_kill_internal (1);-
430 _rl_fix_point (1);-
431 rl_point = npoint;-
432 return r;
never executed: return r;
0
433}-
434-
435/* Copy COUNT words to the kill ring. DIR says which direction we look-
436 to find the words. */-
437static int-
438_rl_copy_word_as_kill (int count, int dir)-
439{-
440 int om, op, r;-
441-
442 om = rl_mark;-
443 op = rl_point;-
444-
445 if (dir > 0)
dir > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
446 rl_forward_word (count, 0);
never executed: rl_forward_word (count, 0);
0
447 else-
448 rl_backward_word (count, 0);
never executed: rl_backward_word (count, 0);
0
449-
450 rl_mark = rl_point;-
451-
452 if (dir > 0)
dir > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
453 rl_backward_word (count, 0);
never executed: rl_backward_word (count, 0);
0
454 else-
455 rl_forward_word (count, 0);
never executed: rl_forward_word (count, 0);
0
456-
457 r = region_kill_internal (0);-
458-
459 rl_mark = om;-
460 rl_point = op;-
461-
462 return r;
never executed: return r;
0
463}-
464-
465int-
466rl_copy_forward_word (int count, int key)-
467{-
468 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
469 return (rl_copy_backward_word (-count, key));
never executed: return (rl_copy_backward_word (-count, key));
0
470-
471 return (_rl_copy_word_as_kill (count, 1));
never executed: return (_rl_copy_word_as_kill (count, 1));
0
472}-
473-
474int-
475rl_copy_backward_word (int count, int key)-
476{-
477 if (count < 0)
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
478 return (rl_copy_forward_word (-count, key));
never executed: return (rl_copy_forward_word (-count, key));
0
479-
480 return (_rl_copy_word_as_kill (count, -1));
never executed: return (_rl_copy_word_as_kill (count, -1));
0
481}-
482 -
483/* Yank back the last killed text. This ignores arguments. */-
484int-
485rl_yank (int count, int key)-
486{-
487 if (rl_kill_ring == 0)
rl_kill_ring == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
488 {-
489 _rl_abort_internal ();-
490 return 1;
never executed: return 1;
0
491 }-
492-
493 _rl_set_mark_at_pos (rl_point);-
494 rl_insert_text (rl_kill_ring[rl_kill_index]);-
495 return 0;
never executed: return 0;
0
496}-
497-
498/* If the last command was yank, or yank_pop, and the text just-
499 before point is identical to the current kill item, then-
500 delete that text from the line, rotate the index down, and-
501 yank back some other text. */-
502int-
503rl_yank_pop (int count, int key)-
504{-
505 int l, n;-
506-
507 if (((rl_last_func != rl_yank_pop) && (rl_last_func != rl_yank)) ||
(rl_last_func != rl_yank_pop)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_last_func != rl_yank)Description
TRUEnever evaluated
FALSEnever evaluated
0
508 !rl_kill_ring)
!rl_kill_ringDescription
TRUEnever evaluated
FALSEnever evaluated
0
509 {-
510 _rl_abort_internal ();-
511 return 1;
never executed: return 1;
0
512 }-
513-
514 l = strlen (rl_kill_ring[rl_kill_index]);-
515 n = rl_point - l;-
516 if (n >= 0 && STREQN (rl_line_buffer + n, rl_kill_ring[rl_kill_index], l))
never executed: __result = (((const unsigned char *) (const char *) ( (rl_line_buffer + n) ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( (rl_kill_ring[rl_kill_index]) ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
((l) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
n >= 0Description
TRUEnever evaluated
FALSEnever evaluated
(((l) == 0) ? ...(l) ))) == 0))Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...ll_index])[0])Description
TRUEnever evaluated
FALSEnever evaluated
( (__extension... (l) ))) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( (l) )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons..._buffer + n) )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( (rl_l...ze_t) ( (l) ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...kill_index]) )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( (rl_k...ze_t) ( (l) ))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
517 {-
518 rl_delete_text (n, rl_point);-
519 rl_point = n;-
520 rl_kill_index--;-
521 if (rl_kill_index < 0)
rl_kill_index < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
522 rl_kill_index = rl_kill_ring_length - 1;
never executed: rl_kill_index = rl_kill_ring_length - 1;
0
523 rl_yank (1, 0);-
524 return 0;
never executed: return 0;
0
525 }-
526 else-
527 {-
528 _rl_abort_internal ();-
529 return 1;
never executed: return 1;
0
530 }-
531}-
532-
533#if defined (VI_MODE)-
534int-
535rl_vi_yank_pop (int count, int key)-
536{-
537 int l, n;-
538-
539 if (((rl_last_func != rl_vi_yank_pop) && (rl_last_func != rl_vi_put)) ||
(rl_last_func ...l_vi_yank_pop)Description
TRUEnever evaluated
FALSEnever evaluated
(rl_last_func != rl_vi_put)Description
TRUEnever evaluated
FALSEnever evaluated
0
540 !rl_kill_ring)
!rl_kill_ringDescription
TRUEnever evaluated
FALSEnever evaluated
0
541 {-
542 _rl_abort_internal ();-
543 return 1;
never executed: return 1;
0
544 }-
545-
546 l = strlen (rl_kill_ring[rl_kill_index]);-
547 n = rl_point - l;-
548 if (n >= 0 && STREQN (rl_line_buffer + n, rl_kill_ring[rl_kill_index], l))
never executed: __result = (((const unsigned char *) (const char *) ( (rl_line_buffer + n) ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( (rl_kill_ring[rl_kill_index]) ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
((l) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
n >= 0Description
TRUEnever evaluated
FALSEnever evaluated
(((l) == 0) ? ...(l) ))) == 0))Description
TRUEnever evaluated
FALSEnever evaluated
((rl_line_buff...ll_index])[0])Description
TRUEnever evaluated
FALSEnever evaluated
( (__extension... (l) ))) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( (l) )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons..._buffer + n) )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( (rl_l...ze_t) ( (l) ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...kill_index]) )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( (rl_k...ze_t) ( (l) ))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
549 {-
550 rl_delete_text (n, rl_point);-
551 rl_point = n;-
552 rl_kill_index--;-
553 if (rl_kill_index < 0)
rl_kill_index < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
554 rl_kill_index = rl_kill_ring_length - 1;
never executed: rl_kill_index = rl_kill_ring_length - 1;
0
555 rl_vi_put (1, 'p');-
556 return 0;
never executed: return 0;
0
557 }-
558 else-
559 {-
560 _rl_abort_internal ();-
561 return 1;
never executed: return 1;
0
562 }-
563}-
564#endif /* VI_MODE */-
565-
566/* Yank the COUNTh argument from the previous history line, skipping-
567 HISTORY_SKIP lines before looking for the `previous line'. */-
568static int-
569rl_yank_nth_arg_internal (int count, int key, int history_skip)-
570{-
571 register HIST_ENTRY *entry;-
572 char *arg;-
573 int i, pos;-
574-
575 pos = where_history ();-
576-
577 if (history_skip)
history_skipDescription
TRUEnever evaluated
FALSEnever evaluated
0
578 {-
579 for (i = 0; i < history_skip; i++)
i < history_skipDescription
TRUEnever evaluated
FALSEnever evaluated
0
580 entry = previous_history ();
never executed: entry = previous_history ();
0
581 }
never executed: end of block
0
582-
583 entry = previous_history ();-
584-
585 history_set_pos (pos);-
586-
587 if (entry == 0)
entry == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
588 {-
589 rl_ding ();-
590 return 1;
never executed: return 1;
0
591 }-
592-
593 arg = history_arg_extract (count, count, entry->line);-
594 if (!arg || !*arg)
!argDescription
TRUEnever evaluated
FALSEnever evaluated
!*argDescription
TRUEnever evaluated
FALSEnever evaluated
0
595 {-
596 rl_ding ();-
597 FREE (arg);
never executed: free (arg);
argDescription
TRUEnever evaluated
FALSEnever evaluated
0
598 return 1;
never executed: return 1;
0
599 }-
600-
601 rl_begin_undo_group ();-
602-
603 _rl_set_mark_at_pos (rl_point);-
604-
605#if defined (VI_MODE)-
606 /* Vi mode always inserts a space before yanking the argument, and it-
607 inserts it right *after* rl_point. */-
608 if (rl_editing_mode == vi_mode)
rl_editing_mode == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
609 {-
610 rl_vi_append_mode (1, key);-
611 rl_insert_text (" ");-
612 }
never executed: end of block
0
613#endif /* VI_MODE */-
614-
615 rl_insert_text (arg);-
616 xfree (arg);-
617-
618 rl_end_undo_group ();-
619 return 0;
never executed: return 0;
0
620}-
621-
622/* Yank the COUNTth argument from the previous history line. */-
623int-
624rl_yank_nth_arg (int count, int key)-
625{-
626 return (rl_yank_nth_arg_internal (count, key, 0));
never executed: return (rl_yank_nth_arg_internal (count, key, 0));
0
627}-
628-
629/* Yank the last argument from the previous history line. This `knows'-
630 how rl_yank_nth_arg treats a count of `$'. With an argument, this-
631 behaves the same as rl_yank_nth_arg. */-
632int-
633rl_yank_last_arg (int count, int key)-
634{-
635 static int history_skip = 0;-
636 static int explicit_arg_p = 0;-
637 static int count_passed = 1;-
638 static int direction = 1;-
639 static int undo_needed = 0;-
640 int retval;-
641-
642 if (rl_last_func != rl_yank_last_arg)
rl_last_func !..._yank_last_argDescription
TRUEnever evaluated
FALSEnever evaluated
0
643 {-
644 history_skip = 0;-
645 explicit_arg_p = rl_explicit_arg;-
646 count_passed = count;-
647 direction = 1;-
648 }
never executed: end of block
0
649 else-
650 {-
651 if (undo_needed)
undo_neededDescription
TRUEnever evaluated
FALSEnever evaluated
0
652 rl_do_undo ();
never executed: rl_do_undo ();
0
653 if (count < 0) /* XXX - was < 1 */
count < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
654 direction = -direction;
never executed: direction = -direction;
0
655 history_skip += direction;-
656 if (history_skip < 0)
history_skip < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
657 history_skip = 0;
never executed: history_skip = 0;
0
658 }
never executed: end of block
0
659 -
660 if (explicit_arg_p)
explicit_arg_pDescription
TRUEnever evaluated
FALSEnever evaluated
0
661 retval = rl_yank_nth_arg_internal (count_passed, key, history_skip);
never executed: retval = rl_yank_nth_arg_internal (count_passed, key, history_skip);
0
662 else-
663 retval = rl_yank_nth_arg_internal ('$', key, history_skip);
never executed: retval = rl_yank_nth_arg_internal ('$', key, history_skip);
0
664-
665 undo_needed = retval == 0;-
666 return retval;
never executed: return retval;
0
667}-
668-
669/* Having read the special escape sequence denoting the beginning of a-
670 `bracketed paste' sequence, read the rest of the pasted input until the-
671 closing sequence and insert the pasted text as a single unit without-
672 interpretation. */-
673int-
674rl_bracketed_paste_begin (int count, int key)-
675{-
676 int retval, c;-
677 size_t len, cap;-
678 char *buf;-
679-
680 retval = 1;-
681 len = 0;-
682 buf = xmalloc (cap = 64);-
683-
684 RL_SETSTATE (RL_STATE_MOREINPUT);-
685 while ((c = rl_read_key ()) >= 0)
(c = rl_read_key ()) >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
686 {-
687 if (RL_ISSTATE (RL_STATE_MACRODEF))
(rl_readline_s...& (0x0001000))Description
TRUEnever evaluated
FALSEnever evaluated
0
688 _rl_add_macro_char (c);
never executed: _rl_add_macro_char (c);
0
689-
690 if (c == '\r') /* XXX */
c == '\r'Description
TRUEnever evaluated
FALSEnever evaluated
0
691 c = '\n';
never executed: c = '\n';
0
692-
693 if (len == cap)
len == capDescription
TRUEnever evaluated
FALSEnever evaluated
0
694 buf = xrealloc (buf, cap *= 2);
never executed: buf = xrealloc (buf, cap *= 2);
0
695-
696 buf[len++] = c;-
697 if (len >= BRACK_PASTE_SLEN && c == BRACK_PASTE_LAST &&
len >= 6Description
TRUEnever evaluated
FALSEnever evaluated
c == '~'Description
TRUEnever evaluated
FALSEnever evaluated
0
698 STREQN (buf + len - BRACK_PASTE_SLEN, BRACK_PASTE_SUFF, BRACK_PASTE_SLEN))
never executed: __result = (((const unsigned char *) (const char *) ( (buf + len - 6) ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( ("\033[201~") ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
((6) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
(((6) == 0) ? ...(6) ))) == 0))Description
TRUEnever evaluated
FALSEnever evaluated
((buf + len - ...033[201~")[0])Description
TRUEnever evaluated
FALSEnever evaluated
( (__extension... (6) ))) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( (6) )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...f + len - 6) )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( (buf ...ze_t) ( (6) ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons..."\033[201~") )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( ("\03...ze_t) ( (6) ))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
699 {-
700 len -= BRACK_PASTE_SLEN;-
701 break;
never executed: break;
0
702 }-
703 }
never executed: end of block
0
704 RL_UNSETSTATE (RL_STATE_MOREINPUT);-
705-
706 if (c >= 0)
c >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
707 {-
708 if (len == cap)
len == capDescription
TRUEnever evaluated
FALSEnever evaluated
0
709 buf = xrealloc (buf, cap + 1);
never executed: buf = xrealloc (buf, cap + 1);
0
710 buf[len] = '\0';-
711 retval = rl_insert_text (buf);-
712 }
never executed: end of block
0
713-
714 xfree (buf);-
715 return (retval);
never executed: return (retval);
0
716}-
717-
718/* A special paste command for Windows users. */-
719#if defined (_WIN32)-
720#include <windows.h>-
721-
722int-
723rl_paste_from_clipboard (int count, int key)-
724{-
725 char *data, *ptr;-
726 int len;-
727-
728 if (OpenClipboard (NULL) == 0)-
729 return (0);-
730-
731 data = (char *)GetClipboardData (CF_TEXT);-
732 if (data)-
733 {-
734 ptr = strchr (data, '\r');-
735 if (ptr)-
736 {-
737 len = ptr - data;-
738 ptr = (char *)xmalloc (len + 1);-
739 ptr[len] = '\0';-
740 strncpy (ptr, data, len);-
741 }-
742 else-
743 ptr = data;-
744 _rl_set_mark_at_pos (rl_point);-
745 rl_insert_text (ptr);-
746 if (ptr != data)-
747 xfree (ptr);-
748 CloseClipboard ();-
749 }-
750 return (0);-
751}-
752#endif /* _WIN32 */-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2