OpenCoverage

ls.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/src/ls.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* 'dir', 'vdir' and 'ls' directory listing programs for GNU.-
2 Copyright (C) 1985-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/* If ls_mode is LS_MULTI_COL,-
18 the multi-column format is the default regardless-
19 of the type of output device.-
20 This is for the 'dir' program.-
21-
22 If ls_mode is LS_LONG_FORMAT,-
23 the long format is the default regardless of the-
24 type of output device.-
25 This is for the 'vdir' program.-
26-
27 If ls_mode is LS_LS,-
28 the output format depends on whether the output-
29 device is a terminal.-
30 This is for the 'ls' program. */-
31-
32/* Written by Richard Stallman and David MacKenzie. */-
33-
34/* Color support by Peter Anvin <Peter.Anvin@linux.org> and Dennis-
35 Flaherty <dennisf@denix.elk.miles.com> based on original patches by-
36 Greg Lee <lee@uhunix.uhcc.hawaii.edu>. */-
37-
38#include <config.h>-
39#include <sys/types.h>-
40-
41#include <termios.h>-
42#if HAVE_STROPTS_H-
43# include <stropts.h>-
44#endif-
45#include <sys/ioctl.h>-
46-
47#ifdef WINSIZE_IN_PTEM-
48# include <sys/stream.h>-
49# include <sys/ptem.h>-
50#endif-
51-
52#include <stdio.h>-
53#include <assert.h>-
54#include <setjmp.h>-
55#include <pwd.h>-
56#include <getopt.h>-
57#include <signal.h>-
58#include <selinux/selinux.h>-
59#include <wchar.h>-
60-
61#if HAVE_LANGINFO_CODESET-
62# include <langinfo.h>-
63#endif-
64-
65/* Use SA_NOCLDSTOP as a proxy for whether the sigaction machinery is-
66 present. */-
67#ifndef SA_NOCLDSTOP-
68# define SA_NOCLDSTOP 0-
69# define sigprocmask(How, Set, Oset) /* empty */-
70# define sigset_t int-
71# if ! HAVE_SIGINTERRUPT-
72# define siginterrupt(sig, flag) /* empty */-
73# endif-
74#endif-
75-
76/* NonStop circa 2011 lacks both SA_RESTART and siginterrupt, so don't-
77 restart syscalls after a signal handler fires. This may cause-
78 colors to get messed up on the screen if 'ls' is interrupted, but-
79 that's the best we can do on such a platform. */-
80#ifndef SA_RESTART-
81# define SA_RESTART 0-
82#endif-
83-
84#include "system.h"-
85#include <fnmatch.h>-
86-
87#include "acl.h"-
88#include "argmatch.h"-
89#include "dev-ino.h"-
90#include "die.h"-
91#include "error.h"-
92#include "filenamecat.h"-
93#include "hard-locale.h"-
94#include "hash.h"-
95#include "human.h"-
96#include "filemode.h"-
97#include "filevercmp.h"-
98#include "idcache.h"-
99#include "ls.h"-
100#include "mbswidth.h"-
101#include "mpsort.h"-
102#include "obstack.h"-
103#include "quote.h"-
104#include "smack.h"-
105#include "stat-size.h"-
106#include "stat-time.h"-
107#include "strftime.h"-
108#include "xdectoint.h"-
109#include "xstrtol.h"-
110#include "areadlink.h"-
111#include "mbsalign.h"-
112#include "dircolors.h"-
113#include "xgethostname.h"-
114#include "c-ctype.h"-
115#include "canonicalize.h"-
116-
117/* Include <sys/capability.h> last to avoid a clash of <sys/types.h>-
118 include guards with some premature versions of libcap.-
119 For more details, see <https://bugzilla.redhat.com/483548>. */-
120#ifdef HAVE_CAP-
121# include <sys/capability.h>-
122#endif-
123-
124#define PROGRAM_NAME (ls_mode == LS_LS ? "ls" \-
125 : (ls_mode == LS_MULTI_COL \-
126 ? "dir" : "vdir"))-
127-
128#define AUTHORS \-
129 proper_name ("Richard M. Stallman"), \-
130 proper_name ("David MacKenzie")-
131-
132#define obstack_chunk_alloc malloc-
133#define obstack_chunk_free free-
134-
135/* Return an int indicating the result of comparing two integers.-
136 Subtracting doesn't always work, due to overflow. */-
137#define longdiff(a, b) ((a) < (b) ? -1 : (a) > (b))-
138-
139/* Unix-based readdir implementations have historically returned a dirent.d_ino-
140 value that is sometimes not equal to the stat-obtained st_ino value for-
141 that same entry. This error occurs for a readdir entry that refers-
142 to a mount point. readdir's error is to return the inode number of-
143 the underlying directory -- one that typically cannot be stat'ed, as-
144 long as a file system is mounted on that directory. RELIABLE_D_INO-
145 encapsulates whether we can use the more efficient approach of relying-
146 on readdir-supplied d_ino values, or whether we must incur the cost of-
147 calling stat or lstat to obtain each guaranteed-valid inode number. */-
148-
149#ifndef READDIR_LIES_ABOUT_MOUNTPOINT_D_INO-
150# define READDIR_LIES_ABOUT_MOUNTPOINT_D_INO 1-
151#endif-
152-
153#if READDIR_LIES_ABOUT_MOUNTPOINT_D_INO-
154# define RELIABLE_D_INO(dp) NOT_AN_INODE_NUMBER-
155#else-
156# define RELIABLE_D_INO(dp) D_INO (dp)-
157#endif-
158-
159#if ! HAVE_STRUCT_STAT_ST_AUTHOR-
160# define st_author st_uid-
161#endif-
162-
163enum filetype-
164 {-
165 unknown,-
166 fifo,-
167 chardev,-
168 directory,-
169 blockdev,-
170 normal,-
171 symbolic_link,-
172 sock,-
173 whiteout,-
174 arg_directory-
175 };-
176-
177/* Display letters and indicators for each filetype.-
178 Keep these in sync with enum filetype. */-
179static char const filetype_letter[] = "?pcdb-lswd";-
180-
181/* Ensure that filetype and filetype_letter have the same-
182 number of elements. */-
183verify (sizeof filetype_letter - 1 == arg_directory + 1);-
184-
185#define FILETYPE_INDICATORS \-
186 { \-
187 C_ORPHAN, C_FIFO, C_CHR, C_DIR, C_BLK, C_FILE, \-
188 C_LINK, C_SOCK, C_FILE, C_DIR \-
189 }-
190-
191enum acl_type-
192 {-
193 ACL_T_NONE,-
194 ACL_T_LSM_CONTEXT_ONLY,-
195 ACL_T_YES-
196 };-
197-
198struct fileinfo-
199 {-
200 /* The file name. */-
201 char *name;-
202-
203 /* For symbolic link, name of the file linked to, otherwise zero. */-
204 char *linkname;-
205-
206 /* For terminal hyperlinks. */-
207 char *absolute_name;-
208-
209 struct stat stat;-
210-
211 enum filetype filetype;-
212-
213 /* For symbolic link and long listing, st_mode of file linked to, otherwise-
214 zero. */-
215 mode_t linkmode;-
216-
217 /* security context. */-
218 char *scontext;-
219-
220 bool stat_ok;-
221-
222 /* For symbolic link and color printing, true if linked-to file-
223 exists, otherwise false. */-
224 bool linkok;-
225-
226 /* For long listings, true if the file has an access control list,-
227 or a security context. */-
228 enum acl_type acl_type;-
229-
230 /* For color listings, true if a regular file has capability info. */-
231 bool has_capability;-
232-
233 /* Whether file name needs quoting. tri-state with -1 == unknown. */-
234 int quoted;-
235 };-
236-
237#define LEN_STR_PAIR(s) sizeof (s) - 1, s-
238-
239/* Null is a valid character in a color indicator (think about Epson-
240 printers, for example) so we have to use a length/buffer string-
241 type. */-
242-
243struct bin_str-
244 {-
245 size_t len; /* Number of bytes */-
246 const char *string; /* Pointer to the same */-
247 };-
248-
249#if ! HAVE_TCGETPGRP-
250# define tcgetpgrp(Fd) 0-
251#endif-
252-
253static size_t quote_name (char const *name,-
254 struct quoting_options const *options,-
255 int needs_general_quoting,-
256 const struct bin_str *color,-
257 bool allow_pad, struct obstack *stack,-
258 char const *absolute_name);-
259static size_t quote_name_buf (char **inbuf, size_t bufsize, char *name,-
260 struct quoting_options const *options,-
261 int needs_general_quoting, size_t *width,-
262 bool *pad);-
263static char *make_link_name (char const *name, char const *linkname);-
264static int decode_switches (int argc, char **argv);-
265static bool file_ignored (char const *name);-
266static uintmax_t gobble_file (char const *name, enum filetype type,-
267 ino_t inode, bool command_line_arg,-
268 char const *dirname);-
269static const struct bin_str * get_color_indicator (const struct fileinfo *f,-
270 bool symlink_target);-
271static bool print_color_indicator (const struct bin_str *ind);-
272static void put_indicator (const struct bin_str *ind);-
273static void add_ignore_pattern (const char *pattern);-
274static void attach (char *dest, const char *dirname, const char *name);-
275static void clear_files (void);-
276static void extract_dirs_from_files (char const *dirname,-
277 bool command_line_arg);-
278static void get_link_name (char const *filename, struct fileinfo *f,-
279 bool command_line_arg);-
280static void indent (size_t from, size_t to);-
281static size_t calculate_columns (bool by_columns);-
282static void print_current_files (void);-
283static void print_dir (char const *name, char const *realname,-
284 bool command_line_arg);-
285static size_t print_file_name_and_frills (const struct fileinfo *f,-
286 size_t start_col);-
287static void print_horizontal (void);-
288static int format_user_width (uid_t u);-
289static int format_group_width (gid_t g);-
290static void print_long_format (const struct fileinfo *f);-
291static void print_many_per_line (void);-
292static size_t print_name_with_quoting (const struct fileinfo *f,-
293 bool symlink_target,-
294 struct obstack *stack,-
295 size_t start_col);-
296static void prep_non_filename_text (void);-
297static bool print_type_indicator (bool stat_ok, mode_t mode,-
298 enum filetype type);-
299static void print_with_separator (char sep);-
300static void queue_directory (char const *name, char const *realname,-
301 bool command_line_arg);-
302static void sort_files (void);-
303static void parse_ls_color (void);-
304-
305static void getenv_quoting_style (void);-
306-
307/* Initial size of hash table.-
308 Most hierarchies are likely to be shallower than this. */-
309#define INITIAL_TABLE_SIZE 30-
310-
311/* The set of 'active' directories, from the current command-line argument-
312 to the level in the hierarchy at which files are being listed.-
313 A directory is represented by its device and inode numbers (struct dev_ino).-
314 A directory is added to this set when ls begins listing it or its-
315 entries, and it is removed from the set just after ls has finished-
316 processing it. This set is used solely to detect loops, e.g., with-
317 mkdir loop; cd loop; ln -s ../loop sub; ls -RL */-
318static Hash_table *active_dir_set;-
319-
320#define LOOP_DETECT (!!active_dir_set)-
321-
322/* The table of files in the current directory:-
323-
324 'cwd_file' points to a vector of 'struct fileinfo', one per file.-
325 'cwd_n_alloc' is the number of elements space has been allocated for.-
326 'cwd_n_used' is the number actually in use. */-
327-
328/* Address of block containing the files that are described. */-
329static struct fileinfo *cwd_file;-
330-
331/* Length of block that 'cwd_file' points to, measured in files. */-
332static size_t cwd_n_alloc;-
333-
334/* Index of first unused slot in 'cwd_file'. */-
335static size_t cwd_n_used;-
336-
337/* Whether files needs may need padding due to quoting. */-
338static bool cwd_some_quoted;-
339-
340/* Whether quoting style _may_ add outer quotes,-
341 and whether aligning those is useful. */-
342static bool align_variable_outer_quotes;-
343-
344/* Vector of pointers to files, in proper sorted order, and the number-
345 of entries allocated for it. */-
346static void **sorted_file;-
347static size_t sorted_file_alloc;-
348-
349/* When true, in a color listing, color each symlink name according to the-
350 type of file it points to. Otherwise, color them according to the 'ln'-
351 directive in LS_COLORS. Dangling (orphan) symlinks are treated specially,-
352 regardless. This is set when 'ln=target' appears in LS_COLORS. */-
353-
354static bool color_symlink_as_referent;-
355-
356static char const *hostname;-
357-
358/* mode of appropriate file for colorization */-
359#define FILE_OR_LINK_MODE(File) \-
360 ((color_symlink_as_referent && (File)->linkok) \-
361 ? (File)->linkmode : (File)->stat.st_mode)-
362-
363-
364/* Record of one pending directory waiting to be listed. */-
365-
366struct pending-
367 {-
368 char *name;-
369 /* If the directory is actually the file pointed to by a symbolic link we-
370 were told to list, 'realname' will contain the name of the symbolic-
371 link, otherwise zero. */-
372 char *realname;-
373 bool command_line_arg;-
374 struct pending *next;-
375 };-
376-
377static struct pending *pending_dirs;-
378-
379/* Current time in seconds and nanoseconds since 1970, updated as-
380 needed when deciding whether a file is recent. */-
381-
382static struct timespec current_time;-
383-
384static bool print_scontext;-
385static char UNKNOWN_SECURITY_CONTEXT[] = "?";-
386-
387/* Whether any of the files has an ACL. This affects the width of the-
388 mode column. */-
389-
390static bool any_has_acl;-
391-
392/* The number of columns to use for columns containing inode numbers,-
393 block sizes, link counts, owners, groups, authors, major device-
394 numbers, minor device numbers, and file sizes, respectively. */-
395-
396static int inode_number_width;-
397static int block_size_width;-
398static int nlink_width;-
399static int scontext_width;-
400static int owner_width;-
401static int group_width;-
402static int author_width;-
403static int major_device_number_width;-
404static int minor_device_number_width;-
405static int file_size_width;-
406-
407/* Option flags */-
408-
409/* long_format for lots of info, one per line.-
410 one_per_line for just names, one per line.-
411 many_per_line for just names, many per line, sorted vertically.-
412 horizontal for just names, many per line, sorted horizontally.-
413 with_commas for just names, many per line, separated by commas.-
414-
415 -l (and other options that imply -l), -1, -C, -x and -m control-
416 this parameter. */-
417-
418enum format-
419 {-
420 long_format, /* -l and other options that imply -l */-
421 one_per_line, /* -1 */-
422 many_per_line, /* -C */-
423 horizontal, /* -x */-
424 with_commas /* -m */-
425 };-
426-
427static enum format format;-
428-
429/* 'full-iso' uses full ISO-style dates and times. 'long-iso' uses longer-
430 ISO-style timestamps, though shorter than 'full-iso'. 'iso' uses shorter-
431 ISO-style timestamps. 'locale' uses locale-dependent timestamps. */-
432enum time_style-
433 {-
434 full_iso_time_style, /* --time-style=full-iso */-
435 long_iso_time_style, /* --time-style=long-iso */-
436 iso_time_style, /* --time-style=iso */-
437 locale_time_style /* --time-style=locale */-
438 };-
439-
440static char const *const time_style_args[] =-
441{-
442 "full-iso", "long-iso", "iso", "locale", NULL-
443};-
444static enum time_style const time_style_types[] =-
445{-
446 full_iso_time_style, long_iso_time_style, iso_time_style,-
447 locale_time_style-
448};-
449ARGMATCH_VERIFY (time_style_args, time_style_types);-
450-
451/* Type of time to print or sort by. Controlled by -c and -u.-
452 The values of each item of this enum are important since they are-
453 used as indices in the sort functions array (see sort_files()). */-
454-
455enum time_type-
456 {-
457 time_mtime, /* default */-
458 time_ctime, /* -c */-
459 time_atime, /* -u */-
460 time_numtypes /* the number of elements of this enum */-
461 };-
462-
463static enum time_type time_type;-
464-
465/* The file characteristic to sort by. Controlled by -t, -S, -U, -X, -v.-
466 The values of each item of this enum are important since they are-
467 used as indices in the sort functions array (see sort_files()). */-
468-
469enum sort_type-
470 {-
471 sort_none = -1, /* -U */-
472 sort_name, /* default */-
473 sort_extension, /* -X */-
474 sort_size, /* -S */-
475 sort_version, /* -v */-
476 sort_time, /* -t */-
477 sort_numtypes /* the number of elements of this enum */-
478 };-
479-
480static enum sort_type sort_type;-
481-
482/* Direction of sort.-
483 false means highest first if numeric,-
484 lowest first if alphabetic;-
485 these are the defaults.-
486 true means the opposite order in each case. -r */-
487-
488static bool sort_reverse;-
489-
490/* True means to display owner information. -g turns this off. */-
491-
492static bool print_owner = true;-
493-
494/* True means to display author information. */-
495-
496static bool print_author;-
497-
498/* True means to display group information. -G and -o turn this off. */-
499-
500static bool print_group = true;-
501-
502/* True means print the user and group id's as numbers rather-
503 than as names. -n */-
504-
505static bool numeric_ids;-
506-
507/* True means mention the size in blocks of each file. -s */-
508-
509static bool print_block_size;-
510-
511/* Human-readable options for output, when printing block counts. */-
512static int human_output_opts;-
513-
514/* The units to use when printing block counts. */-
515static uintmax_t output_block_size;-
516-
517/* Likewise, but for file sizes. */-
518static int file_human_output_opts;-
519static uintmax_t file_output_block_size = 1;-
520-
521/* Follow the output with a special string. Using this format,-
522 Emacs' dired mode starts up twice as fast, and can handle all-
523 strange characters in file names. */-
524static bool dired;-
525-
526/* 'none' means don't mention the type of files.-
527 'slash' means mention directories only, with a '/'.-
528 'file_type' means mention file types.-
529 'classify' means mention file types and mark executables.-
530-
531 Controlled by -F, -p, and --indicator-style. */-
532-
533enum indicator_style-
534 {-
535 none, /* --indicator-style=none */-
536 slash, /* -p, --indicator-style=slash */-
537 file_type, /* --indicator-style=file-type */-
538 classify /* -F, --indicator-style=classify */-
539 };-
540-
541static enum indicator_style indicator_style;-
542-
543/* Names of indicator styles. */-
544static char const *const indicator_style_args[] =-
545{-
546 "none", "slash", "file-type", "classify", NULL-
547};-
548static enum indicator_style const indicator_style_types[] =-
549{-
550 none, slash, file_type, classify-
551};-
552ARGMATCH_VERIFY (indicator_style_args, indicator_style_types);-
553-
554/* True means use colors to mark types. Also define the different-
555 colors as well as the stuff for the LS_COLORS environment variable.-
556 The LS_COLORS variable is now in a termcap-like format. */-
557-
558static bool print_with_color;-
559-
560static bool print_hyperlink;-
561-
562/* Whether we used any colors in the output so far. If so, we will-
563 need to restore the default color later. If not, we will need to-
564 call prep_non_filename_text before using color for the first time. */-
565-
566static bool used_color = false;-
567-
568enum when_type-
569 {-
570 when_never, /* 0: default or --color=never */-
571 when_always, /* 1: --color=always */-
572 when_if_tty /* 2: --color=tty */-
573 };-
574-
575enum Dereference_symlink-
576 {-
577 DEREF_UNDEFINED = 1,-
578 DEREF_NEVER,-
579 DEREF_COMMAND_LINE_ARGUMENTS, /* -H */-
580 DEREF_COMMAND_LINE_SYMLINK_TO_DIR, /* the default, in certain cases */-
581 DEREF_ALWAYS /* -L */-
582 };-
583-
584enum indicator_no-
585 {-
586 C_LEFT, C_RIGHT, C_END, C_RESET, C_NORM, C_FILE, C_DIR, C_LINK,-
587 C_FIFO, C_SOCK,-
588 C_BLK, C_CHR, C_MISSING, C_ORPHAN, C_EXEC, C_DOOR, C_SETUID, C_SETGID,-
589 C_STICKY, C_OTHER_WRITABLE, C_STICKY_OTHER_WRITABLE, C_CAP, C_MULTIHARDLINK,-
590 C_CLR_TO_EOL-
591 };-
592-
593static const char *const indicator_name[]=-
594 {-
595 "lc", "rc", "ec", "rs", "no", "fi", "di", "ln", "pi", "so",-
596 "bd", "cd", "mi", "or", "ex", "do", "su", "sg", "st",-
597 "ow", "tw", "ca", "mh", "cl", NULL-
598 };-
599-
600struct color_ext_type-
601 {-
602 struct bin_str ext; /* The extension we're looking for */-
603 struct bin_str seq; /* The sequence to output when we do */-
604 struct color_ext_type *next; /* Next in list */-
605 };-
606-
607static struct bin_str color_indicator[] =-
608 {-
609 { LEN_STR_PAIR ("\033[") }, /* lc: Left of color sequence */-
610 { LEN_STR_PAIR ("m") }, /* rc: Right of color sequence */-
611 { 0, NULL }, /* ec: End color (replaces lc+rs+rc) */-
612 { LEN_STR_PAIR ("0") }, /* rs: Reset to ordinary colors */-
613 { 0, NULL }, /* no: Normal */-
614 { 0, NULL }, /* fi: File: default */-
615 { LEN_STR_PAIR ("01;34") }, /* di: Directory: bright blue */-
616 { LEN_STR_PAIR ("01;36") }, /* ln: Symlink: bright cyan */-
617 { LEN_STR_PAIR ("33") }, /* pi: Pipe: yellow/brown */-
618 { LEN_STR_PAIR ("01;35") }, /* so: Socket: bright magenta */-
619 { LEN_STR_PAIR ("01;33") }, /* bd: Block device: bright yellow */-
620 { LEN_STR_PAIR ("01;33") }, /* cd: Char device: bright yellow */-
621 { 0, NULL }, /* mi: Missing file: undefined */-
622 { 0, NULL }, /* or: Orphaned symlink: undefined */-
623 { LEN_STR_PAIR ("01;32") }, /* ex: Executable: bright green */-
624 { LEN_STR_PAIR ("01;35") }, /* do: Door: bright magenta */-
625 { LEN_STR_PAIR ("37;41") }, /* su: setuid: white on red */-
626 { LEN_STR_PAIR ("30;43") }, /* sg: setgid: black on yellow */-
627 { LEN_STR_PAIR ("37;44") }, /* st: sticky: black on blue */-
628 { LEN_STR_PAIR ("34;42") }, /* ow: other-writable: blue on green */-
629 { LEN_STR_PAIR ("30;42") }, /* tw: ow w/ sticky: black on green */-
630 { LEN_STR_PAIR ("30;41") }, /* ca: black on red */-
631 { 0, NULL }, /* mh: disabled by default */-
632 { LEN_STR_PAIR ("\033[K") }, /* cl: clear to end of line */-
633 };-
634-
635/* FIXME: comment */-
636static struct color_ext_type *color_ext_list = NULL;-
637-
638/* Buffer for color sequences */-
639static char *color_buf;-
640-
641/* True means to check for orphaned symbolic link, for displaying-
642 colors. */-
643-
644static bool check_symlink_color;-
645-
646/* True means mention the inode number of each file. -i */-
647-
648static bool print_inode;-
649-
650/* What to do with symbolic links. Affected by -d, -F, -H, -l (and-
651 other options that imply -l), and -L. */-
652-
653static enum Dereference_symlink dereference;-
654-
655/* True means when a directory is found, display info on its-
656 contents. -R */-
657-
658static bool recursive;-
659-
660/* True means when an argument is a directory name, display info-
661 on it itself. -d */-
662-
663static bool immediate_dirs;-
664-
665/* True means that directories are grouped before files. */-
666-
667static bool directories_first;-
668-
669/* Which files to ignore. */-
670-
671static enum-
672{-
673 /* Ignore files whose names start with '.', and files specified by-
674 --hide and --ignore. */-
675 IGNORE_DEFAULT,-
676-
677 /* Ignore '.', '..', and files specified by --ignore. */-
678 IGNORE_DOT_AND_DOTDOT,-
679-
680 /* Ignore only files specified by --ignore. */-
681 IGNORE_MINIMAL-
682} ignore_mode;-
683-
684/* A linked list of shell-style globbing patterns. If a non-argument-
685 file name matches any of these patterns, it is ignored.-
686 Controlled by -I. Multiple -I options accumulate.-
687 The -B option adds '*~' and '.*~' to this list. */-
688-
689struct ignore_pattern-
690 {-
691 const char *pattern;-
692 struct ignore_pattern *next;-
693 };-
694-
695static struct ignore_pattern *ignore_patterns;-
696-
697/* Similar to IGNORE_PATTERNS, except that -a or -A causes this-
698 variable itself to be ignored. */-
699static struct ignore_pattern *hide_patterns;-
700-
701/* True means output nongraphic chars in file names as '?'.-
702 (-q, --hide-control-chars)-
703 qmark_funny_chars and the quoting style (-Q, --quoting-style=WORD) are-
704 independent. The algorithm is: first, obey the quoting style to get a-
705 string representing the file name; then, if qmark_funny_chars is set,-
706 replace all nonprintable chars in that string with '?'. It's necessary-
707 to replace nonprintable chars even in quoted strings, because we don't-
708 want to mess up the terminal if control chars get sent to it, and some-
709 quoting methods pass through control chars as-is. */-
710static bool qmark_funny_chars;-
711-
712/* Quoting options for file and dir name output. */-
713-
714static struct quoting_options *filename_quoting_options;-
715static struct quoting_options *dirname_quoting_options;-
716-
717/* The number of chars per hardware tab stop. Setting this to zero-
718 inhibits the use of TAB characters for separating columns. -T */-
719static size_t tabsize;-
720-
721/* True means print each directory name before listing it. */-
722-
723static bool print_dir_name;-
724-
725/* The line length to use for breaking lines in many-per-line format.-
726 Can be set with -w. */-
727-
728static size_t line_length;-
729-
730/* The local time zone rules, as per the TZ environment variable. */-
731-
732static timezone_t localtz;-
733-
734/* If true, the file listing format requires that stat be called on-
735 each file. */-
736-
737static bool format_needs_stat;-
738-
739/* Similar to 'format_needs_stat', but set if only the file type is-
740 needed. */-
741-
742static bool format_needs_type;-
743-
744/* An arbitrary limit on the number of bytes in a printed timestamp.-
745 This is set to a relatively small value to avoid the need to worry-
746 about denial-of-service attacks on servers that run "ls" on behalf-
747 of remote clients. 1000 bytes should be enough for any practical-
748 timestamp format. */-
749-
750enum { TIME_STAMP_LEN_MAXIMUM = MAX (1000, INT_STRLEN_BOUND (time_t)) };-
751-
752/* strftime formats for non-recent and recent files, respectively, in-
753 -l output. */-
754-
755static char const *long_time_format[2] =-
756 {-
757 /* strftime format for non-recent files (older than 6 months), in-
758 -l output. This should contain the year, month and day (at-
759 least), in an order that is understood by people in your-
760 locale's territory. Please try to keep the number of used-
761 screen columns small, because many people work in windows with-
762 only 80 columns. But make this as wide as the other string-
763 below, for recent files. */-
764 /* TRANSLATORS: ls output needs to be aligned for ease of reading,-
765 so be wary of using variable width fields from the locale.-
766 Note %b is handled specially by ls and aligned correctly.-
767 Note also that specifying a width as in %5b is erroneous as strftime-
768 will count bytes rather than characters in multibyte locales. */-
769 N_("%b %e %Y"),-
770 /* strftime format for recent files (younger than 6 months), in -l-
771 output. This should contain the month, day and time (at-
772 least), in an order that is understood by people in your-
773 locale's territory. Please try to keep the number of used-
774 screen columns small, because many people work in windows with-
775 only 80 columns. But make this as wide as the other string-
776 above, for non-recent files. */-
777 /* TRANSLATORS: ls output needs to be aligned for ease of reading,-
778 so be wary of using variable width fields from the locale.-
779 Note %b is handled specially by ls and aligned correctly.-
780 Note also that specifying a width as in %5b is erroneous as strftime-
781 will count bytes rather than characters in multibyte locales. */-
782 N_("%b %e %H:%M")-
783 };-
784-
785/* The set of signals that are caught. */-
786-
787static sigset_t caught_signals;-
788-
789/* If nonzero, the value of the pending fatal signal. */-
790-
791static sig_atomic_t volatile interrupt_signal;-
792-
793/* A count of the number of pending stop signals that have been received. */-
794-
795static sig_atomic_t volatile stop_signal_count;-
796-
797/* Desired exit status. */-
798-
799static int exit_status;-
800-
801/* Exit statuses. */-
802enum-
803 {-
804 /* "ls" had a minor problem. E.g., while processing a directory,-
805 ls obtained the name of an entry via readdir, yet was later-
806 unable to stat that name. This happens when listing a directory-
807 in which entries are actively being removed or renamed. */-
808 LS_MINOR_PROBLEM = 1,-
809-
810 /* "ls" had more serious trouble (e.g., memory exhausted, invalid-
811 option or failure to stat a command line argument. */-
812 LS_FAILURE = 2-
813 };-
814-
815/* For long options that have no equivalent short option, use a-
816 non-character as a pseudo short option, starting with CHAR_MAX + 1. */-
817enum-
818{-
819 AUTHOR_OPTION = CHAR_MAX + 1,-
820 BLOCK_SIZE_OPTION,-
821 COLOR_OPTION,-
822 DEREFERENCE_COMMAND_LINE_SYMLINK_TO_DIR_OPTION,-
823 FILE_TYPE_INDICATOR_OPTION,-
824 FORMAT_OPTION,-
825 FULL_TIME_OPTION,-
826 GROUP_DIRECTORIES_FIRST_OPTION,-
827 HIDE_OPTION,-
828 HYPERLINK_OPTION,-
829 INDICATOR_STYLE_OPTION,-
830 QUOTING_STYLE_OPTION,-
831 SHOW_CONTROL_CHARS_OPTION,-
832 SI_OPTION,-
833 SORT_OPTION,-
834 TIME_OPTION,-
835 TIME_STYLE_OPTION-
836};-
837-
838static struct option const long_options[] =-
839{-
840 {"all", no_argument, NULL, 'a'},-
841 {"escape", no_argument, NULL, 'b'},-
842 {"directory", no_argument, NULL, 'd'},-
843 {"dired", no_argument, NULL, 'D'},-
844 {"full-time", no_argument, NULL, FULL_TIME_OPTION},-
845 {"group-directories-first", no_argument, NULL,-
846 GROUP_DIRECTORIES_FIRST_OPTION},-
847 {"human-readable", no_argument, NULL, 'h'},-
848 {"inode", no_argument, NULL, 'i'},-
849 {"kibibytes", no_argument, NULL, 'k'},-
850 {"numeric-uid-gid", no_argument, NULL, 'n'},-
851 {"no-group", no_argument, NULL, 'G'},-
852 {"hide-control-chars", no_argument, NULL, 'q'},-
853 {"reverse", no_argument, NULL, 'r'},-
854 {"size", no_argument, NULL, 's'},-
855 {"width", required_argument, NULL, 'w'},-
856 {"almost-all", no_argument, NULL, 'A'},-
857 {"ignore-backups", no_argument, NULL, 'B'},-
858 {"classify", no_argument, NULL, 'F'},-
859 {"file-type", no_argument, NULL, FILE_TYPE_INDICATOR_OPTION},-
860 {"si", no_argument, NULL, SI_OPTION},-
861 {"dereference-command-line", no_argument, NULL, 'H'},-
862 {"dereference-command-line-symlink-to-dir", no_argument, NULL,-
863 DEREFERENCE_COMMAND_LINE_SYMLINK_TO_DIR_OPTION},-
864 {"hide", required_argument, NULL, HIDE_OPTION},-
865 {"ignore", required_argument, NULL, 'I'},-
866 {"indicator-style", required_argument, NULL, INDICATOR_STYLE_OPTION},-
867 {"dereference", no_argument, NULL, 'L'},-
868 {"literal", no_argument, NULL, 'N'},-
869 {"quote-name", no_argument, NULL, 'Q'},-
870 {"quoting-style", required_argument, NULL, QUOTING_STYLE_OPTION},-
871 {"recursive", no_argument, NULL, 'R'},-
872 {"format", required_argument, NULL, FORMAT_OPTION},-
873 {"show-control-chars", no_argument, NULL, SHOW_CONTROL_CHARS_OPTION},-
874 {"sort", required_argument, NULL, SORT_OPTION},-
875 {"tabsize", required_argument, NULL, 'T'},-
876 {"time", required_argument, NULL, TIME_OPTION},-
877 {"time-style", required_argument, NULL, TIME_STYLE_OPTION},-
878 {"color", optional_argument, NULL, COLOR_OPTION},-
879 {"hyperlink", optional_argument, NULL, HYPERLINK_OPTION},-
880 {"block-size", required_argument, NULL, BLOCK_SIZE_OPTION},-
881 {"context", no_argument, 0, 'Z'},-
882 {"author", no_argument, NULL, AUTHOR_OPTION},-
883 {GETOPT_HELP_OPTION_DECL},-
884 {GETOPT_VERSION_OPTION_DECL},-
885 {NULL, 0, NULL, 0}-
886};-
887-
888static char const *const format_args[] =-
889{-
890 "verbose", "long", "commas", "horizontal", "across",-
891 "vertical", "single-column", NULL-
892};-
893static enum format const format_types[] =-
894{-
895 long_format, long_format, with_commas, horizontal, horizontal,-
896 many_per_line, one_per_line-
897};-
898ARGMATCH_VERIFY (format_args, format_types);-
899-
900static char const *const sort_args[] =-
901{-
902 "none", "time", "size", "extension", "version", NULL-
903};-
904static enum sort_type const sort_types[] =-
905{-
906 sort_none, sort_time, sort_size, sort_extension, sort_version-
907};-
908ARGMATCH_VERIFY (sort_args, sort_types);-
909-
910static char const *const time_args[] =-
911{-
912 "atime", "access", "use", "ctime", "status", NULL-
913};-
914static enum time_type const time_types[] =-
915{-
916 time_atime, time_atime, time_atime, time_ctime, time_ctime-
917};-
918ARGMATCH_VERIFY (time_args, time_types);-
919-
920static char const *const when_args[] =-
921{-
922 /* force and none are for compatibility with another color-ls version */-
923 "always", "yes", "force",-
924 "never", "no", "none",-
925 "auto", "tty", "if-tty", NULL-
926};-
927static enum when_type const when_types[] =-
928{-
929 when_always, when_always, when_always,-
930 when_never, when_never, when_never,-
931 when_if_tty, when_if_tty, when_if_tty-
932};-
933ARGMATCH_VERIFY (when_args, when_types);-
934-
935/* Information about filling a column. */-
936struct column_info-
937{-
938 bool valid_len;-
939 size_t line_len;-
940 size_t *col_arr;-
941};-
942-
943/* Array with information about column filledness. */-
944static struct column_info *column_info;-
945-
946/* Maximum number of columns ever possible for this display. */-
947static size_t max_idx;-
948-
949/* The minimum width of a column is 3: 1 character for the name and 2-
950 for the separating white space. */-
951#define MIN_COLUMN_WIDTH 3-
952-
953-
954/* This zero-based index is used solely with the --dired option.-
955 When that option is in effect, this counter is incremented for each-
956 byte of output generated by this program so that the beginning-
957 and ending indices (in that output) of every file name can be recorded-
958 and later output themselves. */-
959static size_t dired_pos;-
960-
961#define DIRED_PUTCHAR(c) do {putchar ((c)); ++dired_pos;} while (0)-
962-
963/* Write S to STREAM and increment DIRED_POS by S_LEN. */-
964#define DIRED_FPUTS(s, stream, s_len) \-
965 do {fputs (s, stream); dired_pos += s_len;} while (0)-
966-
967/* Like DIRED_FPUTS, but for use when S is a literal string. */-
968#define DIRED_FPUTS_LITERAL(s, stream) \-
969 do {fputs (s, stream); dired_pos += sizeof (s) - 1;} while (0)-
970-
971#define DIRED_INDENT() \-
972 do \-
973 { \-
974 if (dired) \-
975 DIRED_FPUTS_LITERAL (" ", stdout); \-
976 } \-
977 while (0)-
978-
979/* With --dired, store pairs of beginning and ending indices of file names. */-
980static struct obstack dired_obstack;-
981-
982/* With --dired, store pairs of beginning and ending indices of any-
983 directory names that appear as headers (just before 'total' line)-
984 for lists of directory entries. Such directory names are seen when-
985 listing hierarchies using -R and when a directory is listed with at-
986 least one other command line argument. */-
987static struct obstack subdired_obstack;-
988-
989/* Save the current index on the specified obstack, OBS. */-
990#define PUSH_CURRENT_DIRED_POS(obs) \-
991 do \-
992 { \-
993 if (dired) \-
994 obstack_grow (obs, &dired_pos, sizeof (dired_pos)); \-
995 } \-
996 while (0)-
997-
998/* With -R, this stack is used to help detect directory cycles.-
999 The device/inode pairs on this stack mirror the pairs in the-
1000 active_dir_set hash table. */-
1001static struct obstack dev_ino_obstack;-
1002-
1003/* Push a pair onto the device/inode stack. */-
1004static void-
1005dev_ino_push (dev_t dev, ino_t ino)-
1006{-
1007 void *vdi;-
1008 struct dev_ino *di;-
1009 int dev_ino_size = sizeof *di;-
1010 obstack_blank (&dev_ino_obstack, dev_ino_size);
never executed: _obstack_newchunk (__o, __len);
__extension__ ...e); }) < __lenDescription
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
0-10
1011 vdi = obstack_next_free (&dev_ino_obstack);-
1012 di = vdi;-
1013 di--;-
1014 di->st_dev = dev;-
1015 di->st_ino = ino;-
1016}
executed 10 times by 1 test: end of block
Executed by:
  • ls
