OpenCoverage

csplit.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/src/csplit.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* csplit - split a file into sections determined by context lines-
2 Copyright (C) 1991-2018 Free Software Foundation, Inc.-
3-
4 This program is free software: you can redistribute it and/or modify-
5 it under the terms of the GNU General Public License as published by-
6 the Free Software Foundation, either version 3 of the License, or-
7 (at your option) any later version.-
8-
9 This program is distributed in the hope that it will be useful,-
10 but WITHOUT ANY WARRANTY; without even the implied warranty of-
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
12 GNU General Public License for more details.-
13-
14 You should have received a copy of the GNU General Public License-
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */-
16-
17/* Written by Stuart Kemp, cpsrk@groper.jcu.edu.au.-
18 Modified by David MacKenzie, djm@gnu.ai.mit.edu. */-
19-
20#include <config.h>-
21-
22#include <assert.h>-
23#include <getopt.h>-
24#include <sys/types.h>-
25#include <signal.h>-
26-
27#include "system.h"-
28-
29#include <regex.h>-
30-
31#include "die.h"-
32#include "error.h"-
33#include "fd-reopen.h"-
34#include "quote.h"-
35#include "safe-read.h"-
36#include "stdio--.h"-
37#include "xdectoint.h"-
38#include "xstrtol.h"-
39-
40/* The official name of this program (e.g., no 'g' prefix). */-
41#define PROGRAM_NAME "csplit"-
42-
43#define AUTHORS \-
44 proper_name ("Stuart Kemp"), \-
45 proper_name ("David MacKenzie")-
46-
47/* The default prefix for output file names. */-
48#define DEFAULT_PREFIX "xx"-
49-
50/* A compiled pattern arg. */-
51struct control-
52{-
53 intmax_t offset; /* Offset from regexp to split at. */-
54 uintmax_t lines_required; /* Number of lines required. */-
55 uintmax_t repeat; /* Repeat count. */-
56 int argnum; /* ARGV index. */-
57 bool repeat_forever; /* True if '*' used as a repeat count. */-
58 bool ignore; /* If true, produce no output (for regexp). */-
59 bool regexpr; /* True if regular expression was used. */-
60 struct re_pattern_buffer re_compiled; /* Compiled regular expression. */-
61};-
62-
63/* Initial size of data area in buffers. */-
64#define START_SIZE 8191-
65-
66/* Increment size for data area. */-
67#define INCR_SIZE 2048-
68-
69/* Number of lines kept in each node in line list. */-
70#define CTRL_SIZE 80-
71-
72#ifdef DEBUG-
73/* Some small values to test the algorithms. */-
74# define START_SIZE 200-
75# define INCR_SIZE 10-
76# define CTRL_SIZE 1-
77#endif-
78-
79/* A string with a length count. */-
80struct cstring-
81{-
82 size_t len;-
83 char *str;-
84};-
85-
86/* Pointers to the beginnings of lines in the buffer area.-
87 These structures are linked together if needed. */-
88struct line-
89{-
90 size_t used; /* Number of offsets used in this struct. */-
91 size_t insert_index; /* Next offset to use when inserting line. */-
92 size_t retrieve_index; /* Next index to use when retrieving line. */-
93 struct cstring starts[CTRL_SIZE]; /* Lines in the data area. */-
94 struct line *next; /* Next in linked list. */-
95};-
96-
97/* The structure to hold the input lines.-
98 Contains a pointer to the data area and a list containing-
99 pointers to the individual lines. */-
100struct buffer_record-
101{-
102 size_t bytes_alloc; /* Size of the buffer area. */-
103 size_t bytes_used; /* Bytes used in the buffer area. */-
104 uintmax_t start_line; /* First line number in this buffer. */-
105 uintmax_t first_available; /* First line that can be retrieved. */-
106 size_t num_lines; /* Number of complete lines in this buffer. */-
107 char *buffer; /* Data area. */-
108 struct line *line_start; /* Head of list of pointers to lines. */-
109 struct line *curr_line; /* The line start record currently in use. */-
110 struct buffer_record *next;-
111};-
112-
113static void close_output_file (void);-
114static void create_output_file (void);-
115static void delete_all_files (bool);-
116static void save_line_to_file (const struct cstring *line);-
117-
118/* Start of buffer list. */-
119static struct buffer_record *head = NULL;-
120-
121/* Partially read line. */-
122static char *hold_area = NULL;-
123-
124/* Number of bytes in 'hold_area'. */-
125static size_t hold_count = 0;-
126-
127/* Number of the last line in the buffers. */-
128static uintmax_t last_line_number = 0;-
129-
130/* Number of the line currently being examined. */-
131static uintmax_t current_line = 0;-
132-
133/* If true, we have read EOF. */-
134static bool have_read_eof = false;-
135-
136/* Name of output files. */-
137static char *volatile filename_space = NULL;-
138-
139/* Prefix part of output file names. */-
140static char const *volatile prefix = NULL;-
141-
142/* Suffix part of output file names. */-
143static char *volatile suffix = NULL;-
144-
145/* Number of digits to use in output file names. */-
146static int volatile digits = 2;-
147-
148/* Number of files created so far. */-
149static unsigned int volatile files_created = 0;-
150-
151/* Number of bytes written to current file. */-
152static uintmax_t bytes_written;-
153-
154/* Output file pointer. */-
155static FILE *output_stream = NULL;-
156-
157/* Output file name. */-
158static char *output_filename = NULL;-
159-
160/* Perhaps it would be cleaner to pass arg values instead of indexes. */-
161static char **global_argv;-
162-
163/* If true, do not print the count of bytes in each output file. */-
164static bool suppress_count;-
165-
166/* If true, remove output files on error. */-
167static bool volatile remove_files;-
168-
169/* If true, remove all output files which have a zero length. */-
170static bool elide_empty_files;-
171-
172/* If true, suppress the lines that match the PATTERN */-
173static bool suppress_matched;-
174-
175/* The compiled pattern arguments, which determine how to split-
176 the input file. */-
177static struct control *controls;-
178-
179/* Number of elements in 'controls'. */-
180static size_t control_used;-
181-
182/* The set of signals that are caught. */-
183static sigset_t caught_signals;-
184-
185/* For long options that have no equivalent short option, use a-
186 non-character as a pseudo short option, starting with CHAR_MAX + 1. */-
187enum-
188{-
189 SUPPRESS_MATCHED_OPTION = CHAR_MAX + 1-
190};-
191-
192static struct option const longopts[] =-
193{-
194 {"digits", required_argument, NULL, 'n'},-
195 {"quiet", no_argument, NULL, 'q'},-
196 {"silent", no_argument, NULL, 's'},-
197 {"keep-files", no_argument, NULL, 'k'},-
198 {"elide-empty-files", no_argument, NULL, 'z'},-
199 {"prefix", required_argument, NULL, 'f'},-
200 {"suffix-format", required_argument, NULL, 'b'},-
201 {"suppress-matched", no_argument, NULL, SUPPRESS_MATCHED_OPTION},-
202 {GETOPT_HELP_OPTION_DECL},-
203 {GETOPT_VERSION_OPTION_DECL},-
204 {NULL, 0, NULL, 0}-
205};-
206-
207/* Optionally remove files created so far; then exit.-
208 Called when an error detected. */-
209-
210static void-
211cleanup (void)-
212{-
213 sigset_t oldset;-
214-
215 close_output_file ();-
216-
217 sigprocmask (SIG_BLOCK, &caught_signals, &oldset);-
218 delete_all_files (false);-
219 sigprocmask (SIG_SETMASK, &oldset, NULL);-
220}
executed 2 times by 1 test: end of block
Executed by:
  • csplit
2
221-
222static void cleanup_fatal (void) ATTRIBUTE_NORETURN;-
223static void-
224cleanup_fatal (void)-
225{-
226 cleanup ();-
227 exit (EXIT_FAILURE);
executed 2 times by 1 test: exit ( 1 );
Executed by:
  • csplit
2
228}-
229-
230extern void-
231xalloc_die (void)-
232{-
233 error (0, 0, "%s", _("memory exhausted"));-
234 cleanup_fatal ();-
235}
never executed: end of block
0
236-
237static void-
238interrupt_handler (int sig)-
239{-
240 delete_all_files (true);-
241 signal (sig, SIG_DFL);-
242 /* The signal has been reset to SIG_DFL, but blocked during this-
243 handler. Force the default action of this signal once the-
244 handler returns and the block is removed. */-
245 raise (sig);-
246}
never executed: end of block
0
247-
248/* Keep track of NUM bytes of a partial line in buffer START.-
249 These bytes will be retrieved later when another large buffer is read. */-
250-
251static void-
252save_to_hold_area (char *start, size_t num)-
253{-
254 free (hold_area);-
255 hold_area = start;-
256 hold_count = num;-
257}
executed 613 times by 1 test: end of block
Executed by:
  • csplit
613
258-
259/* Read up to MAX_N_BYTES bytes from the input stream into DEST.-
260 Return the number of bytes read. */-
261-
262static size_t-
263read_input (char *dest, size_t max_n_bytes)-
264{-
265 size_t bytes_read;-
266-
267 if (max_n_bytes == 0)
max_n_bytes == 0Description
TRUEnever evaluated
FALSEevaluated 666 times by 1 test
Evaluated by:
  • csplit
0-666
268 return 0;
never executed: return 0;
0
269-
270 bytes_read = safe_read (STDIN_FILENO, dest, max_n_bytes);-
271-
272 if (bytes_read == 0)
bytes_read == 0Description
TRUEevaluated 26 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 640 times by 1 test
Evaluated by:
  • csplit
26-640
273 have_read_eof = true;
executed 26 times by 1 test: have_read_eof = 1 ;
Executed by:
  • csplit
26
274-
275 if (bytes_read == SAFE_READ_ERROR)
bytes_read == ((size_t) -1)Description
TRUEnever evaluated
FALSEevaluated 666 times by 1 test
Evaluated by:
  • csplit
0-666
276 {-
277 error (0, errno, _("read error"));-
278 cleanup_fatal ();-
279 }
never executed: end of block
0
280-
281 return bytes_read;
executed 666 times by 1 test: return bytes_read;
Executed by:
  • csplit
666
282}-
283-
284/* Initialize existing line record P. */-
285-
286static void-
287clear_line_control (struct line *p)-
288{-
289 p->used = 0;-
290 p->insert_index = 0;-
291 p->retrieve_index = 0;-
292}
executed 31785 times by 1 test: end of block
Executed by:
  • csplit
31785
293-
294/* Return a new, initialized line record. */-
295-
296static struct line *-
297new_line_control (void)-
298{-
299 struct line *p = xmalloc (sizeof *p);-
300-
301 p->next = NULL;-
302 clear_line_control (p);-
303-
304 return p;
executed 31785 times by 1 test: return p;
Executed by:
  • csplit
31785
305}-
306-
307/* Record LINE_START, which is the address of the start of a line-
308 of length LINE_LEN in the large buffer, in the lines buffer of B. */-
309-
310static void-
311keep_new_line (struct buffer_record *b, char *line_start, size_t line_len)-
312{-
313 struct line *l;-
314-
315 /* If there is no existing area to keep line info, get some. */-
316 if (b->line_start == NULL)
b->line_start == ((void *)0)Description
TRUEevaluated 638 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2500504 times by 1 test
Evaluated by:
  • csplit
638-2500504
317 b->line_start = b->curr_line = new_line_control ();
executed 638 times by 1 test: b->line_start = b->curr_line = new_line_control ();
Executed by:
  • csplit
638
318-
319 /* If existing area for lines is full, get more. */-
320 if (b->curr_line->used == CTRL_SIZE)
b->curr_line->used == 80Description
TRUEevaluated 31147 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2469995 times by 1 test
Evaluated by:
  • csplit
31147-2469995
321 {-
322 b->curr_line->next = new_line_control ();-
323 b->curr_line = b->curr_line->next;-
324 }
executed 31147 times by 1 test: end of block
Executed by:
  • csplit
31147
325-
326 l = b->curr_line;-
327-
328 /* Record the start of the line, and update counters. */-
329 l->starts[l->insert_index].str = line_start;-
330 l->starts[l->insert_index].len = line_len;-
331 l->used++;-
332 l->insert_index++;-
333}
executed 2501142 times by 1 test: end of block
Executed by:
  • csplit
2501142
334-
335/* Scan the buffer in B for newline characters-
336 and record the line start locations and lengths in B.-
337 Return the number of lines found in this buffer.-
338-
339 There may be an incomplete line at the end of the buffer;-
340 a pointer is kept to this area, which will be used when-
341 the next buffer is filled. */-
342-
343static size_t-
344record_line_starts (struct buffer_record *b)-
345{-
346 char *line_start; /* Start of current line. */-
347 char *line_end; /* End of each line found. */-
348 size_t bytes_left; /* Length of incomplete last line. */-
349 size_t lines; /* Number of lines found. */-
350 size_t line_length; /* Length of each line found. */-
351-
352 if (b->bytes_used == 0)
b->bytes_used == 0Description
TRUEevaluated 26 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 640 times by 1 test
Evaluated by:
  • csplit
26-640
353 return 0;
executed 26 times by 1 test: return 0;
Executed by:
  • csplit
26
354-
355 lines = 0;-
356 line_start = b->buffer;-
357 bytes_left = b->bytes_used;-
358-
359 while (true)-
360 {-
361 line_end = memchr (line_start, '\n', bytes_left);-
362 if (line_end == NULL)
line_end == ((void *)0)Description
TRUEevaluated 640 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2501142 times by 1 test
Evaluated by:
  • csplit
640-2501142
363 break;
executed 640 times by 1 test: break;
Executed by:
  • csplit
640
364 line_length = line_end - line_start + 1;-
365 keep_new_line (b, line_start, line_length);-
366 bytes_left -= line_length;-
367 line_start = line_end + 1;-
368 lines++;-
369 }
executed 2501142 times by 1 test: end of block
Executed by:
  • csplit
2501142
370-
371 /* Check for an incomplete last line. */-
372 if (bytes_left)
bytes_leftDescription
TRUEevaluated 613 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 27 times by 1 test
Evaluated by:
  • csplit
27-613
373 {-
374 if (have_read_eof)
have_read_eofDescription
TRUEnever evaluated
FALSEevaluated 613 times by 1 test
Evaluated by:
  • csplit
0-613
375 {-
376 keep_new_line (b, line_start, bytes_left);-
377 lines++;-
378 }
never executed: end of block
0
379 else-
380 save_to_hold_area (xmemdup (line_start, bytes_left), bytes_left);
executed 613 times by 1 test: save_to_hold_area (xmemdup (line_start, bytes_left), bytes_left);
Executed by:
  • csplit
613
381 }-
382-
383 b->num_lines = lines;-
384 b->first_available = b->start_line = last_line_number + 1;-
385 last_line_number += lines;-
386-
387 return lines;
executed 640 times by 1 test: return lines;
Executed by:
  • csplit
640
388}-
389-
390/* Return a new buffer with room to store SIZE bytes, plus-
391 an extra byte for safety. */-
392-
393static struct buffer_record *-
394create_new_buffer (size_t size)-
395{-
396 struct buffer_record *new_buffer = xmalloc (sizeof *new_buffer);-
397-
398 new_buffer->buffer = xmalloc (size + 1);-
399-
400 new_buffer->bytes_alloc = size;-
401 new_buffer->line_start = new_buffer->curr_line = NULL;-
402-
403 return new_buffer;
executed 666 times by 1 test: return new_buffer;
Executed by:
  • csplit
666
404}-
405-
406/* Return a new buffer of at least MINSIZE bytes. If a buffer of at-
407 least that size is currently free, use it, otherwise create a new one. */-
408-
409static struct buffer_record *-
410get_new_buffer (size_t min_size)-
411{-
412 struct buffer_record *new_buffer; /* Buffer to return. */-
413 size_t alloc_size; /* Actual size that will be requested. */-
414-
415 alloc_size = START_SIZE;-
416 if (alloc_size < min_size)
alloc_size < min_sizeDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 664 times by 1 test
Evaluated by:
  • csplit
2-664
417 {-
418 size_t s = min_size - alloc_size + INCR_SIZE - 1;-
419 alloc_size += s - s % INCR_SIZE;-
420 }
executed 2 times by 1 test: end of block
Executed by:
  • csplit
2
421-
422 new_buffer = create_new_buffer (alloc_size);-
423-
424 new_buffer->num_lines = 0;-
425 new_buffer->bytes_used = 0;-
426 new_buffer->start_line = new_buffer->first_available = last_line_number + 1;-
427 new_buffer->next = NULL;-
428-
429 return new_buffer;
executed 666 times by 1 test: return new_buffer;
Executed by:
  • csplit
666
430}-
431-
432static void-
433free_buffer (struct buffer_record *buf)-
434{-
435 struct line *l;-
436 for (l = buf->line_start; l;)
lDescription
TRUEevaluated 31784 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 665 times by 1 test
Evaluated by:
  • csplit
665-31784
437 {-
438 struct line *n = l->next;-
439 free (l);-
440 l = n;-
441 }
executed 31784 times by 1 test: end of block
Executed by:
  • csplit
31784
442 buf->line_start = NULL;-
443 free (buf->buffer);-
444 buf->buffer = NULL;-
445}
executed 665 times by 1 test: end of block
Executed by:
  • csplit
665
446-
447/* Append buffer BUF to the linked list of buffers that contain-
448 some data yet to be processed. */-
449-
450static void-
451save_buffer (struct buffer_record *buf)-
452{-
453 struct buffer_record *p;-
454-
455 buf->next = NULL;-
456 buf->curr_line = buf->line_start;-
457-
458 if (head == NULL)
head == ((void *)0)Description
TRUEevaluated 637 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
1-637
459 head = buf;
executed 637 times by 1 test: head = buf;
Executed by:
  • csplit
637
460 else-
461 {-
462 for (p = head; p->next; p = p->next)
p->nextDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
0-1
463 /* Do nothing. */ ;
never executed: ;
0
464 p->next = buf;-
465 }
executed 1 time by 1 test: end of block
Executed by:
  • csplit
1
466}-
467-
468/* Fill a buffer of input.-
469-
470 Set the initial size of the buffer to a default.-
471 Fill the buffer (from the hold area and input stream)-
472 and find the individual lines.-
473 If no lines are found (the buffer is too small to hold the next line),-
474 release the current buffer (whose contents would have been put in the-
475 hold area) and repeat the process with another large buffer until at least-
476 one entire line has been read.-
477-
478 Return true if a new buffer was obtained, otherwise false-
479 (in which case end-of-file must have been encountered). */-
480-
481static bool-
482load_buffer (void)-
483{-
484 struct buffer_record *b;-
485 size_t bytes_wanted = START_SIZE; /* Minimum buffer size. */-
486 size_t bytes_avail; /* Size of new buffer created. */-
487 size_t lines_found; /* Number of lines in this new buffer. */-
488 char *p; /* Place to load into buffer. */-
489-
490 if (have_read_eof)
have_read_eofDescription
TRUEevaluated 15 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 664 times by 1 test
Evaluated by:
  • csplit
15-664
491 return false;
executed 15 times by 1 test: return 0 ;
Executed by:
  • csplit
15
492-
493 /* We must make the buffer at least as large as the amount of data-
494 in the partial line left over from the last call. */-
495 if (bytes_wanted < hold_count)
bytes_wanted < hold_countDescription
TRUEnever evaluated
FALSEevaluated 664 times by 1 test
Evaluated by:
  • csplit
0-664
496 bytes_wanted = hold_count;
never executed: bytes_wanted = hold_count;
0
497-
498 while (1)-
499 {-
500 b = get_new_buffer (bytes_wanted);-
501 bytes_avail = b->bytes_alloc; /* Size of buffer returned. */-
502 p = b->buffer;-
503-
504 /* First check the 'holding' area for a partial line. */-
505 if (hold_count)
hold_countDescription
TRUEevaluated 613 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 53 times by 1 test
Evaluated by:
  • csplit
53-613
506 {-
507 memcpy (p, hold_area, hold_count);-
508 p += hold_count;-
509 b->bytes_used += hold_count;-
510 bytes_avail -= hold_count;-
511 hold_count = 0;-
512 }
executed 613 times by 1 test: end of block
Executed by:
  • csplit
613
513-
514 b->bytes_used += read_input (p, bytes_avail);-
515-
516 lines_found = record_line_starts (b);-
517-
518 if (lines_found || have_read_eof)
lines_foundDescription
TRUEevaluated 638 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 28 times by 1 test
Evaluated by:
  • csplit
have_read_eofDescription
TRUEevaluated 26 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2 times by 1 test
Evaluated by:
  • csplit
2-638
519 break;
executed 664 times by 1 test: break;
Executed by:
  • csplit
664
520-
521 if (xalloc_oversized (2, b->bytes_alloc))
(__builtin_con...oc_count); }))Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • csplit
__builtin_constant_p (2)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
__builtin_cons...->bytes_alloc)Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • csplit
0-2
522 xalloc_die ();
never executed: xalloc_die ();
0
523 bytes_wanted = 2 * b->bytes_alloc;-
524 free_buffer (b);-
525 free (b);-
526 }
executed 2 times by 1 test: end of block
Executed by:
  • csplit