10
1017-
1018/* Pop a dev/ino struct off the global dev_ino_obstack-
1019 and return that struct. */-
1020static struct dev_ino-
1021dev_ino_pop (void)-
1022{-
1023 void *vdi;-
1024 struct dev_ino *di;-
1025 int dev_ino_size = sizeof *di;-
1026 assert (dev_ino_size <= obstack_object_size (&dev_ino_obstack));-
1027 obstack_blank_fast (&dev_ino_obstack, -dev_ino_size);-
1028 vdi = obstack_next_free (&dev_ino_obstack);-
1029 di = vdi;-
1030 return *di;
executed 10 times by 1 test: return *di;
Executed by:
  • ls
10
1031}-
1032-
1033/* Note the use commented out below:-
1034#define ASSERT_MATCHING_DEV_INO(Name, Di) \-
1035 do \-
1036 { \-
1037 struct stat sb; \-
1038 assert (Name); \-
1039 assert (0 <= stat (Name, &sb)); \-
1040 assert (sb.st_dev == Di.st_dev); \-
1041 assert (sb.st_ino == Di.st_ino); \-
1042 } \-
1043 while (0)-
1044*/-
1045-
1046/* Write to standard output PREFIX, followed by the quoting style and-
1047 a space-separated list of the integers stored in OS all on one line. */-
1048-
1049static void-
1050dired_dump_obstack (const char *prefix, struct obstack *os)-
1051{-
1052 size_t n_pos;-
1053-
1054 n_pos = obstack_object_size (os) / sizeof (dired_pos);-
1055 if (n_pos > 0)
n_pos > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1056 {-
1057 size_t *pos = (size_t *) obstack_finish (os);
never executed: __o1->maybe_empty_object = 1;
never executed: __o1->next_free = __o1->chunk_limit;
__o1->next_free == __valueDescription
TRUEnever evaluated
FALSEnever evaluated
(size_t) (__o1...) __o1->chunk)Description
TRUEnever evaluated
FALSEnever evaluated
0
1058 fputs (prefix, stdout);-
1059 for (size_t i = 0; i < n_pos; i++)
i < n_posDescription
TRUEnever evaluated
FALSEnever evaluated
0
1060 printf (" %lu", (unsigned long int) pos[i]);
never executed: printf (" %lu", (unsigned long int) pos[i]);
0
1061 putchar ('\n');-
1062 }
never executed: end of block
0
1063}
never executed: end of block
0
1064-
1065/* Return the address of the first plain %b spec in FMT, or NULL if-
1066 there is no such spec. %5b etc. do not match, so that user-
1067 widths/flags are honored. */-
1068-
1069static char const * _GL_ATTRIBUTE_PURE-
1070first_percent_b (char const *fmt)-
1071{-
1072 for (; *fmt; fmt++)
*fmtDescription
TRUEevaluated 492 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 22 times by 1 test
Evaluated by:
  • ls
22-492
1073 if (fmt[0] == '%')
fmt[0] == '%'Description
TRUEevaluated 318 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 174 times by 1 test
Evaluated by:
  • ls
174-318
1074 switch (fmt[1])-
1075 {-
1076 case 'b': return fmt;
executed 276 times by 2 tests: return fmt;
Executed by:
  • ls
  • vdir
executed 276 times by 2 tests: case 'b':
Executed by:
  • ls
  • vdir
276
1077 case '%': fmt++; break;
never executed: break;
never executed: case '%':
0
1078 }
never executed: end of block
0
1079 return NULL;
executed 22 times by 1 test: return ((void *)0) ;
Executed by:
  • ls
22
1080}-
1081-
1082static char RFC3986[256];-
1083static void-
1084file_escape_init (void)-
1085{-
1086 for (int i = 0; i < 256; i++)
i < 256Description
TRUEnever evaluated
FALSEnever evaluated
0
1087 RFC3986[i] |= c_isalnum (i) || i == '~' || i == '-' || i == '.' || i == '_';
never executed: RFC3986[i] |= c_isalnum (i) || i == '~' || i == '-' || i == '.' || i == '_';
c_isalnum (i)Description
TRUEnever evaluated
FALSEnever evaluated
i == '~'Description
TRUEnever evaluated
FALSEnever evaluated
i == '-'Description
TRUEnever evaluated
FALSEnever evaluated
i == '.'Description
TRUEnever evaluated
FALSEnever evaluated
i == '_'Description
TRUEnever evaluated
FALSEnever evaluated
0
1088}
never executed: end of block
0
1089-
1090/* Read the abbreviated month names from the locale, to align them-
1091 and to determine the max width of the field and to truncate names-
1092 greater than our max allowed.-
1093 Note even though this handles multibyte locales correctly-
1094 it's not restricted to them as single byte locales can have-
1095 variable width abbreviated months and also precomputing/caching-
1096 the names was seen to increase the performance of ls significantly. */-
1097-
1098/* max number of display cells to use.-
1099 As of 2018 the abmon for Arabic has entries with width 12.-
1100 It doesn't make much sense to support wider than this-
1101 and locales should aim for abmon entries of width <= 5. */-
1102enum { MAX_MON_WIDTH = 12 };-
1103/* abformat[RECENT][MON] is the format to use for timestamps with-
1104 recentness RECENT and month MON. */-
1105enum { ABFORMAT_SIZE = 128 };-
1106static char abformat[2][12][ABFORMAT_SIZE];-
1107/* True if precomputed formats should be used. This can be false if-
1108 nl_langinfo fails, if a format or month abbreviation is unusually-
1109 long, or if a month abbreviation contains '%'. */-
1110static bool use_abformat;-
1111-
1112/* Store into ABMON the abbreviated month names, suitably aligned.-
1113 Return true if successful. */-
1114-
1115static bool-
1116abmon_init (char abmon[12][ABFORMAT_SIZE])-
1117{-
1118#ifndef HAVE_NL_LANGINFO-
1119 return false;-
1120#else-
1121 size_t required_mon_width = MAX_MON_WIDTH;-
1122 size_t curr_max_width;-
1123 do-
1124 {-
1125 curr_max_width = required_mon_width;-
1126 required_mon_width = 0;-
1127 for (int i = 0; i < 12; i++)
i < 12Description
TRUEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 276 times by 2 tests
Evaluated by:
  • ls
  • vdir
276-3312
1128 {-
1129 size_t width = curr_max_width;-
1130 char const *abbr = nl_langinfo (ABMON_1 + i);-
1131 if (strchr (abbr, '%'))
(__extension__...abbr , '%' )))Description
TRUEnever evaluated
FALSEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
__builtin_constant_p ( '%' )Description
TRUEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
!__builtin_constant_p ( abbr )Description
TRUEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
( '%' ) == '\0'Description
TRUEnever evaluated
FALSEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-3312
1132 return false;
never executed: return 0 ;
0
1133 size_t req = mbsalign (abbr, abmon[i], ABFORMAT_SIZE,-
1134 &width, MBS_ALIGN_LEFT, 0);-
1135 if (! (req < ABFORMAT_SIZE))
! (req < ABFORMAT_SIZE)Description
TRUEnever evaluated
FALSEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-3312
1136 return false;
never executed: return 0 ;
0
1137 required_mon_width = MAX (required_mon_width, width);
(( required_mo...h )>( width ))Description
TRUEnever evaluated
FALSEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-3312
1138 }
executed 3312 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
3312
1139 }
executed 276 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
276
1140 while (curr_max_width > required_mon_width);
curr_max_width...ired_mon_widthDescription
TRUEevaluated 138 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 138 times by 2 tests
Evaluated by:
  • ls
  • vdir
138
1141-
1142 return true;
executed 138 times by 2 tests: return 1 ;
Executed by:
  • ls
  • vdir
138
1143#endif-
1144}-
1145-
1146/* Initialize ABFORMAT and USE_ABFORMAT. */-
1147-
1148static void-
1149abformat_init (void)-
1150{-
1151 char const *pb[2];-
1152 for (int recent = 0; recent < 2; recent++)
recent < 2Description
TRUEevaluated 298 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 149 times by 2 tests
Evaluated by:
  • ls
  • vdir
149-298
1153 pb[recent] = first_percent_b (long_time_format[recent]);
executed 298 times by 2 tests: pb[recent] = first_percent_b (long_time_format[recent]);
Executed by:
  • ls
  • vdir
298
1154 if (! (pb[0] || pb[1]))
pb[0]Description
TRUEevaluated 138 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 11 times by 1 test
Evaluated by:
  • ls
pb[1]Description
TRUEnever evaluated
FALSEevaluated 11 times by 1 test
Evaluated by:
  • ls
0-138
1155 return;
executed 11 times by 1 test: return;
Executed by:
  • ls
11
1156-
1157 char abmon[12][ABFORMAT_SIZE];-
1158 if (! abmon_init (abmon))
! abmon_init (abmon)Description
TRUEnever evaluated
FALSEevaluated 138 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-138
1159 return;
never executed: return;
0
1160-
1161 for (int recent = 0; recent < 2; recent++)
recent < 2Description
TRUEevaluated 276 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 138 times by 2 tests
Evaluated by:
  • ls
  • vdir
138-276
1162 {-
1163 char const *fmt = long_time_format[recent];-
1164 for (int i = 0; i < 12; i++)
i < 12Description
TRUEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 276 times by 2 tests
Evaluated by:
  • ls
  • vdir
276-3312
1165 {-
1166 char *nfmt = abformat[recent][i];-
1167 int nbytes;-
1168-
1169 if (! pb[recent])
! pb[recent]Description
TRUEnever evaluated
FALSEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-3312
1170 nbytes = snprintf (nfmt, ABFORMAT_SIZE, "%s", fmt);
never executed: nbytes = snprintf (nfmt, ABFORMAT_SIZE, "%s", fmt);
0
1171 else-
1172 {-
1173 if (! (pb[recent] - fmt <= MIN (ABFORMAT_SIZE, INT_MAX)))
! (pb[recent] ...0x7fffffff)) )Description
TRUEnever evaluated
FALSEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
(( ABFORMAT_SI...<(0x7fffffff))Description
TRUEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-3312
1174 return;
never executed: return;
0
1175 int prefix_len = pb[recent] - fmt;-
1176 nbytes = snprintf (nfmt, ABFORMAT_SIZE, "%.*s%s%s",-
1177 prefix_len, fmt, abmon[i], pb[recent] + 2);-
1178 }
executed 3312 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
3312
1179-
1180 if (! (0 <= nbytes && nbytes < ABFORMAT_SIZE))
0 <= nbytesDescription
TRUEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
nbytes < ABFORMAT_SIZEDescription
TRUEevaluated 3312 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-3312
1181 return;
never executed: return;
0
1182 }
executed 3312 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
3312
1183 }
executed 276 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
276
1184-
1185 use_abformat = true;-
1186}
executed 138 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
138
1187-
1188static size_t-
1189dev_ino_hash (void const *x, size_t table_size)-
1190{-
1191 struct dev_ino const *p = x;-
1192 return (uintmax_t) p->st_ino % table_size;
executed 20 times by 1 test: return (uintmax_t) p->st_ino % table_size;
Executed by:
  • ls
20
1193}-
1194-
1195static bool-
1196dev_ino_compare (void const *x, void const *y)-
1197{-
1198 struct dev_ino const *a = x;-
1199 struct dev_ino const *b = y;-
1200 return SAME_INODE (*a, *b) ? true : false;
executed 10 times by 1 test: return ((*a).st_ino == (*b).st_ino && (*a).st_dev == (*b).st_dev) ? 1 : 0 ;
Executed by:
  • ls
10
1201}-
1202-
1203static void-
1204dev_ino_free (void *x)-
1205{-
1206 free (x);-
1207}
executed 10 times by 1 test: end of block
Executed by:
  • ls