2
527-
528 if (lines_found)
lines_foundDescription
TRUEevaluated 638 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 26 times by 1 test
Evaluated by:
  • csplit
26-638
529 save_buffer (b);
executed 638 times by 1 test: save_buffer (b);
Executed by:
  • csplit
638
530 else-
531 {-
532 free_buffer (b);-
533 free (b);-
534 }
executed 26 times by 1 test: end of block
Executed by:
  • csplit
26
535-
536 return lines_found != 0;
executed 664 times by 1 test: return lines_found != 0;
Executed by:
  • csplit
664
537}-
538-
539/* Return the line number of the first line that has not yet been retrieved. */-
540-
541static uintmax_t-
542get_first_line_in_buffer (void)-
543{-
544 if (head == NULL && !load_buffer ())
head == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1052 times by 1 test
Evaluated by:
  • csplit
!load_buffer ()Description
TRUEnever evaluated
FALSEnever evaluated
0-1052
545 die (EXIT_FAILURE, errno, _("input disappeared"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"input disappeared\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "input disappeared" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "input disappeared" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
546-
547 return head->first_available;
executed 1052 times by 1 test: return head->first_available;
Executed by:
  • csplit
1052
548}-
549-
550/* Return a pointer to the logical first line in the buffer and make the-
551 next line the logical first line.-
552 Return NULL if there is no more input. */-
553-
554static struct cstring *-
555remove_line (void)-
556{-
557 /* If non-NULL, this is the buffer for which the previous call-
558 returned the final line. So now, presuming that line has been-
559 processed, we can free the buffer and reset this pointer. */-
560 static struct buffer_record *prev_buf = NULL;-
561-
562 struct cstring *line; /* Return value. */-
563 struct line *l; /* For convenience. */-
564-
565 if (prev_buf)
prev_bufDescription
TRUEevaluated 637 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2500522 times by 1 test
Evaluated by:
  • csplit
637-2500522
566 {-
567 free_buffer (prev_buf);-
568 free (prev_buf);-
569 prev_buf = NULL;-
570 }
executed 637 times by 1 test: end of block
Executed by:
  • csplit
637
571-
572 if (head == NULL && !load_buffer ())
head == ((void *)0)Description
TRUEevaluated 26 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2501133 times by 1 test
Evaluated by:
  • csplit
!load_buffer ()Description
TRUEevaluated 26 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-2501133
573 return NULL;
executed 26 times by 1 test: return ((void *)0) ;
Executed by:
  • csplit
26
574-
575 if (current_line < head->first_available)
current_line <...irst_availableDescription
TRUEevaluated 23 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2501110 times by 1 test
Evaluated by:
  • csplit
23-2501110
576 current_line = head->first_available;
executed 23 times by 1 test: current_line = head->first_available;
Executed by:
  • csplit
23
577-
578 ++(head->first_available);-
579-
580 l = head->curr_line;-
581-
582 line = &l->starts[l->retrieve_index];-
583-
584 /* Advance index to next line. */-
585 if (++l->retrieve_index == l->used)
++l->retrieve_index == l->usedDescription
TRUEevaluated 31784 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2469349 times by 1 test
Evaluated by:
  • csplit
31784-2469349
586 {-
587 /* Go on to the next line record. */-
588 head->curr_line = l->next;-
589 if (head->curr_line == NULL || head->curr_line->used == 0)
head->curr_line == ((void *)0)Description
TRUEevaluated 637 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 31147 times by 1 test
Evaluated by:
  • csplit
head->curr_line->used == 0Description
TRUEnever evaluated
FALSEevaluated 31147 times by 1 test
Evaluated by:
  • csplit
0-31147
590 {-
591 /* Go on to the next data block.-
592 but first record the current one so we can free it-
593 once the line we're returning has been processed. */-
594 prev_buf = head;-
595 head = head->next;-
596 }
executed 637 times by 1 test: end of block
Executed by:
  • csplit
637
597 }
executed 31784 times by 1 test: end of block
Executed by:
  • csplit
31784
598-
599 return line;
executed 2501133 times by 1 test: return line;
Executed by:
  • csplit
2501133
600}-
601-
602/* Search the buffers for line LINENUM, reading more input if necessary.-
603 Return a pointer to the line, or NULL if it is not found in the file. */-
604-
605static struct cstring *-
606find_line (uintmax_t linenum)-
607{-
608 struct buffer_record *b;-
609-
610 if (head == NULL && !load_buffer ())
head == ((void *)0)Description
TRUEevaluated 645 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2500505 times by 1 test
Evaluated by:
  • csplit
!load_buffer ()Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 637 times by 1 test
Evaluated by:
  • csplit
8-2500505
611 return NULL;
executed 8 times by 1 test: return ((void *)0) ;
Executed by:
  • csplit
8
612-
613 if (linenum < head->start_line)
linenum < head->start_lineDescription
TRUEnever evaluated
FALSEevaluated 2501142 times by 1 test
Evaluated by:
  • csplit
0-2501142
614 return NULL;
never executed: return ((void *)0) ;
0
615-
616 for (b = head;;)-
617 {-
618 assert (b);-
619 if (linenum < b->start_line + b->num_lines)
linenum < b->s...+ b->num_linesDescription
TRUEevaluated 2501135 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 8 times by 1 test
Evaluated by:
  • csplit
8-2501135
620 {-
621 /* The line is in this buffer. */-
622 struct line *l;-
623 size_t offset; /* How far into the buffer the line is. */-
624-
625 l = b->line_start;-
626 offset = linenum - b->start_line;-
627 /* Find the control record. */-
628 while (offset >= CTRL_SIZE)
offset >= 80Description
TRUEevaluated 62717685 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2501135 times by 1 test
Evaluated by:
  • csplit
2501135-62717685
629 {-
630 l = l->next;-
631 offset -= CTRL_SIZE;-
632 }
executed 62717685 times by 1 test: end of block
Executed by:
  • csplit
62717685
633 return &l->starts[offset];
executed 2501135 times by 1 test: return &l->starts[offset];
Executed by:
  • csplit
2501135
634 }-
635 if (b->next == NULL && !load_buffer ())
b->next == ((void *)0)Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
!load_buffer ()Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
0-8
636 return NULL;
executed 7 times by 1 test: return ((void *)0) ;
Executed by:
  • csplit
7
637 b = b->next; /* Try the next data block. */-
638 }
executed 1 time by 1 test: end of block
Executed by:
  • csplit
1
639}
never executed: end of block
0
640-
641/* Return true if at least one more line is available for input. */-
642-
643static bool-
644no_more_lines (void)-
645{-
646 return find_line (current_line + 1) == NULL;
executed 30 times by 1 test: return find_line (current_line + 1) == ((void *)0) ;
Executed by:
  • csplit
30
647}-
648-
649/* Open NAME as standard input. */-
650-
651static void-
652set_input_file (const char *name)-
653{-
654 if (! STREQ (name, "-") && fd_reopen (STDIN_FILENO, name, O_RDONLY, 0) < 0)
never executed: __result = (((const unsigned char *) (const char *) ( name ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "-" ))[3] - __s2[3]);
never executed: end of block
executed 16 times by 1 test: end of block
Executed by:
  • csplit
! ( __extensio...)))); }) == 0)Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 16 times by 1 test
Evaluated by:
  • csplit
__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
TRUEevaluated 29 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
__result == 0Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 13 times by 1 test
Evaluated by:
  • csplit
__s2_len > 1Description
TRUEnever evaluated
FALSEevaluated 16 times by 1 test
Evaluated by:
  • csplit
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
fd_reopen ( 0 ...e, 00 , 0) < 0Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • csplit
0-29
655 die (EXIT_FAILURE, errno, _("cannot open %s for reading"),
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"cannot open %s for reading\", 5), quotearg_style (shell_escape_always_quoting_style, name)), assume (false))" ")"); int _gl_du...0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "cannot open %s for reading" , 5) , quotearg_style (shell_escape_always_quoting_style, name)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
656 quoteaf (name));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"cannot open %s for reading\", 5), quotearg_style (shell_escape_always_quoting_style, name)), assume (false))" ")"); int _gl_du...0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "cannot open %s for reading" , 5) , quotearg_style (shell_escape_always_quoting_style, name)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
657}
executed 29 times by 1 test: end of block
Executed by:
  • csplit
29
658-
659/* Write all lines from the beginning of the buffer up to, but-
660 not including, line LAST_LINE, to the current output file.-
661 If IGNORE is true, do not output lines selected here.-
662 ARGNUM is the index in ARGV of the current pattern. */-
663-
664static void-
665write_to_file (uintmax_t last_line, bool ignore, int argnum)-
666{-
667 struct cstring *line;-
668 uintmax_t first_line; /* First available input line. */-
669 uintmax_t lines; /* Number of lines to output. */-
670 uintmax_t i;-
671-
672 first_line = get_first_line_in_buffer ();-
673-
674 if (first_line > last_line)
first_line > last_lineDescription
TRUEnever evaluated
FALSEevaluated 1036 times by 1 test
Evaluated by:
  • csplit
0-1036
675 {-
676 error (0, 0, _("%s: line number out of range"),-
677 quote (global_argv[argnum]));-
678 cleanup_fatal ();-
679 }
never executed: end of block
0
680-
681 lines = last_line - first_line;-
682-
683 for (i = 0; i < lines; i++)
i < linesDescription
TRUEevaluated 1023 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1036 times by 1 test
Evaluated by:
  • csplit
1023-1036
684 {-
685 line = remove_line ();-
686 if (line == NULL)
line == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 1023 times by 1 test
Evaluated by:
  • csplit
0-1023
687 {-
688 error (0, 0, _("%s: line number out of range"),-
689 quote (global_argv[argnum]));-
690 cleanup_fatal ();-
691 }
never executed: end of block
0
692 if (!ignore)
!ignoreDescription
TRUEevaluated 1018 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 5 times by 1 test
Evaluated by:
  • csplit
5-1018
693 save_line_to_file (line);
executed 1018 times by 1 test: save_line_to_file (line);
Executed by:
  • csplit
1018
694 }
executed 1023 times by 1 test: end of block
Executed by:
  • csplit
1023
695}
executed 1036 times by 1 test: end of block
Executed by:
  • csplit