10
1208-
1209/* Add the device/inode pair (P->st_dev/P->st_ino) to the set of-
1210 active directories. Return true if there is already a matching-
1211 entry in the table. */-
1212-
1213static bool-
1214visit_dir (dev_t dev, ino_t ino)-
1215{-
1216 struct dev_ino *ent;-
1217 struct dev_ino *ent_from_table;-
1218 bool found_match;-
1219-
1220 ent = xmalloc (sizeof *ent);-
1221 ent->st_ino = ino;-
1222 ent->st_dev = dev;-
1223-
1224 /* Attempt to insert this entry into the table. */-
1225 ent_from_table = hash_insert (active_dir_set, ent);-
1226-
1227 if (ent_from_table == NULL)
ent_from_table == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
0-10
1228 {-
1229 /* Insertion failed due to lack of memory. */-
1230 xalloc_die ();-
1231 }
never executed: end of block
0
1232-
1233 found_match = (ent_from_table != ent);-
1234-
1235 if (found_match)
found_matchDescription
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
0-10
1236 {-
1237 /* ent was not inserted, so free it. */-
1238 free (ent);-
1239 }
never executed: end of block
0
1240-
1241 return found_match;
executed 10 times by 1 test: return found_match;
Executed by:
  • ls
10
1242}-
1243-
1244static void-
1245free_pending_ent (struct pending *p)-
1246{-
1247 free (p->name);-
1248 free (p->realname);-
1249 free (p);-
1250}
executed 51 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
51
1251-
1252static bool-
1253is_colored (enum indicator_no type)-
1254{-
1255 size_t len = color_indicator[type].len;-
1256 char const *s = color_indicator[type].string;-
1257 return ! (len == 0
executed 178 times by 1 test: return ! (len == 0 || (len == 1 && (__extension__ (__builtin_constant_p ( sizeof ("0") - 1 ) && ((__builtin_constant_p ( s ) && strlen ( s ) < ((size_t) ( sizeof ("0") - 1 ))) || (__builtin_constant_p ( "" "0" "" ) && strlen ( "" "0" "" ) < ((size_t) ( si...2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( "" "00" "" ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( s , "" "00" "" )))); }) : strncmp ( s , "" "00" "" , sizeof ("00") - 1 ))) == 0));
Executed by:
  • ls
178
1258 || (len == 1 && STRNCMP_LIT (s, "0") == 0)
executed 178 times by 1 test: return ! (len == 0 || (len == 1 && (__extension__ (__builtin_constant_p ( sizeof ("0") - 1 ) && ((__builtin_constant_p ( s ) && strlen ( s ) < ((size_t) ( sizeof ("0") - 1 ))) || (__builtin_constant_p ( "" "0" "" ) && strlen ( "" "0" "" ) < ((size_t) ( si...2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( "" "00" "" ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( s , "" "00" "" )))); }) : strncmp ( s , "" "00" "" , sizeof ("00") - 1 ))) == 0));
Executed by:
  • ls
never executed: __result = (((const unsigned char *) (const char *) ( s ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "" "0" "" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__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-178
1259 || (len == 2 && STRNCMP_LIT (s, "00") == 0));
executed 178 times by 1 test: return ! (len == 0 || (len == 1 && (__extension__ (__builtin_constant_p ( sizeof ("0") - 1 ) && ((__builtin_constant_p ( s ) && strlen ( s ) < ((size_t) ( sizeof ("0") - 1 ))) || (__builtin_constant_p ( "" "0" "" ) && strlen ( "" "0" "" ) < ((size_t) ( si...2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( "" "00" "" ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( s , "" "00" "" )))); }) : strncmp ( s , "" "00" "" , sizeof ("00") - 1 ))) == 0));
Executed by:
  • ls
never executed: __result = (((const unsigned char *) (const char *) ( s ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "" "00" "" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__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-178
1260}-
1261-
1262static void-
1263restore_default_color (void)-
1264{-
1265 put_indicator (&color_indicator[C_LEFT]);-
1266 put_indicator (&color_indicator[C_RIGHT]);-
1267}
never executed: end of block
0
1268-
1269static void-
1270set_normal_color (void)-
1271{-
1272 if (print_with_color && is_colored (C_NORM))
print_with_colorDescription
TRUEevaluated 36 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1091 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
is_colored (C_NORM)Description
TRUEnever evaluated
FALSEevaluated 36 times by 1 test
Evaluated by:
  • ls
0-1091
1273 {-
1274 put_indicator (&color_indicator[C_LEFT]);-
1275 put_indicator (&color_indicator[C_NORM]);-
1276 put_indicator (&color_indicator[C_RIGHT]);-
1277 }
never executed: end of block
0
1278}
executed 1127 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
1127
1279-
1280/* An ordinary signal was received; arrange for the program to exit. */-
1281-
1282static void-
1283sighandler (int sig)-
1284{-
1285 if (! SA_NOCLDSTOP)
! 1Description
TRUEnever evaluated
FALSEnever evaluated
dead code: signal (sig, ((__sighandler_t) 1) );
-
1286 signal (sig, SIG_IGN);
dead code: signal (sig, ((__sighandler_t) 1) );
-
1287 if (! interrupt_signal)
! interrupt_signalDescription
TRUEnever evaluated
FALSEnever evaluated
0
1288 interrupt_signal = sig;
never executed: interrupt_signal = sig;
0
1289}
never executed: end of block
0
1290-
1291/* A SIGTSTP was received; arrange for the program to suspend itself. */-
1292-
1293static void-
1294stophandler (int sig)-
1295{-
1296 if (! SA_NOCLDSTOP)
! 1Description
TRUEnever evaluated
FALSEnever evaluated
dead code: signal (sig, stophandler);
-
1297 signal (sig, stophandler);
dead code: signal (sig, stophandler);
-
1298 if (! interrupt_signal)
! interrupt_signalDescription
TRUEnever evaluated
FALSEnever evaluated
0
1299 stop_signal_count++;
never executed: stop_signal_count++;
0
1300}
never executed: end of block
0
1301-
1302/* Process any pending signals. If signals are caught, this function-
1303 should be called periodically. Ideally there should never be an-
1304 unbounded amount of time when signals are not being processed.-
1305 Signal handling can restore the default colors, so callers must-
1306 immediately change colors after invoking this function. */-
1307-
1308static void-
1309process_signals (void)-
1310{-
1311 while (interrupt_signal || stop_signal_count)
interrupt_signalDescription
TRUEnever evaluated
FALSEevaluated 1492 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
stop_signal_countDescription
TRUEnever evaluated
FALSEevaluated 1492 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1492
1312 {-
1313 int sig;-
1314 int stops;-
1315 sigset_t oldset;-
1316-
1317 if (used_color)
used_colorDescription
TRUEnever evaluated
FALSEnever evaluated
0
1318 restore_default_color ();
never executed: restore_default_color ();
0
1319 fflush (stdout);-
1320-
1321 sigprocmask (SIG_BLOCK, &caught_signals, &oldset);-
1322-
1323 /* Reload interrupt_signal and stop_signal_count, in case a new-
1324 signal was handled before sigprocmask took effect. */-
1325 sig = interrupt_signal;-
1326 stops = stop_signal_count;-
1327-
1328 /* SIGTSTP is special, since the application can receive that signal-
1329 more than once. In this case, don't set the signal handler to the-
1330 default. Instead, just raise the uncatchable SIGSTOP. */-
1331 if (stops)
stopsDescription
TRUEnever evaluated
FALSEnever evaluated
0
1332 {-
1333 stop_signal_count = stops - 1;-
1334 sig = SIGSTOP;-
1335 }
never executed: end of block
0
1336 else-
1337 signal (sig, SIG_DFL);
never executed: signal (sig, ((__sighandler_t) 0) );
0
1338-
1339 /* Exit or suspend the program. */-
1340 raise (sig);-
1341 sigprocmask (SIG_SETMASK, &oldset, NULL);-
1342-
1343 /* If execution reaches here, then the program has been-
1344 continued (after being suspended). */-
1345 }
never executed: end of block
0
1346}
executed 1492 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
1492
1347-
1348/* Setup signal handlers if INIT is true,-
1349 otherwise restore to the default. */-
1350-
1351static void-
1352signal_setup (bool init)-
1353{-
1354 /* The signals that are trapped, and the number of such signals. */-
1355 static int const sig[] =-
1356 {-
1357 /* This one is handled specially. */-
1358 SIGTSTP,-
1359-
1360 /* The usual suspects. */-
1361 SIGALRM, SIGHUP, SIGINT, SIGPIPE, SIGQUIT, SIGTERM,-
1362#ifdef SIGPOLL-
1363 SIGPOLL,-
1364#endif-
1365#ifdef SIGPROF-
1366 SIGPROF,-
1367#endif-
1368#ifdef SIGVTALRM-
1369 SIGVTALRM,-
1370#endif-
1371#ifdef SIGXCPU-
1372 SIGXCPU,-
1373#endif-
1374#ifdef SIGXFSZ-
1375 SIGXFSZ,-
1376#endif-
1377 };-
1378 enum { nsigs = ARRAY_CARDINALITY (sig) };-
1379-
1380#if ! SA_NOCLDSTOP-
1381 static bool caught_sig[nsigs];-
1382#endif-
1383-
1384 int j;-
1385-
1386 if (init)
initDescription
TRUEnever evaluated
FALSEevaluated 24 times by 1 test
Evaluated by:
  • ls
0-24
1387 {-
1388#if SA_NOCLDSTOP-
1389 struct sigaction act;-
1390-
1391 sigemptyset (&caught_signals);-
1392 for (j = 0; j < nsigs; j++)
j < nsigsDescription
TRUEnever evaluated
FALSEnever evaluated
0
1393 {-
1394 sigaction (sig[j], NULL, &act);-
1395 if (act.sa_handler != SIG_IGN)
act. __sigacti...ghandler_t) 1)Description
TRUEnever evaluated
FALSEnever evaluated
0
1396 sigaddset (&caught_signals, sig[j]);
never executed: sigaddset (&caught_signals, sig[j]);
0
1397 }
never executed: end of block
0
1398-
1399 act.sa_mask = caught_signals;-
1400 act.sa_flags = SA_RESTART;-
1401-
1402 for (j = 0; j < nsigs; j++)
j < nsigsDescription
TRUEnever evaluated
FALSEnever evaluated
0
1403 if (sigismember (&caught_signals, sig[j]))
sigismember (&...gnals, sig[j])Description
TRUEnever evaluated
FALSEnever evaluated
0
1404 {-
1405 act.sa_handler = sig[j] == SIGTSTP ? stophandler : sighandler;
sig[j] == 20Description
TRUEnever evaluated
FALSEnever evaluated
0
1406 sigaction (sig[j], &act, NULL);-
1407 }
never executed: end of block
0
1408#else-
1409 for (j = 0; j < nsigs; j++)-
1410 {-
1411 caught_sig[j] = (signal (sig[j], SIG_IGN) != SIG_IGN);-
1412 if (caught_sig[j])-
1413 {-
1414 signal (sig[j], sig[j] == SIGTSTP ? stophandler : sighandler);-
1415 siginterrupt (sig[j], 0);-
1416 }-
1417 }-
1418#endif-
1419 }
never executed: end of block
0
1420 else /* restore. */-
1421 {-
1422#if SA_NOCLDSTOP-
1423 for (j = 0; j < nsigs; j++)
j < nsigsDescription
TRUEevaluated 288 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 24 times by 1 test
Evaluated by:
  • ls
24-288
1424 if (sigismember (&caught_signals, sig[j]))
sigismember (&...gnals, sig[j])Description
TRUEnever evaluated
FALSEevaluated 288 times by 1 test
Evaluated by:
  • ls
0-288
1425 signal (sig[j], SIG_DFL);
never executed: signal (sig[j], ((__sighandler_t) 0) );
0
1426#else-
1427 for (j = 0; j < nsigs; j++)-
1428 if (caught_sig[j])-
1429 signal (sig[j], SIG_DFL);-
1430#endif-
1431 }
executed 24 times by 1 test: end of block
Executed by:
  • ls
24
1432}-
1433-
1434static inline void-
1435signal_init (void)-
1436{-
1437 signal_setup (true);-
1438}
never executed: end of block
0
1439-
1440static inline void-
1441signal_restore (void)-
1442{-
1443 signal_setup (false);-
1444}
executed 24 times by 1 test: end of block
Executed by:
  • ls
24
1445-
1446int-
1447main (int argc, char **argv)-
1448{-
1449 int i;-
1450 struct pending *thispend;-
1451 int n_files;-
1452-
1453 initialize_main (&argc, &argv);-
1454 set_program_name (argv[0]);-
1455 setlocale (LC_ALL, "");-
1456 bindtextdomain (PACKAGE, LOCALEDIR);-
1457 textdomain (PACKAGE);-
1458-
1459 initialize_exit_failure (LS_FAILURE);-
1460 atexit (close_stdout);-
1461-
1462 assert (ARRAY_CARDINALITY (color_indicator) + 1-
1463 == ARRAY_CARDINALITY (indicator_name));-
1464-
1465 exit_status = EXIT_SUCCESS;-
1466 print_dir_name = true;-
1467 pending_dirs = NULL;-
1468-
1469 current_time.tv_sec = TYPE_MINIMUM (time_t);-
1470 current_time.tv_nsec = -1;-
1471-
1472 i = decode_switches (argc, argv);-
1473-
1474 if (print_with_color)
print_with_colorDescription
TRUEevaluated 32 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1134 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
32-1134
1475 parse_ls_color ();
executed 32 times by 1 test: parse_ls_color ();
Executed by:
  • ls
32
1476-
1477 /* Test print_with_color again, because the call to parse_ls_color-
1478 may have just reset it -- e.g., if LS_COLORS is invalid. */-
1479 if (print_with_color)
print_with_colorDescription
TRUEevaluated 28 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1138 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
28-1138
1480 {-
1481 /* Avoid following symbolic links when possible. */-
1482 if (is_colored (C_ORPHAN)
is_colored (C_ORPHAN)Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 18 times by 1 test
Evaluated by:
  • ls
10-18
1483 || (is_colored (C_EXEC) && color_symlink_as_referent)
is_colored (C_EXEC)Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
color_symlink_as_referentDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
2-16
1484 || (is_colored (C_MISSING) && format == long_format))
is_colored (C_MISSING)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
format == long_formatDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-10
1485 check_symlink_color = true;
executed 18 times by 1 test: check_symlink_color = 1 ;
Executed by:
  • ls
18
1486 }
executed 28 times by 1 test: end of block
Executed by:
  • ls
28
1487-
1488 if (dereference == DEREF_UNDEFINED)
dereference == DEREF_UNDEFINEDDescription
TRUEevaluated 1160 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 6 times by 1 test
Evaluated by:
  • ls
6-1160
1489 dereference = ((immediate_dirs
executed 1160 times by 3 tests: dereference = ((immediate_dirs || indicator_style == classify || format == long_format) ? DEREF_NEVER : DEREF_COMMAND_LINE_SYMLINK_TO_DIR);
Executed by:
  • dir
  • ls
  • vdir
immediate_dirsDescription
TRUEevaluated 1038 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 122 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
122-1160
1490 || indicator_style == classify
executed 1160 times by 3 tests: dereference = ((immediate_dirs || indicator_style == classify || format == long_format) ? DEREF_NEVER : DEREF_COMMAND_LINE_SYMLINK_TO_DIR);
Executed by:
  • dir
  • ls
  • vdir
indicator_style == classifyDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 118 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
4-1160
1491 || format == long_format)
executed 1160 times by 3 tests: dereference = ((immediate_dirs || indicator_style == classify || format == long_format) ? DEREF_NEVER : DEREF_COMMAND_LINE_SYMLINK_TO_DIR);
Executed by:
  • dir
  • ls
  • vdir
format == long_formatDescription
TRUEevaluated 29 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 89 times by 2 tests
Evaluated by:
  • dir
  • ls
29-1160
1492 ? DEREF_NEVER
executed 1160 times by 3 tests: dereference = ((immediate_dirs || indicator_style == classify || format == long_format) ? DEREF_NEVER : DEREF_COMMAND_LINE_SYMLINK_TO_DIR);
Executed by:
  • dir
  • ls
  • vdir
1160
1493 : DEREF_COMMAND_LINE_SYMLINK_TO_DIR);
executed 1160 times by 3 tests: dereference = ((immediate_dirs || indicator_style == classify || format == long_format) ? DEREF_NEVER : DEREF_COMMAND_LINE_SYMLINK_TO_DIR);
Executed by:
  • dir
  • ls
  • vdir
1160
1494-
1495 /* When using -R, initialize a data structure we'll use to-
1496 detect any directory cycles. */-
1497 if (recursive)
recursiveDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1160 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
6-1160
1498 {-
1499 active_dir_set = hash_initialize (INITIAL_TABLE_SIZE, NULL,-
1500 dev_ino_hash,-
1501 dev_ino_compare,-
1502 dev_ino_free);-
1503 if (active_dir_set == NULL)
active_dir_set == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • ls
0-6
1504 xalloc_die ();
never executed: xalloc_die ();
0
1505-
1506 obstack_init (&dev_ino_obstack);-
1507 }
executed 6 times by 1 test: end of block
Executed by:
  • ls
6
1508-
1509 localtz = tzalloc (getenv ("TZ"));-
1510-
1511 format_needs_stat = sort_type == sort_time || sort_type == sort_size
sort_type == sort_timeDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1158 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
sort_type == sort_sizeDescription
TRUEnever evaluated
FALSEevaluated 1158 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1158
1512 || format == long_format
format == long_formatDescription
TRUEevaluated 149 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 1009 times by 2 tests
Evaluated by:
  • dir
  • ls
149-1009
1513 || print_scontext
print_scontextDescription
TRUEnever evaluated
FALSEevaluated 1009 times by 2 tests
Evaluated by:
  • dir
  • ls
0-1009
1514 || print_block_size;
print_block_sizeDescription
TRUEnever evaluated
FALSEevaluated 1009 times by 2 tests
Evaluated by:
  • dir
  • ls
0-1009
1515 format_needs_type = (! format_needs_stat
! format_needs_statDescription
TRUEevaluated 1009 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 157 times by 2 tests
Evaluated by:
  • ls
  • vdir
157-1009
1516 && (recursive
recursiveDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1003 times by 2 tests
Evaluated by:
  • dir
  • ls
6-1003
1517 || print_with_color
print_with_colorDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 983 times by 2 tests
Evaluated by:
  • dir
  • ls
20-983
1518 || indicator_style != none
indicator_style != noneDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 973 times by 2 tests
Evaluated by:
  • dir
  • ls
10-973
1519 || directories_first));
directories_firstDescription
TRUEnever evaluated
FALSEevaluated 973 times by 2 tests
Evaluated by:
  • dir
  • ls
0-973
1520-
1521 if (dired)
diredDescription
TRUEnever evaluated
FALSEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1166
1522 {-
1523 obstack_init (&dired_obstack);-
1524 obstack_init (&subdired_obstack);-
1525 }
never executed: end of block
0
1526-
1527 if (print_hyperlink)
print_hyperlinkDescription
TRUEnever evaluated
FALSEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1166
1528 {-
1529 file_escape_init ();-
1530-
1531 hostname = xgethostname ();-
1532 /* The hostname is generally ignored,-
1533 so ignore failures obtaining it. */-
1534 if (! hostname)
! hostnameDescription
TRUEnever evaluated
FALSEnever evaluated
0
1535 hostname = "";
never executed: hostname = "";
0
1536 }
never executed: end of block
0
1537-
1538 cwd_n_alloc = 100;-
1539 cwd_file = xnmalloc (cwd_n_alloc, sizeof *cwd_file);-
1540 cwd_n_used = 0;-
1541-
1542 clear_files ();-
1543-
1544 n_files = argc - i;-
1545-
1546 if (n_files <= 0)
n_files <= 0Description
TRUEevaluated 3 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 1163 times by 1 test
Evaluated by:
  • ls
3-1163
1547 {-
1548 if (immediate_dirs)
immediate_dirsDescription
TRUEnever evaluated
FALSEevaluated 3 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-3
1549 gobble_file (".", directory, NOT_AN_INODE_NUMBER, true, "");
never executed: gobble_file (".", directory, NOT_AN_INODE_NUMBER, 1 , "");
0
1550 else-
1551 queue_directory (".", NULL, true);
executed 3 times by 3 tests: queue_directory (".", ((void *)0) , 1 );
Executed by:
  • dir
  • ls
  • vdir
3
1552 }-
1553 else-
1554 do-
1555 gobble_file (argv[i++], unknown, NOT_AN_INODE_NUMBER, true, "");
executed 1225 times by 1 test: gobble_file (argv[i++], unknown, NOT_AN_INODE_NUMBER, 1 , "");
Executed by:
  • ls
1225
1556 while (i < argc);
i < argcDescription
TRUEevaluated 62 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1163 times by 1 test
Evaluated by:
  • ls
62-1163
1557-
1558 if (cwd_n_used)
cwd_n_usedDescription
TRUEevaluated 1047 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 119 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
119-1047
1559 {-
1560 sort_files ();-
1561 if (!immediate_dirs)
!immediate_dirsDescription
TRUEevaluated 119 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 928 times by 1 test
Evaluated by:
  • ls
119-928
1562 extract_dirs_from_files (NULL, true);
executed 119 times by 1 test: extract_dirs_from_files ( ((void *)0) , 1 );
Executed by:
  • ls
119
1563 /* 'cwd_n_used' might be zero now. */-
1564 }
executed 1047 times by 1 test: end of block
Executed by:
  • ls
1047
1565-
1566 /* In the following if/else blocks, it is sufficient to test 'pending_dirs'-
1567 (and not pending_dirs->name) because there may be no markers in the queue-
1568 at this point. A marker may be enqueued when extract_dirs_from_files is-
1569 called with a non-empty string or via print_dir. */-
1570 if (cwd_n_used)
cwd_n_usedDescription
TRUEevaluated 1015 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 151 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
151-1015
1571 {-
1572 print_current_files ();-
1573 if (pending_dirs)
pending_dirsDescription
TRUEnever evaluated
FALSEevaluated 1015 times by 1 test
Evaluated by:
  • ls
0-1015
1574 DIRED_PUTCHAR ('\n');
never executed: end of block
0
1575 }
executed 1015 times by 1 test: end of block
Executed by:
  • ls
1015
1576 else if (n_files <= 1 && pending_dirs && pending_dirs->next == 0)
n_files <= 1Description
TRUEevaluated 145 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 6 times by 1 test
Evaluated by:
  • ls
pending_dirsDescription
TRUEevaluated 29 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 116 times by 1 test
Evaluated by:
  • ls
pending_dirs->next == 0Description
TRUEevaluated 29 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEnever evaluated
0-145
1577 print_dir_name = false;
executed 29 times by 3 tests: print_dir_name = 0 ;
Executed by:
  • dir
  • ls
  • vdir
29
1578-
1579 while (pending_dirs)
pending_dirsDescription
TRUEevaluated 51 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
51-1166
1580 {-
1581 thispend = pending_dirs;-
1582 pending_dirs = pending_dirs->next;-
1583-
1584 if (LOOP_DETECT)
(!!active_dir_set)Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 31 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
20-31
1585 {-
1586 if (thispend->name == NULL)
thispend->name == ((void *)0)Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
10
1587 {-
1588 /* thispend->name == NULL means this is a marker entry-
1589 indicating we've finished processing the directory.-
1590 Use its dev/ino numbers to remove the corresponding-
1591 entry from the active_dir_set hash table. */-
1592 struct dev_ino di = dev_ino_pop ();-
1593 struct dev_ino *found = hash_delete (active_dir_set, &di);-
1594 /* ASSERT_MATCHING_DEV_INO (thispend->realname, di); */-
1595 assert (found);-
1596 dev_ino_free (found);-
1597 free_pending_ent (thispend);-
1598 continue;
executed 10 times by 1 test: continue;
Executed by:
  • ls
10
1599 }-
1600 }
executed 10 times by 1 test: end of block
Executed by:
  • ls
10
1601-
1602 print_dir (thispend->name, thispend->realname,-
1603 thispend->command_line_arg);-
1604-
1605 free_pending_ent (thispend);-
1606 print_dir_name = true;-
1607 }
executed 41 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
41
1608-
1609 if (print_with_color && used_color)
print_with_colorDescription
TRUEevaluated 28 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1138 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
used_colorDescription
TRUEevaluated 24 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
4-1138
1610 {-
1611 int j;-
1612-
1613 /* Skip the restore when it would be a no-op, i.e.,-
1614 when left is "\033[" and right is "m". */-
1615 if (!(color_indicator[C_LEFT].len == 2
color_indicato...LEFT].len == 2Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-24
1616 && memcmp (color_indicator[C_LEFT].string, "\033[", 2) == 0
memcmp (color_...033[", 2) == 0Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-24
1617 && color_indicator[C_RIGHT].len == 1
color_indicato...IGHT].len == 1Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-24
1618 && color_indicator[C_RIGHT].string[0] == 'm'))
color_indicato...ring[0] == 'm'Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-24
1619 restore_default_color ();
never executed: restore_default_color ();
0
1620-
1621 fflush (stdout);-
1622-
1623 signal_restore ();-
1624-
1625 /* Act on any signals that arrived before the default was restored.-
1626 This can process signals out of order, but there doesn't seem to-
1627 be an easy way to do them in order, and the order isn't that-
1628 important anyway. */-
1629 for (j = stop_signal_count; j; j--)
jDescription
TRUEnever evaluated
FALSEevaluated 24 times by 1 test
Evaluated by:
  • ls
0-24
1630 raise (SIGSTOP);
never executed: raise ( 19 );
0
1631 j = interrupt_signal;-
1632 if (j)
jDescription
TRUEnever evaluated
FALSEevaluated 24 times by 1 test
Evaluated by:
  • ls
0-24
1633 raise (j);
never executed: raise (j);
0
1634 }
executed 24 times by 1 test: end of block
Executed by:
  • ls
24
1635-
1636 if (dired)
diredDescription
TRUEnever evaluated
FALSEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1166
1637 {-
1638 /* No need to free these since we're about to exit. */-
1639 dired_dump_obstack ("//DIRED//", &dired_obstack);-
1640 dired_dump_obstack ("//SUBDIRED//", &subdired_obstack);-
1641 printf ("//DIRED-OPTIONS// --quoting-style=%s\n",-
1642 quoting_style_args[get_quoting_style (filename_quoting_options)]);-
1643 }
never executed: end of block
0
1644-
1645 if (LOOP_DETECT)
(!!active_dir_set)Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1160 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
6-1160
1646 {-
1647 assert (hash_get_n_entries (active_dir_set) == 0);-
1648 hash_free (active_dir_set);-
1649 }
executed 6 times by 1 test: end of block
Executed by:
  • ls
6
1650-
1651 return exit_status;
executed 1166 times by 3 tests: return exit_status;
Executed by:
  • dir
  • ls
  • vdir
1166
1652}-
1653-
1654/* Set the line length to the value given by SPEC. Return true if-
1655 successful. 0 means no limit on line length. */-
1656-
1657static bool-
1658set_line_length (char const *spec)-
1659{-
1660 uintmax_t val;-
1661-
1662 /* Treat too-large values as if they were SIZE_MAX, which is-
1663 effectively infinity. */-
1664 switch (xstrtoumax (spec, NULL, 0, &val, ""))-
1665 {-
1666 case LONGINT_OK:
never executed: case LONGINT_OK:
0
1667 line_length = MIN (val, SIZE_MAX);
(( val )<((184...709551615UL)))Description
TRUEnever evaluated
FALSEnever evaluated
0
1668 return true;
never executed: return 1 ;
0
1669-
1670 case LONGINT_OVERFLOW:
never executed: case LONGINT_OVERFLOW:
0
1671 line_length = SIZE_MAX;-
1672 return true;
never executed: return 1 ;
0
1673-
1674 default:
executed 4 times by 2 tests: default:
Executed by:
  • dir
  • vdir
4
1675 return false;
executed 4 times by 2 tests: return 0 ;
Executed by:
  • dir
  • vdir
4
1676 }-
1677}-
1678-
1679/* Set all the option flags according to the switches specified.-
1680 Return the index of the first non-option argument. */-
1681-
1682static int-
1683decode_switches (int argc, char **argv)-
1684{-
1685 char *time_style_option = NULL;-
1686-
1687 bool sort_type_specified = false;-
1688 bool kibibytes_specified = false;-
1689-
1690 qmark_funny_chars = false;-
1691-
1692 /* initialize all switches to default settings */-
1693-
1694 switch (ls_mode)-
1695 {-
1696 case LS_MULTI_COL:
executed 92 times by 1 test: case 2:
Executed by:
  • dir
92
1697 /* This is for the 'dir' program. */-
1698 format = many_per_line;-
1699 set_quoting_style (NULL, escape_quoting_style);-
1700 break;
executed 92 times by 1 test: break;
Executed by:
  • dir
92
1701-
1702 case LS_LONG_FORMAT:
executed 92 times by 1 test: case 3:
Executed by:
  • vdir
92
1703 /* This is for the 'vdir' program. */-
1704 format = long_format;-
1705 set_quoting_style (NULL, escape_quoting_style);-
1706 break;
executed 92 times by 1 test: break;
Executed by:
  • vdir
92
1707-
1708 case LS_LS:
executed 1175 times by 1 test: case 1:
Executed by:
  • ls
1175
1709 /* This is for the 'ls' program. */-
1710 if (isatty (STDOUT_FILENO))
isatty ( 1 )Description
TRUEnever evaluated
FALSEevaluated 1175 times by 1 test
Evaluated by:
  • ls
0-1175
1711 {-
1712 format = many_per_line;-
1713 set_quoting_style (NULL, shell_escape_quoting_style);-
1714 /* See description of qmark_funny_chars, above. */-
1715 qmark_funny_chars = true;-
1716 }
never executed: end of block
0
1717 else-
1718 {-
1719 format = one_per_line;-
1720 qmark_funny_chars = false;-
1721 }
executed 1175 times by 1 test: end of block
Executed by:
  • ls
1175
1722 break;
executed 1175 times by 1 test: break;
Executed by:
  • ls
1175
1723-
1724 default:
never executed: default:
0
1725 abort ();
never executed: abort ();
0
1726 }-
1727-
1728 time_type = time_mtime;-
1729 sort_type = sort_name;-
1730 sort_reverse = false;-
1731 numeric_ids = false;-
1732 print_block_size = false;-
1733 indicator_style = none;-
1734 print_inode = false;-
1735 dereference = DEREF_UNDEFINED;-
1736 recursive = false;-
1737 immediate_dirs = false;-
1738 ignore_mode = IGNORE_DEFAULT;-
1739 ignore_patterns = NULL;-
1740 hide_patterns = NULL;-
1741 print_scontext = false;-
1742-
1743 getenv_quoting_style ();-
1744-
1745 line_length = 80;-
1746 {-
1747 char const *p = getenv ("COLUMNS");-
1748 if (p && *p && ! set_line_length (p))
pDescription
TRUEnever evaluated
FALSEevaluated 1359 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
*pDescription
TRUEnever evaluated
FALSEnever evaluated
! set_line_length (p)Description
TRUEnever evaluated
FALSEnever evaluated
0-1359
1749 error (0, 0,
never executed: error (0, 0, dcgettext (((void *)0), "ignoring invalid width in environment variable COLUMNS: %s" , 5) , quote (p));
0
1750 _("ignoring invalid width in environment variable COLUMNS: %s"),
never executed: error (0, 0, dcgettext (((void *)0), "ignoring invalid width in environment variable COLUMNS: %s" , 5) , quote (p));
0
1751 quote (p));
never executed: error (0, 0, dcgettext (((void *)0), "ignoring invalid width in environment variable COLUMNS: %s" , 5) , quote (p));
0
1752 }-
1753-
1754#ifdef TIOCGWINSZ-
1755 {-
1756 struct winsize ws;-
1757-
1758 if (ioctl (STDOUT_FILENO, TIOCGWINSZ, &ws) != -1
ioctl ( 1 , 0x...3 , &ws) != -1Description
TRUEnever evaluated
FALSEevaluated 1359 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1359
1759 && 0 < ws.ws_col && ws.ws_col == (size_t) ws.ws_col)
0 < ws.ws_colDescription
TRUEnever evaluated
FALSEnever evaluated
ws.ws_col == (...e_t) ws.ws_colDescription
TRUEnever evaluated
FALSEnever evaluated
0
1760 line_length = ws.ws_col;
never executed: line_length = ws.ws_col;
0
1761 }-
1762#endif-
1763-
1764 {-
1765 char const *p = getenv ("TABSIZE");-
1766 tabsize = 8;-
1767 if (p)
pDescription
TRUEnever evaluated
FALSEevaluated 1359 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1359
1768 {-
1769 unsigned long int tmp_ulong;-
1770 if (xstrtoul (p, NULL, 0, &tmp_ulong, NULL) == LONGINT_OK
xstrtoul (p, (... == LONGINT_OKDescription
TRUEnever evaluated
FALSEnever evaluated
0
1771 && tmp_ulong <= SIZE_MAX)
tmp_ulong <= (...73709551615UL)Description
TRUEnever evaluated
FALSEnever evaluated
0
1772 {-
1773 tabsize = tmp_ulong;-
1774 }
never executed: end of block
0
1775 else-
1776 {-
1777 error (0, 0,-
1778 _("ignoring invalid tab size in environment variable TABSIZE: %s"),-
1779 quote (p));-
1780 }
never executed: end of block
0
1781 }-
1782 }-
1783-
1784 while (true)-
1785 {-
1786 int oi = -1;-
1787 int c = getopt_long (argc, argv,-
1788 "abcdfghiklmnopqrstuvw:xABCDFGHI:LNQRST:UXZ1",-
1789 long_options, &oi);-
1790 if (c == -1)
c == -1Description
TRUEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 1809 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
1166-1809
1791 break;
executed 1166 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
1166
1792-
1793 switch (c)-
1794 {-
1795 case 'a':
executed 4 times by 2 tests: case 'a':
Executed by:
  • dir
  • vdir
4
1796 ignore_mode = IGNORE_MINIMAL;-
1797 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
1798-
1799 case 'b':
executed 4 times by 2 tests: case 'b':
Executed by:
  • dir
  • vdir
4
1800 set_quoting_style (NULL, escape_quoting_style);-
1801 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
1802-
1803 case 'c':
executed 5 times by 3 tests: case 'c':
Executed by:
  • dir
  • ls
  • vdir
5
1804 time_type = time_ctime;-
1805 break;
executed 5 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
5
1806-
1807 case 'd':
executed 1046 times by 3 tests: case 'd':
Executed by:
  • dir
  • ls
  • vdir
1046
1808 immediate_dirs = true;-
1809 break;
executed 1046 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
1046
1810-
1811 case 'f':
executed 2 times by 2 tests: case 'f':
Executed by:
  • dir
  • vdir
2
1812 /* Same as enabling -a -U and disabling -l -s. */-
1813 ignore_mode = IGNORE_MINIMAL;-
1814 sort_type = sort_none;-
1815 sort_type_specified = true;-
1816 /* disable -l */-
1817 if (format == long_format)
format == long_formatDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • vdir
FALSEevaluated 1 time by 1 test
Evaluated by:
  • dir
1
1818 format = (isatty (STDOUT_FILENO) ? many_per_line : one_per_line);
executed 1 time by 1 test: format = (isatty ( 1 ) ? many_per_line : one_per_line);
Executed by:
  • vdir
isatty ( 1 )Description
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • vdir
0-1
1819 print_block_size = false; /* disable -s */-
1820 print_with_color = false; /* disable --color */-
1821 print_hyperlink = false; /* disable --hyperlink */-
1822 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
1823-
1824 case FILE_TYPE_INDICATOR_OPTION: /* --file-type */
executed 4 times by 3 tests: case FILE_TYPE_INDICATOR_OPTION:
Executed by:
  • dir
  • ls
  • vdir
4
1825 indicator_style = file_type;-
1826 break;
executed 4 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
4
1827-
1828 case 'g':
executed 122 times by 3 tests: case 'g':
Executed by:
  • dir
  • ls
  • vdir
122
1829 format = long_format;-
1830 print_owner = false;-
1831 break;
executed 122 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
122
1832-
1833 case 'h':
executed 4 times by 2 tests: case 'h':
Executed by:
  • dir
  • vdir
4
1834 file_human_output_opts = human_output_opts =-
1835 human_autoscale | human_SI | human_base_1024;-
1836 file_output_block_size = output_block_size = 1;-
1837 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
1838-
1839 case 'i':
executed 4 times by 2 tests: case 'i':
Executed by:
  • dir
  • vdir
4
1840 print_inode = true;-
1841 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
1842-
1843 case 'k':
executed 4 times by 2 tests: case 'k':
Executed by:
  • dir
  • vdir
4
1844 kibibytes_specified = true;-
1845 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
1846-
1847 case 'l':
executed 22 times by 3 tests: case 'l':
Executed by:
  • dir
  • ls
  • vdir
22
1848 format = long_format;-
1849 break;
executed 22 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
22
1850-
1851 case 'm':
executed 2 times by 2 tests: case 'm':
Executed by:
  • dir
  • vdir
2
1852 format = with_commas;-
1853 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
1854-
1855 case 'n':
executed 24 times by 3 tests: case 'n':
Executed by:
  • dir
  • ls
  • vdir
24
1856 numeric_ids = true;-
1857 format = long_format;-
1858 break;
executed 24 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
24
1859-
1860 case 'o': /* Just like -l, but don't display group info. */
executed 124 times by 3 tests: case 'o':
Executed by:
  • dir
  • ls
  • vdir
124
1861 format = long_format;-
1862 print_group = false;-
1863 break;
executed 124 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
124
1864-
1865 case 'p':
executed 2 times by 2 tests: case 'p':
Executed by:
  • dir
  • vdir
2
1866 indicator_style = slash;-
1867 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
1868-
1869 case 'q':
executed 22 times by 3 tests: case 'q':
Executed by:
  • dir
  • ls
  • vdir
22
1870 qmark_funny_chars = true;-
1871 break;
executed 22 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
22
1872-
1873 case 'r':
executed 4 times by 2 tests: case 'r':
Executed by:
  • dir
  • vdir
4
1874 sort_reverse = true;-
1875 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
1876-
1877 case 's':
executed 4 times by 2 tests: case 's':
Executed by:
  • dir
  • vdir
4
1878 print_block_size = true;-
1879 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
1880-
1881 case 't':
executed 9 times by 3 tests: case 't':
Executed by:
  • dir
  • ls
  • vdir
9
1882 sort_type = sort_time;-
1883 sort_type_specified = true;-
1884 break;
executed 9 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
9
1885-
1886 case 'u':
executed 4 times by 3 tests: case 'u':
Executed by:
  • dir
  • ls
  • vdir
4
1887 time_type = time_atime;-
1888 break;
executed 4 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
4
1889-
1890 case 'v':
executed 4 times by 3 tests: case 'v':
Executed by:
  • dir
  • ls
  • vdir
4
1891 sort_type = sort_version;-
1892 sort_type_specified = true;-
1893 break;
executed 4 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
4
1894-
1895 case 'w':
executed 4 times by 2 tests: case 'w':
Executed by:
  • dir
  • vdir
4
1896 if (! set_line_length (optarg))
! set_line_length (optarg)Description
TRUEevaluated 4 times by 2 tests
Evaluated by:
  • dir
  • vdir
FALSEnever evaluated
0-4
1897 die (LS_FAILURE, 0, "%s: %s", _("invalid line width"),
executed 4 times by 2 tests: ((!!sizeof (struct { _Static_assert (LS_FAILURE, "verify_expr (" "LS_FAILURE" ", " "(error (LS_FAILURE, 0, \"%s: %s\", dcgettext (((void *)0), \"invalid line width\", 5), quote (optarg)), assume (false))" ")"); int _gl_dummy; })) ? ((error (LS_FAILURE, 0,... *)0), "invalid line width" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error (LS_FAILURE, 0, "%s: %s", dcgettext (((void *)0), "invalid line width" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
Executed by:
  • dir
  • vdir
4
1898 quote (optarg));
executed 4 times by 2 tests: ((!!sizeof (struct { _Static_assert (LS_FAILURE, "verify_expr (" "LS_FAILURE" ", " "(error (LS_FAILURE, 0, \"%s: %s\", dcgettext (((void *)0), \"invalid line width\", 5), quote (optarg)), assume (false))" ")"); int _gl_dummy; })) ? ((error (LS_FAILURE, 0,... *)0), "invalid line width" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error (LS_FAILURE, 0, "%s: %s", dcgettext (((void *)0), "invalid line width" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
Executed by:
  • dir
  • vdir
4
1899 break;
never executed: break;
0
1900-
1901 case 'x':
executed 2 times by 2 tests: case 'x':
Executed by:
  • dir
  • vdir
2
1902 format = horizontal;-
1903 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
1904-
1905 case 'A':
executed 6 times by 3 tests: case 'A':
Executed by:
  • dir
  • ls
  • vdir
6
1906 ignore_mode = IGNORE_DOT_AND_DOTDOT;-
1907 break;
executed 6 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
6
1908-
1909 case 'B':
executed 4 times by 2 tests: case 'B':
Executed by:
  • dir
  • vdir
4
1910 add_ignore_pattern ("*~");-
1911 add_ignore_pattern (".*~");-
1912 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
1913-
1914 case 'C':
executed 3 times by 3 tests: case 'C':
Executed by:
  • dir
  • ls
  • vdir
3
1915 format = many_per_line;-
1916 break;
executed 3 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
3
1917-
1918 case 'D':
executed 4 times by 2 tests: case 'D':
Executed by:
  • dir
  • vdir
4
1919 dired = true;-
1920 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
1921-
1922 case 'F':
executed 16 times by 3 tests: case 'F':
Executed by:
  • dir
  • ls
  • vdir
16
1923 indicator_style = classify;-
1924 break;
executed 16 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
16
1925-
1926 case 'G': /* inhibit display of group info */
executed 4 times by 2 tests: case 'G':
Executed by:
  • dir
  • vdir
4
1927 print_group = false;-
1928 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
1929-
1930 case 'H':
executed 6 times by 3 tests: case 'H':
Executed by:
  • dir
  • ls
  • vdir
6
1931 dereference = DEREF_COMMAND_LINE_ARGUMENTS;-
1932 break;
executed 6 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
6
1933-
1934 case DEREFERENCE_COMMAND_LINE_SYMLINK_TO_DIR_OPTION:
executed 2 times by 2 tests: case DEREFERENCE_COMMAND_LINE_SYMLINK_TO_DIR_OPTION:
Executed by:
  • dir
  • vdir
2
1935 dereference = DEREF_COMMAND_LINE_SYMLINK_TO_DIR;-
1936 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
1937-
1938 case 'I':
executed 6 times by 3 tests: case 'I':
Executed by:
  • dir
  • ls
  • vdir
6
1939 add_ignore_pattern (optarg);-
1940 break;
executed 6 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
6
1941-
1942 case 'L':
executed 8 times by 3 tests: case 'L':
Executed by:
  • dir
  • ls
  • vdir
8
1943 dereference = DEREF_ALWAYS;-
1944 break;
executed 8 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
8
1945-
1946 case 'N':
executed 6 times by 3 tests: case 'N':
Executed by:
  • dir
  • ls
  • vdir
6
1947 set_quoting_style (NULL, literal_quoting_style);-
1948 break;
executed 6 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
6
1949-
1950 case 'Q':
executed 6 times by 3 tests: case 'Q':
Executed by:
  • dir
  • ls
  • vdir
6
1951 set_quoting_style (NULL, c_quoting_style);-
1952 break;
executed 6 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
6
1953-
1954 case 'R':
executed 10 times by 3 tests: case 'R':
Executed by:
  • dir
  • ls
  • vdir
10
1955 recursive = true;-
1956 break;
executed 10 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
10
1957-
1958 case 'S':
executed 2 times by 2 tests: case 'S':
Executed by:
  • dir
  • vdir
2
1959 sort_type = sort_size;-
1960 sort_type_specified = true;-
1961 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
1962-
1963 case 'T':
executed 4 times by 2 tests: case 'T':
Executed by:
  • dir
  • vdir
4
1964 tabsize = xnumtoumax (optarg, 0, 0, SIZE_MAX, "",-
1965 _("invalid tab size"), LS_FAILURE);-
1966 break;
never executed: break;
0
1967-
1968 case 'U':
executed 4 times by 3 tests: case 'U':
Executed by:
  • dir
  • ls
  • vdir
4
1969 sort_type = sort_none;-
1970 sort_type_specified = true;-
1971 break;
executed 4 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
4
1972-
1973 case 'X':
executed 2 times by 2 tests: case 'X':
Executed by:
  • dir
  • vdir
2
1974 sort_type = sort_extension;-
1975 sort_type_specified = true;-
1976 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
1977-
1978 case '1':
executed 6 times by 3 tests: case '1':
Executed by:
  • dir
  • ls
  • vdir
6
1979 /* -1 has no effect after -l. */-
1980 if (format != long_format)
format != long_formatDescription
TRUEevaluated 5 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 1 time by 1 test
Evaluated by:
  • vdir
1-5
1981 format = one_per_line;
executed 5 times by 2 tests: format = one_per_line;
Executed by:
  • dir
  • ls
5
1982 break;
executed 6 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
6
1983-
1984 case AUTHOR_OPTION:
executed 2 times by 2 tests: case AUTHOR_OPTION:
Executed by:
  • dir
  • vdir
2
1985 print_author = true;-
1986 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
1987-
1988 case HIDE_OPTION:
executed 2 times by 2 tests: case HIDE_OPTION:
Executed by:
  • dir
  • vdir
2
1989 {-
1990 struct ignore_pattern *hide = xmalloc (sizeof *hide);-
1991 hide->pattern = optarg;-
1992 hide->next = hide_patterns;-
1993 hide_patterns = hide;-
1994 }-
1995 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
1996-
1997 case SORT_OPTION:
executed 2 times by 2 tests: case SORT_OPTION:
Executed by:
  • dir
  • vdir
2
1998 sort_type = XARGMATCH ("--sort", optarg, sort_args, sort_types);-
1999 sort_type_specified = true;-
2000 break;
never executed: break;
0
2001-
2002 case GROUP_DIRECTORIES_FIRST_OPTION:
executed 2 times by 2 tests: case GROUP_DIRECTORIES_FIRST_OPTION:
Executed by:
  • dir
  • vdir
2
2003 directories_first = true;-
2004 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
2005-
2006 case TIME_OPTION:
executed 2 times by 2 tests: case TIME_OPTION:
Executed by:
  • dir
  • vdir
2
2007 time_type = XARGMATCH ("--time", optarg, time_args, time_types);-
2008 break;
never executed: break;
0
2009-
2010 case FORMAT_OPTION:
executed 2 times by 2 tests: case FORMAT_OPTION:
Executed by:
  • dir
  • vdir
2
2011 format = XARGMATCH ("--format", optarg, format_args, format_types);-
2012 break;
never executed: break;
0
2013-
2014 case FULL_TIME_OPTION:
executed 4 times by 3 tests: case FULL_TIME_OPTION:
Executed by:
  • dir
  • ls
  • vdir
4
2015 format = long_format;-
2016 time_style_option = bad_cast ("full-iso");-
2017 break;
executed 4 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
4
2018-
2019 case COLOR_OPTION:
executed 34 times by 3 tests: case COLOR_OPTION:
Executed by:
  • dir
  • ls
  • vdir
34
2020 {-
2021 int i;-
2022 if (optarg)
optargDescription
TRUEevaluated 32 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • vdir
2-32
2023 i = XARGMATCH ("--color", optarg, when_args, when_types);
executed 32 times by 1 test: i = ((when_types) [__xargmatch_internal ("--color", optarg, when_args, (char const *) (when_types), sizeof *(when_types), argmatch_die)]);
Executed by:
  • ls
32
2024 else-
2025 /* Using --color with no argument is equivalent to using-
2026 --color=always. */-
2027 i = when_always;
executed 2 times by 2 tests: i = when_always;
Executed by:
  • dir
  • vdir
2
2028-
2029 print_with_color = (i == when_always
i == when_alwaysDescription
TRUEevaluated 34 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEnever evaluated
0-34
2030 || (i == when_if_tty
i == when_if_ttyDescription
TRUEnever evaluated
FALSEnever evaluated
0
2031 && isatty (STDOUT_FILENO)));
isatty ( 1 )Description
TRUEnever evaluated
FALSEnever evaluated
0
2032-
2033 if (print_with_color)
print_with_colorDescription
TRUEevaluated 34 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEnever evaluated
0-34
2034 {-
2035 /* Don't use TAB characters in output. Some terminal-
2036 emulators can't handle the combination of tabs and-
2037 color codes on the same line. */-
2038 tabsize = 0;-
2039 }
executed 34 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
34
2040 break;
executed 34 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
34
2041 }-
2042-
2043 case HYPERLINK_OPTION:
executed 2 times by 2 tests: case HYPERLINK_OPTION:
Executed by:
  • dir
  • vdir
2
2044 {-
2045 int i;-
2046 if (optarg)
optargDescription
TRUEnever evaluated
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • vdir
0-2
2047 i = XARGMATCH ("--hyperlink", optarg, when_args, when_types);
never executed: i = ((when_types) [__xargmatch_internal ("--hyperlink", optarg, when_args, (char const *) (when_types), sizeof *(when_types), argmatch_die)]);
0
2048 else-
2049 /* Using --hyperlink with no argument is equivalent to using-
2050 --hyperlink=always. */-
2051 i = when_always;
executed 2 times by 2 tests: i = when_always;
Executed by:
  • dir
  • vdir
2
2052-
2053 print_hyperlink = (i == when_always
i == when_alwaysDescription
TRUEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • vdir
FALSEnever evaluated
0-2
2054 || (i == when_if_tty
i == when_if_ttyDescription
TRUEnever evaluated
FALSEnever evaluated
0
2055 && isatty (STDOUT_FILENO)));
isatty ( 1 )Description
TRUEnever evaluated
FALSEnever evaluated
0
2056 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
2057 }-
2058-
2059 case INDICATOR_STYLE_OPTION:
executed 4 times by 2 tests: case INDICATOR_STYLE_OPTION:
Executed by:
  • dir
  • vdir
4
2060 indicator_style = XARGMATCH ("--indicator-style", optarg,-
2061 indicator_style_args,-
2062 indicator_style_types);-
2063 break;
never executed: break;
0
2064-
2065 case QUOTING_STYLE_OPTION:
executed 36 times by 3 tests: case QUOTING_STYLE_OPTION:
Executed by:
  • dir
  • ls
  • vdir
36
2066 set_quoting_style (NULL,-
2067 XARGMATCH ("--quoting-style", optarg,-
2068 quoting_style_args,-
2069 quoting_style_vals));-
2070 break;
executed 34 times by 1 test: break;
Executed by:
  • ls
34
2071-
2072 case TIME_STYLE_OPTION:
executed 11 times by 3 tests: case TIME_STYLE_OPTION:
Executed by:
  • dir
  • ls
  • vdir
11
2073 time_style_option = optarg;-
2074 break;
executed 11 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
11
2075-
2076 case SHOW_CONTROL_CHARS_OPTION:
executed 2 times by 2 tests: case SHOW_CONTROL_CHARS_OPTION:
Executed by:
  • dir
  • vdir
2
2077 qmark_funny_chars = false;-
2078 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
2079-
2080 case BLOCK_SIZE_OPTION:
executed 2 times by 2 tests: case BLOCK_SIZE_OPTION:
Executed by:
  • dir
  • vdir
2
2081 {-
2082 enum strtol_error e = human_options (optarg, &human_output_opts,-
2083 &output_block_size);-
2084 if (e != LONGINT_OK)
e != LONGINT_OKDescription
TRUEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • vdir
FALSEnever evaluated
0-2
2085 xstrtol_fatal (e, oi, 0, long_options, optarg);
executed 2 times by 2 tests: xstrtol_fatal (e, oi, 0, long_options, optarg);
Executed by:
  • dir
  • vdir
2
2086 file_human_output_opts = human_output_opts;-
2087 file_output_block_size = output_block_size;-
2088 }-
2089 break;
never executed: break;
0
2090-
2091 case SI_OPTION:
executed 2 times by 2 tests: case SI_OPTION:
Executed by:
  • dir
  • vdir
2
2092 file_human_output_opts = human_output_opts =-
2093 human_autoscale | human_SI;-
2094 file_output_block_size = output_block_size = 1;-
2095 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • vdir
2
2096-
2097 case 'Z':
executed 4 times by 2 tests: case 'Z':
Executed by:
  • dir
  • vdir
4
2098 print_scontext = true;-
2099 break;
executed 4 times by 2 tests: break;
Executed by:
  • dir
  • vdir
4
2100-
2101 case_GETOPT_HELP_CHAR;
never executed: break;
executed 152 times by 3 tests: case GETOPT_HELP_CHAR:
Executed by:
  • dir
  • ls
  • vdir
0-152
2102-
2103 case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
executed 12 times by 3 tests: exit ( 0 );
Executed by:
  • dir
  • ls
  • vdir
never executed: break;
executed 12 times by 3 tests: case GETOPT_VERSION_CHAR:
Executed by:
  • dir
  • ls
  • vdir
0-12
2104-
2105 default:
executed 7 times by 3 tests: default:
Executed by:
  • dir
  • ls
  • vdir
7
2106 usage (LS_FAILURE);-
2107 }
never executed: end of block
0
2108 }-
2109-
2110 if (! output_block_size)
! output_block_sizeDescription
TRUEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEnever evaluated
0-1166
2111 {-
2112 char const *ls_block_size = getenv ("LS_BLOCK_SIZE");-
2113 human_options (ls_block_size,-
2114 &human_output_opts, &output_block_size);-
2115 if (ls_block_size || getenv ("BLOCK_SIZE"))
ls_block_sizeDescription
TRUEnever evaluated
FALSEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
getenv ("BLOCK_SIZE")Description
TRUEnever evaluated
FALSEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1166
2116 {-
2117 file_human_output_opts = human_output_opts;-
2118 file_output_block_size = output_block_size;-
2119 }
never executed: end of block
0
2120 if (kibibytes_specified)
kibibytes_specifiedDescription
TRUEnever evaluated
FALSEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1166
2121 {-
2122 human_output_opts = 0;-
2123 output_block_size = 1024;-
2124 }
never executed: end of block
0
2125 }
executed 1166 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
1166
2126-
2127 /* Determine the max possible number of display columns. */-
2128 max_idx = line_length / MIN_COLUMN_WIDTH;-
2129 /* Account for first display column not having a separator,-
2130 or line_lengths shorter than MIN_COLUMN_WIDTH. */-
2131 max_idx += line_length % MIN_COLUMN_WIDTH != 0;-
2132-
2133 enum quoting_style qs = get_quoting_style (NULL);-
2134 align_variable_outer_quotes = format != with_commas
format != with_commasDescription
TRUEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEnever evaluated
0-1166
2135 && format != one_per_line
format != one_per_lineDescription
TRUEevaluated 151 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 1015 times by 1 test
Evaluated by:
  • ls
151-1015
2136 && (line_length || format == long_format)
line_lengthDescription
TRUEevaluated 151 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEnever evaluated
format == long_formatDescription
TRUEnever evaluated
FALSEnever evaluated
0-151
2137 && (qs == shell_quoting_style
qs == shell_quoting_styleDescription
TRUEnever evaluated
FALSEevaluated 151 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-151
2138 || qs == shell_escape_quoting_style
qs == shell_es..._quoting_styleDescription
TRUEnever evaluated
FALSEevaluated 151 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-151
2139 || qs == c_maybe_quoting_style);
qs == c_maybe_quoting_styleDescription
TRUEnever evaluated
FALSEevaluated 151 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-151
2140 filename_quoting_options = clone_quoting_options (NULL);-
2141 if (qs == escape_quoting_style)
qs == escape_quoting_styleDescription
TRUEevaluated 6 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 1160 times by 1 test
Evaluated by:
  • ls
6-1160
2142 set_char_quoting (filename_quoting_options, ' ', 1);
executed 6 times by 3 tests: set_char_quoting (filename_quoting_options, ' ', 1);
Executed by:
  • dir
  • ls
  • vdir
6
2143 if (file_type <= indicator_style)
file_type <= indicator_styleDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1152 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
14-1152
2144 {-
2145 char const *p;-
2146 for (p = &"*=>@|"[indicator_style - file_type]; *p; p++)
*pDescription
TRUEevaluated 58 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 14 times by 1 test
Evaluated by:
  • ls
14-58
2147 set_char_quoting (filename_quoting_options, *p, 1);
executed 58 times by 1 test: set_char_quoting (filename_quoting_options, *p, 1);
Executed by:
  • ls
58
2148 }
executed 14 times by 1 test: end of block
Executed by:
  • ls
14
2149-
2150 dirname_quoting_options = clone_quoting_options (NULL);-
2151 set_char_quoting (dirname_quoting_options, ':', 1);-
2152-
2153 /* --dired is meaningful only with --format=long (-l).-
2154 Otherwise, ignore it. FIXME: warn about this?-
2155 Alternatively, make --dired imply --format=long? */-
2156 if (dired && (format != long_format || print_hyperlink))
diredDescription
TRUEnever evaluated
FALSEevaluated 1166 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
format != long_formatDescription
TRUEnever evaluated
FALSEnever evaluated
print_hyperlinkDescription
TRUEnever evaluated
FALSEnever evaluated
0-1166
2157 dired = false;
never executed: dired = 0 ;
0
2158-
2159 /* If -c or -u is specified and not -l (or any other option that implies -l),-
2160 and no sort-type was specified, then sort by the ctime (-c) or atime (-u).-
2161 The behavior of ls when using either -c or -u but with neither -l nor -t-
2162 appears to be unspecified by POSIX. So, with GNU ls, '-u' alone means-
2163 sort by atime (this is the one that's not specified by the POSIX spec),-
2164 -lu means show atime and sort by name, -lut means show atime and sort-
2165 by atime. */-
2166-
2167 if ((time_type == time_ctime || time_type == time_atime)
time_type == time_ctimeDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1163 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
time_type == time_atimeDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1161 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
2-1163
2168 && !sort_type_specified && format != long_format)
!sort_type_specifiedDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 3 times by 1 test
Evaluated by:
  • ls
format != long_formatDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • ls
FALSEevaluated 1 time by 1 test
Evaluated by:
  • ls
1-3
2169 {-
2170 sort_type = sort_time;-
2171 }
executed 1 time by 1 test: end of block
Executed by:
  • ls
1
2172-
2173 if (format == long_format)
format == long_formatDescription
TRUEevaluated 149 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 1017 times by 2 tests
Evaluated by:
  • dir
  • ls
149-1017
2174 {-
2175 char *style = time_style_option;-
2176 static char const posix_prefix[] = "posix-";-
2177-
2178 if (! style)
! styleDescription
TRUEevaluated 138 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 11 times by 1 test
Evaluated by:
  • ls
11-138
2179 if (! (style = getenv ("TIME_STYLE")))
! (style = get..."TIME_STYLE"))Description
TRUEevaluated 138 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-138
2180 style = bad_cast ("locale");
executed 138 times by 2 tests: style = bad_cast ("locale");
Executed by:
  • ls
  • vdir
138
2181-
2182 while (STREQ_LEN (style, posix_prefix, sizeof posix_prefix - 1))
never executed: __result = (((const unsigned char *) (const char *) ( style ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( posix_prefix ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
( (__extension... - 1 ))) == 0)Description
TRUEnever evaluated
FALSEevaluated 149 times by 2 tests
Evaluated by:
  • ls
  • vdir
__builtin_cons...x_prefix - 1 )Description
TRUEevaluated 149 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
__builtin_constant_p ( style )Description
TRUEnever evaluated
FALSEevaluated 149 times by 2 tests
Evaluated by:
  • ls
  • vdir
strlen ( style..._prefix - 1 ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...posix_prefix )Description
TRUEnever evaluated
FALSEevaluated 149 times by 2 tests
Evaluated by:
  • ls
  • vdir
strlen ( posix..._prefix - 1 ))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-149
2183 {-
2184 if (! hard_locale (LC_TIME))
! hard_locale ( 2 )Description
TRUEnever evaluated
FALSEnever evaluated
0
2185 return optind;
never executed: return optind;
0
2186 style += sizeof posix_prefix - 1;-
2187 }
never executed: end of block
0
2188-
2189 if (*style == '+')
*style == '+'Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 141 times by 2 tests
Evaluated by:
  • ls
  • vdir
8-141
2190 {-
2191 char *p0 = style + 1;-
2192 char *p1 = strchr (p0, '\n');
__builtin_constant_p ( '\n' )Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
!__builtin_constant_p ( p0 )Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
( '\n' ) == '\0'Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • ls
0-8
2193 if (! p1)
! p1Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-8
2194 p1 = p0;
executed 8 times by 1 test: p1 = p0;
Executed by:
  • ls
8
2195 else-
2196 {-
2197 if (strchr (p1 + 1, '\n'))
(__extension__...+ 1 , '\n' )))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( '\n' )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_con...t_p ( p1 + 1 )Description
TRUEnever evaluated
FALSEnever evaluated
( '\n' ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
2198 die (LS_FAILURE, 0, _("invalid time style format %s"),
never executed: ((!!sizeof (struct { _Static_assert (LS_FAILURE, "verify_expr (" "LS_FAILURE" ", " "(error (LS_FAILURE, 0, dcgettext (((void *)0), \"invalid time style format %s\", 5), quote (p0)), assume (false))" ")"); int _gl_dummy; })) ? ((error (LS_FAILURE, 0, dcget...)0), "invalid time style format %s" , 5) , quote (p0)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error (LS_FAILURE, 0, dcgettext (((void *)0), "invalid time style format %s" , 5) , quote (p0)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
2199 quote (p0));
never executed: ((!!sizeof (struct { _Static_assert (LS_FAILURE, "verify_expr (" "LS_FAILURE" ", " "(error (LS_FAILURE, 0, dcgettext (((void *)0), \"invalid time style format %s\", 5), quote (p0)), assume (false))" ")"); int _gl_dummy; })) ? ((error (LS_FAILURE, 0, dcget...)0), "invalid time style format %s" , 5) , quote (p0)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error (LS_FAILURE, 0, dcgettext (((void *)0), "invalid time style format %s" , 5) , quote (p0)), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
2200 *p1++ = '\0';-
2201 }
never executed: end of block
0
2202 long_time_format[0] = p0;-
2203 long_time_format[1] = p1;-
2204 }
executed 8 times by 1 test: end of block
Executed by:
  • ls
8
2205 else-
2206 {-
2207 ptrdiff_t res = argmatch (style, time_style_args,-
2208 (char const *) time_style_types,-
2209 sizeof (*time_style_types));-
2210 if (res < 0)
res < 0Description
TRUEnever evaluated
FALSEevaluated 141 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-141
2211 {-
2212 /* This whole block used to be a simple use of XARGMATCH.-
2213 but that didn't print the "posix-"-prefixed variants or-
2214 the "+"-prefixed format string option upon failure. */-
2215 argmatch_invalid ("time style", style, res);-
2216-
2217 /* The following is a manual expansion of argmatch_valid,-
2218 but with the added "+ ..." description and the [posix-]-
2219 prefixes prepended. Note that this simplification works-
2220 only because all four existing time_style_types values-
2221 are distinct. */-
2222 fputs (_("Valid arguments are:\n"), stderr);-
2223 char const *const *p = time_style_args;-
2224 while (*p)
*pDescription
TRUEnever evaluated
FALSEnever evaluated
0
2225 fprintf (stderr, " - [posix-]%s\n", *p++);
never executed: fprintf ( stderr , " - [posix-]%s\n", *p++);
0
2226 fputs (_(" - +FORMAT (e.g., +%H:%M) for a 'date'-style"-
2227 " format\n"), stderr);-
2228 usage (LS_FAILURE);-
2229 }
never executed: end of block
0
2230 switch (res)-
2231 {-
2232 case full_iso_time_style:
executed 2 times by 1 test: case full_iso_time_style:
Executed by:
  • ls
2
2233 long_time_format[0] = long_time_format[1] =-
2234 "%Y-%m-%d %H:%M:%S.%N %z";-
2235 break;
executed 2 times by 1 test: break;
Executed by:
  • ls
2
2236-
2237 case long_iso_time_style:
executed 1 time by 1 test: case long_iso_time_style:
Executed by:
  • ls
1
2238 long_time_format[0] = long_time_format[1] = "%Y-%m-%d %H:%M";-
2239 break;
executed 1 time by 1 test: break;
Executed by:
  • ls
1
2240-
2241 case iso_time_style:
never executed: case iso_time_style:
0
2242 long_time_format[0] = "%Y-%m-%d ";-
2243 long_time_format[1] = "%m-%d %H:%M";-
2244 break;
never executed: break;
0
2245-
2246 case locale_time_style:
executed 138 times by 2 tests: case locale_time_style:
Executed by:
  • ls
  • vdir
138
2247 if (hard_locale (LC_TIME))
hard_locale ( 2 )Description
TRUEnever evaluated
FALSEevaluated 138 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-138
2248 {-
2249 for (int i = 0; i < 2; i++)
i < 2Description
TRUEnever evaluated
FALSEnever evaluated
0
2250 long_time_format[i] =
never executed: long_time_format[i] = dcgettext ( ((void *)0) , long_time_format[i], 2 );
0
2251 dcgettext (NULL, long_time_format[i], LC_TIME);
never executed: long_time_format[i] = dcgettext ( ((void *)0) , long_time_format[i], 2 );
0
2252 }
never executed: end of block
0
2253 }
executed 138 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
138
2254 }
executed 141 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
141
2255-
2256 abformat_init ();-
2257 }
executed 149 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
149
2258-
2259 return optind;
executed 1166 times by 3 tests: return optind;
Executed by:
  • dir
  • ls
  • vdir
1166
2260}-
2261-
2262/* Parse a string as part of the LS_COLORS variable; this may involve-
2263 decoding all kinds of escape characters. If equals_end is set an-
2264 unescaped equal sign ends the string, otherwise only a : or \0-
2265 does. Set *OUTPUT_COUNT to the number of bytes output. Return-
2266 true if successful.-
2267-
2268 The resulting string is *not* null-terminated, but may contain-
2269 embedded nulls.-
2270-
2271 Note that both dest and src are char **; on return they point to-
2272 the first free byte after the array and the character that ended-
2273 the input string, respectively. */-
2274-
2275static bool-
2276get_funky_string (char **dest, const char **src, bool equals_end,-
2277 size_t *output_count)-
2278{-
2279 char num; /* For numerical codes */-
2280 size_t count; /* Something to count with */-
2281 enum {-
2282 ST_GND, ST_BACKSLASH, ST_OCTAL, ST_HEX, ST_CARET, ST_END, ST_ERROR-
2283 } state;-
2284 const char *p;-
2285 char *q;-
2286-
2287 p = *src; /* We don't want to double-indirect */-
2288 q = *dest; /* the whole darn time. */-
2289-
2290 count = 0; /* No characters counted in yet. */-
2291 num = 0;-
2292-
2293 state = ST_GND; /* Start in ground state. */-
2294 while (state < ST_END)
state < ST_ENDDescription
TRUEevaluated 314 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 62 times by 1 test
Evaluated by:
  • ls
62-314
2295 {-
2296 switch (state)-
2297 {-
2298 case ST_GND: /* Ground state (no escapes) */
executed 314 times by 1 test: case ST_GND:
Executed by:
  • ls
314
2299 switch (*p)-
2300 {-
2301 case ':':
executed 46 times by 1 test: case ':':
Executed by:
  • ls
46
2302 case '\0':
executed 16 times by 1 test: case '\0':
Executed by:
  • ls
16
2303 state = ST_END; /* End of string */-
2304 break;
executed 62 times by 1 test: break;
Executed by:
  • ls
62
2305 case '\\':
never executed: case '\\':
0
2306 state = ST_BACKSLASH; /* Backslash escape sequence */-
2307 ++p;-
2308 break;
never executed: break;
0
2309 case '^':
never executed: case '^':
0
2310 state = ST_CARET; /* Caret escape */-
2311 ++p;-
2312 break;
never executed: break;
0
2313 case '=':
never executed: case '=':
0
2314 if (equals_end)
equals_endDescription
TRUEnever evaluated
FALSEnever evaluated
0
2315 {-
2316 state = ST_END; /* End */-
2317 break;
never executed: break;
0
2318 }-
2319 FALLTHROUGH;-
2320 default:
code before this statement never executed: default:
executed 252 times by 1 test: default:
Executed by:
  • ls
0-252
2321 *(q++) = *(p++);-
2322 ++count;-
2323 break;
executed 252 times by 1 test: break;
Executed by:
  • ls
252
2324 }-
2325 break;
executed 314 times by 1 test: break;
Executed by:
  • ls
314
2326-
2327 case ST_BACKSLASH: /* Backslash escaped character */
never executed: case ST_BACKSLASH:
0
2328 switch (*p)-
2329 {-
2330 case '0':
never executed: case '0':
0
2331 case '1':
never executed: case '1':
0
2332 case '2':
never executed: case '2':
0
2333 case '3':
never executed: case '3':
0
2334 case '4':
never executed: case '4':
0
2335 case '5':
never executed: case '5':
0
2336 case '6':
never executed: case '6':
0
2337 case '7':
never executed: case '7':
0
2338 state = ST_OCTAL; /* Octal sequence */-
2339 num = *p - '0';-
2340 break;
never executed: break;
0
2341 case 'x':
never executed: case 'x':
0
2342 case 'X':
never executed: case 'X':
0
2343 state = ST_HEX; /* Hex sequence */-
2344 num = 0;-
2345 break;
never executed: break;
0
2346 case 'a': /* Bell */
never executed: case 'a':
0
2347 num = '\a';-
2348 break;
never executed: break;
0
2349 case 'b': /* Backspace */
never executed: case 'b':
0
2350 num = '\b';-
2351 break;
never executed: break;
0
2352 case 'e': /* Escape */
never executed: case 'e':
0
2353 num = 27;-
2354 break;
never executed: break;
0
2355 case 'f': /* Form feed */
never executed: case 'f':
0
2356 num = '\f';-
2357 break;
never executed: break;
0
2358 case 'n': /* Newline */
never executed: case 'n':
0
2359 num = '\n';-
2360 break;
never executed: break;
0
2361 case 'r': /* Carriage return */
never executed: case 'r':
0
2362 num = '\r';-
2363 break;
never executed: break;
0
2364 case 't': /* Tab */
never executed: case 't':
0
2365 num = '\t';-
2366 break;
never executed: break;
0
2367 case 'v': /* Vtab */
never executed: case 'v':
0
2368 num = '\v';-
2369 break;
never executed: break;
0
2370 case '?': /* Delete */
never executed: case '?':
0
2371 num = 127;-
2372 break;
never executed: break;
0
2373 case '_': /* Space */
never executed: case '_':
0
2374 num = ' ';-
2375 break;
never executed: break;
0
2376 case '\0': /* End of string */
never executed: case '\0':
0
2377 state = ST_ERROR; /* Error! */-
2378 break;
never executed: break;
0
2379 default: /* Escaped character like \ ^ : = */
never executed: default:
0
2380 num = *p;-
2381 break;
never executed: break;
0
2382 }-
2383 if (state == ST_BACKSLASH)
state == ST_BACKSLASHDescription
TRUEnever evaluated
FALSEnever evaluated
0
2384 {-
2385 *(q++) = num;-
2386 ++count;-
2387 state = ST_GND;-
2388 }
never executed: end of block
0
2389 ++p;-
2390 break;
never executed: break;
0
2391-
2392 case ST_OCTAL: /* Octal sequence */
never executed: case ST_OCTAL:
0
2393 if (*p < '0' || *p > '7')
*p < '0'Description
TRUEnever evaluated
FALSEnever evaluated
*p > '7'Description
TRUEnever evaluated
FALSEnever evaluated
0
2394 {-
2395 *(q++) = num;-
2396 ++count;-
2397 state = ST_GND;-
2398 }
never executed: end of block
0
2399 else-
2400 num = (num << 3) + (*(p++) - '0');
never executed: num = (num << 3) + (*(p++) - '0');
0
2401 break;
never executed: break;
0
2402-
2403 case ST_HEX: /* Hex sequence */
never executed: case ST_HEX:
0
2404 switch (*p)-
2405 {-
2406 case '0':
never executed: case '0':
0
2407 case '1':
never executed: case '1':
0
2408 case '2':
never executed: case '2':
0
2409 case '3':
never executed: case '3':
0
2410 case '4':
never executed: case '4':
0
2411 case '5':
never executed: case '5':
0
2412 case '6':
never executed: case '6':
0
2413 case '7':
never executed: case '7':
0
2414 case '8':
never executed: case '8':
0
2415 case '9':
never executed: case '9':
0
2416 num = (num << 4) + (*(p++) - '0');-
2417 break;
never executed: break;
0
2418 case 'a':
never executed: case 'a':
0
2419 case 'b':
never executed: case 'b':
0
2420 case 'c':
never executed: case 'c':
0
2421 case 'd':
never executed: case 'd':
0
2422 case 'e':
never executed: case 'e':
0
2423 case 'f':
never executed: case 'f':
0
2424 num = (num << 4) + (*(p++) - 'a') + 10;-
2425 break;
never executed: break;
0
2426 case 'A':
never executed: case 'A':
0
2427 case 'B':
never executed: case 'B':
0
2428 case 'C':
never executed: case 'C':
0
2429 case 'D':
never executed: case 'D':
0
2430 case 'E':
never executed: case 'E':
0
2431 case 'F':
never executed: case 'F':
0
2432 num = (num << 4) + (*(p++) - 'A') + 10;-
2433 break;
never executed: break;
0
2434 default:
never executed: default:
0
2435 *(q++) = num;-
2436 ++count;-
2437 state = ST_GND;-
2438 break;
never executed: break;
0
2439 }-
2440 break;
never executed: break;
0
2441-
2442 case ST_CARET: /* Caret escape */
never executed: case ST_CARET:
0
2443 state = ST_GND; /* Should be the next state... */-
2444 if (*p >= '@' && *p <= '~')
*p >= '@'Description
TRUEnever evaluated
FALSEnever evaluated
*p <= '~'Description
TRUEnever evaluated
FALSEnever evaluated
0
2445 {-
2446 *(q++) = *(p++) & 037;-
2447 ++count;-
2448 }
never executed: end of block
0
2449 else if (*p == '?')
*p == '?'Description
TRUEnever evaluated
FALSEnever evaluated
0
2450 {-
2451 *(q++) = 127;-
2452 ++count;-
2453 }
never executed: end of block
0
2454 else-
2455 state = ST_ERROR;
never executed: state = ST_ERROR;
0
2456 break;
never executed: break;
0
2457-
2458 default:
never executed: default:
0
2459 abort ();
never executed: abort ();
0
2460 }-
2461 }-
2462-
2463 *dest = q;-
2464 *src = p;-
2465 *output_count = count;-
2466-
2467 return state != ST_ERROR;
executed 62 times by 1 test: return state != ST_ERROR;
Executed by:
  • ls
62
2468}-
2469-
2470enum parse_state-
2471 {-
2472 PS_START = 1,-
2473 PS_2,-
2474 PS_3,-
2475 PS_4,-
2476 PS_DONE,-
2477 PS_FAIL-
2478 };-
2479-
2480-
2481/* Check if the content of TERM is a valid name in dircolors. */-
2482-
2483static bool-
2484known_term_type (void)-
2485{-
2486 char const *term = getenv ("TERM");-
2487 if (! term || ! *term)
! termDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
! *termDescription
TRUEnever evaluated
FALSEnever evaluated
0-4
2488 return false;
executed 4 times by 1 test: return 0 ;
Executed by:
  • ls
4
2489-
2490 char const *line = G_line;-
2491 while (line - G_line < sizeof (G_line))
line - G_line ...izeof (G_line)Description
TRUEnever evaluated
FALSEnever evaluated
0
2492 {-
2493 if (STRNCMP_LIT (line, "TERM ") == 0)
never executed: __result = (((const unsigned char *) (const char *) ( line ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "" "TERM " "" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
(__extension__...) - 1 ))) == 0Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons..."TERM ") - 1 )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( line )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( line ...TERM ") - 1 ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons..." "TERM " "" )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( "" "T...TERM ") - 1 ))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
2494 {-
2495 if (fnmatch (line + 5, term, 0) == 0)
fnmatch (line ... term, 0) == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
2496 return true;
never executed: return 1 ;
0
2497 }
never executed: end of block
0
2498 line += strlen (line) + 1;-
2499 }
never executed: end of block
0
2500-
2501 return false;
never executed: return 0 ;
0
2502}-
2503-
2504static void-
2505parse_ls_color (void)-
2506{-
2507 const char *p; /* Pointer to character being parsed */-
2508 char *buf; /* color_buf buffer pointer */-
2509 int ind_no; /* Indicator number */-
2510 char label[3]; /* Indicator label */-
2511 struct color_ext_type *ext; /* Extension we are working on */-
2512-
2513 if ((p = getenv ("LS_COLORS")) == NULL || *p == '\0')
(p = getenv ("...== ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 32 times by 1 test
Evaluated by:
  • ls
*p == '\0'Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 28 times by 1 test
Evaluated by:
  • ls
0-32
2514 {-
2515 /* LS_COLORS takes precedence, but if that's not set then-
2516 honor the COLORTERM and TERM env variables so that-
2517 we only go with the internal ANSI color codes if the-
2518 former is non empty or the latter is set to a known value. */-
2519 char const *colorterm = getenv ("COLORTERM");-
2520 if (! (colorterm && *colorterm) && ! known_term_type ())
colortermDescription
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
*colortermDescription
TRUEnever evaluated
FALSEnever evaluated
! known_term_type ()Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-4
2521 print_with_color = false;
executed 4 times by 1 test: print_with_color = 0 ;
Executed by:
  • ls
4
2522 return;
executed 4 times by 1 test: return;
Executed by:
  • ls
4
2523 }-
2524-
2525 ext = NULL;-
2526 strcpy (label, "??");-
2527-
2528 /* This is an overly conservative estimate, but any possible-
2529 LS_COLORS string will *not* generate a color_buf longer than-
2530 itself, so it is a safe way of allocating a buffer in-
2531 advance. */-
2532 buf = color_buf = xstrdup (p);-
2533-
2534 enum parse_state state = PS_START;-
2535 while (true)-
2536 {-
2537 switch (state)-
2538 {-
2539 case PS_START: /* First label character */
executed 136 times by 1 test: case PS_START:
Executed by:
  • ls
136
2540 switch (*p)-
2541 {-
2542 case ':':
executed 46 times by 1 test: case ':':
Executed by:
  • ls
46
2543 ++p;-
2544 break;
executed 46 times by 1 test: break;
Executed by:
  • ls
46
2545-
2546 case '*':
never executed: case '*':
0
2547 /* Allocate new extension block and add to head of-
2548 linked list (this way a later definition will-
2549 override an earlier one, which can be useful for-
2550 having terminal-specific defs override global). */-
2551-
2552 ext = xmalloc (sizeof *ext);-
2553 ext->next = color_ext_list;-
2554 color_ext_list = ext;-
2555-
2556 ++p;-
2557 ext->ext.string = buf;-
2558-
2559 state = (get_funky_string (&buf, &p, true, &ext->ext.len)
get_funky_stri...&ext->ext.len)Description
TRUEnever evaluated
FALSEnever evaluated
0
2560 ? PS_4 : PS_FAIL);-
2561 break;
never executed: break;
0
2562-
2563 case '\0':
executed 28 times by 1 test: case '\0':
Executed by:
  • ls
28
2564 state = PS_DONE; /* Done! */-
2565 goto done;
executed 28 times by 1 test: goto done;
Executed by:
  • ls
28
2566-
2567 default: /* Assume it is file type label */
executed 62 times by 1 test: default:
Executed by:
  • ls
62
2568 label[0] = *(p++);-
2569 state = PS_2;-
2570 break;
executed 62 times by 1 test: break;
Executed by:
  • ls
62
2571 }-
2572 break;
executed 108 times by 1 test: break;
Executed by:
  • ls
108
2573-
2574 case PS_2: /* Second label character */
executed 62 times by 1 test: case PS_2:
Executed by:
  • ls
62
2575 if (*p)
*pDescription
TRUEevaluated 62 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-62
2576 {-
2577 label[1] = *(p++);-
2578 state = PS_3;-
2579 }
executed 62 times by 1 test: end of block
Executed by:
  • ls
62
2580 else-
2581 state = PS_FAIL; /* Error */
never executed: state = PS_FAIL;
0
2582 break;
executed 62 times by 1 test: break;
Executed by:
  • ls
62
2583-
2584 case PS_3: /* Equal sign after indicator label */
executed 62 times by 1 test: case PS_3:
Executed by:
  • ls
62
2585 state = PS_FAIL; /* Assume failure... */-
2586 if (*(p++) == '=')/* It *should* be... */
*(p++) == '='Description
TRUEevaluated 62 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-62
2587 {-
2588 for (ind_no = 0; indicator_name[ind_no] != NULL; ++ind_no)
indicator_name...!= ((void *)0)Description
TRUEevaluated 756 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-756
2589 {-
2590 if (STREQ (label, indicator_name[ind_no]))
never executed: __result = (((const unsigned char *) (const char *) ( label ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( indicator_name[ind_no] ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
( __extension_...)))); }) == 0)Description
TRUEevaluated 62 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 694 times by 1 test
Evaluated by:
  • ls
__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-694
2591 {-
2592 color_indicator[ind_no].string = buf;-
2593 state = (get_funky_string (&buf, &p, false,
get_funky_stri...r[ind_no].len)Description
TRUEevaluated 62 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-62
2594 &color_indicator[ind_no].len)
get_funky_stri...r[ind_no].len)Description
TRUEevaluated 62 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-62
2595 ? PS_START : PS_FAIL);-
2596 break;
executed 62 times by 1 test: break;
Executed by:
  • ls
62
2597 }-
2598 }
executed 694 times by 1 test: end of block
Executed by:
  • ls
694
2599 if (state == PS_FAIL)
state == PS_FAILDescription
TRUEnever evaluated
FALSEevaluated 62 times by 1 test
Evaluated by:
  • ls
0-62
2600 error (0, 0, _("unrecognized prefix: %s"), quote (label));
never executed: error (0, 0, dcgettext (((void *)0), "unrecognized prefix: %s" , 5) , quote (label));
0
2601 }
executed 62 times by 1 test: end of block
Executed by:
  • ls
62
2602 break;
executed 62 times by 1 test: break;
Executed by:
  • ls
62
2603-
2604 case PS_4: /* Equal sign after *.ext */
never executed: case PS_4:
0
2605 if (*(p++) == '=')
*(p++) == '='Description
TRUEnever evaluated
FALSEnever evaluated
0
2606 {-
2607 ext->seq.string = buf;-
2608 state = (get_funky_string (&buf, &p, false, &ext->seq.len)
get_funky_stri...&ext->seq.len)Description
TRUEnever evaluated
FALSEnever evaluated
0
2609 ? PS_START : PS_FAIL);-
2610 }
never executed: end of block
0
2611 else-
2612 state = PS_FAIL;
never executed: state = PS_FAIL;
0
2613 break;
never executed: break;
0
2614-
2615 case PS_FAIL:
never executed: case PS_FAIL:
0
2616 goto done;
never executed: goto done;
0
2617-
2618 default:
never executed: default:
0
2619 abort ();
never executed: abort ();
0
2620 }-
2621 }-
2622 done:
code before this statement never executed: done:
0
2623-
2624 if (state == PS_FAIL)
state == PS_FAILDescription
TRUEnever evaluated
FALSEevaluated 28 times by 1 test
Evaluated by:
  • ls
0-28
2625 {-
2626 struct color_ext_type *e;-
2627 struct color_ext_type *e2;-
2628-
2629 error (0, 0,-
2630 _("unparsable value for LS_COLORS environment variable"));-
2631 free (color_buf);-
2632 for (e = color_ext_list; e != NULL; /* empty */)
e != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
2633 {-
2634 e2 = e;-
2635 e = e->next;-
2636 free (e2);-
2637 }
never executed: end of block
0
2638 print_with_color = false;-
2639 }
never executed: end of block
0
2640-
2641 if (color_indicator[C_LINK].len == 6
color_indicato...LINK].len == 6Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 18 times by 1 test
Evaluated by:
  • ls
10-18
2642 && !STRNCMP_LIT (color_indicator[C_LINK].string, "target"))
never executed: __result = (((const unsigned char *) (const char *) ( color_indicator[C_LINK].string ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "" "target" "" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! (__extension...rget") - 1 )))Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
__builtin_cons...target") - 1 )Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
__builtin_cons...LINK].string )Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
strlen ( color...arget") - 1 ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons... "target" "" )Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
strlen ( "" "t...arget") - 1 ))Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
__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-10
2643 color_symlink_as_referent = true;
executed 10 times by 1 test: color_symlink_as_referent = 1 ;
Executed by:
  • ls
10
2644}
executed 28 times by 1 test: end of block
Executed by:
  • ls
28
2645-
2646/* Set the quoting style default if the environment variable-
2647 QUOTING_STYLE is set. */-
2648-
2649static void-
2650getenv_quoting_style (void)-
2651{-
2652 char const *q_style = getenv ("QUOTING_STYLE");-
2653 if (q_style)
q_styleDescription
TRUEnever evaluated
FALSEevaluated 1359 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1359
2654 {-
2655 int i = ARGMATCH (q_style, quoting_style_args, quoting_style_vals);-
2656 if (0 <= i)
0 <= iDescription
TRUEnever evaluated
FALSEnever evaluated
0
2657 set_quoting_style (NULL, quoting_style_vals[i]);
never executed: set_quoting_style ( ((void *)0) , quoting_style_vals[i]);
0
2658 else-
2659 error (0, 0,
never executed: error (0, 0, dcgettext (((void *)0), "ignoring invalid value of environment variable QUOTING_STYLE: %s" , 5) , quote (q_style));
0
2660 _("ignoring invalid value of environment variable QUOTING_STYLE: %s"),
never executed: error (0, 0, dcgettext (((void *)0), "ignoring invalid value of environment variable QUOTING_STYLE: %s" , 5) , quote (q_style));
0
2661 quote (q_style));
never executed: error (0, 0, dcgettext (((void *)0), "ignoring invalid value of environment variable QUOTING_STYLE: %s" , 5) , quote (q_style));
0
2662 }-
2663}
executed 1359 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
1359
2664-
2665/* Set the exit status to report a failure. If SERIOUS, it is a-
2666 serious failure; otherwise, it is merely a minor problem. */-
2667-
2668static void-
2669set_exit_status (bool serious)-
2670{-
2671 if (serious)
seriousDescription
TRUEevaluated 120 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
2-120
2672 exit_status = LS_FAILURE;
executed 120 times by 1 test: exit_status = LS_FAILURE;
Executed by:
  • ls
120
2673 else if (exit_status == EXIT_SUCCESS)
exit_status == 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-2
2674 exit_status = LS_MINOR_PROBLEM;
executed 2 times by 1 test: exit_status = LS_MINOR_PROBLEM;
Executed by:
  • ls
2
2675}
executed 122 times by 1 test: end of block
Executed by:
  • ls
122
2676-
2677/* Assuming a failure is serious if SERIOUS, use the printf-style-
2678 MESSAGE to report the failure to access a file named FILE. Assume-
2679 errno is set appropriately for the failure. */-
2680-
2681static void-
2682file_failure (bool serious, char const *message, char const *file)-
2683{-
2684 error (0, errno, message, quoteaf (file));-
2685 set_exit_status (serious);-
2686}
executed 122 times by 1 test: end of block
Executed by:
  • ls
122
2687-
2688/* Request that the directory named NAME have its contents listed later.-
2689 If REALNAME is nonzero, it will be used instead of NAME when the-
2690 directory name is printed. This allows symbolic links to directories-
2691 to be treated as regular directories but still be listed under their-
2692 real names. NAME == NULL is used to insert a marker entry for the-
2693 directory named in REALNAME.-
2694 If NAME is non-NULL, we use its dev/ino information to save-
2695 a call to stat -- when doing a recursive (-R) traversal.-
2696 COMMAND_LINE_ARG means this directory was mentioned on the command line. */-
2697-
2698static void-
2699queue_directory (char const *name, char const *realname, bool command_line_arg)-
2700{-
2701 struct pending *new = xmalloc (sizeof *new);-
2702 new->realname = realname ? xstrdup (realname) : NULL;
realnameDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 41 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
10-41
2703 new->name = name ? xstrdup (name) : NULL;
nameDescription
TRUEevaluated 41 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
10-41
2704 new->command_line_arg = command_line_arg;-
2705 new->next = pending_dirs;-
2706 pending_dirs = new;-
2707}
executed 51 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
51
2708-
2709/* Read directory NAME, and list the files in it.-
2710 If REALNAME is nonzero, print its name instead of NAME;-
2711 this is used for symbolic links to directories.-
2712 COMMAND_LINE_ARG means this directory was mentioned on the command line. */-
2713-
2714static void-
2715print_dir (char const *name, char const *realname, bool command_line_arg)-
2716{-
2717 DIR *dirp;-
2718 struct dirent *next;-
2719 uintmax_t total_blocks = 0;-
2720 static bool first = true;-
2721-
2722 errno = 0;-
2723 dirp = opendir (name);-
2724 if (!dirp)
!dirpDescription
TRUEnever evaluated
FALSEevaluated 41 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-41
2725 {-
2726 file_failure (command_line_arg, _("cannot open directory %s"), name);-
2727 return;
never executed: return;
0
2728 }-
2729-
2730 if (LOOP_DETECT)
(!!active_dir_set)Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 31 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
10-31
2731 {-
2732 struct stat dir_stat;-
2733 int fd = dirfd (dirp);-
2734-
2735 /* If dirfd failed, endure the overhead of using stat. */-
2736 if ((0 <= fd
(0 <= fd ? fst...dir_stat)) < 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
0 <= fdDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-10
2737 ? fstat (fd, &dir_stat)
(0 <= fd ? fst...dir_stat)) < 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
0-10
2738 : stat (name, &dir_stat)) < 0)
(0 <= fd ? fst...dir_stat)) < 0Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
0-10
2739 {-
2740 file_failure (command_line_arg,-
2741 _("cannot determine device and inode of %s"), name);-
2742 closedir (dirp);-
2743 return;
never executed: return;
0
2744 }-
2745-
2746 /* If we've already visited this dev/inode pair, warn that-
2747 we've found a loop, and do not process this directory. */-
2748 if (visit_dir (dir_stat.st_dev, dir_stat.st_ino))
visit_dir (dir...r_stat.st_ino)Description
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
0-10
2749 {-
2750 error (0, 0, _("%s: not listing already-listed directory"),-
2751 quotef (name));-
2752 closedir (dirp);-
2753 set_exit_status (true);-
2754 return;
never executed: return;
0
2755 }-
2756-
2757 dev_ino_push (dir_stat.st_dev, dir_stat.st_ino);-
2758 }
executed 10 times by 1 test: end of block
Executed by:
  • ls
10
2759-
2760 clear_files ();-
2761-
2762 if (recursive || print_dir_name)
recursiveDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 31 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
print_dir_nameDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 23 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
8-31
2763 {-
2764 if (!first)
!firstDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 12 times by 1 test
Evaluated by:
  • ls
6-12
2765 DIRED_PUTCHAR ('\n');
executed 6 times by 1 test: end of block
Executed by:
  • ls
6
2766 first = false;-
2767 DIRED_INDENT ();
never executed: end of block
diredDescription
TRUEnever evaluated
FALSEevaluated 18 times by 1 test
Evaluated by:
  • ls
0-18
2768-
2769 char *absolute_name = NULL;-
2770 if (print_hyperlink)
print_hyperlinkDescription
TRUEnever evaluated
FALSEevaluated 18 times by 1 test
Evaluated by:
  • ls
0-18
2771 {-
2772 absolute_name = canonicalize_filename_mode (name, CAN_MISSING);-
2773 if (! absolute_name)
! absolute_nameDescription
TRUEnever evaluated
FALSEnever evaluated
0
2774 file_failure (command_line_arg,
never executed: file_failure (command_line_arg, dcgettext (((void *)0), "error canonicalizing %s" , 5) , name);
0
2775 _("error canonicalizing %s"), name);
never executed: file_failure (command_line_arg, dcgettext (((void *)0), "error canonicalizing %s" , 5) , name);
0
2776 }
never executed: end of block
0
2777 quote_name (realname ? realname : name, dirname_quoting_options, -1,-
2778 NULL, true, &subdired_obstack, absolute_name);-
2779-
2780 free (absolute_name);-
2781-
2782 DIRED_FPUTS_LITERAL (":\n", stdout);-
2783 }
executed 18 times by 1 test: end of block
Executed by:
  • ls
18
2784-
2785 /* Read the directory entries, and insert the subfiles into the 'cwd_file'-
2786 table. */-
2787-
2788 while (1)-
2789 {-
2790 /* Set errno to zero so we can distinguish between a readdir failure-
2791 and when readdir simply finds that there are no more entries. */-
2792 errno = 0;-
2793 next = readdir (dirp);-
2794 if (next)
nextDescription
TRUEevaluated 352 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 41 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
41-352
2795 {-
2796 if (! file_ignored (next->d_name))
! file_ignored (next->d_name)Description
TRUEevaluated 56 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 296 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
56-296
2797 {-
2798 enum filetype type = unknown;-
2799-
2800#if HAVE_STRUCT_DIRENT_D_TYPE-
2801 switch (next->d_type)-
2802 {-
2803 case DT_BLK: type = blockdev; break;
never executed: break;
never executed: case DT_BLK :
0
2804 case DT_CHR: type = chardev; break;
never executed: break;
never executed: case DT_CHR :
0
2805 case DT_DIR: type = directory; break;
executed 7 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
executed 7 times by 3 tests: case DT_DIR :
Executed by:
  • dir
  • ls
  • vdir
7
2806 case DT_FIFO: type = fifo; break;
never executed: break;
never executed: case DT_FIFO :
0
2807 case DT_LNK: type = symbolic_link; break;
executed 13 times by 2 tests: break;
Executed by:
  • ls
  • vdir
executed 13 times by 2 tests: case DT_LNK :
Executed by:
  • ls
  • vdir
13
2808 case DT_REG: type = normal; break;
executed 36 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
executed 36 times by 3 tests: case DT_REG :
Executed by:
  • dir
  • ls
  • vdir
36
2809 case DT_SOCK: type = sock; break;
never executed: break;
never executed: case DT_SOCK :
0
2810# ifdef DT_WHT-
2811 case DT_WHT: type = whiteout; break;
never executed: break;
never executed: case DT_WHT :
0
2812# endif-
2813 }-
2814#endif-
2815 total_blocks += gobble_file (next->d_name, type,-
2816 RELIABLE_D_INO (next),-
2817 false, name);-
2818-
2819 /* In this narrow case, print out each name right away, so-
2820 ls uses constant memory while processing the entries of-
2821 this directory. Useful when there are many (millions)-
2822 of entries in a directory. */-
2823 if (format == one_per_line && sort_type == sort_none
format == one_per_lineDescription
TRUEevaluated 33 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 23 times by 2 tests
Evaluated by:
  • dir
  • vdir
sort_type == sort_noneDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 31 times by 1 test
Evaluated by:
  • ls
2-33
2824 && !print_block_size && !recursive)
!print_block_sizeDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
!recursiveDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-2
2825 {-
2826 /* We must call sort_files in spite of-
2827 "sort_type == sort_none" for its initialization-
2828 of the sorted_file vector. */-
2829 sort_files ();-
2830 print_current_files ();-
2831 clear_files ();-
2832 }
executed 2 times by 1 test: end of block
Executed by:
  • ls
2
2833 }
executed 56 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
56
2834 }
executed 352 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
352
2835 else if (errno != 0)
(*__errno_location ()) != 0Description
TRUEnever evaluated
FALSEevaluated 41 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-41
2836 {-
2837 file_failure (command_line_arg, _("reading directory %s"), name);-
2838 if (errno != EOVERFLOW)
(*__errno_location ()) != 75Description
TRUEnever evaluated
FALSEnever evaluated
0
2839 break;
never executed: break;
0
2840 }
never executed: end of block
0
2841 else-
2842 break;
executed 41 times by 3 tests: break;
Executed by:
  • dir
  • ls
  • vdir
41
2843-
2844 /* When processing a very large directory, and since we've inhibited-
2845 interrupts, this loop would take so long that ls would be annoyingly-
2846 uninterruptible. This ensures that it handles signals promptly. */-
2847 process_signals ();-
2848 }
executed 352 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
352
2849-
2850 if (closedir (dirp) != 0)
closedir (dirp) != 0Description
TRUEnever evaluated
FALSEevaluated 41 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-41
2851 {-
2852 file_failure (command_line_arg, _("closing directory %s"), name);-
2853 /* Don't return; print whatever we got. */-
2854 }
never executed: end of block
0
2855-
2856 /* Sort the directory contents. */-
2857 sort_files ();-
2858-
2859 /* If any member files are subdirectories, perhaps they should have their-
2860 contents listed rather than being mentioned here as files. */-
2861-
2862 if (recursive)
recursiveDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 31 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
10-31
2863 extract_dirs_from_files (name, false);
executed 10 times by 1 test: extract_dirs_from_files (name, 0 );
Executed by:
  • ls
10
2864-
2865 if (format == long_format || print_block_size)
format == long_formatDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • vdir
FALSEevaluated 40 times by 2 tests
Evaluated by:
  • dir
  • ls
print_block_sizeDescription
TRUEnever evaluated
FALSEevaluated 40 times by 2 tests
Evaluated by:
  • dir
  • ls
0-40
2866 {-
2867 const char *p;-
2868 char buf[LONGEST_HUMAN_READABLE + 1];-
2869-
2870 DIRED_INDENT ();
never executed: end of block
diredDescription
TRUEnever evaluated
FALSEevaluated 1 time by 1 test
Evaluated by:
  • vdir
0-1
2871 p = _("total");-
2872 DIRED_FPUTS (p, stdout, strlen (p));-
2873 DIRED_PUTCHAR (' ');-
2874 p = human_readable (total_blocks, buf, human_output_opts,-
2875 ST_NBLOCKSIZE, output_block_size);-
2876 DIRED_FPUTS (p, stdout, strlen (p));-
2877 DIRED_PUTCHAR ('\n');-
2878 }
executed 1 time by 1 test: end of block
Executed by:
  • vdir
1
2879-
2880 if (cwd_n_used)
cwd_n_usedDescription
TRUEevaluated 23 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 18 times by 1 test
Evaluated by:
  • ls
18-23
2881 print_current_files ();
executed 23 times by 3 tests: print_current_files ();
Executed by:
  • dir
  • ls
  • vdir
23
2882}
executed 41 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
41
2883-
2884/* Add 'pattern' to the list of patterns for which files that match are-
2885 not listed. */-
2886-
2887static void-
2888add_ignore_pattern (const char *pattern)-
2889{-
2890 struct ignore_pattern *ignore;-
2891-
2892 ignore = xmalloc (sizeof *ignore);-
2893 ignore->pattern = pattern;-
2894 /* Add it to the head of the linked list. */-
2895 ignore->next = ignore_patterns;-
2896 ignore_patterns = ignore;-
2897}
executed 14 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
14
2898-
2899/* Return true if one of the PATTERNS matches FILE. */-
2900-
2901static bool-
2902patterns_match (struct ignore_pattern const *patterns, char const *file)-
2903{-
2904 struct ignore_pattern const *p;-
2905 for (p = patterns; p; p = p->next)
pDescription
TRUEevaluated 216 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 326 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
216-326
2906 if (fnmatch (p->pattern, file, FNM_PERIOD) == 0)
fnmatch (p->pa...1 << 2) ) == 0Description
TRUEevaluated 214 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
2-214
2907 return true;
executed 214 times by 1 test: return 1 ;
Executed by:
  • ls
214
2908 return false;
executed 326 times by 3 tests: return 0 ;
Executed by:
  • dir
  • ls
  • vdir
326
2909}-
2910-
2911/* Return true if FILE should be ignored. */-
2912-
2913static bool-
2914file_ignored (char const *name)-
2915{-
2916 return ((ignore_mode != IGNORE_MINIMAL
executed 352 times by 3 tests: return ((ignore_mode != IGNORE_MINIMAL && name[0] == '.' && (ignore_mode == IGNORE_DEFAULT || ! name[1 + (name[1] == '.')])) || (ignore_mode == IGNORE_DEFAULT && patterns_match (hide_patterns, name)) || patterns_match (ignore_patterns, name));
Executed by:
  • dir
  • ls
  • vdir
352
2917 && name[0] == '.'
executed 352 times by 3 tests: return ((ignore_mode != IGNORE_MINIMAL && name[0] == '.' && (ignore_mode == IGNORE_DEFAULT || ! name[1 + (name[1] == '.')])) || (ignore_mode == IGNORE_DEFAULT && patterns_match (hide_patterns, name)) || patterns_match (ignore_patterns, name));
Executed by:
  • dir
  • ls
  • vdir
352
2918 && (ignore_mode == IGNORE_DEFAULT || ! name[1 + (name[1] == '.')]))
executed 352 times by 3 tests: return ((ignore_mode != IGNORE_MINIMAL && name[0] == '.' && (ignore_mode == IGNORE_DEFAULT || ! name[1 + (name[1] == '.')])) || (ignore_mode == IGNORE_DEFAULT && patterns_match (hide_patterns, name)) || patterns_match (ignore_patterns, name));
Executed by:
  • dir
  • ls
  • vdir
352
2919 || (ignore_mode == IGNORE_DEFAULT
executed 352 times by 3 tests: return ((ignore_mode != IGNORE_MINIMAL && name[0] == '.' && (ignore_mode == IGNORE_DEFAULT || ! name[1 + (name[1] == '.')])) || (ignore_mode == IGNORE_DEFAULT && patterns_match (hide_patterns, name)) || patterns_match (ignore_patterns, name));
Executed by:
  • dir
  • ls
  • vdir
352
2920 && patterns_match (hide_patterns, name))
executed 352 times by 3 tests: return ((ignore_mode != IGNORE_MINIMAL && name[0] == '.' && (ignore_mode == IGNORE_DEFAULT || ! name[1 + (name[1] == '.')])) || (ignore_mode == IGNORE_DEFAULT && patterns_match (hide_patterns, name)) || patterns_match (ignore_patterns, name));
Executed by:
  • dir
  • ls
  • vdir
352
2921 || patterns_match (ignore_patterns, name));
executed 352 times by 3 tests: return ((ignore_mode != IGNORE_MINIMAL && name[0] == '.' && (ignore_mode == IGNORE_DEFAULT || ! name[1 + (name[1] == '.')])) || (ignore_mode == IGNORE_DEFAULT && patterns_match (hide_patterns, name)) || patterns_match (ignore_patterns, name));
Executed by:
  • dir
  • ls
  • vdir
352
2922}-
2923-
2924/* POSIX requires that a file size be printed without a sign, even-
2925 when negative. Assume the typical case where negative sizes are-
2926 actually positive values that have wrapped around. */-
2927-
2928static uintmax_t-
2929unsigned_file_size (off_t size)-
2930{-
2931 return size + (size < 0) * ((uintmax_t) OFF_T_MAX - OFF_T_MIN + 1);
executed 320 times by 2 tests: return size + (size < 0) * ((uintmax_t) ((off_t) (! (! ((off_t) 0 < (off_t) -1)) ? (off_t) -1 : ((((off_t) 1 << ((sizeof (off_t) * 8) - 2)) - 1) * 2 + 1))) - ((off_t) ~ ((off_t) (! (! ((off_t) 0 < (off_t) -1)) ? (off_t) -1 : ((((off_t) 1 << ((sizeof (off_t) * 8) - 2)) - 1) * 2 + 1)))) + 1);
Executed by:
  • ls
  • vdir
320
2932}-
2933-
2934#ifdef HAVE_CAP-
2935/* Return true if NAME has a capability (see linux/capability.h) */-
2936static bool-
2937has_capability (char const *name)-
2938{-
2939 char *result;-
2940 bool has_cap;-
2941-
2942 cap_t cap_d = cap_get_file (name);-
2943 if (cap_d == NULL)-
2944 return false;-
2945-
2946 result = cap_to_text (cap_d, NULL);-
2947 cap_free (cap_d);-
2948 if (!result)-
2949 return false;-
2950-
2951 /* check if human-readable capability string is empty */-
2952 has_cap = !!*result;-
2953-
2954 cap_free (result);-
2955 return has_cap;-
2956}-
2957#else-
2958static bool-
2959has_capability (char const *name _GL_UNUSED)-
2960{-
2961 errno = ENOTSUP;-
2962 return false;
executed 4 times by 1 test: return 0 ;
Executed by:
  • ls
4
2963}-
2964#endif-
2965-
2966/* Enter and remove entries in the table 'cwd_file'. */-
2967-
2968static void-
2969free_ent (struct fileinfo *f)-
2970{-
2971 free (f->name);-
2972 free (f->linkname);-
2973 free (f->absolute_name);-
2974 if (f->scontext != UNKNOWN_SECURITY_CONTEXT)
f->scontext !=...CURITY_CONTEXTDescription
TRUEevaluated 40 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-40
2975 {-
2976 if (is_smack_enabled ())
is_smack_enabled ()Description
TRUEnever evaluated
FALSEevaluated 40 times by 1 test
Evaluated by:
  • ls
0-40
2977 free (f->scontext);
never executed: free (f->scontext);
0
2978 else-
2979 freecon (f->scontext);
executed 40 times by 1 test: freecon (f->scontext);
Executed by:
  • ls
40
2980 }-
2981}
executed 40 times by 1 test: end of block
Executed by:
  • ls
40
2982-
2983/* Empty the table of files. */-
2984static void-
2985clear_files (void)-
2986{-
2987 for (size_t i = 0; i < cwd_n_used; i++)
i < cwd_n_usedDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1209 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
6-1209
2988 {-
2989 struct fileinfo *f = sorted_file[i];-
2990 free_ent (f);-
2991 }
executed 6 times by 1 test: end of block
Executed by:
  • ls
6
2992-
2993 cwd_n_used = 0;-
2994 cwd_some_quoted = false;-
2995 any_has_acl = false;-
2996 inode_number_width = 0;-
2997 block_size_width = 0;-
2998 nlink_width = 0;-
2999 owner_width = 0;-
3000 group_width = 0;-
3001 author_width = 0;-
3002 scontext_width = 0;-
3003 major_device_number_width = 0;-
3004 minor_device_number_width = 0;-
3005 file_size_width = 0;-
3006}
executed 1209 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
1209
3007-
3008/* Return true if ERR implies lack-of-support failure by a-
3009 getxattr-calling function like getfilecon or file_has_acl. */-
3010static bool-
3011errno_unsupported (int err)-
3012{-
3013 return (err == EINVAL || err == ENOSYS || is_ENOTSUP (err));
executed 324 times by 2 tests: return (err == 22 || err == 38 || is_ENOTSUP (err));
Executed by:
  • ls
  • vdir
324
3014}-
3015-
3016/* Cache *getfilecon failure, when it's trivial to do so.-
3017 Like getfilecon/lgetfilecon, but when F's st_dev says it's doesn't-
3018 support getting the security context, fail with ENOTSUP immediately. */-
3019static int-
3020getfilecon_cache (char const *file, struct fileinfo *f, bool deref)-
3021{-
3022 /* st_dev of the most recently processed device for which we've-
3023 found that [l]getfilecon fails indicating lack of support. */-
3024 static dev_t unsupported_device;-
3025-
3026 if (f->stat.st_dev == unsupported_device)
f->stat.st_dev...pported_deviceDescription
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
3027 {-
3028 errno = ENOTSUP;-
3029 return -1;
never executed: return -1;
0
3030 }-
3031 int r = 0;-
3032#ifdef HAVE_SMACK-
3033 if (is_smack_enabled ())-
3034 r = smack_new_label_from_path (file, "security.SMACK64", deref,-
3035 &f->scontext);-
3036 else-
3037#endif-
3038 r = (deref
derefDescription
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
3039 ? getfilecon (file, &f->scontext)-
3040 : lgetfilecon (file, &f->scontext));-
3041 if (r < 0 && errno_unsupported (errno))
r < 0Description
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
errno_unsuppor...location ()) )Description
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
3042 unsupported_device = f->stat.st_dev;
never executed: unsupported_device = f->stat.st_dev;
0
3043 return r;
executed 160 times by 2 tests: return r;
Executed by:
  • ls
  • vdir
160
3044}-
3045-
3046/* Cache file_has_acl failure, when it's trivial to do.-
3047 Like file_has_acl, but when F's st_dev says it's on a file-
3048 system lacking ACL support, return 0 with ENOTSUP immediately. */-
3049static int-
3050file_has_acl_cache (char const *file, struct fileinfo *f)-
3051{-
3052 /* st_dev of the most recently processed device for which we've-
3053 found that file_has_acl fails indicating lack of support. */-
3054 static dev_t unsupported_device;-
3055-
3056 if (f->stat.st_dev == unsupported_device)
f->stat.st_dev...pported_deviceDescription
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
3057 {-
3058 errno = ENOTSUP;-
3059 return 0;
never executed: return 0;
0
3060 }-
3061-
3062 /* Zero errno so that we can distinguish between two 0-returning cases:-
3063 "has-ACL-support, but only a default ACL" and "no ACL support". */-
3064 errno = 0;-
3065 int n = file_has_acl (file, &f->stat);-
3066 if (n <= 0 && errno_unsupported (errno))
n <= 0Description
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
errno_unsuppor...location ()) )Description
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
3067 unsupported_device = f->stat.st_dev;
never executed: unsupported_device = f->stat.st_dev;
0
3068 return n;
executed 160 times by 2 tests: return n;
Executed by:
  • ls
  • vdir