1036
696-
697/* Output any lines left after all regexps have been processed. */-
698-
699static void-
700dump_rest_of_file (void)-
701{-
702 struct cstring *line;-
703-
704 while ((line = remove_line ()) != NULL)
(line = remove...!= ((void *)0)Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 25 times by 1 test
Evaluated by:
  • csplit
18-25
705 save_line_to_file (line);
executed 18 times by 1 test: save_line_to_file (line);
Executed by:
  • csplit
18
706}
executed 25 times by 1 test: end of block
Executed by:
  • csplit
25
707-
708/* Handle an attempt to read beyond EOF under the control of record P,-
709 on iteration REPETITION if nonzero. */-
710-
711static void handle_line_error (const struct control *, uintmax_t)-
712 ATTRIBUTE_NORETURN;-
713static void-
714handle_line_error (const struct control *p, uintmax_t repetition)-
715{-
716 char buf[INT_BUFSIZE_BOUND (uintmax_t)];-
717-
718 fprintf (stderr, _("%s: %s: line number out of range"),-
719 program_name, quote (umaxtostr (p->lines_required, buf)));-
720 if (repetition)
repetitionDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
0-1
721 fprintf (stderr, _(" on repetition %s\n"), umaxtostr (repetition, buf));
never executed: fprintf ( stderr , dcgettext (((void *)0), " on repetition %s\n" , 5) , umaxtostr (repetition, buf));
0
722 else-
723 fprintf (stderr, "\n");
executed 1 time by 1 test: fprintf ( stderr , "\n");
Executed by:
  • csplit
1
724-
725 cleanup_fatal ();-
726}
never executed: end of block
0
727-
728/* Determine the line number that marks the end of this file,-
729 then get those lines and save them to the output file.-
730 P is the control record.-
731 REPETITION is the repetition number. */-
732-
733static void-
734process_line_count (const struct control *p, uintmax_t repetition)-
735{-
736 uintmax_t linenum;-
737 uintmax_t last_line_to_save = p->lines_required * (repetition + 1);-
738-
739 create_output_file ();-
740-
741 /* Ensure that the line number specified is not 1 greater than-
742 the number of lines in the file.-
743 When suppressing matched lines, check before the loop. */-
744 if (no_more_lines () && suppress_matched)
no_more_lines ()Description
TRUEnever evaluated
FALSEevaluated 16 times by 1 test
Evaluated by:
  • csplit
suppress_matchedDescription
TRUEnever evaluated
FALSEnever evaluated
0-16
745 handle_line_error (p, repetition);
never executed: handle_line_error (p, repetition);
0
746-
747 linenum = get_first_line_in_buffer ();-
748 while (linenum++ < last_line_to_save)
linenum++ < last_line_to_saveDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 14 times by 1 test
Evaluated by:
  • csplit
14
749 {-
750 struct cstring *line = remove_line ();-
751 if (line == NULL)
line == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEevaluated 13 times by 1 test
Evaluated by:
  • csplit
1-13
752 handle_line_error (p, repetition);
executed 1 time by 1 test: handle_line_error (p, repetition);
Executed by:
  • csplit
1
753 save_line_to_file (line);-
754 }
executed 12 times by 1 test: end of block
Executed by:
  • csplit
12
755-
756 close_output_file ();-
757-
758 if (suppress_matched)
suppress_matchedDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 8 times by 1 test
Evaluated by:
  • csplit
6-8
759 remove_line ();
executed 6 times by 1 test: remove_line ();
Executed by:
  • csplit
6
760-
761 /* Ensure that the line number specified is not 1 greater than-
762 the number of lines in the file. */-
763 if (no_more_lines () && !suppress_matched)
no_more_lines ()Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 12 times by 1 test
Evaluated by:
  • csplit
!suppress_matchedDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • csplit
0-12
764 handle_line_error (p, repetition);
never executed: handle_line_error (p, repetition);
0
765}
executed 14 times by 1 test: end of block
Executed by:
  • csplit
14
766-
767static void regexp_error (struct control *, uintmax_t, bool) ATTRIBUTE_NORETURN;-
768static void-
769regexp_error (struct control *p, uintmax_t repetition, bool ignore)-
770{-
771 fprintf (stderr, _("%s: %s: match not found"),-
772 program_name, quote (global_argv[p->argnum]));-
773-
774 if (repetition)
repetitionDescription
TRUEnever evaluated
FALSEnever evaluated
0
775 {-
776 char buf[INT_BUFSIZE_BOUND (uintmax_t)];-
777 fprintf (stderr, _(" on repetition %s\n"), umaxtostr (repetition, buf));-
778 }
never executed: end of block
0
779 else-
780 fprintf (stderr, "\n");
never executed: fprintf ( stderr , "\n");
0
781-
782 if (!ignore)
!ignoreDescription
TRUEnever evaluated
FALSEnever evaluated
0
783 {-
784 dump_rest_of_file ();-
785 close_output_file ();-
786 }
never executed: end of block
0
787 cleanup_fatal ();-
788}
never executed: end of block
0
789-
790/* Read the input until a line matches the regexp in P, outputting-
791 it unless P->IGNORE is true.-
792 REPETITION is this repeat-count; 0 means the first time. */-
793-
794static void-
795process_regexp (struct control *p, uintmax_t repetition)-
796{-
797 struct cstring *line; /* From input file. */-
798 size_t line_len; /* To make "$" in regexps work. */-
799 uintmax_t break_line; /* First line number of next file. */-
800 bool ignore = p->ignore; /* If true, skip this section. */-
801 regoff_t ret;-
802-
803 if (!ignore)
!ignoreDescription
TRUEevaluated 1044 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 5 times by 1 test
Evaluated by:
  • csplit
5-1044
804 create_output_file ();
executed 1044 times by 1 test: create_output_file ();
Executed by:
  • csplit
1044
805-
806 if (suppress_matched && current_line > 0)
suppress_matchedDescription
TRUEevaluated 24 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1025 times by 1 test
Evaluated by:
  • csplit
current_line > 0Description
TRUEevaluated 17 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 7 times by 1 test
Evaluated by:
  • csplit
7-1025
807 remove_line ();
executed 17 times by 1 test: remove_line ();
Executed by:
  • csplit
17
808-
809 /* If there is no offset for the regular expression, or-
810 it is positive, then it is not necessary to buffer the lines. */-
811-
812 if (p->offset >= 0)
p->offset >= 0Description
TRUEevaluated 1043 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 6 times by 1 test
Evaluated by:
  • csplit
6-1043
813 {-
814 while (true)-
815 {-
816 line = find_line (++current_line);-
817 if (line == NULL)
line == ((void *)0)Description
TRUEevaluated 11 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2501088 times by 1 test
Evaluated by:
  • csplit
11-2501088
818 {-
819 if (p->repeat_forever)
p->repeat_foreverDescription
TRUEevaluated 11 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-11
820 {-
821 if (!ignore)
!ignoreDescription
TRUEevaluated 11 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-11
822 {-
823 dump_rest_of_file ();-
824 close_output_file ();-
825 }
executed 11 times by 1 test: end of block
Executed by:
  • csplit
11
826 exit (EXIT_SUCCESS);
executed 11 times by 1 test: exit ( 0 );
Executed by:
  • csplit
11
827 }-
828 else-
829 regexp_error (p, repetition, ignore);
never executed: regexp_error (p, repetition, ignore);
0
830 }-
831 line_len = line->len;-
832 if (line->str[line_len - 1] == '\n')
line->str[line...n - 1] == '\n'Description
TRUEevaluated 2501088 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-2501088
833 line_len--;
executed 2501088 times by 1 test: line_len--;
Executed by:
  • csplit
2501088
834 ret = re_search (&p->re_compiled, line->str, line_len,-
835 0, line_len, NULL);-
836 if (ret == -2)
ret == -2Description
TRUEnever evaluated
FALSEevaluated 2501088 times by 1 test
Evaluated by:
  • csplit
0-2501088
837 {-
838 error (0, 0, _("error in regular expression search"));-
839 cleanup_fatal ();-
840 }
never executed: end of block
0
841 if (ret == -1)
ret == -1Description
TRUEevaluated 2500056 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1032 times by 1 test
Evaluated by:
  • csplit
1032-2500056
842 {-
843 line = remove_line ();-
844 if (!ignore)
!ignoreDescription
TRUEevaluated 52 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2500004 times by 1 test
Evaluated by:
  • csplit
52-2500004
845 save_line_to_file (line);
executed 52 times by 1 test: save_line_to_file (line);
Executed by:
  • csplit
52
846 }
executed 2500056 times by 1 test: end of block
Executed by:
  • csplit
2500056
847 else-
848 break;
executed 1032 times by 1 test: break;
Executed by:
  • csplit
1032
849 }-
850 }
executed 1032 times by 1 test: end of block
Executed by:
  • csplit
1032
851 else-
852 {-
853 /* Buffer the lines. */-
854 while (true)-
855 {-
856 line = find_line (++current_line);-
857 if (line == NULL)
line == ((void *)0)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 19 times by 1 test
Evaluated by:
  • csplit
2-19
858 {-
859 if (p->repeat_forever)
p->repeat_foreverDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-2
860 {-
861 if (!ignore)
!ignoreDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-2
862 {-
863 dump_rest_of_file ();-
864 close_output_file ();-
865 }
executed 2 times by 1 test: end of block
Executed by:
  • csplit
2
866 exit (EXIT_SUCCESS);
executed 2 times by 1 test: exit ( 0 );
Executed by:
  • csplit
2
867 }-
868 else-
869 regexp_error (p, repetition, ignore);
never executed: regexp_error (p, repetition, ignore);
0
870 }-
871 line_len = line->len;-
872 if (line->str[line_len - 1] == '\n')
line->str[line...n - 1] == '\n'Description
TRUEevaluated 19 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-19
873 line_len--;
executed 19 times by 1 test: line_len--;
Executed by:
  • csplit
19
874 ret = re_search (&p->re_compiled, line->str, line_len,-
875 0, line_len, NULL);-
876 if (ret == -2)
ret == -2Description
TRUEnever evaluated
FALSEevaluated 19 times by 1 test
Evaluated by:
  • csplit
0-19
877 {-
878 error (0, 0, _("error in regular expression search"));-
879 cleanup_fatal ();-
880 }
never executed: end of block
0
881 if (ret != -1)
ret != -1Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 15 times by 1 test
Evaluated by:
  • csplit
4-15
882 break;
executed 4 times by 1 test: break;
Executed by:
  • csplit
4
883 }
executed 15 times by 1 test: end of block
Executed by:
  • csplit
15
884 }
executed 4 times by 1 test: end of block
Executed by:
  • csplit
4
885-
886 /* Account for any offset from this regexp. */-
887 break_line = current_line + p->offset;-
888-
889 write_to_file (break_line, ignore, p->argnum);-
890-
891 if (!ignore)
!ignoreDescription
TRUEevaluated 1031 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 5 times by 1 test
Evaluated by:
  • csplit
5-1031
892 close_output_file ();
executed 1031 times by 1 test: close_output_file ();
Executed by:
  • csplit
1031
893-
894 if (p->offset > 0)
p->offset > 0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1028 times by 1 test
Evaluated by:
  • csplit
8-1028
895 current_line = break_line;
executed 8 times by 1 test: current_line = break_line;
Executed by:
  • csplit
8
896}
executed 1036 times by 1 test: end of block
Executed by:
  • csplit
1036
897-
898/* Split the input file according to the control records we have built. */-
899-
900static void-
901split_file (void)-
902{-
903 for (size_t i = 0; i < control_used; i++)
i < control_usedDescription
TRUEevaluated 36 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 12 times by 1 test
Evaluated by:
  • csplit
12-36
904 {-
905 uintmax_t j;-
906 if (controls[i].regexpr)
controls[i].regexprDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 16 times by 1 test
Evaluated by:
  • csplit
16-20
907 {-
908 for (j = 0; (controls[i].repeat_forever
controls[i].repeat_foreverDescription
TRUEevaluated 1042 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 14 times by 1 test
Evaluated by:
  • csplit
14-1042
909 || j <= controls[i].repeat); j++)
j <= controls[i].repeatDescription
TRUEevaluated 7 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 7 times by 1 test
Evaluated by:
  • csplit
7
910 process_regexp (&controls[i], j);
executed 1049 times by 1 test: process_regexp (&controls[i], j);
Executed by:
  • csplit
1049
911 }
executed 7 times by 1 test: end of block
Executed by:
  • csplit
7
912 else-
913 {-
914 for (j = 0; (controls[i].repeat_forever
controls[i].repeat_foreverDescription
TRUEnever evaluated
FALSEevaluated 30 times by 1 test
Evaluated by:
  • csplit
0-30
915 || j <= controls[i].repeat); j++)
j <= controls[i].repeatDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 14 times by 1 test
Evaluated by:
  • csplit
14-16
916 process_line_count (&controls[i], j);
executed 16 times by 1 test: process_line_count (&controls[i], j);
Executed by:
  • csplit
16
917 }
executed 14 times by 1 test: end of block
Executed by:
  • csplit
14
918 }-
919-
920 create_output_file ();-
921 dump_rest_of_file ();-
922 close_output_file ();-
923}
executed 12 times by 1 test: end of block
Executed by:
  • csplit
12
924-
925/* Return the name of output file number NUM.-
926-
927 This function is called from a signal handler, so it should invoke-
928 only reentrant functions that are async-signal-safe. POSIX does-
929 not guarantee this for the functions called below, but we don't-
930 know of any hosts where this implementation isn't safe. */-
931-
932static char *-
933make_filename (unsigned int num)-
934{-
935 strcpy (filename_space, prefix);-
936 if (suffix)
suffixDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1073 times by 1 test
Evaluated by:
  • csplit
2-1073
937 sprintf (filename_space + strlen (prefix), suffix, num);
executed 2 times by 1 test: sprintf (filename_space + strlen (prefix), suffix, num);
Executed by:
  • csplit
2
938 else-
939 sprintf (filename_space + strlen (prefix), "%0*u", digits, num);
executed 1073 times by 1 test: sprintf (filename_space + strlen (prefix), "%0*u", digits, num);
Executed by:
  • csplit
1073
940 return filename_space;
executed 1075 times by 1 test: return filename_space;
Executed by:
  • csplit
1075
941}-
942-
943/* Create the next output file. */-
944-
945static void-
946create_output_file (void)-
947{-
948 bool fopen_ok;-
949 int fopen_errno;-
950-
951 output_filename = make_filename (files_created);-
952-
953 if (files_created == UINT_MAX)
files_created ...fff * 2U + 1U)Description
TRUEnever evaluated
FALSEevaluated 1072 times by 1 test
Evaluated by:
  • csplit
0-1072
954 {-
955 fopen_ok = false;-
956 fopen_errno = EOVERFLOW;-
957 }
never executed: end of block
0
958 else-
959 {-
960 /* Create the output file in a critical section, to avoid races. */-
961 sigset_t oldset;-
962 sigprocmask (SIG_BLOCK, &caught_signals, &oldset);-
963 output_stream = fopen (output_filename, "w");-
964 fopen_ok = (output_stream != NULL);-
965 fopen_errno = errno;-
966 files_created += fopen_ok;-
967 sigprocmask (SIG_SETMASK, &oldset, NULL);-
968 }
executed 1072 times by 1 test: end of block
Executed by:
  • csplit
1072
969-
970 if (! fopen_ok)
! fopen_okDescription
TRUEnever evaluated
FALSEevaluated 1072 times by 1 test
Evaluated by:
  • csplit
0-1072
971 {-
972 error (0, fopen_errno, "%s", quotef (output_filename));-
973 cleanup_fatal ();-
974 }
never executed: end of block
0
975 bytes_written = 0;-
976}
executed 1072 times by 1 test: end of block
Executed by:
  • csplit
1072
977-
978/* If requested, delete all the files we have created. This function-
979 must be called only from critical sections. */-
980-
981static void-
982delete_all_files (bool in_signal_handler)-
983{-
984 if (! remove_files)
! remove_filesDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • csplit
0-2
985 return;
never executed: return;
0
986-
987 for (unsigned int i = 0; i < files_created; i++)
i < files_createdDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 2 times by 1 test
Evaluated by:
  • csplit
2-3
988 {-
989 const char *name = make_filename (i);-
990 if (unlink (name) != 0 && !in_signal_handler)
unlink (name) != 0Description
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • csplit
!in_signal_handlerDescription
TRUEnever evaluated
FALSEnever evaluated
0-3
991 error (0, errno, "%s", quotef (name));
never executed: error (0, (*__errno_location ()) , "%s", quotearg_n_style_colon (0, shell_escape_quoting_style, name));
0
992 }
executed 3 times by 1 test: end of block
Executed by:
  • csplit
3
993-
994 files_created = 0;-
995}
executed 2 times by 1 test: end of block
Executed by:
  • csplit
2
996-
997/* Close the current output file and print the count-
998 of characters in this file. */-
999-
1000static void-
1001close_output_file (void)-
1002{-
1003 if (output_stream)
output_streamDescription
TRUEevaluated 1071 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
1-1071
1004 {-
1005 if (ferror (output_stream))
ferror_unlocke...output_stream)Description
TRUEnever evaluated
FALSEevaluated 1071 times by 1 test
Evaluated by:
  • csplit
0-1071
1006 {-
1007 error (0, 0, _("write error for %s"), quoteaf (output_filename));-
1008 output_stream = NULL;-
1009 cleanup_fatal ();-
1010 }
never executed: end of block
0
1011 if (fclose (output_stream) != 0)
rpl_fclose (ou...t_stream) != 0Description
TRUEnever evaluated
FALSEevaluated 1071 times by 1 test
Evaluated by:
  • csplit
0-1071
1012 {-
1013 error (0, errno, "%s", quotef (output_filename));-
1014 output_stream = NULL;-
1015 cleanup_fatal ();-
1016 }
never executed: end of block
0
1017 if (bytes_written == 0 && elide_empty_files)
bytes_written == 0Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1051 times by 1 test
Evaluated by:
  • csplit
elide_empty_filesDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 12 times by 1 test
Evaluated by:
  • csplit
8-1051
1018 {-
1019 sigset_t oldset;-
1020 bool unlink_ok;-
1021 int unlink_errno;-
1022-
1023 /* Remove the output file in a critical section, to avoid races. */-
1024 sigprocmask (SIG_BLOCK, &caught_signals, &oldset);-
1025 unlink_ok = (unlink (output_filename) == 0);-
1026 unlink_errno = errno;-
1027 files_created -= unlink_ok;-
1028 sigprocmask (SIG_SETMASK, &oldset, NULL);-
1029-
1030 if (! unlink_ok)
! unlink_okDescription
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • csplit
0-8
1031 error (0, unlink_errno, "%s", quotef (output_filename));
never executed: error (0, unlink_errno, "%s", quotearg_n_style_colon (0, shell_escape_quoting_style, output_filename));
0
1032 }
executed 8 times by 1 test: end of block
Executed by:
  • csplit
8
1033 else-
1034 {-
1035 if (!suppress_count)
!suppress_countDescription
TRUEevaluated 1020 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 43 times by 1 test
Evaluated by:
  • csplit
43-1020
1036 {-
1037 char buf[INT_BUFSIZE_BOUND (uintmax_t)];-
1038 fprintf (stdout, "%s\n", umaxtostr (bytes_written, buf));-
1039 }
executed 1020 times by 1 test: end of block
Executed by:
  • csplit
1020
1040 }
executed 1063 times by 1 test: end of block
Executed by:
  • csplit
1063
1041 output_stream = NULL;-
1042 }
executed 1071 times by 1 test: end of block
Executed by:
  • csplit
1071
1043}
executed 1072 times by 1 test: end of block
Executed by:
  • csplit