160
3069}-
3070-
3071/* Cache has_capability failure, when it's trivial to do.-
3072 Like has_capability, but when F's st_dev says it's on a file-
3073 system lacking capability support, return 0 with ENOTSUP immediately. */-
3074static bool-
3075has_capability_cache (char const *file, struct fileinfo *f)-
3076{-
3077 /* st_dev of the most recently processed device for which we've-
3078 found that has_capability fails indicating lack of support. */-
3079 static dev_t unsupported_device;-
3080-
3081 if (f->stat.st_dev == unsupported_device)
f->stat.st_dev...pported_deviceDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
2-4
3082 {-
3083 errno = ENOTSUP;-
3084 return 0;
executed 2 times by 1 test: return 0;
Executed by:
  • ls
2
3085 }-
3086-
3087 bool b = has_capability (file);-
3088 if ( !b && errno_unsupported (errno))
!bDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
errno_unsuppor...location ()) )Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-4
3089 unsupported_device = f->stat.st_dev;
executed 4 times by 1 test: unsupported_device = f->stat.st_dev;
Executed by:
  • ls
4
3090 return b;
executed 4 times by 1 test: return b;
Executed by:
  • ls
4
3091}-
3092-
3093static bool-
3094needs_quoting (char const* name)-
3095{-
3096 char test[2];-
3097 size_t len = quotearg_buffer (test, sizeof test , name, -1,-
3098 filename_quoting_options);-
3099 return *name != *test || strlen (name) != len;
never executed: return *name != *test || strlen (name) != len;
0
3100}-
3101-
3102/* Add a file to the current table of files.-
3103 Verify that the file exists, and print an error message if it does not.-
3104 Return the number of blocks that the file occupies. */-
3105static uintmax_t-
3106gobble_file (char const *name, enum filetype type, ino_t inode,-
3107 bool command_line_arg, char const *dirname)-
3108{-
3109 uintmax_t blocks = 0;-
3110 struct fileinfo *f;-
3111-
3112 /* An inode value prior to gobble_file necessarily came from readdir,-
3113 which is not used for command line arguments. */-
3114 assert (! command_line_arg || inode == NOT_AN_INODE_NUMBER);-
3115-
3116 if (cwd_n_used == cwd_n_alloc)
cwd_n_used == cwd_n_allocDescription
TRUEnever evaluated
FALSEevaluated 1281 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1281
3117 {-
3118 cwd_file = xnrealloc (cwd_file, cwd_n_alloc, 2 * sizeof *cwd_file);-
3119 cwd_n_alloc *= 2;-
3120 }
never executed: end of block
0
3121-
3122 f = &cwd_file[cwd_n_used];-
3123 memset (f, '\0', sizeof *f);-
3124 f->stat.st_ino = inode;-
3125 f->filetype = type;-
3126-
3127 f->quoted = -1;-
3128 if ((! cwd_some_quoted) && align_variable_outer_quotes)
(! cwd_some_quoted)Description
TRUEevaluated 1281 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEnever evaluated
align_variable_outer_quotesDescription
TRUEnever evaluated
FALSEevaluated 1281 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1281
3129 {-
3130 /* Determine if any quoted for padding purposes. */-
3131 f->quoted = needs_quoting (name);-
3132 if (f->quoted)
f->quotedDescription
TRUEnever evaluated
FALSEnever evaluated
0
3133 cwd_some_quoted = 1;
never executed: cwd_some_quoted = 1;
0
3134 }
never executed: end of block
0
3135-
3136 if (command_line_arg
command_line_argDescription
TRUEevaluated 1225 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 56 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
56-1225
3137 || print_hyperlink
print_hyperlinkDescription
TRUEnever evaluated
FALSEevaluated 56 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-56
3138 || format_needs_stat
format_needs_statDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • vdir
FALSEevaluated 42 times by 2 tests
Evaluated by:
  • dir
  • ls
14-42
3139 /* When coloring a directory (we may know the type from-
3140 direct.d_type), we have to stat it in order to indicate-
3141 sticky and/or other-writable attributes. */-
3142 || (type == directory && print_with_color
type == directoryDescription
TRUEevaluated 6 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 36 times by 2 tests
Evaluated by:
  • dir
  • ls
print_with_colorDescription
TRUEnever evaluated
FALSEevaluated 6 times by 2 tests
Evaluated by:
  • dir
  • ls
0-36
3143 && (is_colored (C_OTHER_WRITABLE)
is_colored (C_OTHER_WRITABLE)Description
TRUEnever evaluated
FALSEnever evaluated
0
3144 || is_colored (C_STICKY)
is_colored (C_STICKY)Description
TRUEnever evaluated
FALSEnever evaluated
0
3145 || is_colored (C_STICKY_OTHER_WRITABLE)))
is_colored (C_...THER_WRITABLE)Description
TRUEnever evaluated
FALSEnever evaluated
0
3146 /* When dereferencing symlinks, the inode and type must come from-
3147 stat, but readdir provides the inode and type of lstat. */-
3148 || ((print_inode || format_needs_type)
print_inodeDescription
TRUEnever evaluated
FALSEevaluated 42 times by 2 tests
Evaluated by:
  • dir
  • ls
format_needs_typeDescription
TRUEevaluated 18 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • dir
  • ls
0-42
3149 && (type == symbolic_link || type == unknown)
type == symbolic_linkDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 6 times by 1 test
Evaluated by:
  • ls
type == unknownDescription
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • ls
0-12
3150 && (dereference == DEREF_ALWAYS
dereference == DEREF_ALWAYSDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
2-10
3151 || color_symlink_as_referent || check_symlink_color))
color_symlink_as_referentDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 6 times by 1 test
Evaluated by:
  • ls
check_symlink_colorDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
2-6
3152 /* Command line dereferences are already taken care of by the above-
3153 assertion that the inode number is not yet known. */-
3154 || (print_inode && inode == NOT_AN_INODE_NUMBER)
print_inodeDescription
TRUEnever evaluated
FALSEevaluated 34 times by 2 tests
Evaluated by:
  • dir
  • ls
inode == NOT_AN_INODE_NUMBERDescription
TRUEnever evaluated
FALSEnever evaluated
0-34
3155 || (format_needs_type
format_needs_typeDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • dir
  • ls
10-24
3156 && (type == unknown || command_line_arg
type == unknownDescription
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
command_line_argDescription
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
0-10
3157 /* --indicator-style=classify (aka -F)-
3158 requires that we stat each regular file-
3159 to see if it's executable. */-
3160 || (type == normal && (indicator_style == classify
type == normalDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 8 times by 1 test
Evaluated by:
  • ls
indicator_style == classifyDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
0-8
3161 /* This is so that --color ends up-
3162 highlighting files with these mode-
3163 bits set even when options like -F are-
3164 not specified. Note we do a redundant-
3165 stat in the very unlikely case where-
3166 C_CAP is set but not the others. */-
3167 || (print_with_color
print_with_colorDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-2
3168 && (is_colored (C_EXEC)
is_colored (C_EXEC)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-2
3169 || is_colored (C_SETUID)
is_colored (C_SETUID)Description
TRUEnever evaluated
FALSEnever evaluated
0
3170 || is_colored (C_SETGID)
is_colored (C_SETGID)Description
TRUEnever evaluated
FALSEnever evaluated
0
3171 || is_colored (C_CAP)))
is_colored (C_CAP)Description
TRUEnever evaluated
FALSEnever evaluated
0
3172 )))))-
3173-
3174 {-
3175 /* Absolute name of this file. */-
3176 char *full_name;-
3177 bool do_deref;-
3178 int err;-
3179-
3180 if (name[0] == '/' || dirname[0] == 0)
name[0] == '/'Description
TRUEevaluated 1029 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 220 times by 2 tests
Evaluated by:
  • ls
  • vdir
dirname[0] == 0Description
TRUEevaluated 196 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • ls
  • vdir
24-1029
3181 full_name = (char *) name;
executed 1225 times by 1 test: full_name = (char *) name;
Executed by:
  • ls
1225
3182 else-
3183 {-
3184 full_name = alloca (strlen (name) + strlen (dirname) + 2);-
3185 attach (full_name, dirname, name);-
3186 }
executed 24 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
24
3187-
3188 if (print_hyperlink)
print_hyperlinkDescription
TRUEnever evaluated
FALSEevaluated 1249 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-1249
3189 {-
3190 f->absolute_name = canonicalize_filename_mode (full_name,-
3191 CAN_MISSING);-
3192 if (! f->absolute_name)
! f->absolute_nameDescription
TRUEnever evaluated
FALSEnever evaluated
0
3193 file_failure (command_line_arg,
never executed: file_failure (command_line_arg, dcgettext (((void *)0), "error canonicalizing %s" , 5) , full_name);
0
3194 _("error canonicalizing %s"), full_name);
never executed: file_failure (command_line_arg, dcgettext (((void *)0), "error canonicalizing %s" , 5) , full_name);
0
3195 }
never executed: end of block
0
3196-
3197 switch (dereference)-
3198 {-
3199 case DEREF_ALWAYS:
executed 6 times by 1 test: case DEREF_ALWAYS:
Executed by:
  • ls
6
3200 err = stat (full_name, &f->stat);-
3201 do_deref = true;-
3202 break;
executed 6 times by 1 test: break;
Executed by:
  • ls
6
3203-
3204 case DEREF_COMMAND_LINE_ARGUMENTS:
executed 2 times by 1 test: case DEREF_COMMAND_LINE_ARGUMENTS:
Executed by:
  • ls
2
3205 case DEREF_COMMAND_LINE_SYMLINK_TO_DIR:
executed 149 times by 1 test: case DEREF_COMMAND_LINE_SYMLINK_TO_DIR:
Executed by:
  • ls
149
3206 if (command_line_arg)
command_line_argDescription
TRUEevaluated 143 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 8 times by 1 test
Evaluated by:
  • ls
8-143
3207 {-
3208 bool need_lstat;-
3209 err = stat (full_name, &f->stat);-
3210 do_deref = true;-
3211-
3212 if (dereference == DEREF_COMMAND_LINE_ARGUMENTS)
dereference ==...LINE_ARGUMENTSDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 141 times by 1 test
Evaluated by:
  • ls
2-141
3213 break;
executed 2 times by 1 test: break;
Executed by:
  • ls
2
3214-
3215 need_lstat = (err < 0
err < 0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 135 times by 1 test
Evaluated by:
  • ls
6-135
3216 ? errno == ENOENT-
3217 : ! S_ISDIR (f->stat.st_mode));-
3218 if (!need_lstat)
!need_lstatDescription
TRUEevaluated 32 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 109 times by 1 test
Evaluated by:
  • ls
32-109
3219 break;
executed 32 times by 1 test: break;
Executed by:
  • ls
32
3220-
3221 /* stat failed because of ENOENT, maybe indicating a dangling-
3222 symlink. Or stat succeeded, FULL_NAME does not refer to a-
3223 directory, and --dereference-command-line-symlink-to-dir is-
3224 in effect. Fall through so that we call lstat instead. */-
3225 }
executed 109 times by 1 test: end of block
Executed by:
  • ls
109
3226 FALLTHROUGH;-
3227-
3228 default: /* DEREF_NEVER */
code before this statement executed 117 times by 1 test: default:
Executed by:
  • ls
executed 1092 times by 2 tests: default:
Executed by:
  • ls
  • vdir
117-1092
3229 err = lstat (full_name, &f->stat);-
3230 do_deref = false;-
3231 break;
executed 1209 times by 2 tests: break;
Executed by:
  • ls
  • vdir
1209
3232 }-
3233-
3234 if (err != 0)
err != 0Description
TRUEevaluated 122 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1127 times by 2 tests
Evaluated by:
  • ls
  • vdir
122-1127
3235 {-
3236 /* Failure to stat a command line argument leads to-
3237 an exit status of 2. For other files, stat failure-
3238 provokes an exit status of 1. */-
3239 file_failure (command_line_arg,-
3240 _("cannot access %s"), full_name);-
3241 if (command_line_arg)
command_line_argDescription
TRUEevaluated 120 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
2-120
3242 return 0;
executed 120 times by 1 test: return 0;
Executed by:
  • ls
120
3243-
3244 f->name = xstrdup (name);-
3245 cwd_n_used++;-
3246-
3247 return 0;
executed 2 times by 1 test: return 0;
Executed by:
  • ls
2
3248 }-
3249-
3250 f->stat_ok = true;-
3251-
3252 /* Note has_capability() adds around 30% runtime to 'ls --color' */-
3253 if ((type == normal || S_ISREG (f->stat.st_mode))
type == normalDescription
TRUEevaluated 14 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 1113 times by 2 tests
Evaluated by:
  • ls
  • vdir
(((( f->stat.s... == (0100000))Description
TRUEevaluated 121 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 992 times by 2 tests
Evaluated by:
  • ls
  • vdir
14-1113
3254 && print_with_color && is_colored (C_CAP))
print_with_colorDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 129 times by 2 tests
Evaluated by:
  • ls
  • vdir
is_colored (C_CAP)Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-129
3255 f->has_capability = has_capability_cache (full_name, f);
executed 6 times by 1 test: f->has_capability = has_capability_cache (full_name, f);
Executed by:
  • ls
6
3256-
3257 if (format == long_format || print_scontext)
format == long_formatDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 967 times by 1 test
Evaluated by:
  • ls
print_scontextDescription
TRUEnever evaluated
FALSEevaluated 967 times by 1 test
Evaluated by:
  • ls
0-967
3258 {-
3259 bool have_scontext = false;-
3260 bool have_acl = false;-
3261 int attr_len = getfilecon_cache (full_name, f, do_deref);-
3262 err = (attr_len < 0);-
3263-
3264 if (err == 0)
err == 0Description
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
3265 {-
3266 if (is_smack_enabled ())
is_smack_enabled ()Description
TRUEnever evaluated
FALSEnever evaluated
0
3267 have_scontext = ! STREQ ("_", f->scontext);
never executed: have_scontext = ! ( __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ( "_" ) && __builtin_constant_p ( f->scontext ) && (__s1_len = __builtin_strlen ( "_" ), __s2_len = __builtin_strlen ( f->scontext ), (!((size_t)(const void *)(( "_" ) +...nsigned char *) (const char *) ( f->scontext ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( f->scontext ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( "_" , f->scontext )))); }) == 0);
never executed: __result = (((const unsigned char *) (const char *) ( "_" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( f->scontext ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__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
3268 else-
3269 have_scontext = ! STREQ ("unlabeled", f->scontext);
never executed: have_scontext = ! ( __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ( "unlabeled" ) && __builtin_constant_p ( f->scontext ) && (__s1_len = __builtin_strlen ( "unlabeled" ), __s2_len = __builtin_strlen ( f->scontext ), (!((size_t)(const v...char *) (const char *) ( f->scontext ))[2] - __s2[2]); if (__s2_len > 2 && __result == 0) __result = (((const unsigned char *) (const char *) ( f->scontext ))[3] - __s2[3]); } } __result; }))) : __builtin_strcmp ( "unlabeled" , f->scontext )))); }) == 0);
never executed: __result = (((const unsigned char *) (const char *) ( "unlabeled" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( f->scontext ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
__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
3270 }-
3271 else-
3272 {-
3273 f->scontext = UNKNOWN_SECURITY_CONTEXT;-
3274-
3275 /* When requesting security context information, don't make-
3276 ls fail just because the file (even a command line argument)-
3277 isn't on the right type of file system. I.e., a getfilecon-
3278 failure isn't in the same class as a stat failure. */-
3279 if (is_ENOTSUP (errno) || errno == ENODATA)
is_ENOTSUP ( (...location ()) )Description
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
(*__errno_location ()) == 61Description
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-160
3280 err = 0;
executed 160 times by 2 tests: err = 0;
Executed by:
  • ls
  • vdir
160
3281 }
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
3282-
3283 if (err == 0 && format == long_format)
err == 0Description
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
format == long_formatDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-160
3284 {-
3285 int n = file_has_acl_cache (full_name, f);-
3286 err = (n < 0);-
3287 have_acl = (0 < n);-
3288 }
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
3289-
3290 f->acl_type = (!have_scontext && !have_acl
!have_scontextDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
!have_aclDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-160
3291 ? ACL_T_NONE-
3292 : (have_scontext && !have_acl
have_scontextDescription
TRUEnever evaluated
FALSEnever evaluated
!have_aclDescription
TRUEnever evaluated
FALSEnever evaluated
0
3293 ? ACL_T_LSM_CONTEXT_ONLY-
3294 : ACL_T_YES));-
3295 any_has_acl |= f->acl_type != ACL_T_NONE;-
3296-
3297 if (err)
errDescription
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
3298 error (0, errno, "%s", quotef (full_name));
never executed: error (0, (*__errno_location ()) , "%s", quotearg_n_style_colon (0, shell_escape_quoting_style, full_name));
0
3299 }
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
3300-
3301 if (S_ISLNK (f->stat.st_mode)
(((( f->stat.s... == (0120000))Description
TRUEevaluated 32 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 1095 times by 2 tests
Evaluated by:
  • ls
  • vdir
32-1095
3302 && (format == long_format || check_symlink_color))
format == long_formatDescription
TRUEevaluated 13 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 19 times by 1 test
Evaluated by:
  • ls
check_symlink_colorDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 11 times by 1 test
Evaluated by:
  • ls
8-19
3303 {-
3304 struct stat linkstats;-
3305-
3306 get_link_name (full_name, f, command_line_arg);-
3307 char *linkname = make_link_name (full_name, f->linkname);-
3308-
3309 /* Use the slower quoting path for this entry, though-
3310 don't update CWD_SOME_QUOTED since alignment not affected. */-
3311 if (linkname && f->quoted == 0 && needs_quoting (f->linkname))
linknameDescription
TRUEevaluated 21 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
f->quoted == 0Description
TRUEnever evaluated
FALSEevaluated 21 times by 2 tests
Evaluated by:
  • ls
  • vdir
needs_quoting (f->linkname)Description
TRUEnever evaluated
FALSEnever evaluated
0-21
3312 f->quoted = -1;
never executed: f->quoted = -1;
0
3313-
3314 /* Avoid following symbolic links when possible, ie, when-
3315 they won't be traced and when no indicator is needed. */-
3316 if (linkname
linknameDescription
TRUEevaluated 21 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-21
3317 && (file_type <= indicator_style || check_symlink_color)
file_type <= indicator_styleDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 17 times by 2 tests
Evaluated by:
  • ls
  • vdir
check_symlink_colorDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 5 times by 2 tests
Evaluated by:
  • ls
  • vdir
4-17
3318 && stat (linkname, &linkstats) == 0)
stat (linkname...inkstats) == 0Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
6-10
3319 {-
3320 f->linkok = true;-
3321-
3322 /* Symbolic links to directories that are mentioned on the-
3323 command line are automatically traced if not being-
3324 listed as files. */-
3325 if (!command_line_arg || format == long_format
!command_line_argDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
format == long_formatDescription
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
0-4
3326 || !S_ISDIR (linkstats.st_mode))
! (((( linksta... == (0040000))Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
0-4
3327 {-
3328 /* Get the linked-to file's mode for the filetype indicator-
3329 in long listings. */-
3330 f->linkmode = linkstats.st_mode;-
3331 }
executed 2 times by 1 test: end of block
Executed by:
  • ls
2
3332 }
executed 6 times by 1 test: end of block
Executed by:
  • ls
6
3333 free (linkname);-
3334 }
executed 21 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
21
3335-
3336 if (S_ISLNK (f->stat.st_mode))
(((( f->stat.s... == (0120000))Description
TRUEevaluated 32 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 1095 times by 2 tests
Evaluated by:
  • ls
  • vdir
32-1095
3337 f->filetype = symbolic_link;
executed 32 times by 2 tests: f->filetype = symbolic_link;
Executed by:
  • ls
  • vdir
32
3338 else if (S_ISDIR (f->stat.st_mode))
(((( f->stat.s... == (0040000))Description
TRUEevaluated 960 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 135 times by 2 tests
Evaluated by:
  • ls
  • vdir
135-960
3339 {-
3340 if (command_line_arg && !immediate_dirs)
command_line_argDescription
TRUEevaluated 959 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1 time by 1 test
Evaluated by:
  • vdir
!immediate_dirsDescription
TRUEevaluated 34 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 925 times by 1 test
Evaluated by:
  • ls
1-959
3341 f->filetype = arg_directory;
executed 34 times by 1 test: f->filetype = arg_directory;
Executed by:
  • ls
34
3342 else-
3343 f->filetype = directory;
executed 926 times by 2 tests: f->filetype = directory;
Executed by:
  • ls
  • vdir
926
3344 }-
3345 else-
3346 f->filetype = normal;
executed 135 times by 2 tests: f->filetype = normal;
Executed by:
  • ls
  • vdir
135
3347-
3348 blocks = ST_NBLOCKS (f->stat);-
3349 if (format == long_format || print_block_size)
format == long_formatDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 967 times by 1 test
Evaluated by:
  • ls
print_block_sizeDescription
TRUEnever evaluated
FALSEevaluated 967 times by 1 test
Evaluated by:
  • ls
0-967
3350 {-
3351 char buf[LONGEST_HUMAN_READABLE + 1];-
3352 int len = mbswidth (human_readable (blocks, buf, human_output_opts,-
3353 ST_NBLOCKSIZE, output_block_size),-
3354 0);-
3355 if (block_size_width < len)
block_size_width < lenDescription
TRUEevaluated 147 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 13 times by 1 test
Evaluated by:
  • vdir
13-147
3356 block_size_width = len;
executed 147 times by 2 tests: block_size_width = len;
Executed by:
  • ls
  • vdir
147
3357 }
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
3358-
3359 if (format == long_format)
format == long_formatDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 967 times by 1 test
Evaluated by:
  • ls
160-967
3360 {-
3361 if (print_owner)
print_ownerDescription
TRUEevaluated 40 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 120 times by 1 test
Evaluated by:
  • ls
40-120
3362 {-
3363 int len = format_user_width (f->stat.st_uid);-
3364 if (owner_width < len)
owner_width < lenDescription
TRUEevaluated 27 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 13 times by 1 test
Evaluated by:
  • vdir
13-27
3365 owner_width = len;
executed 27 times by 2 tests: owner_width = len;
Executed by:
  • ls
  • vdir
27
3366 }
executed 40 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
40
3367-
3368 if (print_group)
print_groupDescription
TRUEevaluated 38 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 122 times by 1 test
Evaluated by:
  • ls
38-122
3369 {-
3370 int len = format_group_width (f->stat.st_gid);-
3371 if (group_width < len)
group_width < lenDescription
TRUEevaluated 25 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 13 times by 1 test
Evaluated by:
  • vdir
13-25
3372 group_width = len;
executed 25 times by 2 tests: group_width = len;
Executed by:
  • ls
  • vdir
25
3373 }
executed 38 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
38
3374-
3375 if (print_author)
print_authorDescription
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
3376 {-
3377 int len = format_user_width (f->stat.st_author);-
3378 if (author_width < len)
author_width < lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
3379 author_width = len;
never executed: author_width = len;
0
3380 }
never executed: end of block
0
3381 }
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
3382-
3383 if (print_scontext)
print_scontextDescription
TRUEnever evaluated
FALSEevaluated 1127 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-1127
3384 {-
3385 int len = strlen (f->scontext);-
3386 if (scontext_width < len)
scontext_width < lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
3387 scontext_width = len;
never executed: scontext_width = len;
0
3388 }
never executed: end of block
0
3389-
3390 if (format == long_format)
format == long_formatDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 967 times by 1 test
Evaluated by:
  • ls
160-967
3391 {-
3392 char b[INT_BUFSIZE_BOUND (uintmax_t)];-
3393 int b_len = strlen (umaxtostr (f->stat.st_nlink, b));-
3394 if (nlink_width < b_len)
nlink_width < b_lenDescription
TRUEevaluated 147 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 13 times by 1 test
Evaluated by:
  • vdir
13-147
3395 nlink_width = b_len;
executed 147 times by 2 tests: nlink_width = b_len;
Executed by:
  • ls
  • vdir
147
3396-
3397 if (S_ISCHR (f->stat.st_mode) || S_ISBLK (f->stat.st_mode))
(((( f->stat.s... == (0020000))Description
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
(((( f->stat.s... == (0060000))Description
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
3398 {-
3399 char buf[INT_BUFSIZE_BOUND (uintmax_t)];-
3400 int len = strlen (umaxtostr (major (f->stat.st_rdev), buf));-
3401 if (major_device_number_width < len)
major_device_n...er_width < lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
3402 major_device_number_width = len;
never executed: major_device_number_width = len;
0
3403 len = strlen (umaxtostr (minor (f->stat.st_rdev), buf));-
3404 if (minor_device_number_width < len)
minor_device_n...er_width < lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
3405 minor_device_number_width = len;
never executed: minor_device_number_width = len;
0
3406 len = major_device_number_width + 2 + minor_device_number_width;-
3407 if (file_size_width < len)
file_size_width < lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
3408 file_size_width = len;
never executed: file_size_width = len;
0
3409 }
never executed: end of block
0
3410 else-
3411 {-
3412 char buf[LONGEST_HUMAN_READABLE + 1];-
3413 uintmax_t size = unsigned_file_size (f->stat.st_size);-
3414 int len = mbswidth (human_readable (size, buf,-
3415 file_human_output_opts,-
3416 1, file_output_block_size),-
3417 0);-
3418 if (file_size_width < len)
file_size_width < lenDescription
TRUEevaluated 148 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 12 times by 1 test
Evaluated by:
  • vdir
12-148
3419 file_size_width = len;
executed 148 times by 2 tests: file_size_width = len;
Executed by:
  • ls
  • vdir
148
3420 }
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
3421 }-
3422 }
executed 1127 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
1127
3423-
3424 if (print_inode)
print_inodeDescription
TRUEnever evaluated
FALSEevaluated 1159 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1159
3425 {-
3426 char buf[INT_BUFSIZE_BOUND (uintmax_t)];-
3427 int len = strlen (umaxtostr (f->stat.st_ino, buf));-
3428 if (inode_number_width < len)
inode_number_width < lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
3429 inode_number_width = len;
never executed: inode_number_width = len;
0
3430 }
never executed: end of block
0
3431-
3432 f->name = xstrdup (name);-
3433 cwd_n_used++;-
3434-
3435 return blocks;
executed 1159 times by 3 tests: return blocks;
Executed by:
  • dir
  • ls
  • vdir
1159
3436}-
3437-
3438/* Return true if F refers to a directory. */-
3439static bool-
3440is_directory (const struct fileinfo *f)-
3441{-
3442 return f->filetype == directory || f->filetype == arg_directory;
executed 173 times by 1 test: return f->filetype == directory || f->filetype == arg_directory;
Executed by:
  • ls
173
3443}-
3444-
3445/* Put the name of the file that FILENAME is a symbolic link to-
3446 into the LINKNAME field of 'f'. COMMAND_LINE_ARG indicates whether-
3447 FILENAME is a command-line argument. */-
3448-
3449static void-
3450get_link_name (char const *filename, struct fileinfo *f, bool command_line_arg)-
3451{-
3452 f->linkname = areadlink_with_size (filename, f->stat.st_size);-
3453 if (f->linkname == NULL)
f->linkname == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 21 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-21
3454 file_failure (command_line_arg, _("cannot read symbolic link %s"),
never executed: file_failure (command_line_arg, dcgettext (((void *)0), "cannot read symbolic link %s" , 5) , filename);
0
3455 filename);
never executed: file_failure (command_line_arg, dcgettext (((void *)0), "cannot read symbolic link %s" , 5) , filename);
0
3456}
executed 21 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
21
3457-
3458/* If LINKNAME is a relative name and NAME contains one or more-
3459 leading directories, return LINKNAME with those directories-
3460 prepended; otherwise, return a copy of LINKNAME.-
3461 If LINKNAME is NULL, return NULL. */-
3462-
3463static char *-
3464make_link_name (char const *name, char const *linkname)-
3465{-
3466 if (!linkname)
!linknameDescription
TRUEnever evaluated
FALSEevaluated 21 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-21
3467 return NULL;
never executed: return ((void *)0) ;
0
3468-
3469 if (IS_ABSOLUTE_FILE_NAME (linkname))
(((linkname)[0]) == '/')Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 17 times by 2 tests
Evaluated by:
  • ls
  • vdir
0 != 0Description
TRUEnever evaluated
FALSEevaluated 17 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-17
3470 return xstrdup (linkname);
executed 4 times by 1 test: return xstrdup (linkname);
Executed by:
  • ls
4
3471-
3472 /* The link is to a relative name. Prepend any leading directory-
3473 in 'name' to the link name. */-
3474 size_t prefix_len = dir_len (name);-
3475 if (prefix_len == 0)
prefix_len == 0Description
TRUEevaluated 13 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
4-13
3476 return xstrdup (linkname);
executed 13 times by 2 tests: return xstrdup (linkname);
Executed by:
  • ls
  • vdir
13
3477-
3478 char *p = xmalloc (prefix_len + 1 + strlen (linkname) + 1);-
3479-
3480 /* PREFIX_LEN usually specifies a string not ending in slash.-
3481 In that case, extend it by one, since the next byte *is* a slash.-
3482 Otherwise, the prefix is "/", so leave the length unchanged. */-
3483 if ( ! ISSLASH (name[prefix_len - 1]))
! ((name[prefi... - 1]) == '/')Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-4
3484 ++prefix_len;
executed 4 times by 1 test: ++prefix_len;
Executed by:
  • ls
4
3485-
3486 stpcpy (stpncpy (p, name, prefix_len), linkname);-
3487 return p;
executed 4 times by 1 test: return p;
Executed by:
  • ls
4
3488}-
3489-
3490/* Return true if the last component of NAME is '.' or '..'-
3491 This is so we don't try to recurse on '././././. ...' */-
3492-
3493static bool-
3494basename_is_dot_or_dotdot (const char *name)-
3495{-
3496 char const *base = last_component (name);-
3497 return dot_or_dotdot (base);
executed 4 times by 1 test: return dot_or_dotdot (base);
Executed by:
  • ls
4
3498}-
3499-
3500/* Remove any entries from CWD_FILE that are for directories,-
3501 and queue them to be listed as directories instead.-
3502 DIRNAME is the prefix to prepend to each dirname-
3503 to make it correct relative to ls's working dir;-
3504 if it is null, no prefix is needed and "." and ".." should not be ignored.-
3505 If COMMAND_LINE_ARG is true, this directory was mentioned at the top level,-
3506 This is desirable when processing directories recursively. */-
3507-
3508static void-
3509extract_dirs_from_files (char const *dirname, bool command_line_arg)-
3510{-
3511 size_t i;-
3512 size_t j;-
3513 bool ignore_dot_and_dot_dot = (dirname != NULL);-
3514-
3515 if (dirname && LOOP_DETECT)
dirnameDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 119 times by 1 test
Evaluated by:
  • ls
(!!active_dir_set)Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-119
3516 {-
3517 /* Insert a marker entry first. When we dequeue this marker entry,-
3518 we'll know that DIRNAME has been processed and may be removed-
3519 from the set of active directories. */-
3520 queue_directory (NULL, dirname, false);-
3521 }
executed 10 times by 1 test: end of block
Executed by:
  • ls
10
3522-
3523 /* Queue the directories last one first, because queueing reverses the-
3524 order. */-
3525 for (i = cwd_n_used; i-- != 0; )
i-- != 0Description
TRUEevaluated 173 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 129 times by 1 test
Evaluated by:
  • ls
129-173
3526 {-
3527 struct fileinfo *f = sorted_file[i];-
3528-
3529 if (is_directory (f)
is_directory (f)Description
TRUEevaluated 38 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 135 times by 1 test
Evaluated by:
  • ls
38-135
3530 && (! ignore_dot_and_dot_dot
! ignore_dot_and_dot_dotDescription
TRUEevaluated 34 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
4-34
3531 || ! basename_is_dot_or_dotdot (f->name)))
! basename_is_...tdot (f->name)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-4
3532 {-
3533 if (!dirname || f->name[0] == '/')
!dirnameDescription
TRUEevaluated 34 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
f->name[0] == '/'Description
TRUEnever evaluated
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
0-34
3534 queue_directory (f->name, f->linkname, command_line_arg);
executed 34 times by 1 test: queue_directory (f->name, f->linkname, command_line_arg);
Executed by:
  • ls
34
3535 else-
3536 {-
3537 char *name = file_name_concat (dirname, f->name, NULL);-
3538 queue_directory (name, f->linkname, command_line_arg);-
3539 free (name);-
3540 }
executed 4 times by 1 test: end of block
Executed by:
  • ls
4
3541 if (f->filetype == arg_directory)
f->filetype == arg_directoryDescription
TRUEevaluated 34 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
4-34
3542 free_ent (f);
executed 34 times by 1 test: free_ent (f);
Executed by:
  • ls
34
3543 }
executed 38 times by 1 test: end of block
Executed by:
  • ls
38
3544 }
executed 173 times by 1 test: end of block
Executed by:
  • ls
173
3545-
3546 /* Now delete the directories from the table, compacting all the remaining-
3547 entries. */-
3548-
3549 for (i = 0, j = 0; i < cwd_n_used; i++)
i < cwd_n_usedDescription
TRUEevaluated 173 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 129 times by 1 test
Evaluated by:
  • ls
129-173
3550 {-
3551 struct fileinfo *f = sorted_file[i];-
3552 sorted_file[j] = f;-
3553 j += (f->filetype != arg_directory);-
3554 }
executed 173 times by 1 test: end of block
Executed by:
  • ls
173
3555 cwd_n_used = j;-
3556}
executed 129 times by 1 test: end of block
Executed by:
  • ls
129
3557-
3558/* Use strcoll to compare strings in this locale. If an error occurs,-
3559 report an error and longjmp to failed_strcoll. */-
3560-
3561static jmp_buf failed_strcoll;-
3562-
3563static int-
3564xstrcoll (char const *a, char const *b)-
3565{-
3566 int diff;-
3567 errno = 0;-
3568 diff = strcoll (a, b);-
3569 if (errno)
(*__errno_location ())Description
TRUEnever evaluated
FALSEevaluated 93 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-93
3570 {-
3571 error (0, errno, _("cannot compare file names %s and %s"),-
3572 quote_n (0, a), quote_n (1, b));-
3573 set_exit_status (false);-
3574 longjmp (failed_strcoll, 1);-
3575 }
never executed: end of block
0
3576 return diff;
executed 93 times by 3 tests: return diff;
Executed by:
  • dir
  • ls
  • vdir
93
3577}-
3578-
3579/* Comparison routines for sorting the files. */-
3580-
3581typedef void const *V;-
3582typedef int (*qsortFunc)(V a, V b);-
3583-
3584/* Used below in DEFINE_SORT_FUNCTIONS for _df_ sort function variants.-
3585 The do { ... } while(0) makes it possible to use the macro more like-
3586 a statement, without violating C89 rules: */-
3587#define DIRFIRST_CHECK(a, b) \-
3588 do \-
3589 { \-
3590 bool a_is_dir = is_directory ((struct fileinfo const *) a); \-
3591 bool b_is_dir = is_directory ((struct fileinfo const *) b); \-
3592 if (a_is_dir && !b_is_dir) \-
3593 return -1; /* a goes before b */ \-
3594 if (!a_is_dir && b_is_dir) \-
3595 return 1; /* b goes before a */ \-
3596 } \-
3597 while (0)-
3598-
3599/* Define the 8 different sort function variants required for each sortkey.-
3600 KEY_NAME is a token describing the sort key, e.g., ctime, atime, size.-
3601 KEY_CMP_FUNC is a function to compare records based on that key, e.g.,-
3602 ctime_cmp, atime_cmp, size_cmp. Append KEY_NAME to the string,-
3603 '[rev_][x]str{cmp|coll}[_df]_', to create each function name. */-
3604#define DEFINE_SORT_FUNCTIONS(key_name, key_cmp_func) \-
3605 /* direct, non-dirfirst versions */ \-
3606 static int xstrcoll_##key_name (V a, V b) \-
3607 { return key_cmp_func (a, b, xstrcoll); } \-
3608 static int _GL_ATTRIBUTE_PURE strcmp_##key_name (V a, V b) \-
3609 { return key_cmp_func (a, b, strcmp); } \-
3610 \-
3611 /* reverse, non-dirfirst versions */ \-
3612 static int rev_xstrcoll_##key_name (V a, V b) \-
3613 { return key_cmp_func (b, a, xstrcoll); } \-
3614 static int _GL_ATTRIBUTE_PURE rev_strcmp_##key_name (V a, V b) \-
3615 { return key_cmp_func (b, a, strcmp); } \-
3616 \-
3617 /* direct, dirfirst versions */ \-
3618 static int xstrcoll_df_##key_name (V a, V b) \-
3619 { DIRFIRST_CHECK (a, b); return key_cmp_func (a, b, xstrcoll); } \-
3620 static int _GL_ATTRIBUTE_PURE strcmp_df_##key_name (V a, V b) \-
3621 { DIRFIRST_CHECK (a, b); return key_cmp_func (a, b, strcmp); } \-
3622 \-
3623 /* reverse, dirfirst versions */ \-
3624 static int rev_xstrcoll_df_##key_name (V a, V b) \-
3625 { DIRFIRST_CHECK (a, b); return key_cmp_func (b, a, xstrcoll); } \-
3626 static int _GL_ATTRIBUTE_PURE rev_strcmp_df_##key_name (V a, V b) \-
3627 { DIRFIRST_CHECK (a, b); return key_cmp_func (b, a, strcmp); }-
3628-
3629static inline int-
3630cmp_ctime (struct fileinfo const *a, struct fileinfo const *b,-
3631 int (*cmp) (char const *, char const *))-
3632{-
3633 int diff = timespec_cmp (get_stat_ctime (&b->stat),-
3634 get_stat_ctime (&a->stat));-
3635 return diff ? diff : cmp (a->name, b->name);
executed 3 times by 1 test: return diff ? diff : cmp (a->name, b->name);
Executed by:
  • ls
3
3636}-
3637-
3638static inline int-
3639cmp_mtime (struct fileinfo const *a, struct fileinfo const *b,-
3640 int (*cmp) (char const *, char const *))-
3641{-
3642 int diff = timespec_cmp (get_stat_mtime (&b->stat),-
3643 get_stat_mtime (&a->stat));-
3644 return diff ? diff : cmp (a->name, b->name);
executed 5 times by 1 test: return diff ? diff : cmp (a->name, b->name);
Executed by:
  • ls
5
3645}-
3646-
3647static inline int-
3648cmp_atime (struct fileinfo const *a, struct fileinfo const *b,-
3649 int (*cmp) (char const *, char const *))-
3650{-
3651 int diff = timespec_cmp (get_stat_atime (&b->stat),-
3652 get_stat_atime (&a->stat));-
3653 return diff ? diff : cmp (a->name, b->name);
executed 3 times by 1 test: return diff ? diff : cmp (a->name, b->name);
Executed by:
  • ls
3
3654}-
3655-
3656static inline int-
3657cmp_size (struct fileinfo const *a, struct fileinfo const *b,-
3658 int (*cmp) (char const *, char const *))-
3659{-
3660 int diff = longdiff (b->stat.st_size, a->stat.st_size);
(b->stat.st_si...>stat.st_size)Description
TRUEnever evaluated
FALSEnever evaluated
0
3661 return diff ? diff : cmp (a->name, b->name);
never executed: return diff ? diff : cmp (a->name, b->name);
0
3662}-
3663-
3664static inline int-
3665cmp_name (struct fileinfo const *a, struct fileinfo const *b,-
3666 int (*cmp) (char const *, char const *))-
3667{-
3668 return cmp (a->name, b->name);
executed 93 times by 3 tests: return cmp (a->name, b->name);
Executed by:
  • dir
  • ls
  • vdir
93
3669}-
3670-
3671/* Compare file extensions. Files with no extension are 'smallest'.-
3672 If extensions are the same, compare by file names instead. */-
3673-
3674static inline int-
3675cmp_extension (struct fileinfo const *a, struct fileinfo const *b,-
3676 int (*cmp) (char const *, char const *))-
3677{-
3678 char const *base1 = strrchr (a->name, '.');-
3679 char const *base2 = strrchr (b->name, '.');-
3680 int diff = cmp (base1 ? base1 : "", base2 ? base2 : "");-
3681 return diff ? diff : cmp (a->name, b->name);
never executed: return diff ? diff : cmp (a->name, b->name);
0
3682}-
3683-
3684DEFINE_SORT_FUNCTIONS (ctime, cmp_ctime)
executed 3 times by 1 test: return cmp_ctime (a, b, xstrcoll);
Executed by:
  • ls
never executed: return cmp_ctime (a, b, strcmp);
never executed: return cmp_ctime (b, a, xstrcoll);
never executed: return cmp_ctime (b, a, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_ctime (a, b, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_ctime (a, b, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_ctime (b, a, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_ctime (b, a, strcmp);
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
0-3
3685DEFINE_SORT_FUNCTIONS (mtime, cmp_mtime)
executed 5 times by 1 test: return cmp_mtime (a, b, xstrcoll);
Executed by:
  • ls
never executed: return cmp_mtime (a, b, strcmp);
never executed: return cmp_mtime (b, a, xstrcoll);
never executed: return cmp_mtime (b, a, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_mtime (a, b, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_mtime (a, b, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_mtime (b, a, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_mtime (b, a, strcmp);
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
0-5
3686DEFINE_SORT_FUNCTIONS (atime, cmp_atime)
executed 3 times by 1 test: return cmp_atime (a, b, xstrcoll);
Executed by:
  • ls
never executed: return cmp_atime (a, b, strcmp);
never executed: return cmp_atime (b, a, xstrcoll);
never executed: return cmp_atime (b, a, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_atime (a, b, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_atime (a, b, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_atime (b, a, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_atime (b, a, strcmp);
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
0-3
3687DEFINE_SORT_FUNCTIONS (size, cmp_size)
never executed: return cmp_size (a, b, xstrcoll);
never executed: return cmp_size (a, b, strcmp);
never executed: return cmp_size (b, a, xstrcoll);
never executed: return cmp_size (b, a, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_size (a, b, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_size (a, b, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_size (b, a, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_size (b, a, strcmp);
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
0
3688DEFINE_SORT_FUNCTIONS (name, cmp_name)
executed 93 times by 3 tests: return cmp_name (a, b, xstrcoll);
Executed by:
  • dir
  • ls
  • vdir
never executed: return cmp_name (a, b, strcmp);
never executed: return cmp_name (b, a, xstrcoll);
never executed: return cmp_name (b, a, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_name (a, b, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_name (a, b, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_name (b, a, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_name (b, a, strcmp);
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
0-93
3689DEFINE_SORT_FUNCTIONS (extension, cmp_extension)
never executed: return cmp_extension (a, b, xstrcoll);
never executed: return cmp_extension (a, b, strcmp);
never executed: return cmp_extension (b, a, xstrcoll);
never executed: return cmp_extension (b, a, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_extension (a, b, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_extension (a, b, strcmp);
never executed: return -1;
never executed: return 1;
never executed: return cmp_extension (b, a, xstrcoll);
never executed: return -1;
never executed: return 1;
never executed: return cmp_extension (b, a, strcmp);
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
0
3690-
3691/* Compare file versions.-
3692 Unlike all other compare functions above, cmp_version depends only-
3693 on filevercmp, which does not fail (even for locale reasons), and does not-
3694 need a secondary sort key. See lib/filevercmp.h for function description.-
3695-
3696 All the other sort options, in fact, need xstrcoll and strcmp variants,-
3697 because they all use a string comparison (either as the primary or secondary-
3698 sort key), and xstrcoll has the ability to do a longjmp if strcoll fails for-
3699 locale reasons. Lastly, filevercmp is ALWAYS available with gnulib. */-
3700static inline int-
3701cmp_version (struct fileinfo const *a, struct fileinfo const *b)-
3702{-
3703 return filevercmp (a->name, b->name);
executed 80 times by 1 test: return filevercmp (a->name, b->name);
Executed by:
  • ls
80
3704}-
3705-
3706static int xstrcoll_version (V a, V b)-
3707{
executed 80 times by 1 test: return cmp_version (a, b);
Executed by:
  • ls
return cmp_version (a, b); }
executed 80 times by 1 test: return cmp_version (a, b);
Executed by:
  • ls
80
3708static int rev_xstrcoll_version (V a, V b)-
3709{
never executed: return cmp_version (b, a);
return cmp_version (b, a); }
never executed: return cmp_version (b, a);
0
3710static int xstrcoll_df_version (V a, V b)-
3711{
never executed: return -1;
never executed: return 1;
never executed: return cmp_version (a, b);
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
DIRFIRST_CHECK (a, b); return cmp_version (a, b); }
never executed: return -1;
never executed: return 1;
never executed: return cmp_version (a, b);
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
0
3712static int rev_xstrcoll_df_version (V a, V b)-
3713{
never executed: return -1;
never executed: return 1;
never executed: return cmp_version (b, a);
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
DIRFIRST_CHECK (a, b); return cmp_version (b, a); }
never executed: return -1;
never executed: return 1;
never executed: return cmp_version (b, a);
a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
!a_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
b_is_dirDescription
TRUEnever evaluated
FALSEnever evaluated
0
3714-
3715-
3716/* We have 2^3 different variants for each sort-key function-
3717 (for 3 independent sort modes).-
3718 The function pointers stored in this array must be dereferenced as:-
3719-
3720 sort_variants[sort_key][use_strcmp][reverse][dirs_first]-
3721-
3722 Note that the order in which sort keys are listed in the function pointer-
3723 array below is defined by the order of the elements in the time_type and-
3724 sort_type enums! */-
3725-
3726#define LIST_SORTFUNCTION_VARIANTS(key_name) \-
3727 { \-
3728 { \-
3729 { xstrcoll_##key_name, xstrcoll_df_##key_name }, \-
3730 { rev_xstrcoll_##key_name, rev_xstrcoll_df_##key_name }, \-
3731 }, \-
3732 { \-
3733 { strcmp_##key_name, strcmp_df_##key_name }, \-
3734 { rev_strcmp_##key_name, rev_strcmp_df_##key_name }, \-
3735 } \-
3736 }-
3737-
3738static qsortFunc const sort_functions[][2][2][2] =-
3739 {-
3740 LIST_SORTFUNCTION_VARIANTS (name),-
3741 LIST_SORTFUNCTION_VARIANTS (extension),-
3742 LIST_SORTFUNCTION_VARIANTS (size),-
3743-
3744 {-
3745 {-
3746 { xstrcoll_version, xstrcoll_df_version },-
3747 { rev_xstrcoll_version, rev_xstrcoll_df_version },-
3748 },-
3749-
3750 /* We use NULL for the strcmp variants of version comparison-
3751 since as explained in cmp_version definition, version comparison-
3752 does not rely on xstrcoll, so it will never longjmp, and never-
3753 need to try the strcmp fallback. */-
3754 {-
3755 { NULL, NULL },-
3756 { NULL, NULL },-
3757 }-
3758 },-
3759-
3760 /* last are time sort functions */-
3761 LIST_SORTFUNCTION_VARIANTS (mtime),-
3762 LIST_SORTFUNCTION_VARIANTS (ctime),-
3763 LIST_SORTFUNCTION_VARIANTS (atime)-
3764 };-
3765-
3766/* The number of sort keys is calculated as the sum of-
3767 the number of elements in the sort_type enum (i.e., sort_numtypes)-
3768 the number of elements in the time_type enum (i.e., time_numtypes) - 1-
3769 This is because when sort_type==sort_time, we have up to-
3770 time_numtypes possible sort keys.-
3771-
3772 This line verifies at compile-time that the array of sort functions has been-
3773 initialized for all possible sort keys. */-
3774verify (ARRAY_CARDINALITY (sort_functions)-
3775 == sort_numtypes + time_numtypes - 1 );-
3776-
3777/* Set up SORTED_FILE to point to the in-use entries in CWD_FILE, in order. */-
3778-
3779static void-
3780initialize_ordering_vector (void)-
3781{-
3782 for (size_t i = 0; i < cwd_n_used; i++)
i < cwd_n_usedDescription
TRUEevaluated 1161 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 1090 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
1090-1161
3783 sorted_file[i] = &cwd_file[i];
executed 1161 times by 3 tests: sorted_file[i] = &cwd_file[i];
Executed by:
  • dir
  • ls
  • vdir
1161
3784}
executed 1090 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
1090
3785-
3786/* Sort the files now in the table. */-
3787-
3788static void-
3789sort_files (void)-
3790{-
3791 bool use_strcmp;-
3792-
3793 if (sorted_file_alloc < cwd_n_used + cwd_n_used / 2)
sorted_file_al...cwd_n_used / 2Description
TRUEevaluated 1050 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 40 times by 1 test
Evaluated by:
  • ls
40-1050
3794 {-
3795 free (sorted_file);-
3796 sorted_file = xnmalloc (cwd_n_used, 3 * sizeof *sorted_file);-
3797 sorted_file_alloc = 3 * cwd_n_used;-
3798 }
executed 1050 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
1050
3799-
3800 initialize_ordering_vector ();-
3801-
3802 if (sort_type == sort_none)
sort_type == sort_noneDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1084 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
6-1084
3803 return;
executed 6 times by 1 test: return;
Executed by:
  • ls
6
3804-
3805 /* Try strcoll. If it fails, fall back on strcmp. We can't safely-
3806 ignore strcoll failures, as a failing strcoll might be a-
3807 comparison function that is not a total order, and if we ignored-
3808 the failure this might cause qsort to dump core. */-
3809-
3810 if (! setjmp (failed_strcoll))
! _setjmp ( failed_strcoll )Description
TRUEevaluated 1084 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEnever evaluated
0-1084
3811 use_strcmp = false; /* strcoll() succeeded */
executed 1084 times by 3 tests: use_strcmp = 0 ;
Executed by:
  • dir
  • ls
  • vdir
1084
3812 else-
3813 {-
3814 use_strcmp = true;-
3815 assert (sort_type != sort_version);-
3816 initialize_ordering_vector ();-
3817 }
never executed: end of block
0
3818-
3819 /* When sort_type == sort_time, use time_type as subindex. */-
3820 mpsort ((void const **) sorted_file, cwd_n_used,-
3821 sort_functions[sort_type + (sort_type == sort_time ? time_type : 0)]-
3822 [use_strcmp][sort_reverse]-
3823 [directories_first]);-
3824}
executed 1084 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
1084
3825-
3826/* List all the files now in the table. */-
3827-
3828static void-
3829print_current_files (void)-
3830{-
3831 size_t i;-
3832-
3833 switch (format)-
3834 {-
3835 case one_per_line:
executed 891 times by 1 test: case one_per_line:
Executed by:
  • ls
891
3836 for (i = 0; i < cwd_n_used; i++)
i < cwd_n_usedDescription
TRUEevaluated 956 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 891 times by 1 test
Evaluated by:
  • ls
891-956
3837 {-
3838 print_file_name_and_frills (sorted_file[i], 0);-
3839 putchar ('\n');-
3840 }
executed 956 times by 1 test: end of block
Executed by:
  • ls
956
3841 break;
executed 891 times by 1 test: break;
Executed by:
  • ls
891
3842-
3843 case many_per_line:
executed 2 times by 2 tests: case many_per_line:
Executed by:
  • dir
  • ls
2
3844 if (! line_length)
! line_lengthDescription
TRUEnever evaluated
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
0-2
3845 print_with_separator (' ');
never executed: print_with_separator (' ');
0
3846 else-
3847 print_many_per_line ();
executed 2 times by 2 tests: print_many_per_line ();
Executed by:
  • dir
  • ls
2
3848 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • ls
2
3849-
3850 case horizontal:
never executed: case horizontal:
0
3851 if (! line_length)
! line_lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
3852 print_with_separator (' ');
never executed: print_with_separator (' ');
0
3853 else-
3854 print_horizontal ();
never executed: print_horizontal ();
0
3855 break;
never executed: break;
0
3856-
3857 case with_commas:
never executed: case with_commas:
0
3858 print_with_separator (',');-
3859 break;
never executed: break;
0
3860-
3861 case long_format:
executed 147 times by 2 tests: case long_format:
Executed by:
  • ls
  • vdir
147
3862 for (i = 0; i < cwd_n_used; i++)
i < cwd_n_usedDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 147 times by 2 tests
Evaluated by:
  • ls
  • vdir
147-160
3863 {-
3864 set_normal_color ();-
3865 print_long_format (sorted_file[i]);-
3866 DIRED_PUTCHAR ('\n');-
3867 }
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
3868 break;
executed 147 times by 2 tests: break;
Executed by:
  • ls
  • vdir
147
3869 }-
3870}
executed 1040 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
1040
3871-
3872/* Replace the first %b with precomputed aligned month names.-
3873 Note on glibc-2.7 at least, this speeds up the whole 'ls -lU'-
3874 process by around 17%, compared to letting strftime() handle the %b. */-
3875-
3876static size_t-
3877align_nstrftime (char *buf, size_t size, bool recent, struct tm const *tm,-
3878 timezone_t tz, int ns)-
3879{-
3880 char const *nfmt = (use_abformat
use_abformatDescription
TRUEevaluated 149 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 11 times by 1 test
Evaluated by:
  • ls
11-149
3881 ? abformat[recent][tm->tm_mon]-
3882 : long_time_format[recent]);-
3883 return nstrftime (buf, size, nfmt, tm, tz, ns);
executed 160 times by 2 tests: return nstrftime (buf, size, nfmt, tm, tz, ns);
Executed by:
  • ls
  • vdir
160
3884}-
3885-
3886/* Return the expected number of columns in a long-format timestamp,-
3887 or zero if it cannot be calculated. */-
3888-
3889static int-
3890long_time_expected_width (void)-
3891{-
3892 static int width = -1;-
3893-
3894 if (width < 0)
width < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
3895 {-
3896 time_t epoch = 0;-
3897 struct tm tm;-
3898 char buf[TIME_STAMP_LEN_MAXIMUM + 1];-
3899-
3900 /* In case you're wondering if localtime_rz can fail with an input time_t-
3901 value of 0, let's just say it's very unlikely, but not inconceivable.-
3902 The TZ environment variable would have to specify a time zone that-
3903 is 2**31-1900 years or more ahead of UTC. This could happen only on-
3904 a 64-bit system that blindly accepts e.g., TZ=UTC+20000000000000.-
3905 However, this is not possible with Solaris 10 or glibc-2.3.5, since-
3906 their implementations limit the offset to 167:59 and 24:00, resp. */-
3907 if (localtime_rz (localtz, &epoch, &tm))
localtime_rz (..., &epoch, &tm)Description
TRUEnever evaluated
FALSEnever evaluated
0
3908 {-
3909 size_t len = align_nstrftime (buf, sizeof buf, false,-
3910 &tm, localtz, 0);-
3911 if (len != 0)
len != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
3912 width = mbsnwidth (buf, len, 0);
never executed: width = mbsnwidth (buf, len, 0);
0
3913 }
never executed: end of block
0
3914-
3915 if (width < 0)
width < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
3916 width = 0;
never executed: width = 0;
0
3917 }
never executed: end of block
0
3918-
3919 return width;
never executed: return width;
0
3920}-
3921-
3922/* Print the user or group name NAME, with numeric id ID, using a-
3923 print width of WIDTH columns. */-
3924-
3925static void-
3926format_user_or_group (char const *name, unsigned long int id, int width)-
3927{-
3928 size_t len;-
3929-
3930 if (name)
nameDescription
TRUEevaluated 44 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 34 times by 1 test
Evaluated by:
  • ls
34-44
3931 {-
3932 int width_gap = width - mbswidth (name, 0);-
3933 int pad = MAX (0, width_gap);
(( 0 )>( width_gap ))Description
TRUEnever evaluated
FALSEevaluated 44 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-44
3934 fputs (name, stdout);-
3935 len = strlen (name) + pad;-
3936-
3937 do-
3938 putchar (' ');
executed 44 times by 2 tests: putchar_unlocked (' ');
Executed by:
  • ls
  • vdir
44
3939 while (pad--);
pad--Description
TRUEnever evaluated
FALSEevaluated 44 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-44
3940 }
executed 44 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
44
3941 else-
3942 {-
3943 printf ("%*lu ", width, id);-
3944 len = width;-
3945 }
executed 34 times by 1 test: end of block
Executed by:
  • ls
34
3946-
3947 dired_pos += len + 1;-
3948}
executed 78 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
78
3949-
3950/* Print the name or id of the user with id U, using a print width of-
3951 WIDTH. */-
3952-
3953static void-
3954format_user (uid_t u, int width, bool stat_ok)-
3955{-
3956 format_user_or_group (! stat_ok ? "?" :-
3957 (numeric_ids ? NULL : getuser (u)), u, width);-
3958}
executed 40 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
40
3959-
3960/* Likewise, for groups. */-
3961-
3962static void-
3963format_group (gid_t g, int width, bool stat_ok)-
3964{-
3965 format_user_or_group (! stat_ok ? "?" :-
3966 (numeric_ids ? NULL : getgroup (g)), g, width);-
3967}
executed 38 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
38
3968-
3969/* Return the number of columns that format_user_or_group will print. */-
3970-
3971static int-
3972format_user_or_group_width (char const *name, unsigned long int id)-
3973{-
3974 if (name)
nameDescription
TRUEevaluated 44 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 34 times by 1 test
Evaluated by:
  • ls
34-44
3975 {-
3976 int len = mbswidth (name, 0);-
3977 return MAX (0, len);
executed 44 times by 2 tests: return ((( 0 )>( len ))?( 0 ):( len )) ;
Executed by:
  • ls
  • vdir
44
3978 }-
3979 else-
3980 {-
3981 char buf[INT_BUFSIZE_BOUND (id)];-
3982 sprintf (buf, "%lu", id);-
3983 return strlen (buf);
executed 34 times by 1 test: return strlen (buf);
Executed by:
  • ls
34
3984 }-
3985}-
3986-
3987/* Return the number of columns that format_user will print. */-
3988-
3989static int-
3990format_user_width (uid_t u)-
3991{-
3992 return format_user_or_group_width (numeric_ids ? NULL : getuser (u), u);
executed 40 times by 2 tests: return format_user_or_group_width (numeric_ids ? ((void *)0) : getuser (u), u);
Executed by:
  • ls
  • vdir
40
3993}-
3994-
3995/* Likewise, for groups. */-
3996-
3997static int-
3998format_group_width (gid_t g)-
3999{-
4000 return format_user_or_group_width (numeric_ids ? NULL : getgroup (g), g);
executed 38 times by 2 tests: return format_user_or_group_width (numeric_ids ? ((void *)0) : getgroup (g), g);
Executed by:
  • ls
  • vdir
38
4001}-
4002-
4003/* Return a pointer to a formatted version of F->stat.st_ino,-
4004 possibly using buffer, BUF, of length BUFLEN, which must be at least-
4005 INT_BUFSIZE_BOUND (uintmax_t) bytes. */-
4006static char *-
4007format_inode (char *buf, size_t buflen, const struct fileinfo *f)-
4008{-
4009 assert (INT_BUFSIZE_BOUND (uintmax_t) <= buflen);-
4010 return (f->stat_ok && f->stat.st_ino != NOT_AN_INODE_NUMBER
never executed: return (f->stat_ok && f->stat.st_ino != NOT_AN_INODE_NUMBER ? umaxtostr (f->stat.st_ino, buf) : (char *) "?");
0
4011 ? umaxtostr (f->stat.st_ino, buf)
never executed: return (f->stat_ok && f->stat.st_ino != NOT_AN_INODE_NUMBER ? umaxtostr (f->stat.st_ino, buf) : (char *) "?");
0
4012 : (char *) "?");
never executed: return (f->stat_ok && f->stat.st_ino != NOT_AN_INODE_NUMBER ? umaxtostr (f->stat.st_ino, buf) : (char *) "?");
0
4013}-
4014-
4015/* Print information about F in long format. */-
4016static void-
4017print_long_format (const struct fileinfo *f)-
4018{-
4019 char modebuf[12];-
4020 char buf-
4021 [LONGEST_HUMAN_READABLE + 1 /* inode */-
4022 + LONGEST_HUMAN_READABLE + 1 /* size in blocks */-
4023 + sizeof (modebuf) - 1 + 1 /* mode string */-
4024 + INT_BUFSIZE_BOUND (uintmax_t) /* st_nlink */-
4025 + LONGEST_HUMAN_READABLE + 2 /* major device number */-
4026 + LONGEST_HUMAN_READABLE + 1 /* minor device number */-
4027 + TIME_STAMP_LEN_MAXIMUM + 1 /* max length of time/date */-
4028 ];-
4029 size_t s;-
4030 char *p;-
4031 struct timespec when_timespec;-
4032 struct tm when_local;-
4033-
4034 /* Compute the mode string, except remove the trailing space if no-
4035 file in this directory has an ACL or security context. */-
4036 if (f->stat_ok)
f->stat_okDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-160
4037 filemodestring (&f->stat, modebuf);
executed 160 times by 2 tests: filemodestring (&f->stat, modebuf);
Executed by:
  • ls
  • vdir
160
4038 else-
4039 {-
4040 modebuf[0] = filetype_letter[f->filetype];-
4041 memset (modebuf + 1, '?', 10);-
4042 modebuf[11] = '\0';-
4043 }
never executed: end of block
0
4044 if (! any_has_acl)
! any_has_aclDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-160
4045 modebuf[10] = '\0';
executed 160 times by 2 tests: modebuf[10] = '\0';
Executed by:
  • ls
  • vdir
160
4046 else if (f->acl_type == ACL_T_LSM_CONTEXT_ONLY)
f->acl_type ==...M_CONTEXT_ONLYDescription
TRUEnever evaluated
FALSEnever evaluated
0
4047 modebuf[10] = '.';
never executed: modebuf[10] = '.';
0
4048 else if (f->acl_type == ACL_T_YES)
f->acl_type == ACL_T_YESDescription
TRUEnever evaluated
FALSEnever evaluated
0
4049 modebuf[10] = '+';
never executed: modebuf[10] = '+';
0
4050-
4051 switch (time_type)-
4052 {-
4053 case time_ctime:
never executed: case time_ctime:
0
4054 when_timespec = get_stat_ctime (&f->stat);-
4055 break;
never executed: break;
0
4056 case time_mtime:
executed 159 times by 2 tests: case time_mtime:
Executed by:
  • ls
  • vdir
159
4057 when_timespec = get_stat_mtime (&f->stat);-
4058 break;
executed 159 times by 2 tests: break;
Executed by:
  • ls
  • vdir
159
4059 case time_atime:
executed 1 time by 1 test: case time_atime:
Executed by:
  • ls
1
4060 when_timespec = get_stat_atime (&f->stat);-
4061 break;
executed 1 time by 1 test: break;
Executed by:
  • ls
1
4062 default:
never executed: default:
0
4063 abort ();
never executed: abort ();
0
4064 }-
4065-
4066 p = buf;-
4067-
4068 if (print_inode)
print_inodeDescription
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
4069 {-
4070 char hbuf[INT_BUFSIZE_BOUND (uintmax_t)];-
4071 sprintf (p, "%*s ", inode_number_width,-
4072 format_inode (hbuf, sizeof hbuf, f));-
4073 /* Increment by strlen (p) here, rather than by inode_number_width + 1.-
4074 The latter is wrong when inode_number_width is zero. */-
4075 p += strlen (p);-
4076 }
never executed: end of block
0
4077-
4078 if (print_block_size)
print_block_sizeDescription
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
4079 {-
4080 char hbuf[LONGEST_HUMAN_READABLE + 1];-
4081 char const *blocks =-
4082 (! f->stat_ok
! f->stat_okDescription
TRUEnever evaluated
FALSEnever evaluated
0
4083 ? "?"-
4084 : human_readable (ST_NBLOCKS (f->stat), hbuf, human_output_opts,-
4085 ST_NBLOCKSIZE, output_block_size));-
4086 int pad;-
4087 for (pad = block_size_width - mbswidth (blocks, 0); 0 < pad; pad--)
0 < padDescription
TRUEnever evaluated
FALSEnever evaluated
0
4088 *p++ = ' ';
never executed: *p++ = ' ';
0
4089 while ((*p++ = *blocks++))
(*p++ = *blocks++)Description
TRUEnever evaluated
FALSEnever evaluated
0
4090 continue;
never executed: continue;
0
4091 p[-1] = ' ';-
4092 }
never executed: end of block
0
4093-
4094 /* The last byte of the mode string is the POSIX-
4095 "optional alternate access method flag". */-
4096 {-
4097 char hbuf[INT_BUFSIZE_BOUND (uintmax_t)];-
4098 sprintf (p, "%s %*s ", modebuf, nlink_width,-
4099 ! f->stat_ok ? "?" : umaxtostr (f->stat.st_nlink, hbuf));-
4100 }-
4101 /* Increment by strlen (p) here, rather than by, e.g.,-
4102 sizeof modebuf - 2 + any_has_acl + 1 + nlink_width + 1.-
4103 The latter is wrong when nlink_width is zero. */-
4104 p += strlen (p);-
4105-
4106 DIRED_INDENT ();
never executed: end of block
diredDescription
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
4107-
4108 if (print_owner || print_group || print_author || print_scontext)
print_ownerDescription
TRUEevaluated 40 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 120 times by 1 test
Evaluated by:
  • ls
print_groupDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 114 times by 1 test
Evaluated by:
  • ls
print_authorDescription
TRUEnever evaluated
FALSEevaluated 114 times by 1 test
Evaluated by:
  • ls
print_scontextDescription
TRUEnever evaluated
FALSEevaluated 114 times by 1 test
Evaluated by:
  • ls
0-120
4109 {-
4110 DIRED_FPUTS (buf, stdout, p - buf);-
4111-
4112 if (print_owner)
print_ownerDescription
TRUEevaluated 40 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 6 times by 1 test
Evaluated by:
  • ls
6-40
4113 format_user (f->stat.st_uid, owner_width, f->stat_ok);
executed 40 times by 2 tests: format_user (f->stat.st_uid, owner_width, f->stat_ok);
Executed by:
  • ls
  • vdir
40
4114-
4115 if (print_group)
print_groupDescription
TRUEevaluated 38 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 8 times by 1 test
Evaluated by:
  • ls
8-38
4116 format_group (f->stat.st_gid, group_width, f->stat_ok);
executed 38 times by 2 tests: format_group (f->stat.st_gid, group_width, f->stat_ok);
Executed by:
  • ls
  • vdir
38
4117-
4118 if (print_author)
print_authorDescription
TRUEnever evaluated
FALSEevaluated 46 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-46
4119 format_user (f->stat.st_author, author_width, f->stat_ok);
never executed: format_user (f->stat.st_uid, author_width, f->stat_ok);
0
4120-
4121 if (print_scontext)
print_scontextDescription
TRUEnever evaluated
FALSEevaluated 46 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-46
4122 format_user_or_group (f->scontext, 0, scontext_width);
never executed: format_user_or_group (f->scontext, 0, scontext_width);
0
4123-
4124 p = buf;-
4125 }
executed 46 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
46
4126-
4127 if (f->stat_ok
f->stat_okDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-160
4128 && (S_ISCHR (f->stat.st_mode) || S_ISBLK (f->stat.st_mode)))
(((( f->stat.s... == (0020000))Description
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
(((( f->stat.s... == (0060000))Description
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
4129 {-
4130 char majorbuf[INT_BUFSIZE_BOUND (uintmax_t)];-
4131 char minorbuf[INT_BUFSIZE_BOUND (uintmax_t)];-
4132 int blanks_width = (file_size_width-
4133 - (major_device_number_width + 2-
4134 + minor_device_number_width));-
4135 sprintf (p, "%*s, %*s ",-
4136 major_device_number_width + MAX (0, blanks_width),-
4137 umaxtostr (major (f->stat.st_rdev), majorbuf),-
4138 minor_device_number_width,-
4139 umaxtostr (minor (f->stat.st_rdev), minorbuf));-
4140 p += file_size_width + 1;-
4141 }
never executed: end of block
0
4142 else-
4143 {-
4144 char hbuf[LONGEST_HUMAN_READABLE + 1];-
4145 char const *size =-
4146 (! f->stat_ok
! f->stat_okDescription
TRUEnever evaluated
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-160
4147 ? "?"-
4148 : human_readable (unsigned_file_size (f->stat.st_size),-
4149 hbuf, file_human_output_opts, 1,-
4150 file_output_block_size));-
4151 int pad;-
4152 for (pad = file_size_width - mbswidth (size, 0); 0 < pad; pad--)
0 < padDescription
TRUEevaluated 30 times by 1 test
Evaluated by:
  • vdir
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
30-160
4153 *p++ = ' ';
executed 30 times by 1 test: *p++ = ' ';
Executed by:
  • vdir
30
4154 while ((*p++ = *size++))
(*p++ = *size++)Description
TRUEevaluated 523 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
160-523
4155 continue;
executed 523 times by 2 tests: continue;
Executed by:
  • ls
  • vdir
523
4156 p[-1] = ' ';-
4157 }
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
4158-
4159 s = 0;-
4160 *p = '\1';-
4161-
4162 if (f->stat_ok && localtime_rz (localtz, &when_timespec.tv_sec, &when_local))
f->stat_okDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
localtime_rz (..., &when_local)Description
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-160
4163 {-
4164 struct timespec six_months_ago;-
4165 bool recent;-
4166-
4167 /* If the file appears to be in the future, update the current-
4168 time, in case the file happens to have been modified since-
4169 the last time we checked the clock. */-
4170 if (timespec_cmp (current_time, when_timespec) < 0)
timespec_cmp (..._timespec) < 0Description
TRUEevaluated 147 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 13 times by 1 test
Evaluated by:
  • vdir
13-147
4171 gettime (&current_time);
executed 147 times by 2 tests: gettime (&current_time);
Executed by:
  • ls
  • vdir
147
4172-
4173 /* Consider a time to be recent if it is within the past six months.-
4174 A Gregorian year has 365.2425 * 24 * 60 * 60 == 31556952 seconds-
4175 on the average. Write this value as an integer constant to-
4176 avoid floating point hassles. */-
4177 six_months_ago.tv_sec = current_time.tv_sec - 31556952 / 2;-
4178 six_months_ago.tv_nsec = current_time.tv_nsec;-
4179-
4180 recent = (timespec_cmp (six_months_ago, when_timespec) < 0
timespec_cmp (..._timespec) < 0Description
TRUEevaluated 156 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
4-156
4181 && (timespec_cmp (when_timespec, current_time) < 0));
(timespec_cmp ...ent_time) < 0)Description
TRUEevaluated 156 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-156
4182-
4183 /* We assume here that all time zones are offset from UTC by a-
4184 whole number of seconds. */-
4185 s = align_nstrftime (p, TIME_STAMP_LEN_MAXIMUM + 1, recent,-
4186 &when_local, localtz, when_timespec.tv_nsec);-
4187 }
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
4188-
4189 if (s || !*p)
sDescription
TRUEevaluated 160 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
!*pDescription
TRUEnever evaluated
FALSEnever evaluated
0-160
4190 {-
4191 p += s;-
4192 *p++ = ' ';-
4193-
4194 /* NUL-terminate the string -- fputs (via DIRED_FPUTS) requires it. */-
4195 *p = '\0';-
4196 }
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
4197 else-
4198 {-
4199 /* The time cannot be converted using the desired format, so-
4200 print it as a huge integer number of seconds. */-
4201 char hbuf[INT_BUFSIZE_BOUND (intmax_t)];-
4202 sprintf (p, "%*s ", long_time_expected_width (),-
4203 (! f->stat_ok-
4204 ? "?"-
4205 : timetostr (when_timespec.tv_sec, hbuf)));-
4206 /* FIXME: (maybe) We discarded when_timespec.tv_nsec. */-
4207 p += strlen (p);-
4208 }
never executed: end of block
0
4209-
4210 DIRED_FPUTS (buf, stdout, p - buf);-
4211 size_t w = print_name_with_quoting (f, false, &dired_obstack, p - buf);-
4212-
4213 if (f->filetype == symbolic_link)
f->filetype == symbolic_linkDescription
TRUEevaluated 13 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 147 times by 2 tests
Evaluated by:
  • ls
  • vdir
13-147
4214 {-
4215 if (f->linkname)
f->linknameDescription
TRUEevaluated 13 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEnever evaluated
0-13
4216 {-
4217 DIRED_FPUTS_LITERAL (" -> ", stdout);-
4218 print_name_with_quoting (f, true, NULL, (p - buf) + w + 4);-
4219 if (indicator_style != none)
indicator_style != noneDescription
TRUEnever evaluated
FALSEevaluated 13 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-13
4220 print_type_indicator (true, f->linkmode, unknown);
never executed: print_type_indicator ( 1 , f->linkmode, unknown);
0
4221 }
executed 13 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
13
4222 }
executed 13 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
13
4223 else if (indicator_style != none)
indicator_style != noneDescription
TRUEnever evaluated
FALSEevaluated 147 times by 2 tests
Evaluated by:
  • ls
  • vdir
0-147
4224 print_type_indicator (f->stat_ok, f->stat.st_mode, f->filetype);
never executed: print_type_indicator (f->stat_ok, f->stat.st_mode, f->filetype);
0
4225}
executed 160 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
160
4226-
4227/* Write to *BUF a quoted representation of the file name NAME, if non-NULL,-
4228 using OPTIONS to control quoting. *BUF is set to NAME if no quoting-
4229 is required. *BUF is allocated if more space required (and the original-
4230 *BUF is not deallocated).-
4231 Store the number of screen columns occupied by NAME's quoted-
4232 representation into WIDTH, if non-NULL.-
4233 Store into PAD whether an initial space is needed for padding.-
4234 Return the number of bytes in *BUF. */-
4235-
4236static size_t-
4237quote_name_buf (char **inbuf, size_t bufsize, char *name,-
4238 struct quoting_options const *options,-
4239 int needs_general_quoting, size_t *width, bool *pad)-
4240{-
4241 char *buf = *inbuf;-
4242 size_t displayed_width IF_LINT ( = 0);-
4243 size_t len = 0;-
4244 bool quoted;-
4245-
4246 enum quoting_style qs = get_quoting_style (options);-
4247 bool needs_further_quoting = qmark_funny_chars
qmark_funny_charsDescription
TRUEevaluated 18 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1162 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
18-1162
4248 && (qs == shell_quoting_style
qs == shell_quoting_styleDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 16 times by 1 test
Evaluated by:
  • ls
2-16
4249 || qs == shell_always_quoting_style
qs == shell_al..._quoting_styleDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 14 times by 1 test
Evaluated by:
  • ls
2-14
4250 || qs == literal_quoting_style);
qs == literal_quoting_styleDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
4-10
4251-
4252 if (needs_general_quoting != 0)
needs_general_quoting != 0Description
TRUEevaluated 1180 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEnever evaluated
0-1180
4253 {-
4254 len = quotearg_buffer (buf, bufsize, name, -1, options);-
4255 if (bufsize <= len)
bufsize <= lenDescription
TRUEnever evaluated
FALSEevaluated 1180 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1180
4256 {-
4257 buf = xmalloc (len + 1);-
4258 quotearg_buffer (buf, len + 1, name, -1, options);-
4259 }
never executed: end of block
0
4260-
4261 quoted = (*name != *buf) || strlen (name) != len;
(*name != *buf)Description
TRUEevaluated 24 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1156 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
strlen (name) != lenDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1152 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
4-1156
4262 }
executed 1180 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
1180
4263 else if (needs_further_quoting)
needs_further_quotingDescription
TRUEnever evaluated
FALSEnever evaluated
0
4264 {-
4265 len = strlen (name);-
4266 if (bufsize <= len)
bufsize <= lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
4267 buf = xmalloc (len + 1);
never executed: buf = xmalloc (len + 1);
0
4268 memcpy (buf, name, len + 1);-
4269-
4270 quoted = false;-
4271 }
never executed: end of block
0
4272 else-
4273 {-
4274 len = strlen (name);-
4275 buf = name;-
4276 quoted = false;-
4277 }
never executed: end of block
0
4278-
4279 if (needs_further_quoting)
needs_further_quotingDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1172 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
8-1172
4280 {-
4281 if (MB_CUR_MAX > 1)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • ls
0-8
4282 {-
4283 char const *p = buf;-
4284 char const *plimit = buf + len;-
4285 char *q = buf;-
4286 displayed_width = 0;-
4287-
4288 while (p < plimit)
p < plimitDescription
TRUEnever evaluated
FALSEnever evaluated
0
4289 switch (*p)-
4290 {-
4291 case ' ': case '!': case '"': case '#': case '%':
never executed: case ' ':
never executed: case '!':
never executed: case '"':
never executed: case '#':
never executed: case '%':
0
4292 case '&': case '\'': case '(': case ')': case '*':
never executed: case '&':
never executed: case '\'':
never executed: case '(':
never executed: case ')':
never executed: case '*':
0
4293 case '+': case ',': case '-': case '.': case '/':
never executed: case '+':
never executed: case ',':
never executed: case '-':
never executed: case '.':
never executed: case '/':
0
4294 case '0': case '1': case '2': case '3': case '4':
never executed: case '0':
never executed: case '1':
never executed: case '2':
never executed: case '3':
never executed: case '4':
0
4295 case '5': case '6': case '7': case '8': case '9':
never executed: case '5':
never executed: case '6':
never executed: case '7':
never executed: case '8':
never executed: case '9':
0
4296 case ':': case ';': case '<': case '=': case '>':
never executed: case ':':
never executed: case ';':
never executed: case '<':
never executed: case '=':
never executed: case '>':
0
4297 case '?':
never executed: case '?':
0
4298 case 'A': case 'B': case 'C': case 'D': case 'E':
never executed: case 'A':
never executed: case 'B':
never executed: case 'C':
never executed: case 'D':
never executed: case 'E':
0
4299 case 'F': case 'G': case 'H': case 'I': case 'J':
never executed: case 'F':
never executed: case 'G':
never executed: case 'H':
never executed: case 'I':
never executed: case 'J':
0
4300 case 'K': case 'L': case 'M': case 'N': case 'O':
never executed: case 'K':
never executed: case 'L':
never executed: case 'M':
never executed: case 'N':
never executed: case 'O':
0
4301 case 'P': case 'Q': case 'R': case 'S': case 'T':
never executed: case 'P':
never executed: case 'Q':
never executed: case 'R':
never executed: case 'S':
never executed: case 'T':
0
4302 case 'U': case 'V': case 'W': case 'X': case 'Y':
never executed: case 'U':
never executed: case 'V':
never executed: case 'W':
never executed: case 'X':
never executed: case 'Y':
0
4303 case 'Z':
never executed: case 'Z':
0
4304 case '[': case '\\': case ']': case '^': case '_':
never executed: case '[':
never executed: case '\\':
never executed: case ']':
never executed: case '^':
never executed: case '_':
0
4305 case 'a': case 'b': case 'c': case 'd': case 'e':
never executed: case 'a':
never executed: case 'b':
never executed: case 'c':
never executed: case 'd':
never executed: case 'e':
0
4306 case 'f': case 'g': case 'h': case 'i': case 'j':
never executed: case 'f':
never executed: case 'g':
never executed: case 'h':
never executed: case 'i':
never executed: case 'j':
0
4307 case 'k': case 'l': case 'm': case 'n': case 'o':
never executed: case 'k':
never executed: case 'l':
never executed: case 'm':
never executed: case 'n':
never executed: case 'o':
0
4308 case 'p': case 'q': case 'r': case 's': case 't':
never executed: case 'p':
never executed: case 'q':
never executed: case 'r':
never executed: case 's':
never executed: case 't':
0
4309 case 'u': case 'v': case 'w': case 'x': case 'y':
never executed: case 'u':
never executed: case 'v':
never executed: case 'w':
never executed: case 'x':
never executed: case 'y':
0
4310 case 'z': case '{': case '|': case '}': case '~':
never executed: case 'z':
never executed: case '{':
never executed: case '|':
never executed: case '}':
never executed: case '~':
0
4311 /* These characters are printable ASCII characters. */-
4312 *q++ = *p++;-
4313 displayed_width += 1;-
4314 break;
never executed: break;
0
4315 default:
never executed: default:
0
4316 /* If we have a multibyte sequence, copy it until we-
4317 reach its end, replacing each non-printable multibyte-
4318 character with a single question mark. */-
4319 {-
4320 mbstate_t mbstate = { 0, };-
4321 do-
4322 {-
4323 wchar_t wc;-
4324 size_t bytes;-
4325 int w;-
4326-
4327 bytes = mbrtowc (&wc, p, plimit - p, &mbstate);-
4328-
4329 if (bytes == (size_t) -1)
bytes == (size_t) -1Description
TRUEnever evaluated
FALSEnever evaluated
0
4330 {-
4331 /* An invalid multibyte sequence was-
4332 encountered. Skip one input byte, and-
4333 put a question mark. */-
4334 p++;-
4335 *q++ = '?';-
4336 displayed_width += 1;-
4337 break;
never executed: break;
0
4338 }-
4339-
4340 if (bytes == (size_t) -2)
bytes == (size_t) -2Description
TRUEnever evaluated
FALSEnever evaluated
0
4341 {-
4342 /* An incomplete multibyte character-
4343 at the end. Replace it entirely with-
4344 a question mark. */-
4345 p = plimit;-
4346 *q++ = '?';-
4347 displayed_width += 1;-
4348 break;
never executed: break;
0
4349 }-
4350-
4351 if (bytes == 0)
bytes == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
4352 /* A null wide character was encountered. */-
4353 bytes = 1;
never executed: bytes = 1;
0
4354-
4355 w = wcwidth (wc);-
4356 if (w >= 0)
w >= 0Description
TRUEnever evaluated
FALSEnever evaluated
0
4357 {-
4358 /* A printable multibyte character.-
4359 Keep it. */-
4360 for (; bytes > 0; --bytes)
bytes > 0Description
TRUEnever evaluated
FALSEnever evaluated
0
4361 *q++ = *p++;
never executed: *q++ = *p++;
0
4362 displayed_width += w;-
4363 }
never executed: end of block
0
4364 else-
4365 {-
4366 /* An unprintable multibyte character.-
4367 Replace it entirely with a question-
4368 mark. */-
4369 p += bytes;-
4370 *q++ = '?';-
4371 displayed_width += 1;-
4372 }
never executed: end of block
0
4373 }-
4374 while (! mbsinit (&mbstate));
! mbsinit (&mbstate)Description
TRUEnever evaluated
FALSEnever evaluated
0
4375 }-
4376 break;
never executed: break;
0
4377 }-
4378-
4379 /* The buffer may have shrunk. */-
4380 len = q - buf;-
4381 }
never executed: end of block
0
4382 else-
4383 {-
4384 char *p = buf;-
4385 char const *plimit = buf + len;-
4386-
4387 while (p < plimit)
p < plimitDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 8 times by 1 test
Evaluated by:
  • ls
8-20
4388 {-
4389 if (! isprint (to_uchar (*p)))
! ((*__ctype_b...int) _ISprint)Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 12 times by 1 test
Evaluated by:
  • ls
8-12
4390 *p = '?';
executed 8 times by 1 test: *p = '?';
Executed by:
  • ls
8
4391 p++;-
4392 }
executed 20 times by 1 test: end of block
Executed by:
  • ls
20
4393 displayed_width = len;-
4394 }
executed 8 times by 1 test: end of block
Executed by:
  • ls
8
4395 }-
4396 else if (width != NULL)
width != ((void *)0)Description
TRUEevaluated 22 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 1150 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
22-1150
4397 {-
4398 if (MB_CUR_MAX > 1)
(__ctype_get_m...ur_max ()) > 1Description
TRUEnever evaluated
FALSEevaluated 22 times by 2 tests
Evaluated by:
  • dir
  • ls
0-22
4399 displayed_width = mbsnwidth (buf, len, 0);
never executed: displayed_width = mbsnwidth (buf, len, 0);
0
4400 else-
4401 {-
4402 char const *p = buf;-
4403 char const *plimit = buf + len;-
4404-
4405 displayed_width = 0;-
4406 while (p < plimit)
p < plimitDescription
TRUEevaluated 126 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 22 times by 2 tests
Evaluated by:
  • dir
  • ls
22-126
4407 {-
4408 if (isprint (to_uchar (*p)))
((*__ctype_b_l...int) _ISprint)Description
TRUEevaluated 126 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEnever evaluated
0-126
4409 displayed_width++;
executed 126 times by 2 tests: displayed_width++;
Executed by:
  • dir
  • ls
126
4410 p++;-
4411 }
executed 126 times by 2 tests: end of block
Executed by:
  • dir
  • ls
126
4412 }
executed 22 times by 2 tests: end of block
Executed by:
  • dir
  • ls
22
4413 }-
4414-
4415 /* Set padding to better align quoted items,-
4416 and also give a visual indication that quotes are-
4417 not actually part of the name. */-
4418 *pad = (align_variable_outer_quotes && cwd_some_quoted && ! quoted);
align_variable_outer_quotesDescription
TRUEnever evaluated
FALSEevaluated 1180 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
cwd_some_quotedDescription
TRUEnever evaluated
FALSEnever evaluated
! quotedDescription
TRUEnever evaluated
FALSEnever evaluated
0-1180
4419-
4420 if (width != NULL)
width != ((void *)0)Description
TRUEevaluated 22 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 1158 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
22-1158
4421 *width = displayed_width;
executed 22 times by 2 tests: *width = displayed_width;
Executed by:
  • dir
  • ls
22
4422-
4423 *inbuf = buf;-
4424-
4425 return len;
executed 1180 times by 3 tests: return len;
Executed by:
  • dir
  • ls
  • vdir
1180
4426}-
4427-
4428static size_t-
4429quote_name_width (const char *name, struct quoting_options const *options,-
4430 int needs_general_quoting)-
4431{-
4432 char smallbuf[BUFSIZ];-
4433 char *buf = smallbuf;-
4434 size_t width;-
4435 bool pad;-
4436-
4437 quote_name_buf (&buf, sizeof smallbuf, (char *) name, options,-
4438 needs_general_quoting, &width, &pad);-
4439-
4440 if (buf != smallbuf && buf != name)
buf != smallbufDescription
TRUEnever evaluated
FALSEevaluated 22 times by 2 tests
Evaluated by:
  • dir
  • ls
buf != nameDescription
TRUEnever evaluated
FALSEnever evaluated
0-22
4441 free (buf);
never executed: free (buf);
0
4442-
4443 width += pad;-
4444-
4445 return width;
executed 22 times by 2 tests: return width;
Executed by:
  • dir
  • ls
22
4446}-
4447-
4448/* %XX escape any input out of range as defined in RFC3986,-
4449 and also if PATH, convert all path separators to '/'. */-
4450static char *-
4451file_escape (const char *str, bool path)-
4452{-
4453 char *esc = xnmalloc (3, strlen (str) + 1);-
4454 char *p = esc;-
4455 while (*str)
*strDescription
TRUEnever evaluated
FALSEnever evaluated
0
4456 {-
4457 if (path && ISSLASH (*str))
pathDescription
TRUEnever evaluated
FALSEnever evaluated
((*str) == '/')Description
TRUEnever evaluated
FALSEnever evaluated
0
4458 {-
4459 *p++ = '/';-
4460 str++;-
4461 }
never executed: end of block
0
4462 else if (RFC3986[to_uchar (*str)])
RFC3986[to_uchar (*str)]Description
TRUEnever evaluated
FALSEnever evaluated
0
4463 *p++ = *str++;
never executed: *p++ = *str++;
0
4464 else-
4465 p += sprintf (p, "%%%02x", to_uchar (*str++));
never executed: p += sprintf (p, "%%%02x", to_uchar (*str++));
0
4466 }-
4467 *p = '\0';-
4468 return esc;
never executed: return esc;
0
4469}-
4470-
4471static size_t-
4472quote_name (char const *name, struct quoting_options const *options,-
4473 int needs_general_quoting, const struct bin_str *color,-
4474 bool allow_pad, struct obstack *stack, char const *absolute_name)-
4475{-
4476 char smallbuf[BUFSIZ];-
4477 char *buf = smallbuf;-
4478 size_t len;-
4479 bool pad;-
4480-
4481 len = quote_name_buf (&buf, sizeof smallbuf, (char *) name, options,-
4482 needs_general_quoting, NULL, &pad);-
4483-
4484 if (pad && allow_pad)
padDescription
TRUEnever evaluated
FALSEevaluated 1158 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
allow_padDescription
TRUEnever evaluated
FALSEnever evaluated
0-1158
4485 DIRED_PUTCHAR (' ');
never executed: end of block
0
4486-
4487 if (color)
colorDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1120 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
38-1120
4488 print_color_indicator (color);
executed 38 times by 1 test: print_color_indicator (color);
Executed by:
  • ls
38
4489-
4490 /* If we're padding, then don't include the outer quotes in-
4491 the --hyperlink, to improve the alignment of those links. */-
4492 bool skip_quotes = false;-
4493-
4494 if (absolute_name)
absolute_nameDescription
TRUEnever evaluated
FALSEevaluated 1158 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1158
4495 {-
4496 if (align_variable_outer_quotes && cwd_some_quoted && ! pad)
align_variable_outer_quotesDescription
TRUEnever evaluated
FALSEnever evaluated
cwd_some_quotedDescription
TRUEnever evaluated
FALSEnever evaluated
! padDescription
TRUEnever evaluated
FALSEnever evaluated
0
4497 {-
4498 skip_quotes = true;-
4499 putchar (*buf);-
4500 }
never executed: end of block
0
4501 char *h = file_escape (hostname, /* path= */ false);-
4502 char *n = file_escape (absolute_name, /* path= */ true);-
4503 /* TODO: It would be good to be able to define parameters-
4504 to give hints to the terminal as how best to render the URI.-
4505 For example since ls is outputting a dense block of URIs-
4506 it would be best to not underline by default, and only-
4507 do so upon hover etc. */-
4508 printf ("\033]8;;file://%s%s%s\a", h, *n == '/' ? "" : "/", n);-
4509 free (h);-
4510 free (n);-
4511 }
never executed: end of block
0
4512-
4513 if (stack)
stackDescription
TRUEevaluated 178 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 980 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
178-980
4514 PUSH_CURRENT_DIRED_POS (stack);
never executed: __extension__ ({ struct obstack *__o = (stack); size_t __len = (sizeof (dired_pos)); if (__extension__ ({ struct obstack const *__o1 = (__o); (size_t) (__o1->chunk_limit - __o1->next_free); }) < __len) _obstack_newchunk (__o, __len); memcpy (__o->next_free, &dired_pos, __len); __o->next_free += __len; (void) 0; });
never executed: _obstack_newchunk (__o, __len);
executed 178 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
diredDescription
TRUEnever evaluated
FALSEevaluated 178 times by 2 tests
Evaluated by:
  • ls
  • vdir
__extension__ ...e); }) < __lenDescription
TRUEnever evaluated
FALSEnever evaluated
0-178
4515-
4516 fwrite (buf + skip_quotes, 1, len - (skip_quotes * 2), stdout);
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
0
4517-
4518 dired_pos += len;-
4519-
4520 if (stack)
stackDescription
TRUEevaluated 178 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 980 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
178-980
4521 PUSH_CURRENT_DIRED_POS (stack);
never executed: __extension__ ({ struct obstack *__o = (stack); size_t __len = (sizeof (dired_pos)); if (__extension__ ({ struct obstack const *__o1 = (__o); (size_t) (__o1->chunk_limit - __o1->next_free); }) < __len) _obstack_newchunk (__o, __len); memcpy (__o->next_free, &dired_pos, __len); __o->next_free += __len; (void) 0; });
never executed: _obstack_newchunk (__o, __len);
executed 178 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
diredDescription
TRUEnever evaluated
FALSEevaluated 178 times by 2 tests
Evaluated by:
  • ls
  • vdir
__extension__ ...e); }) < __lenDescription
TRUEnever evaluated
FALSEnever evaluated
0-178
4522-
4523 if (absolute_name)
absolute_nameDescription
TRUEnever evaluated
FALSEevaluated 1158 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
0-1158
4524 {-
4525 fputs ("\033]8;;\a", stdout);-
4526 if (skip_quotes)
skip_quotesDescription
TRUEnever evaluated
FALSEnever evaluated
0
4527 putchar (*(buf + len - 1));
never executed: putchar_unlocked (*(buf + len - 1));
0
4528 }
never executed: end of block
0
4529-
4530 if (buf != smallbuf && buf != name)
buf != smallbufDescription
TRUEnever evaluated
FALSEevaluated 1158 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
buf != nameDescription
TRUEnever evaluated
FALSEnever evaluated
0-1158
4531 free (buf);
never executed: free (buf);
0
4532-
4533 return len + pad;
executed 1158 times by 3 tests: return len + pad;
Executed by:
  • dir
  • ls
  • vdir
1158
4534}-
4535-
4536static size_t-
4537print_name_with_quoting (const struct fileinfo *f,-
4538 bool symlink_target,-
4539 struct obstack *stack,-
4540 size_t start_col)-
4541{-
4542 const char* name = symlink_target ? f->linkname : f->name;
symlink_targetDescription
TRUEevaluated 13 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 1127 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
13-1127
4543-
4544 const struct bin_str *color = print_with_color ?
print_with_colorDescription
TRUEevaluated 44 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1096 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
44-1096
4545 get_color_indicator (f, symlink_target) : NULL;-
4546-
4547 bool used_color_this_time = (print_with_color
print_with_colorDescription
TRUEevaluated 44 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1096 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
44-1096
4548 && (color || is_colored (C_NORM)));
colorDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 6 times by 1 test
Evaluated by:
  • ls
is_colored (C_NORM)Description
TRUEnever evaluated
FALSEevaluated 6 times by 1 test
Evaluated by:
  • ls
0-38
4549-
4550 size_t len = quote_name (name, filename_quoting_options, f->quoted,-
4551 color, !symlink_target, stack, f->absolute_name);-
4552-
4553 process_signals ();-
4554 if (used_color_this_time)
used_color_this_timeDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 1102 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
38-1102
4555 {-
4556 prep_non_filename_text ();-
4557-
4558 /* We use the byte length rather than display width here as-
4559 an optimization to avoid accurately calculating the width,-
4560 because we only output the clear to EOL sequence if the name-
4561 _might_ wrap to the next line. This may output a sequence-
4562 unnecessarily in multi-byte locales for example,-
4563 but in that case it's inconsequential to the output. */-
4564 if (line_length
line_lengthDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-38
4565 && (start_col / line_length != (start_col + len - 1) / line_length))
(start_col / l.../ line_length)Description
TRUEnever evaluated
FALSEevaluated 38 times by 1 test
Evaluated by:
  • ls
0-38
4566 put_indicator (&color_indicator[C_CLR_TO_EOL]);
never executed: put_indicator (&color_indicator[C_CLR_TO_EOL]);
0
4567 }
executed 38 times by 1 test: end of block
Executed by:
  • ls
38
4568-
4569 return len;
executed 1140 times by 3 tests: return len;
Executed by:
  • dir
  • ls
  • vdir
1140
4570}-
4571-
4572static void-
4573prep_non_filename_text (void)-
4574{-
4575 if (color_indicator[C_END].string != NULL)
color_indicato...!= ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 62 times by 1 test
Evaluated by:
  • ls
0-62
4576 put_indicator (&color_indicator[C_END]);
never executed: put_indicator (&color_indicator[C_END]);
0
4577 else-
4578 {-
4579 put_indicator (&color_indicator[C_LEFT]);-
4580 put_indicator (&color_indicator[C_RESET]);-
4581 put_indicator (&color_indicator[C_RIGHT]);-
4582 }
executed 62 times by 1 test: end of block
Executed by:
  • ls
62
4583}-
4584-
4585/* Print the file name of 'f' with appropriate quoting.-
4586 Also print file size, inode number, and filetype indicator character,-
4587 as requested by switches. */-
4588-
4589static size_t-
4590print_file_name_and_frills (const struct fileinfo *f, size_t start_col)-
4591{-
4592 char buf[MAX (LONGEST_HUMAN_READABLE + 1, INT_BUFSIZE_BOUND (uintmax_t))];-
4593-
4594 set_normal_color ();-
4595-
4596 if (print_inode)
print_inodeDescription
TRUEnever evaluated
FALSEevaluated 967 times by 2 tests
Evaluated by:
  • dir
  • ls
0-967
4597 printf ("%*s ", format == with_commas ? 0 : inode_number_width,
never executed: printf ("%*s ", format == with_commas ? 0 : inode_number_width, format_inode (buf, sizeof buf, f));
0
4598 format_inode (buf, sizeof buf, f));
never executed: printf ("%*s ", format == with_commas ? 0 : inode_number_width, format_inode (buf, sizeof buf, f));
0
4599-
4600 if (print_block_size)
print_block_sizeDescription
TRUEnever evaluated
FALSEevaluated 967 times by 2 tests
Evaluated by:
  • dir
  • ls
0-967
4601 printf ("%*s ", format == with_commas ? 0 : block_size_width,
never executed: printf ("%*s ", format == with_commas ? 0 : block_size_width, ! f->stat_ok ? "?" : human_readable (((f->stat).st_blocks), buf, human_output_opts, 512 , output_block_size));
0
4602 ! f->stat_ok ? "?"
never executed: printf ("%*s ", format == with_commas ? 0 : block_size_width, ! f->stat_ok ? "?" : human_readable (((f->stat).st_blocks), buf, human_output_opts, 512 , output_block_size));
0
4603 : human_readable (ST_NBLOCKS (f->stat), buf, human_output_opts,
never executed: printf ("%*s ", format == with_commas ? 0 : block_size_width, ! f->stat_ok ? "?" : human_readable (((f->stat).st_blocks), buf, human_output_opts, 512 , output_block_size));
0
4604 ST_NBLOCKSIZE, output_block_size));
never executed: printf ("%*s ", format == with_commas ? 0 : block_size_width, ! f->stat_ok ? "?" : human_readable (((f->stat).st_blocks), buf, human_output_opts, 512 , output_block_size));
0
4605-
4606 if (print_scontext)
print_scontextDescription
TRUEnever evaluated
FALSEevaluated 967 times by 2 tests
Evaluated by:
  • dir
  • ls
0-967
4607 printf ("%*s ", format == with_commas ? 0 : scontext_width, f->scontext);
never executed: printf ("%*s ", format == with_commas ? 0 : scontext_width, f->scontext);
0
4608-
4609 size_t width = print_name_with_quoting (f, false, NULL, start_col);-
4610-
4611 if (indicator_style != none)
indicator_style != noneDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 953 times by 2 tests
Evaluated by:
  • dir
  • ls
14-953
4612 width += print_type_indicator (f->stat_ok, f->stat.st_mode, f->filetype);
executed 14 times by 1 test: width += print_type_indicator (f->stat_ok, f->stat.st_mode, f->filetype);
Executed by:
  • ls
14
4613-
4614 return width;
executed 967 times by 2 tests: return width;
Executed by:
  • dir
  • ls
967
4615}-
4616-
4617/* Given these arguments describing a file, return the single-byte-
4618 type indicator, or 0. */-
4619static char-
4620get_type_indicator (bool stat_ok, mode_t mode, enum filetype type)-
4621{-
4622 char c;-
4623-
4624 if (stat_ok ? S_ISREG (mode) : type == normal)
stat_ok ? ((((...type == normalDescription
TRUEnever evaluated
FALSEevaluated 14 times by 1 test
Evaluated by:
  • ls
stat_okDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
0-14
4625 {-
4626 if (stat_ok && indicator_style == classify && (mode & S_IXUGO))
stat_okDescription
TRUEnever evaluated
FALSEnever evaluated
indicator_style == classifyDescription
TRUEnever evaluated
FALSEnever evaluated
(mode & (0100 ...>> 3) >> 3)) )Description
TRUEnever evaluated
FALSEnever evaluated
0
4627 c = '*';
never executed: c = '*';
0
4628 else-
4629 c = 0;
never executed: c = 0;
0
4630 }-
4631 else-
4632 {-
4633 if (stat_ok ? S_ISDIR (mode) : type == directory || type == arg_directory)
stat_ok ? ((((... arg_directoryDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
stat_okDescription
TRUEevaluated 12 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
type == directoryDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
type == arg_directoryDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
0-12
4634 c = '/';
executed 4 times by 1 test: c = '/';
Executed by:
  • ls
4
4635 else if (indicator_style == slash)
indicator_style == slashDescription
TRUEnever evaluated
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
0-10
4636 c = 0;
never executed: c = 0;
0
4637 else if (stat_ok ? S_ISLNK (mode) : type == symbolic_link)
stat_ok ? ((((... symbolic_linkDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
stat_okDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
0-10
4638 c = '@';
executed 10 times by 1 test: c = '@';
Executed by:
  • ls
10
4639 else if (stat_ok ? S_ISFIFO (mode) : type == fifo)
stat_ok ? ((((...: type == fifoDescription
TRUEnever evaluated
FALSEnever evaluated
stat_okDescription
TRUEnever evaluated
FALSEnever evaluated
0
4640 c = '|';
never executed: c = '|';
0
4641 else if (stat_ok ? S_ISSOCK (mode) : type == sock)
stat_ok ? ((((...: type == sockDescription
TRUEnever evaluated
FALSEnever evaluated
stat_okDescription
TRUEnever evaluated
FALSEnever evaluated
0
4642 c = '=';
never executed: c = '=';
0
4643 else if (stat_ok && S_ISDOOR (mode))
dead code: c = '>';
stat_okDescription
TRUEnever evaluated
FALSEnever evaluated
0Description
TRUEnever evaluated
FALSEnever evaluated
-
4644 c = '>';
dead code: c = '>';
-
4645 else-
4646 c = 0;
never executed: c = 0;
0
4647 }-
4648 return c;
executed 14 times by 1 test: return c;
Executed by:
  • ls
14
4649}-
4650-
4651static bool-
4652print_type_indicator (bool stat_ok, mode_t mode, enum filetype type)-
4653{-
4654 char c = get_type_indicator (stat_ok, mode, type);-
4655 if (c)
cDescription
TRUEevaluated 14 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-14
4656 DIRED_PUTCHAR (c);
executed 14 times by 1 test: end of block
Executed by:
  • ls
14
4657 return !!c;
executed 14 times by 1 test: return !!c;
Executed by:
  • ls
14
4658}-
4659-
4660/* Returns if color sequence was printed. */-
4661static bool-
4662print_color_indicator (const struct bin_str *ind)-
4663{-
4664 if (ind)
indDescription
TRUEevaluated 38 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-38
4665 {-
4666 /* Need to reset so not dealing with attribute combinations */-
4667 if (is_colored (C_NORM))
is_colored (C_NORM)Description
TRUEnever evaluated
FALSEevaluated 38 times by 1 test
Evaluated by:
  • ls
0-38
4668 restore_default_color ();
never executed: restore_default_color ();
0
4669 put_indicator (&color_indicator[C_LEFT]);-
4670 put_indicator (ind);-
4671 put_indicator (&color_indicator[C_RIGHT]);-
4672 }
executed 38 times by 1 test: end of block
Executed by:
  • ls
38
4673-
4674 return ind != NULL;
executed 38 times by 1 test: return ind != ((void *)0) ;
Executed by:
  • ls
38
4675}-
4676-
4677/* Returns color indicator or NULL if none. */-
4678static const struct bin_str* _GL_ATTRIBUTE_PURE-
4679get_color_indicator (const struct fileinfo *f, bool symlink_target)-
4680{-
4681 enum indicator_no type;-
4682 struct color_ext_type *ext; /* Color extension */-
4683 size_t len; /* Length of name */-
4684-
4685 const char* name;-
4686 mode_t mode;-
4687 int linkok;-
4688 if (symlink_target)
symlink_targetDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 36 times by 1 test
Evaluated by:
  • ls
8-36
4689 {-
4690 name = f->linkname;-
4691 mode = f->linkmode;-
4692 linkok = f->linkok ? 0 : -1;
f->linkokDescription
TRUEnever evaluated
FALSEevaluated 8 times by 1 test
Evaluated by:
  • ls
0-8
4693 }
executed 8 times by 1 test: end of block
Executed by:
  • ls
8
4694 else-
4695 {-
4696 name = f->name;-
4697 mode = FILE_OR_LINK_MODE (f);
color_symlink_as_referentDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 26 times by 1 test
Evaluated by:
  • ls
(f)->linkokDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 8 times by 1 test
Evaluated by:
  • ls
2-26
4698 linkok = f->linkok;-
4699 }
executed 36 times by 1 test: end of block
Executed by:
  • ls
36
4700-
4701 /* Is this a nonexistent file? If so, linkok == -1. */-
4702-
4703 if (linkok == -1 && is_colored (C_MISSING))
linkok == -1Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 36 times by 1 test
Evaluated by:
  • ls
is_colored (C_MISSING)Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
2-36
4704 type = C_MISSING;
executed 6 times by 1 test: type = C_MISSING;
Executed by:
  • ls
6
4705 else if (!f->stat_ok)
!f->stat_okDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 34 times by 1 test
Evaluated by:
  • ls
4-34
4706 {-
4707 static enum indicator_no filetype_indicator[] = FILETYPE_INDICATORS;-
4708 type = filetype_indicator[f->filetype];-
4709 }
executed 4 times by 1 test: end of block
Executed by:
  • ls
4
4710 else-
4711 {-
4712 if (S_ISREG (mode))
(((( mode )) &... == (0100000))Description
TRUEevaluated 6 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 28 times by 1 test
Evaluated by:
  • ls
6-28
4713 {-
4714 type = C_FILE;-
4715-
4716 if ((mode & S_ISUID) != 0 && is_colored (C_SETUID))
(mode & 04000 ) != 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
is_colored (C_SETUID)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-4
4717 type = C_SETUID;
executed 2 times by 1 test: type = C_SETUID;
Executed by:
  • ls
2
4718 else if ((mode & S_ISGID) != 0 && is_colored (C_SETGID))
(mode & 02000 ) != 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
is_colored (C_SETGID)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-2
4719 type = C_SETGID;
executed 2 times by 1 test: type = C_SETGID;
Executed by:
  • ls
2
4720 else if (is_colored (C_CAP) && f->has_capability)
is_colored (C_CAP)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
f->has_capabilityDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
0-2
4721 type = C_CAP;
never executed: type = C_CAP;
0
4722 else if ((mode & S_IXUGO) != 0 && is_colored (C_EXEC))
(mode & (0100 ... >> 3)) ) != 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
is_colored (C_EXEC)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-2
4723 type = C_EXEC;
executed 2 times by 1 test: type = C_EXEC;
Executed by:
  • ls
2
4724 else if ((1 < f->stat.st_nlink) && is_colored (C_MULTIHARDLINK))
(1 < f->stat.st_nlink)Description
TRUEnever evaluated
FALSEnever evaluated
is_colored (C_MULTIHARDLINK)Description
TRUEnever evaluated
FALSEnever evaluated
0
4725 type = C_MULTIHARDLINK;
never executed: type = C_MULTIHARDLINK;
0
4726 }
executed 6 times by 1 test: end of block
Executed by:
  • ls
6
4727 else if (S_ISDIR (mode))
(((( mode )) &... == (0040000))Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 20 times by 1 test
Evaluated by:
  • ls
8-20
4728 {-
4729 type = C_DIR;-
4730-
4731 if ((mode & S_ISVTX) && (mode & S_IWOTH)
(mode & 01000 )Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
(mode & ((0200 >> 3) >> 3) )Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
2-4
4732 && is_colored (C_STICKY_OTHER_WRITABLE))
is_colored (C_...THER_WRITABLE)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-2
4733 type = C_STICKY_OTHER_WRITABLE;
executed 2 times by 1 test: type = C_STICKY_OTHER_WRITABLE;
Executed by:
  • ls
2
4734 else if ((mode & S_IWOTH) != 0 && is_colored (C_OTHER_WRITABLE))
(mode & ((0200...) >> 3) ) != 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
is_colored (C_OTHER_WRITABLE)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-4
4735 type = C_OTHER_WRITABLE;
executed 2 times by 1 test: type = C_OTHER_WRITABLE;
Executed by:
  • ls
2
4736 else if ((mode & S_ISVTX) != 0 && is_colored (C_STICKY))
(mode & 01000 ) != 0Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
is_colored (C_STICKY)Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-2
4737 type = C_STICKY;
executed 2 times by 1 test: type = C_STICKY;
Executed by:
  • ls
2
4738 }
executed 8 times by 1 test: end of block
Executed by:
  • ls
8
4739 else if (S_ISLNK (mode))
(((( mode )) &... == (0120000))Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
2-18
4740 type = C_LINK;
executed 18 times by 1 test: type = C_LINK;
Executed by:
  • ls
18
4741 else if (S_ISFIFO (mode))
(((( mode )) &... == (0010000))Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
0-2
4742 type = C_FIFO;
never executed: type = C_FIFO;
0
4743 else if (S_ISSOCK (mode))
(((( mode )) &... == (0140000))Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
0-2
4744 type = C_SOCK;
never executed: type = C_SOCK;
0
4745 else if (S_ISBLK (mode))
(((( mode )) &... == (0060000))Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
0-2
4746 type = C_BLK;
never executed: type = C_BLK;
0
4747 else if (S_ISCHR (mode))
(((( mode )) &... == (0020000))Description
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • ls
0-2
4748 type = C_CHR;
never executed: type = C_CHR;
0
4749 else if (S_ISDOOR (mode))
dead code: type = C_DOOR;
-
4750 type = C_DOOR;
dead code: type = C_DOOR;
-
4751 else-
4752 {-
4753 /* Classify a file of some other type as C_ORPHAN. */-
4754 type = C_ORPHAN;-
4755 }
executed 2 times by 1 test: end of block
Executed by:
  • ls
2
4756 }-
4757-
4758 /* Check the file's suffix only if still classified as C_FILE. */-
4759 ext = NULL;-
4760 if (type == C_FILE)
type == C_FILEDescription
TRUEnever evaluated
FALSEevaluated 44 times by 1 test
Evaluated by:
  • ls
0-44
4761 {-
4762 /* Test if NAME has a recognized suffix. */-
4763-
4764 len = strlen (name);-
4765 name += len; /* Pointer to final \0. */-
4766 for (ext = color_ext_list; ext != NULL; ext = ext->next)
ext != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
4767 {-
4768 if (ext->ext.len <= len
ext->ext.len <= lenDescription
TRUEnever evaluated
FALSEnever evaluated
0
4769 && STREQ_LEN (name - ext->ext.len, ext->ext.string,
never executed: __result = (((const unsigned char *) (const char *) ( name - ext->ext.len ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( ext->ext.string ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
( (__extension....len ))) == 0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...ext->ext.len )Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...ext->ext.len )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( name ...xt->ext.len ))Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_cons...->ext.string )Description
TRUEnever evaluated
FALSEnever evaluated
strlen ( ext->...xt->ext.len ))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
4770 ext->ext.len))-
4771 break;
never executed: break;
0
4772 }
never executed: end of block
0
4773 }
never executed: end of block
0
4774-
4775 /* Adjust the color for orphaned symlinks. */-
4776 if (type == C_LINK && !linkok)
type == C_LINKDescription
TRUEevaluated 22 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 22 times by 1 test
Evaluated by:
  • ls
!linkokDescription
TRUEevaluated 18 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 4 times by 1 test
Evaluated by:
  • ls
4-22
4777 {-
4778 if (color_symlink_as_referent || is_colored (C_ORPHAN))
color_symlink_as_referentDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
is_colored (C_ORPHAN)Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 6 times by 1 test
Evaluated by:
  • ls
4-10
4779 type = C_ORPHAN;
executed 12 times by 1 test: type = C_ORPHAN;
Executed by:
  • ls
12
4780 }
executed 18 times by 1 test: end of block
Executed by:
  • ls
18
4781-
4782 const struct bin_str *const s-
4783 = ext ? &(ext->seq) : &color_indicator[type];
extDescription
TRUEnever evaluated
FALSEevaluated 44 times by 1 test
Evaluated by:
  • ls
0-44
4784-
4785 return s->string ? s : NULL;
executed 44 times by 1 test: return s->string ? s : ((void *)0) ;
Executed by:
  • ls
44
4786}-
4787-
4788/* Output a color indicator (which may contain nulls). */-
4789static void-
4790put_indicator (const struct bin_str *ind)-
4791{-
4792 if (! used_color)
! used_colorDescription
TRUEevaluated 24 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 276 times by 1 test
Evaluated by:
  • ls
24-276
4793 {-
4794 used_color = true;-
4795-
4796 /* If the standard output is a controlling terminal, watch out-
4797 for signals, so that the colors can be restored to the-
4798 default state if "ls" is suspended or interrupted. */-
4799-
4800 if (0 <= tcgetpgrp (STDOUT_FILENO))
0 <= tcgetpgrp ( 1 )Description
TRUEnever evaluated
FALSEevaluated 24 times by 1 test
Evaluated by:
  • ls
0-24
4801 signal_init ();
never executed: signal_init ();
0
4802-
4803 prep_non_filename_text ();-
4804 }
executed 24 times by 1 test: end of block
Executed by:
  • ls
24
4805-
4806 fwrite (ind->string, ind->len, 1, stdout);
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
0
4807}
executed 300 times by 1 test: end of block
Executed by:
  • ls
300
4808-
4809static size_t-
4810length_of_file_name_and_frills (const struct fileinfo *f)-
4811{-
4812 size_t len = 0;-
4813 char buf[MAX (LONGEST_HUMAN_READABLE + 1, INT_BUFSIZE_BOUND (uintmax_t))];-
4814-
4815 if (print_inode)
print_inodeDescription
TRUEnever evaluated
FALSEevaluated 22 times by 2 tests
Evaluated by:
  • dir
  • ls
0-22
4816 len += 1 + (format == with_commas
never executed: len += 1 + (format == with_commas ? strlen (umaxtostr (f->stat.st_ino, buf)) : inode_number_width);
format == with_commasDescription
TRUEnever evaluated
FALSEnever evaluated
0
4817 ? strlen (umaxtostr (f->stat.st_ino, buf))
never executed: len += 1 + (format == with_commas ? strlen (umaxtostr (f->stat.st_ino, buf)) : inode_number_width);
0
4818 : inode_number_width);
never executed: len += 1 + (format == with_commas ? strlen (umaxtostr (f->stat.st_ino, buf)) : inode_number_width);
0
4819-
4820 if (print_block_size)
print_block_sizeDescription
TRUEnever evaluated
FALSEevaluated 22 times by 2 tests
Evaluated by:
  • dir
  • ls
0-22
4821 len += 1 + (format == with_commas
never executed: len += 1 + (format == with_commas ? strlen (! f->stat_ok ? "?" : human_readable (((f->stat).st_blocks), buf, human_output_opts, 512 , output_block_size)) : block_size_width);
format == with_commasDescription
TRUEnever evaluated
FALSEnever evaluated
0
4822 ? strlen (! f->stat_ok ? "?"
never executed: len += 1 + (format == with_commas ? strlen (! f->stat_ok ? "?" : human_readable (((f->stat).st_blocks), buf, human_output_opts, 512 , output_block_size)) : block_size_width);
0
4823 : human_readable (ST_NBLOCKS (f->stat), buf,
never executed: len += 1 + (format == with_commas ? strlen (! f->stat_ok ? "?" : human_readable (((f->stat).st_blocks), buf, human_output_opts, 512 , output_block_size)) : block_size_width);
0
4824 human_output_opts, ST_NBLOCKSIZE,
never executed: len += 1 + (format == with_commas ? strlen (! f->stat_ok ? "?" : human_readable (((f->stat).st_blocks), buf, human_output_opts, 512 , output_block_size)) : block_size_width);
0
4825 output_block_size))
never executed: len += 1 + (format == with_commas ? strlen (! f->stat_ok ? "?" : human_readable (((f->stat).st_blocks), buf, human_output_opts, 512 , output_block_size)) : block_size_width);
0
4826 : block_size_width);
never executed: len += 1 + (format == with_commas ? strlen (! f->stat_ok ? "?" : human_readable (((f->stat).st_blocks), buf, human_output_opts, 512 , output_block_size)) : block_size_width);
0
4827-
4828 if (print_scontext)
print_scontextDescription
TRUEnever evaluated
FALSEevaluated 22 times by 2 tests
Evaluated by:
  • dir
  • ls
0-22
4829 len += 1 + (format == with_commas ? strlen (f->scontext) : scontext_width);
never executed: len += 1 + (format == with_commas ? strlen (f->scontext) : scontext_width);
format == with_commasDescription
TRUEnever evaluated
FALSEnever evaluated
0
4830-
4831 len += quote_name_width (f->name, filename_quoting_options, f->quoted);-
4832-
4833 if (indicator_style != none)
indicator_style != noneDescription
TRUEnever evaluated
FALSEevaluated 22 times by 2 tests
Evaluated by:
  • dir
  • ls
0-22
4834 {-
4835 char c = get_type_indicator (f->stat_ok, f->stat.st_mode, f->filetype);-
4836 len += (c != 0);-
4837 }
never executed: end of block
0
4838-
4839 return len;
executed 22 times by 2 tests: return len;
Executed by:
  • dir
  • ls
22
4840}-
4841-
4842static void-
4843print_many_per_line (void)-
4844{-
4845 size_t row; /* Current row. */-
4846 size_t cols = calculate_columns (true);-
4847 struct column_info const *line_fmt = &column_info[cols - 1];-
4848-
4849 /* Calculate the number of rows that will be in each column except possibly-
4850 for a short column on the right. */-
4851 size_t rows = cwd_n_used / cols + (cwd_n_used % cols != 0);-
4852-
4853 for (row = 0; row < rows; row++)
row < rowsDescription
TRUEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
2
4854 {-
4855 size_t col = 0;-
4856 size_t filesno = row;-
4857 size_t pos = 0;-
4858-
4859 /* Print the next row. */-
4860 while (1)-
4861 {-
4862 struct fileinfo const *f = sorted_file[filesno];-
4863 size_t name_length = length_of_file_name_and_frills (f);-
4864 size_t max_name_length = line_fmt->col_arr[col++];-
4865 print_file_name_and_frills (f, pos);-
4866-
4867 filesno += rows;-
4868 if (filesno >= cwd_n_used)
filesno >= cwd_n_usedDescription
TRUEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 9 times by 2 tests
Evaluated by:
  • dir
  • ls
2-9
4869 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • ls
2
4870-
4871 indent (pos + name_length, pos + max_name_length);-
4872 pos += max_name_length;-
4873 }
executed 9 times by 2 tests: end of block
Executed by:
  • dir
  • ls
9
4874 putchar ('\n');-
4875 }
executed 2 times by 2 tests: end of block
Executed by:
  • dir
  • ls
2
4876}
executed 2 times by 2 tests: end of block
Executed by:
  • dir
  • ls
2
4877-
4878static void-
4879print_horizontal (void)-
4880{-
4881 size_t filesno;-
4882 size_t pos = 0;-
4883 size_t cols = calculate_columns (false);-
4884 struct column_info const *line_fmt = &column_info[cols - 1];-
4885 struct fileinfo const *f = sorted_file[0];-
4886 size_t name_length = length_of_file_name_and_frills (f);-
4887 size_t max_name_length = line_fmt->col_arr[0];-
4888-
4889 /* Print first entry. */-
4890 print_file_name_and_frills (f, 0);-
4891-
4892 /* Now the rest. */-
4893 for (filesno = 1; filesno < cwd_n_used; ++filesno)
filesno < cwd_n_usedDescription
TRUEnever evaluated
FALSEnever evaluated
0
4894 {-
4895 size_t col = filesno % cols;-
4896-
4897 if (col == 0)
col == 0Description
TRUEnever evaluated
FALSEnever evaluated
0
4898 {-
4899 putchar ('\n');-
4900 pos = 0;-
4901 }
never executed: end of block
0
4902 else-
4903 {-
4904 indent (pos + name_length, pos + max_name_length);-
4905 pos += max_name_length;-
4906 }
never executed: end of block
0
4907-
4908 f = sorted_file[filesno];-
4909 print_file_name_and_frills (f, pos);-
4910-
4911 name_length = length_of_file_name_and_frills (f);-
4912 max_name_length = line_fmt->col_arr[col];-
4913 }
never executed: end of block
0
4914 putchar ('\n');-
4915}
never executed: end of block
0
4916-
4917/* Output name + SEP + ' '. */-
4918-
4919static void-
4920print_with_separator (char sep)-
4921{-
4922 size_t filesno;-
4923 size_t pos = 0;-
4924-
4925 for (filesno = 0; filesno < cwd_n_used; filesno++)
filesno < cwd_n_usedDescription
TRUEnever evaluated
FALSEnever evaluated
0
4926 {-
4927 struct fileinfo const *f = sorted_file[filesno];-
4928 size_t len = line_length ? length_of_file_name_and_frills (f) : 0;
line_lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
4929-
4930 if (filesno != 0)
filesno != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
4931 {-
4932 char separator;-
4933-
4934 if (! line_length
! line_lengthDescription
TRUEnever evaluated
FALSEnever evaluated
0
4935 || ((pos + len + 2 < line_length)
(pos + len + 2 < line_length)Description
TRUEnever evaluated
FALSEnever evaluated
0
4936 && (pos <= SIZE_MAX - len - 2)))
(pos <= (18446...UL) - len - 2)Description
TRUEnever evaluated
FALSEnever evaluated
0
4937 {-
4938 pos += 2;-
4939 separator = ' ';-
4940 }
never executed: end of block
0
4941 else-
4942 {-
4943 pos = 0;-
4944 separator = '\n';-
4945 }
never executed: end of block
0
4946-
4947 putchar (sep);-
4948 putchar (separator);-
4949 }
never executed: end of block
0
4950-
4951 print_file_name_and_frills (f, pos);-
4952 pos += len;-
4953 }
never executed: end of block
0
4954 putchar ('\n');-
4955}
never executed: end of block
0
4956-
4957/* Assuming cursor is at position FROM, indent up to position TO.-
4958 Use a TAB character instead of two or more spaces whenever possible. */-
4959-
4960static void-
4961indent (size_t from, size_t to)-
4962{-
4963 while (from < to)
from < toDescription
TRUEevaluated 16 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 9 times by 2 tests
Evaluated by:
  • dir
  • ls
9-16
4964 {-
4965 if (tabsize != 0 && to / tabsize > (from + 1) / tabsize)
tabsize != 0Description
TRUEevaluated 16 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEnever evaluated
to / tabsize >...+ 1) / tabsizeDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • dir
FALSEevaluated 14 times by 2 tests
Evaluated by:
  • dir
  • ls
0-16
4966 {-
4967 putchar ('\t');-
4968 from += tabsize - from % tabsize;-
4969 }
executed 2 times by 1 test: end of block
Executed by:
  • dir
2
4970 else-
4971 {-
4972 putchar (' ');-
4973 from++;-
4974 }
executed 14 times by 2 tests: end of block
Executed by:
  • dir
  • ls
14
4975 }-
4976}
executed 9 times by 2 tests: end of block
Executed by:
  • dir
  • ls
9
4977-
4978/* Put DIRNAME/NAME into DEST, handling '.' and '/' properly. */-
4979/* FIXME: maybe remove this function someday. See about using a-
4980 non-malloc'ing version of file_name_concat. */-
4981-
4982static void-
4983attach (char *dest, const char *dirname, const char *name)-
4984{-
4985 const char *dirnamep = dirname;-
4986-
4987 /* Copy dirname if it is not ".". */-
4988 if (dirname[0] != '.' || dirname[1] != 0)
dirname[0] != '.'Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 14 times by 1 test
Evaluated by:
  • vdir
dirname[1] != 0Description
TRUEnever evaluated
FALSEevaluated 14 times by 1 test
Evaluated by:
  • vdir
0-14
4989 {-
4990 while (*dirnamep)
*dirnamepDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEevaluated 10 times by 1 test
Evaluated by:
  • ls
10
4991 *dest++ = *dirnamep++;
executed 10 times by 1 test: *dest++ = *dirnamep++;
Executed by:
  • ls
10
4992 /* Add '/' if 'dirname' doesn't already end with it. */-
4993 if (dirnamep > dirname && dirnamep[-1] != '/')
dirnamep > dirnameDescription
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
dirnamep[-1] != '/'Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • ls
FALSEnever evaluated
0-10
4994 *dest++ = '/';
executed 10 times by 1 test: *dest++ = '/';
Executed by:
  • ls
10
4995 }
executed 10 times by 1 test: end of block
Executed by:
  • ls
10
4996 while (*name)
*nameDescription
TRUEevaluated 110 times by 2 tests
Evaluated by:
  • ls
  • vdir
FALSEevaluated 24 times by 2 tests
Evaluated by:
  • ls
  • vdir
24-110
4997 *dest++ = *name++;
executed 110 times by 2 tests: *dest++ = *name++;
Executed by:
  • ls
  • vdir
110
4998 *dest = 0;-
4999}
executed 24 times by 2 tests: end of block
Executed by:
  • ls
  • vdir
24
5000-
5001/* Allocate enough column info suitable for the current number of-
5002 files and display columns, and initialize the info to represent the-
5003 narrowest possible columns. */-
5004-
5005static void-
5006init_column_info (void)-
5007{-
5008 size_t i;-
5009 size_t max_cols = MIN (max_idx, cwd_n_used);
(( max_idx )<( cwd_n_used ))Description
TRUEnever evaluated
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
0-2
5010-
5011 /* Currently allocated columns in column_info. */-
5012 static size_t column_info_alloc;-
5013-
5014 if (column_info_alloc < max_cols)
column_info_alloc < max_colsDescription
TRUEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEnever evaluated
0-2
5015 {-
5016 size_t new_column_info_alloc;-
5017 size_t *p;-
5018-
5019 if (max_cols < max_idx / 2)
max_cols < max_idx / 2Description
TRUEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEnever evaluated
0-2
5020 {-
5021 /* The number of columns is far less than the display width-
5022 allows. Grow the allocation, but only so that it's-
5023 double the current requirements. If the display is-
5024 extremely wide, this avoids allocating a lot of memory-
5025 that is never needed. */-
5026 column_info = xnrealloc (column_info, max_cols,-
5027 2 * sizeof *column_info);-
5028 new_column_info_alloc = 2 * max_cols;-
5029 }
executed 2 times by 2 tests: end of block
Executed by:
  • dir
  • ls
2
5030 else-
5031 {-
5032 column_info = xnrealloc (column_info, max_idx, sizeof *column_info);-
5033 new_column_info_alloc = max_idx;-
5034 }
never executed: end of block
0
5035-
5036 /* Allocate the new size_t objects by computing the triangle-
5037 formula n * (n + 1) / 2, except that we don't need to-
5038 allocate the part of the triangle that we've already-
5039 allocated. Check for address arithmetic overflow. */-
5040 {-
5041 size_t column_info_growth = new_column_info_alloc - column_info_alloc;-
5042 size_t s = column_info_alloc + 1 + new_column_info_alloc;-
5043 size_t t = s * column_info_growth;-
5044 if (s < new_column_info_alloc || t / column_info_growth != s)
s < new_column_info_allocDescription
TRUEnever evaluated
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
t / column_info_growth != sDescription
TRUEnever evaluated
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
0-2
5045 xalloc_die ();
never executed: xalloc_die ();
0
5046 p = xnmalloc (t / 2, sizeof *p);-
5047 }-
5048-
5049 /* Grow the triangle by parceling out the cells just allocated. */-
5050 for (i = column_info_alloc; i < new_column_info_alloc; i++)
i < new_column_info_allocDescription
TRUEevaluated 22 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
2-22
5051 {-
5052 column_info[i].col_arr = p;-
5053 p += i + 1;-
5054 }
executed 22 times by 2 tests: end of block
Executed by:
  • dir
  • ls
22
5055-
5056 column_info_alloc = new_column_info_alloc;-
5057 }
executed 2 times by 2 tests: end of block
Executed by:
  • dir
  • ls
2
5058-
5059 for (i = 0; i < max_cols; ++i)
i < max_colsDescription
TRUEevaluated 11 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
2-11
5060 {-
5061 size_t j;-
5062-
5063 column_info[i].valid_len = true;-
5064 column_info[i].line_len = (i + 1) * MIN_COLUMN_WIDTH;-
5065 for (j = 0; j <= i; ++j)
j <= iDescription
TRUEevaluated 48 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 11 times by 2 tests
Evaluated by:
  • dir
  • ls
11-48
5066 column_info[i].col_arr[j] = MIN_COLUMN_WIDTH;
executed 48 times by 2 tests: column_info[i].col_arr[j] = 3;
Executed by:
  • dir
  • ls
48
5067 }
executed 11 times by 2 tests: end of block
Executed by:
  • dir
  • ls
11
5068}
executed 2 times by 2 tests: end of block
Executed by:
  • dir
  • ls
2
5069-
5070/* Calculate the number of columns needed to represent the current set-
5071 of files in the current display width. */-
5072-
5073static size_t-
5074calculate_columns (bool by_columns)-
5075{-
5076 size_t filesno; /* Index into cwd_file. */-
5077 size_t cols; /* Number of files across. */-
5078-
5079 /* Normally the maximum number of columns is determined by the-
5080 screen width. But if few files are available this might limit it-
5081 as well. */-
5082 size_t max_cols = MIN (max_idx, cwd_n_used);
(( max_idx )<( cwd_n_used ))Description
TRUEnever evaluated
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
0-2
5083-
5084 init_column_info ();-
5085-
5086 /* Compute the maximum number of possible columns. */-
5087 for (filesno = 0; filesno < cwd_n_used; ++filesno)
filesno < cwd_n_usedDescription
TRUEevaluated 11 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
2-11
5088 {-
5089 struct fileinfo const *f = sorted_file[filesno];-
5090 size_t name_length = length_of_file_name_and_frills (f);-
5091-
5092 for (size_t i = 0; i < max_cols; ++i)
i < max_colsDescription
TRUEevaluated 85 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 11 times by 2 tests
Evaluated by:
  • dir
  • ls
11-85
5093 {-
5094 if (column_info[i].valid_len)
column_info[i].valid_lenDescription
TRUEevaluated 85 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEnever evaluated
0-85
5095 {-
5096 size_t idx = (by_columns
by_columnsDescription
TRUEevaluated 85 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEnever evaluated
0-85
5097 ? filesno / ((cwd_n_used + i) / (i + 1))-
5098 : filesno % (i + 1));-
5099 size_t real_length = name_length + (idx == i ? 0 : 2);
idx == iDescription
TRUEevaluated 21 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEevaluated 64 times by 2 tests
Evaluated by:
  • dir
  • ls
21-64
5100-
5101 if (column_info[i].col_arr[idx] < real_length)
column_info[i]... < real_lengthDescription
TRUEevaluated 52 times by 1 test
Evaluated by:
  • dir
FALSEevaluated 33 times by 2 tests
Evaluated by:
  • dir
  • ls
33-52
5102 {-
5103 column_info[i].line_len += (real_length-
5104 - column_info[i].col_arr[idx]);-
5105 column_info[i].col_arr[idx] = real_length;-
5106 column_info[i].valid_len = (column_info[i].line_len-
5107 < line_length);-
5108 }
executed 52 times by 1 test: end of block
Executed by:
  • dir
52
5109 }
executed 85 times by 2 tests: end of block
Executed by:
  • dir
  • ls
85
5110 }
executed 85 times by 2 tests: end of block
Executed by:
  • dir
  • ls
85
5111 }
executed 11 times by 2 tests: end of block
Executed by:
  • dir
  • ls
11
5112-
5113 /* Find maximum allowed columns. */-
5114 for (cols = max_cols; 1 < cols; --cols)
1 < colsDescription
TRUEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEnever evaluated
0-2
5115 {-
5116 if (column_info[cols - 1].valid_len)
column_info[co...- 1].valid_lenDescription
TRUEevaluated 2 times by 2 tests
Evaluated by:
  • dir
  • ls
FALSEnever evaluated
0-2
5117 break;
executed 2 times by 2 tests: break;
Executed by:
  • dir
  • ls
2
5118 }
never executed: end of block
0
5119-
5120 return cols;
executed 2 times by 2 tests: return cols;
Executed by:
  • dir
  • ls
2
5121}-
5122-
5123void-
5124usage (int status)-
5125{-
5126 if (status != EXIT_SUCCESS)
status != 0Description
TRUEevaluated 19 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
FALSEevaluated 152 times by 3 tests
Evaluated by:
  • dir
  • ls
  • vdir
19-152
5127 emit_try_help ();
executed 19 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
19
5128 else-
5129 {-
5130 printf (_("Usage: %s [OPTION]... [FILE]...\n"), program_name);-
5131 fputs (_("\-
5132List information about the FILEs (the current directory by default).\n\-
5133Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.\n\-
5134"), stdout);-
5135-
5136 emit_mandatory_arg_note ();-
5137-
5138 fputs (_("\-
5139 -a, --all do not ignore entries starting with .\n\-
5140 -A, --almost-all do not list implied . and ..\n\-
5141 --author with -l, print the author of each file\n\-
5142 -b, --escape print C-style escapes for nongraphic characters\n\-
5143"), stdout);-
5144 fputs (_("\-
5145 --block-size=SIZE with -l, scale sizes by SIZE when printing them;\n\-
5146 e.g., '--block-size=M'; see SIZE format below\n\-
5147"), stdout);-
5148 fputs (_("\-
5149 -B, --ignore-backups do not list implied entries ending with ~\n\-
5150 -c with -lt: sort by, and show, ctime (time of last\n\-
5151 modification of file status information);\n\-
5152 with -l: show ctime and sort by name;\n\-
5153 otherwise: sort by ctime, newest first\n\-
5154"), stdout);-
5155 fputs (_("\-
5156 -C list entries by columns\n\-
5157 --color[=WHEN] colorize the output; WHEN can be 'always' (default\-
5158\n\-
5159 if omitted), 'auto', or 'never'; more info below\-
5160\n\-
5161 -d, --directory list directories themselves, not their contents\n\-
5162 -D, --dired generate output designed for Emacs' dired mode\n\-
5163"), stdout);-
5164 fputs (_("\-
5165 -f do not sort, enable -aU, disable -ls --color\n\-
5166 -F, --classify append indicator (one of */=>@|) to entries\n\-
5167 --file-type likewise, except do not append '*'\n\-
5168 --format=WORD across -x, commas -m, horizontal -x, long -l,\n\-
5169 single-column -1, verbose -l, vertical -C\n\-
5170 --full-time like -l --time-style=full-iso\n\-
5171"), stdout);-
5172 fputs (_("\-
5173 -g like -l, but do not list owner\n\-
5174"), stdout);-
5175 fputs (_("\-
5176 --group-directories-first\n\-
5177 group directories before files;\n\-
5178 can be augmented with a --sort option, but any\n\-
5179 use of --sort=none (-U) disables grouping\n\-
5180"), stdout);-
5181 fputs (_("\-
5182 -G, --no-group in a long listing, don't print group names\n\-
5183"), stdout);-
5184 fputs (_("\-
5185 -h, --human-readable with -l and -s, print sizes like 1K 234M 2G etc.\n\-
5186 --si likewise, but use powers of 1000 not 1024\n\-
5187"), stdout);-
5188 fputs (_("\-
5189 -H, --dereference-command-line\n\-
5190 follow symbolic links listed on the command line\n\-
5191 --dereference-command-line-symlink-to-dir\n\-
5192 follow each command line symbolic link\n\-
5193 that points to a directory\n\-
5194 --hide=PATTERN do not list implied entries matching shell PATTERN\-
5195\n\-
5196 (overridden by -a or -A)\n\-
5197"), stdout);-
5198 fputs (_("\-
5199 --hyperlink[=WHEN] hyperlink file names; WHEN can be 'always'\n\-
5200 (default if omitted), 'auto', or 'never'\n\-
5201"), stdout);-
5202 fputs (_("\-
5203 --indicator-style=WORD append indicator with style WORD to entry names:\-
5204\n\-
5205 none (default), slash (-p),\n\-
5206 file-type (--file-type), classify (-F)\n\-
5207 -i, --inode print the index number of each file\n\-
5208 -I, --ignore=PATTERN do not list implied entries matching shell PATTERN\-
5209\n\-
5210"), stdout);-
5211 fputs (_("\-
5212 -k, --kibibytes default to 1024-byte blocks for disk usage;\n\-
5213 used only with -s and per directory totals\n\-
5214"), stdout);-
5215 fputs (_("\-
5216 -l use a long listing format\n\-
5217 -L, --dereference when showing file information for a symbolic\n\-
5218 link, show information for the file the link\n\-
5219 references rather than for the link itself\n\-
5220 -m fill width with a comma separated list of entries\-
5221\n\-
5222"), stdout);-
5223 fputs (_("\-
5224 -n, --numeric-uid-gid like -l, but list numeric user and group IDs\n\-
5225 -N, --literal print entry names without quoting\n\-
5226 -o like -l, but do not list group information\n\-
5227 -p, --indicator-style=slash\n\-
5228 append / indicator to directories\n\-
5229"), stdout);-
5230 fputs (_("\-
5231 -q, --hide-control-chars print ? instead of nongraphic characters\n\-
5232 --show-control-chars show nongraphic characters as-is (the default,\n\-
5233 unless program is 'ls' and output is a terminal)\-
5234\n\-
5235 -Q, --quote-name enclose entry names in double quotes\n\-
5236 --quoting-style=WORD use quoting style WORD for entry names:\n\-
5237 literal, locale, shell, shell-always,\n\-
5238 shell-escape, shell-escape-always, c, escape\n\-
5239 (overrides QUOTING_STYLE environment variable)\n\-
5240"), stdout);-
5241 fputs (_("\-
5242 -r, --reverse reverse order while sorting\n\-
5243 -R, --recursive list subdirectories recursively\n\-
5244 -s, --size print the allocated size of each file, in blocks\n\-
5245"), stdout);-
5246 fputs (_("\-
5247 -S sort by file size, largest first\n\-
5248 --sort=WORD sort by WORD instead of name: none (-U), size (-S)\-
5249,\n\-
5250 time (-t), version (-v), extension (-X)\n\-
5251 --time=WORD with -l, show time as WORD instead of default\n\-
5252 modification time: atime or access or use (-u);\-
5253\n\-
5254 ctime or status (-c); also use specified time\n\-
5255 as sort key if --sort=time (newest first)\n\-
5256"), stdout);-
5257 fputs (_("\-
5258 --time-style=TIME_STYLE time/date format with -l; see TIME_STYLE below\n\-
5259"), stdout);-
5260 fputs (_("\-
5261 -t sort by modification time, newest first\n\-
5262 -T, --tabsize=COLS assume tab stops at each COLS instead of 8\n\-
5263"), stdout);-
5264 fputs (_("\-
5265 -u with -lt: sort by, and show, access time;\n\-
5266 with -l: show access time and sort by name;\n\-
5267 otherwise: sort by access time, newest first\n\-
5268 -U do not sort; list entries in directory order\n\-
5269 -v natural sort of (version) numbers within text\n\-
5270"), stdout);-
5271 fputs (_("\-
5272 -w, --width=COLS set output width to COLS. 0 means no limit\n\-
5273 -x list entries by lines instead of by columns\n\-
5274 -X sort alphabetically by entry extension\n\-
5275 -Z, --context print any security context of each file\n\-
5276 -1 list one file per line. Avoid '\\n' with -q or -b\-
5277\n\-
5278"), stdout);-
5279 fputs (HELP_OPTION_DESCRIPTION, stdout);-
5280 fputs (VERSION_OPTION_DESCRIPTION, stdout);-
5281 emit_size_note ();-
5282 fputs (_("\-
5283\n\-
5284The TIME_STYLE argument can be full-iso, long-iso, iso, locale, or +FORMAT.\n\-
5285FORMAT is interpreted like in date(1). If FORMAT is FORMAT1<newline>FORMAT2,\n\-
5286then FORMAT1 applies to non-recent files and FORMAT2 to recent files.\n\-
5287TIME_STYLE prefixed with 'posix-' takes effect only outside the POSIX locale.\n\-
5288Also the TIME_STYLE environment variable sets the default style to use.\n\-
5289"), stdout);-
5290 fputs (_("\-
5291\n\-
5292Using color to distinguish file types is disabled both by default and\n\-
5293with --color=never. With --color=auto, ls emits color codes only when\n\-
5294standard output is connected to a terminal. The LS_COLORS environment\n\-
5295variable can change the settings. Use the dircolors command to set it.\n\-
5296"), stdout);-
5297 fputs (_("\-
5298\n\-
5299Exit status:\n\-
5300 0 if OK,\n\-
5301 1 if minor problems (e.g., cannot access subdirectory),\n\-
5302 2 if serious trouble (e.g., cannot access command-line argument).\n\-
5303"), stdout);-
5304 emit_ancillary_info (PROGRAM_NAME);-
5305 }
executed 152 times by 3 tests: end of block
Executed by:
  • dir
  • ls
  • vdir
152
5306 exit (status);
executed 171 times by 3 tests: exit (status);
Executed by:
  • dir
  • ls
  • vdir
171
5307}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2