1072
1044-
1045/* Save line LINE to the output file and-
1046 increment the character count for the current file. */-
1047-
1048static void-
1049save_line_to_file (const struct cstring *line)-
1050{-
1051 size_t l = fwrite (line->str, sizeof (char), line->len, output_stream);
never executed: break;
(__builtin_exp...r++))) == (-1)Description
TRUEnever evaluated
FALSEnever evaluated
__cnt > 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_expe...write_end), 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...izeof (char) )Description
TRUEevaluated 1101 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
__builtin_cons... ( line->len )Description
TRUEnever evaluated
FALSEevaluated 1101 times by 1 test
Evaluated by:
  • csplit
(size_t) ( siz...ne->len ) <= 8Description
TRUEnever evaluated
FALSEnever evaluated
(size_t) ( siz... (char) ) != 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...izeof (char) )Description
TRUEevaluated 1101 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
(size_t) ( siz... (char) ) == 0Description
TRUEnever evaluated
FALSEevaluated 1101 times by 1 test
Evaluated by:
  • csplit
__builtin_cons... ( line->len )Description
TRUEnever evaluated
FALSEevaluated 1101 times by 1 test
Evaluated by:
  • csplit
(size_t) ( line->len ) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-1101
1052 if (l != line->len)
l != line->lenDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1100 times by 1 test
Evaluated by:
  • csplit
1-1100
1053 {-
1054 error (0, errno, _("write error for %s"), quoteaf (output_filename));-
1055 output_stream = NULL;-
1056 cleanup_fatal ();-
1057 }
never executed: end of block
0
1058 bytes_written += line->len;-
1059}
executed 1100 times by 1 test: end of block
Executed by:
  • csplit
1100
1060-
1061/* Return a new, initialized control record. */-
1062-
1063static struct control *-
1064new_control_record (void)-
1065{-
1066 static size_t control_allocated = 0; /* Total space allocated. */-
1067 struct control *p;-
1068-
1069 if (control_used == control_allocated)
control_used =...trol_allocatedDescription
TRUEevaluated 40 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-40
1070 controls = X2NREALLOC (controls, &control_allocated);
executed 40 times by 1 test: controls = ((void) (!!sizeof (struct { _Static_assert (sizeof *(controls) != 1, "verify_true (" "sizeof *(controls) != 1" ")"); int _gl_dummy; })), x2nrealloc (controls, &control_allocated, sizeof *(controls)));
Executed by:
  • csplit
40
1071 p = &controls[control_used++];-
1072 p->regexpr = false;-
1073 p->repeat = 0;-
1074 p->repeat_forever = false;-
1075 p->lines_required = 0;-
1076 p->offset = 0;-
1077 return p;
executed 40 times by 1 test: return p;
Executed by:
  • csplit
40
1078}-
1079-
1080/* Check if there is a numeric offset after a regular expression.-
1081 STR is the entire command line argument.-
1082 P is the control record for this regular expression.-
1083 NUM is the numeric part of STR. */-
1084-
1085static void-
1086check_for_offset (struct control *p, const char *str, const char *num)-
1087{-
1088 if (xstrtoimax (num, NULL, 10, &p->offset, "") != LONGINT_OK)
xstrtoimax (nu... != LONGINT_OKDescription
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • csplit
0-8
1089 die (EXIT_FAILURE, 0, _("%s: integer expected after delimiter"),
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s: integer expected after delimiter\", 5), quote (str)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s: integer expected after delimiter" , 5) , quote (str)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s: integer expected after delimiter" , 5) , quote (str)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1090 quote (str));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s: integer expected after delimiter\", 5), quote (str)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s: integer expected after delimiter" , 5) , quote (str)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s: integer expected after delimiter" , 5) , quote (str)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1091}
executed 8 times by 1 test: end of block
Executed by:
  • csplit
8
1092-
1093/* Given that the first character of command line arg STR is '{',-
1094 make sure that the rest of the string is a valid repeat count-
1095 and store its value in P.-
1096 ARGNUM is the ARGV index of STR. */-
1097-
1098static void-
1099parse_repeat_count (int argnum, struct control *p, char *str)-
1100{-
1101 uintmax_t val;-
1102 char *end;-
1103-
1104 end = str + strlen (str) - 1;-
1105 if (*end != '}')
*end != '}'Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • csplit
0-13
1106 die (EXIT_FAILURE, 0, _("%s: '}' is required in repeat count"),
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s: '}' is required in repeat count\", 5), quote (str)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s: '}' is required in repeat count" , 5) , quote (str)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s: '}' is required in repeat count" , 5) , quote (str)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1107 quote (str));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s: '}' is required in repeat count\", 5), quote (str)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s: '}' is required in repeat count" , 5) , quote (str)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s: '}' is required in repeat count" , 5) , quote (str)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1108 *end = '\0';-
1109-
1110 if (str+1 == end-1 && *(str+1) == '*')
str+1 == end-1Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
*(str+1) == '*'Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-13
1111 p->repeat_forever = true;
executed 13 times by 1 test: p->repeat_forever = 1 ;
Executed by:
  • csplit
13
1112 else-
1113 {-
1114 if (xstrtoumax (str + 1, NULL, 10, &val, "") != LONGINT_OK)
xstrtoumax (st... != LONGINT_OKDescription
TRUEnever evaluated
FALSEnever evaluated
0
1115 {-
1116 die (EXIT_FAILURE, 0,-
1117 _("%s}: integer required between '{' and '}'"),-
1118 quote (global_argv[argnum]));-
1119 }
never executed: end of block
0
1120 p->repeat = val;-
1121 }
never executed: end of block
0
1122-
1123 *end = '}';-
1124}
executed 13 times by 1 test: end of block
Executed by:
  • csplit
13
1125-
1126/* Extract the regular expression from STR and check for a numeric offset.-
1127 STR should start with the regexp delimiter character.-
1128 Return a new control record for the regular expression.-
1129 ARGNUM is the ARGV index of STR.-
1130 Unless IGNORE is true, mark these lines for output. */-
1131-
1132static struct control *-
1133extract_regexp (int argnum, bool ignore, char const *str)-
1134{-
1135 size_t len; /* Number of bytes in this regexp. */-
1136 char delim = *str;-
1137 char const *closing_delim;-
1138 struct control *p;-
1139 const char *err;-
1140-
1141 closing_delim = strrchr (str + 1, delim);-
1142 if (closing_delim == NULL)
closing_delim == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • csplit
0-20
1143 die (EXIT_FAILURE, 0,
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s: closing delimiter '%c' missing\", 5), str, delim), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s: closing delimiter '%c' missing" , 5) , str, delim), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s: closing delimiter '%c' missing" , 5) , str, delim), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1144 _("%s: closing delimiter '%c' missing"), str, delim);
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s: closing delimiter '%c' missing\", 5), str, delim), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s: closing delimiter '%c' missing" , 5) , str, delim), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s: closing delimiter '%c' missing" , 5) , str, delim), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1145-
1146 len = closing_delim - str - 1;-
1147 p = new_control_record ();-
1148 p->argnum = argnum;-
1149 p->ignore = ignore;-
1150-
1151 p->regexpr = true;-
1152 p->re_compiled.buffer = NULL;-
1153 p->re_compiled.allocated = 0;-
1154 p->re_compiled.fastmap = xmalloc (UCHAR_MAX + 1);-
1155 p->re_compiled.translate = NULL;-
1156 re_syntax_options =-
1157 RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES;-
1158 err = re_compile_pattern (str + 1, len, &p->re_compiled);-
1159 if (err)
errDescription
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • csplit
0-20
1160 {-
1161 error (0, 0, _("%s: invalid regular expression: %s"), quote (str), err);-
1162 cleanup_fatal ();-
1163 }
never executed: end of block
0
1164-
1165 if (closing_delim[1])
closing_delim[1]Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 12 times by 1 test
Evaluated by:
  • csplit
8-12
1166 check_for_offset (p, str, closing_delim + 1);
executed 8 times by 1 test: check_for_offset (p, str, closing_delim + 1);
Executed by:
  • csplit
8
1167-
1168 return p;
executed 20 times by 1 test: return p;
Executed by:
  • csplit
20
1169}-
1170-
1171/* Extract the break patterns from args START through ARGC - 1 of ARGV.-
1172 After each pattern, check if the next argument is a repeat count. */-
1173-
1174static void-
1175parse_patterns (int argc, int start, char **argv)-
1176{-
1177 struct control *p; /* New control record created. */-
1178 uintmax_t val;-
1179 static uintmax_t last_val = 0;-
1180-
1181 for (int i = start; i < argc; i++)
i < argcDescription
TRUEevaluated 40 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 27 times by 1 test
Evaluated by:
  • csplit
27-40
1182 {-
1183 if (*argv[i] == '/' || *argv[i] == '%')
*argv[i] == '/'Description
TRUEevaluated 15 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 25 times by 1 test
Evaluated by:
  • csplit
*argv[i] == '%'Description
TRUEevaluated 5 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 20 times by 1 test
Evaluated by:
  • csplit
5-25
1184 {-
1185 p = extract_regexp (i, *argv[i] == '%', argv[i]);-
1186 }
executed 20 times by 1 test: end of block
Executed by:
  • csplit
20
1187 else-
1188 {-
1189 p = new_control_record ();-
1190 p->argnum = i;-
1191-
1192 if (xstrtoumax (argv[i], NULL, 10, &val, "") != LONGINT_OK)
xstrtoumax (ar... != LONGINT_OKDescription
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • csplit
0-20
1193 die (EXIT_FAILURE, 0, _("%s: invalid pattern"), quote (argv[i]));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s: invalid pattern\", 5), quote (argv[i])), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s: invalid pattern" , 5) , quote (argv[i])), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s: invalid pattern" , 5) , quote (argv[i])), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
1194 if (val == 0)
val == 0Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEevaluated 19 times by 1 test
Evaluated by:
  • csplit
1-19
1195 die (EXIT_FAILURE, 0,
executed 1 time by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s: line number must be greater than zero\", 5), argv[i]), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s...e number must be greater than zero" , 5) , argv[i]), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s: line number must be greater than zero" , 5) , argv[i]), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
Executed by:
  • csplit
1
1196 _("%s: line number must be greater than zero"), argv[i]);
executed 1 time by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s: line number must be greater than zero\", 5), argv[i]), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s...e number must be greater than zero" , 5) , argv[i]), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s: line number must be greater than zero" , 5) , argv[i]), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
Executed by:
  • csplit
1
1197 if (val < last_val)
val < last_valDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEevaluated 18 times by 1 test
Evaluated by:
  • csplit
1-18
1198 {-
1199 char buf[INT_BUFSIZE_BOUND (uintmax_t)];-
1200 die (EXIT_FAILURE, 0,-
1201 _("line number %s is smaller than preceding line number, %s"),-
1202 quote (argv[i]), umaxtostr (last_val, buf));-
1203 }
never executed: end of block
0
1204-
1205 if (val == last_val)
val == last_valDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 16 times by 1 test
Evaluated by:
  • csplit
2-16
1206 error (0, 0,
executed 2 times by 1 test: error (0, 0, dcgettext (((void *)0), "warning: line number %s is the same as preceding line number" , 5) , quote (argv[i]));
Executed by:
  • csplit
2
1207 _("warning: line number %s is the same as preceding line number"),
executed 2 times by 1 test: error (0, 0, dcgettext (((void *)0), "warning: line number %s is the same as preceding line number" , 5) , quote (argv[i]));
Executed by:
  • csplit
2
1208 quote (argv[i]));
executed 2 times by 1 test: error (0, 0, dcgettext (((void *)0), "warning: line number %s is the same as preceding line number" , 5) , quote (argv[i]));
Executed by:
  • csplit
2
1209-
1210 last_val = val;-
1211-
1212 p->lines_required = val;-
1213 }
executed 18 times by 1 test: end of block
Executed by:
  • csplit
18
1214-
1215 if (i + 1 < argc && *argv[i + 1] == '{')
i + 1 < argcDescription
TRUEevaluated 24 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 14 times by 1 test
Evaluated by:
  • csplit
*argv[i + 1] == '{'Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 11 times by 1 test
Evaluated by:
  • csplit
11-24
1216 {-
1217 /* We have a repeat count. */-
1218 i++;-
1219 parse_repeat_count (i, p, argv[i]);-
1220 }
executed 13 times by 1 test: end of block
Executed by:
  • csplit
13
1221 }
executed 38 times by 1 test: end of block
Executed by:
  • csplit
38
1222}
executed 27 times by 1 test: end of block
Executed by:
  • csplit
27
1223-
1224-
1225-
1226/* Names for the printf format flags ' and #. These can be ORed together. */-
1227enum { FLAG_THOUSANDS = 1, FLAG_ALTERNATIVE = 2 };-
1228-
1229/* Scan the printf format flags in FORMAT, storing info about the-
1230 flags into *FLAGS_PTR. Return the number of flags found. */-
1231static size_t-
1232get_format_flags (char const *format, int *flags_ptr)-
1233{-
1234 int flags = 0;-
1235-
1236 for (size_t count = 0; ; count++)-
1237 {-
1238 switch (format[count])-
1239 {-
1240 case '-':
never executed: case '-':
0
1241 case '0':
executed 1 time by 1 test: case '0':
Executed by:
  • csplit
1
1242 break;
executed 1 time by 1 test: break;
Executed by:
  • csplit
1
1243-
1244 case '\'':
never executed: case '\'':
0
1245 flags |= FLAG_THOUSANDS;-
1246 break;
never executed: break;
0
1247-
1248 case '#':
executed 1 time by 1 test: case '#':
Executed by:
  • csplit
1
1249 flags |= FLAG_ALTERNATIVE;-
1250 break;
executed 1 time by 1 test: break;
Executed by:
  • csplit
1
1251-
1252 default:
executed 1 time by 1 test: default:
Executed by:
  • csplit
1
1253 *flags_ptr = flags;-
1254 return count;
executed 1 time by 1 test: return count;
Executed by:
  • csplit
1
1255 }-
1256 }-
1257}
never executed: end of block
0
1258-
1259/* Check that the printf format conversion specifier *FORMAT is valid-
1260 and compatible with FLAGS. Change it to 'u' if it is 'd' or 'i',-
1261 since the format will be used with an unsigned value. */-
1262static void-
1263check_format_conv_type (char *format, int flags)-
1264{-
1265 unsigned char ch = *format;-
1266 int compatible_flags = FLAG_THOUSANDS;-
1267-
1268 switch (ch)-
1269 {-
1270 case 'd':
never executed: case 'd':
0
1271 case 'i':
never executed: case 'i':
0
1272 *format = 'u';-
1273 break;
never executed: break;
0
1274-
1275 case 'u':
never executed: case 'u':
0
1276 break;
never executed: break;
0
1277-
1278 case 'o':
never executed: case 'o':
0
1279 case 'x':
executed 1 time by 1 test: case 'x':
Executed by:
  • csplit
1
1280 case 'X':
never executed: case 'X':
0
1281 compatible_flags = FLAG_ALTERNATIVE;-
1282 break;
executed 1 time by 1 test: break;
Executed by:
  • csplit
1
1283-
1284 case 0:
never executed: case 0:
0
1285 die (EXIT_FAILURE, 0, _("missing conversion specifier in suffix"));-
1286-
1287 default:
code before this statement never executed: default:
never executed: default:
0
1288 if (isprint (ch))
((*__ctype_b_l...int) _ISprint)Description
TRUEnever evaluated
FALSEnever evaluated
0
1289 die (EXIT_FAILURE, 0,
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"invalid conversion specifier in suffix: %c\", 5), ch), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "invalid conversion specifier in suffix: %c" , 5) , ch), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "invalid conversion specifier in suffix: %c" , 5) , ch), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1290 _("invalid conversion specifier in suffix: %c"), ch);
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"invalid conversion specifier in suffix: %c\", 5), ch), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "invalid conversion specifier in suffix: %c" , 5) , ch), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "invalid conversion specifier in suffix: %c" , 5) , ch), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1291 else-
1292 die (EXIT_FAILURE, 0,
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"invalid conversion specifier in suffix: \\\\%.3o\", 5), ch), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "... conversion specifier in suffix: \\%.3o" , 5) , ch), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "invalid conversion specifier in suffix: \\%.3o" , 5) , ch), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1293 _("invalid conversion specifier in suffix: \\%.3o"), ch);
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"invalid conversion specifier in suffix: \\\\%.3o\", 5), ch), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "... conversion specifier in suffix: \\%.3o" , 5) , ch), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "invalid conversion specifier in suffix: \\%.3o" , 5) , ch), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1294 }-
1295-
1296 if (flags & ~ compatible_flags)
flags & ~ compatible_flagsDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
0-1
1297 die (EXIT_FAILURE, 0,
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"invalid flags in conversion specification: %%%c%c\", 5), (flags & ~ compatible_flags & FLAG_ALTERNATIVE ? '#' : '\\''), ch), assume (false))" ")");...id) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "invalid flags in conversion specification: %%%c%c" , 5) , (flags & ~ compatible_flags & FLAG_ALTERNATIVE ? '#' : '\''), ch), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1298 _("invalid flags in conversion specification: %%%c%c"),
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"invalid flags in conversion specification: %%%c%c\", 5), (flags & ~ compatible_flags & FLAG_ALTERNATIVE ? '#' : '\\''), ch), assume (false))" ")");...id) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "invalid flags in conversion specification: %%%c%c" , 5) , (flags & ~ compatible_flags & FLAG_ALTERNATIVE ? '#' : '\''), ch), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1299 (flags & ~ compatible_flags & FLAG_ALTERNATIVE ? '#' : '\''), ch);
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"invalid flags in conversion specification: %%%c%c\", 5), (flags & ~ compatible_flags & FLAG_ALTERNATIVE ? '#' : '\\''), ch), assume (false))" ")");...id) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "invalid flags in conversion specification: %%%c%c" , 5) , (flags & ~ compatible_flags & FLAG_ALTERNATIVE ? '#' : '\''), ch), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1300}
executed 1 time by 1 test: end of block
Executed by:
  • csplit
1
1301-
1302/* Return the maximum number of bytes that can be generated by-
1303 applying FORMAT to an unsigned int value. If the format is-
1304 invalid, diagnose the problem and exit. */-
1305static size_t-
1306max_out (char *format)-
1307{-
1308 bool percent = false;-
1309-
1310 for (char *f = format; *f; f++)
*fDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
1
1311 if (*f == '%' && *++f != '%')
*f == '%'Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
*++f != '%'Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-1
1312 {-
1313 if (percent)
percentDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
0-1
1314 die (EXIT_FAILURE, 0,
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"too many %% conversion specifications in suffix\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "too many %% conversion specifications in suffix" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "too many %% conversion specifications in suffix" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1315 _("too many %% conversion specifications in suffix"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"too many %% conversion specifications in suffix\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "too many %% conversion specifications in suffix" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "too many %% conversion specifications in suffix" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1316 percent = true;-
1317 int flags;-
1318 f += get_format_flags (f, &flags);-
1319 while (ISDIGIT (*f))
((unsigned int...f) - '0' <= 9)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
1
1320 f++;
executed 1 time by 1 test: f++;
Executed by:
  • csplit
1
1321 if (*f == '.')
*f == '.'Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-1
1322 while (ISDIGIT (*++f))
((unsigned int...f) - '0' <= 9)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
1
1323 continue;
executed 1 time by 1 test: continue;
Executed by:
  • csplit
1
1324 check_format_conv_type (f, flags);-
1325 }
executed 1 time by 1 test: end of block
Executed by:
  • csplit
1
1326-
1327 if (! percent)
! percentDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • csplit
0-1
1328 die (EXIT_FAILURE, 0,
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"missing %% conversion specification in suffix\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "missing %% conversion specification in suffix" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "missing %% conversion specification in suffix" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1329 _("missing %% conversion specification in suffix"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"missing %% conversion specification in suffix\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "missing %% conversion specification in suffix" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "missing %% conversion specification in suffix" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1330-
1331 int maxlen = snprintf (NULL, 0, format, UINT_MAX);-
1332 if (! (0 <= maxlen && maxlen <= SIZE_MAX))
0 <= maxlenDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
maxlen <= (184...73709551615UL)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-1
1333 xalloc_die ();
never executed: xalloc_die ();
0
1334 return maxlen;
executed 1 time by 1 test: return maxlen;
Executed by:
  • csplit
1
1335}-
1336-
1337int-
1338main (int argc, char **argv)-
1339{-
1340 int optc;-
1341-
1342 initialize_main (&argc, &argv);-
1343 set_program_name (argv[0]);-
1344 setlocale (LC_ALL, "");-
1345 bindtextdomain (PACKAGE, LOCALEDIR);-
1346 textdomain (PACKAGE);-
1347-
1348 atexit (close_stdout);-
1349-
1350 global_argv = argv;-
1351 controls = NULL;-
1352 control_used = 0;-
1353 suppress_count = false;-
1354 remove_files = true;-
1355 suppress_matched = false;-
1356 prefix = DEFAULT_PREFIX;-
1357-
1358 while ((optc = getopt_long (argc, argv, "f:b:kn:sqz", longopts, NULL)) != -1)
(optc = getopt... *)0) )) != -1Description
TRUEevaluated 71 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 29 times by 1 test
Evaluated by:
  • csplit
29-71
1359 switch (optc)-
1360 {-
1361 case 'f':
executed 2 times by 1 test: case 'f':
Executed by:
  • csplit
2
1362 prefix = optarg;-
1363 break;
executed 2 times by 1 test: break;
Executed by:
  • csplit
2
1364-
1365 case 'b':
executed 3 times by 1 test: case 'b':
Executed by:
  • csplit
3
1366 suffix = optarg;-
1367 break;
executed 3 times by 1 test: break;
Executed by:
  • csplit
3
1368-
1369 case 'k':
executed 2 times by 1 test: case 'k':
Executed by:
  • csplit
2
1370 remove_files = false;-
1371 break;
executed 2 times by 1 test: break;
Executed by:
  • csplit
2
1372-
1373 case 'n':
executed 2 times by 1 test: case 'n':
Executed by:
  • csplit
2
1374 digits = xdectoimax (optarg, 0, MIN (INT_MAX, SIZE_MAX), "",-
1375 _("invalid number"), 0);-
1376 break;
never executed: break;
0
1377-
1378 case 's':
executed 2 times by 1 test: case 's':
Executed by:
  • csplit
2
1379 case 'q':
executed 14 times by 1 test: case 'q':
Executed by:
  • csplit
14
1380 suppress_count = true;-
1381 break;
executed 16 times by 1 test: break;
Executed by:
  • csplit
16
1382-
1383 case 'z':
executed 10 times by 1 test: case 'z':
Executed by:
  • csplit
10
1384 elide_empty_files = true;-
1385 break;
executed 10 times by 1 test: break;
Executed by:
  • csplit
10
1386-
1387 case SUPPRESS_MATCHED_OPTION:
executed 10 times by 1 test: case SUPPRESS_MATCHED_OPTION:
Executed by:
  • csplit
10
1388 suppress_matched = true;-
1389 break;
executed 10 times by 1 test: break;
Executed by:
  • csplit
10
1390-
1391 case_GETOPT_HELP_CHAR;
never executed: break;
executed 15 times by 1 test: case GETOPT_HELP_CHAR:
Executed by:
  • csplit
0-15
1392-
1393 case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
executed 8 times by 1 test: exit ( 0 );
Executed by:
  • csplit
never executed: break;
executed 8 times by 1 test: case GETOPT_VERSION_CHAR:
Executed by:
  • csplit
0-8
1394-
1395 default:
executed 3 times by 1 test: default:
Executed by:
  • csplit
3
1396 usage (EXIT_FAILURE);-
1397 }
never executed: end of block
0
1398-
1399 if (argc - optind < 2)
argc - optind < 2Description
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • csplit
0-29
1400 {-
1401 if (argc <= optind)
argc <= optindDescription
TRUEnever evaluated
FALSEnever evaluated
0
1402 error (0, 0, _("missing operand"));
never executed: error (0, 0, dcgettext (((void *)0), "missing operand" , 5) );
0
1403 else-
1404 error (0, 0, _("missing operand after %s"), quote (argv[argc - 1]));
never executed: error (0, 0, dcgettext (((void *)0), "missing operand after %s" , 5) , quote (argv[argc - 1]));
0
1405 usage (EXIT_FAILURE);-
1406 }
never executed: end of block
0
1407-
1408 size_t prefix_len = strlen (prefix);-
1409 size_t max_digit_string_len-
1410 = (suffix
suffixDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • csplit
FALSEevaluated 28 times by 1 test
Evaluated by:
  • csplit
1-28
1411 ? max_out (suffix)-
1412 : MAX (INT_STRLEN_BOUND (unsigned int), digits));
(( (((((sizeof... )>( digits ))Description
TRUEevaluated 28 times by 1 test
Evaluated by:
  • csplit
FALSEnever evaluated
0-28
1413 if (SIZE_MAX - 1 - prefix_len < max_digit_string_len)
(1844674407370...git_string_lenDescription
TRUEnever evaluated
FALSEevaluated 29 times by 1 test
Evaluated by:
  • csplit
0-29
1414 xalloc_die ();
never executed: xalloc_die ();
0
1415 filename_space = xmalloc (prefix_len + max_digit_string_len + 1);-
1416-
1417 set_input_file (argv[optind++]);-
1418-
1419 parse_patterns (argc, optind, argv);-
1420-
1421 {-
1422 int i;-
1423 static int const sig[] =-
1424 {-
1425 /* The usual suspects. */-
1426 SIGALRM, SIGHUP, SIGINT, SIGPIPE, SIGQUIT, SIGTERM,-
1427#ifdef SIGPOLL-
1428 SIGPOLL,-
1429#endif-
1430#ifdef SIGPROF-
1431 SIGPROF,-
1432#endif-
1433#ifdef SIGVTALRM-
1434 SIGVTALRM,-
1435#endif-
1436#ifdef SIGXCPU-
1437 SIGXCPU,-
1438#endif-
1439#ifdef SIGXFSZ-
1440 SIGXFSZ,-
1441#endif-
1442 };-
1443 enum { nsigs = ARRAY_CARDINALITY (sig) };-
1444-
1445 struct sigaction act;-
1446-
1447 sigemptyset (&caught_signals);-
1448 for (i = 0; i < nsigs; i++)
i < nsigsDescription
TRUEevaluated 297 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 27 times by 1 test
Evaluated by:
  • csplit
27-297
1449 {-
1450 sigaction (sig[i], NULL, &act);-
1451 if (act.sa_handler != SIG_IGN)
act. __sigacti...ghandler_t) 1)Description
TRUEevaluated 270 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 27 times by 1 test
Evaluated by:
  • csplit
27-270
1452 sigaddset (&caught_signals, sig[i]);
executed 270 times by 1 test: sigaddset (&caught_signals, sig[i]);
Executed by:
  • csplit
270
1453 }
executed 297 times by 1 test: end of block
Executed by:
  • csplit
297
1454-
1455 act.sa_handler = interrupt_handler;-
1456 act.sa_mask = caught_signals;-
1457 act.sa_flags = 0;-
1458-
1459 for (i = 0; i < nsigs; i++)
i < nsigsDescription
TRUEevaluated 297 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 27 times by 1 test
Evaluated by:
  • csplit
27-297
1460 if (sigismember (&caught_signals, sig[i]))
sigismember (&...gnals, sig[i])Description
TRUEevaluated 270 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 27 times by 1 test
Evaluated by:
  • csplit
27-270
1461 sigaction (sig[i], &act, NULL);
executed 270 times by 1 test: sigaction (sig[i], &act, ((void *)0) );
Executed by:
  • csplit
270
1462 }-
1463-
1464 split_file ();-
1465-
1466 if (close (STDIN_FILENO) != 0)
close ( 0 ) != 0Description
TRUEnever evaluated
FALSEevaluated 12 times by 1 test
Evaluated by:
  • csplit
0-12
1467 {-
1468 error (0, errno, _("read error"));-
1469 cleanup_fatal ();-
1470 }
never executed: end of block
0
1471-
1472 return EXIT_SUCCESS;
executed 12 times by 1 test: return 0 ;
Executed by:
  • csplit
12
1473}-
1474-
1475void-
1476usage (int status)-
1477{-
1478 if (status != EXIT_SUCCESS)
status != 0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • csplit
FALSEevaluated 15 times by 1 test
Evaluated by:
  • csplit
3-15
1479 emit_try_help ();
executed 3 times by 1 test: end of block
Executed by:
  • csplit
3
1480 else-
1481 {-
1482 printf (_("\-
1483Usage: %s [OPTION]... FILE PATTERN...\n\-
1484"),-
1485 program_name);-
1486 fputs (_("\-
1487Output pieces of FILE separated by PATTERN(s) to files 'xx00', 'xx01', ...,\n\-
1488and output byte counts of each piece to standard output.\n\-
1489"), stdout);-
1490 fputs (_("\-
1491\n\-
1492Read standard input if FILE is -\n\-
1493"), stdout);-
1494-
1495 emit_mandatory_arg_note ();-
1496-
1497 fputs (_("\-
1498 -b, --suffix-format=FORMAT use sprintf FORMAT instead of %02d\n\-
1499 -f, --prefix=PREFIX use PREFIX instead of 'xx'\n\-
1500 -k, --keep-files do not remove output files on errors\n\-
1501"), stdout);-
1502 fputs (_("\-
1503 --suppress-matched suppress the lines matching PATTERN\n\-
1504"), stdout);-
1505 fputs (_("\-
1506 -n, --digits=DIGITS use specified number of digits instead of 2\n\-
1507 -s, --quiet, --silent do not print counts of output file sizes\n\-
1508 -z, --elide-empty-files remove empty output files\n\-
1509"), stdout);-
1510 fputs (HELP_OPTION_DESCRIPTION, stdout);-
1511 fputs (VERSION_OPTION_DESCRIPTION, stdout);-
1512 fputs (_("\-
1513\n\-
1514Each PATTERN may be:\n\-
1515 INTEGER copy up to but not including specified line number\n\-
1516 /REGEXP/[OFFSET] copy up to but not including a matching line\n\-
1517 %REGEXP%[OFFSET] skip to, but not including a matching line\n\-
1518 {INTEGER} repeat the previous pattern specified number of times\n\-
1519 {*} repeat the previous pattern as many times as possible\n\-
1520\n\-
1521A line OFFSET is a required '+' or '-' followed by a positive integer.\n\-
1522"), stdout);-
1523 emit_ancillary_info (PROGRAM_NAME);-
1524 }
executed 15 times by 1 test: end of block
Executed by:
  • csplit
15
1525 exit (status);
executed 18 times by 1 test: exit (status);
Executed by:
  • csplit
18
1526}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2