OpenCoverage

xstrtol.c #3

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/gnulib/lib/xstrtol.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* A more useful interface to strtol.-
2-
3 Copyright (C) 1995-1996, 1998-2001, 2003-2007, 2009-2018 Free Software-
4 Foundation, Inc.-
5-
6 This program is free software: you can redistribute it and/or modify-
7 it under the terms of the GNU General Public License as published by-
8 the Free Software Foundation; either version 3 of the License, or-
9 (at your option) any later version.-
10-
11 This program is distributed in the hope that it will be useful,-
12 but WITHOUT ANY WARRANTY; without even the implied warranty of-
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
14 GNU General Public License for more details.-
15-
16 You should have received a copy of the GNU General Public License-
17 along with this program. If not, see <https://www.gnu.org/licenses/>. */-
18-
19/* Written by Jim Meyering. */-
20-
21#ifndef __strtol-
22# define __strtol strtol-
23# define __strtol_t long int-
24# define __xstrtol xstrtol-
25# define STRTOL_T_MINIMUM LONG_MIN-
26# define STRTOL_T_MAXIMUM LONG_MAX-
27#endif-
28-
29#include <config.h>-
30-
31#include "xstrtol.h"-
32-
33/* Some pre-ANSI implementations (e.g. SunOS 4)-
34 need stderr defined if assertion checking is enabled. */-
35#include <stdio.h>-
36-
37#include <ctype.h>-
38#include <errno.h>-
39#include <limits.h>-
40#include <stdlib.h>-
41#include <string.h>-
42-
43#include "assure.h"-
44#include "intprops.h"-
45-
46/* xstrtoll.c and xstrtoull.c, which include this file, require that-
47 ULLONG_MAX, LLONG_MAX, LLONG_MIN are defined, but <limits.h> does not-
48 define them on all platforms. */-
49#ifndef ULLONG_MAX-
50# define ULLONG_MAX TYPE_MAXIMUM (unsigned long long)-
51#endif-
52#ifndef LLONG_MAX-
53# define LLONG_MAX TYPE_MAXIMUM (long long int)-
54#endif-
55#ifndef LLONG_MIN-
56# define LLONG_MIN TYPE_MINIMUM (long long int)-
57#endif-
58-
59static strtol_error-
60bkm_scale (__strtol_t *x, int scale_factor)-
61{-
62 if (TYPE_SIGNED (__strtol_t) && *x < STRTOL_T_MINIMUM / scale_factor)
(! ((long int)...long int) -1))Description
TRUEevaluated 37 times by 1 test
Evaluated by:
  • truncate
FALSEevaluated 96 times by 7 tests
Evaluated by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
*x < (-0x7ffff.../ scale_factorDescription
TRUEnever evaluated
FALSEevaluated 37 times by 1 test
Evaluated by:
  • truncate
0-96
63 {-
64 *x = STRTOL_T_MINIMUM;-
65 return LONGINT_OVERFLOW;
never executed: return LONGINT_OVERFLOW;
0
66 }-
67 if (STRTOL_T_MAXIMUM / scale_factor < *x)
0x7fffffffffff...le_factor < *xDescription
TRUEnever evaluated
FALSEevaluated 133 times by 8 tests
Evaluated by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
0-133
68 {-
69 *x = STRTOL_T_MAXIMUM;-
70 return LONGINT_OVERFLOW;
never executed: return LONGINT_OVERFLOW;
0
71 }-
72 *x *= scale_factor;-
73 return LONGINT_OK;
executed 133 times by 8 tests: return LONGINT_OK;
Executed by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
133
74}-
75-
76static strtol_error-
77bkm_scale_by_power (__strtol_t *x, int base, int power)-
78{-
79 strtol_error err = LONGINT_OK;-
80 while (power--)
power--Description
TRUEevaluated 130 times by 8 tests
Evaluated by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
FALSEevaluated 76 times by 8 tests
Evaluated by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
76-130
81 err |= bkm_scale (x, base);
executed 130 times by 8 tests: err |= bkm_scale (x, base);
Executed by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
130
82 return err;
executed 76 times by 8 tests: return err;
Executed by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
76
83}-
84-
85/* FIXME: comment. */-
86-
87strtol_error-
88__xstrtol (const char *s, char **ptr, int strtol_base,-
89 __strtol_t *val, const char *valid_suffixes)-
90{-
91 char *t_ptr;-
92 char **p;-
93 __strtol_t tmp;-
94 strtol_error err = LONGINT_OK;-
95-
96 assure (0 <= strtol_base && strtol_base <= 36);-
97-
98 p = (ptr ? ptr : &t_ptr);
ptrDescription
TRUEevaluated 2548 times by 9 tests
Evaluated by:
  • dd
  • df
  • dir
  • du
  • numfmt
  • pr
  • sort
  • tr
  • vdir
FALSEevaluated 14202 times by 30 tests
Evaluated by:
  • b2sum
  • base32
  • base64
  • chgrp
  • chown
  • csplit
  • dir
  • du
  • expr
  • fmt
  • fold
  • head
  • id
  • join
  • nice
  • nl
  • nproc
  • numfmt
  • od
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • ...
2548-14202
99-
100 errno = 0;-
101-
102 if (! TYPE_SIGNED (__strtol_t))
! (! ((long in...long int) -1))Description
TRUEevaluated 6867 times by 28 tests
Evaluated by:
  • b2sum
  • base32
  • base64
  • chgrp
  • chown
  • csplit
  • dd
  • df
  • dir
  • du
  • fmt
  • fold
  • head
  • id
  • join
  • nproc
  • numfmt
  • od
  • pr
  • shred
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • ...
FALSEevaluated 9883 times by 9 tests
Evaluated by:
  • csplit
  • du
  • expr
  • nice
  • nl
  • numfmt
  • pr
  • ptx
  • truncate
6867-9883
103 {-
104 const char *q = s;-
105 unsigned char ch = *q;-
106 while (isspace (ch))
((*__ctype_b_l...int) _ISspace)Description
TRUEevaluated 7 times by 3 tests
Evaluated by:
  • join
  • nproc
  • od
FALSEevaluated 6867 times by 28 tests
Evaluated by:
  • b2sum
  • base32
  • base64
  • chgrp
  • chown
  • csplit
  • dd
  • df
  • dir
  • du
  • fmt
  • fold
  • head
  • id
  • join
  • nproc
  • numfmt
  • od
  • pr
  • shred
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • ...
7-6867
107 ch = *++q;
executed 7 times by 3 tests: ch = *++q;
Executed by:
  • join
  • nproc
  • od
7
108 if (ch == '-')
ch == '-'Description
TRUEevaluated 85 times by 21 tests
Evaluated by:
  • b2sum
  • base32
  • base64
  • chown
  • df
  • dir
  • du
  • fold
  • head
  • nproc
  • numfmt
  • od
  • pr
  • shred
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • uniq
  • vdir
FALSEevaluated 6782 times by 26 tests
Evaluated by:
  • b2sum
  • base32
  • base64
  • chgrp
  • chown
  • csplit
  • dd
  • df
  • du
  • fmt
  • fold
  • head
  • id
  • join
  • nproc
  • numfmt
  • od
  • pr
  • shred
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • tr
  • ...
85-6782
109 return LONGINT_INVALID;
executed 85 times by 21 tests: return LONGINT_INVALID;
Executed by:
  • b2sum
  • base32
  • base64
  • chown
  • df
  • dir
  • du
  • fold
  • head
  • nproc
  • numfmt
  • od
  • pr
  • shred
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • uniq
  • vdir
85
110 }
executed 6782 times by 26 tests: end of block
Executed by:
  • b2sum
  • base32
  • base64
  • chgrp
  • chown
  • csplit
  • dd
  • df
  • du
  • fmt
  • fold
  • head
  • id
  • join
  • nproc
  • numfmt
  • od
  • pr
  • shred
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • tr
  • ...
6782
111-
112 tmp = __strtol (s, p, strtol_base);-
113-
114 if (*p == s)
*p == sDescription
TRUEevaluated 79 times by 18 tests
Evaluated by:
  • b2sum
  • chown
  • csplit
  • du
  • id
  • join
  • nl
  • nproc
  • numfmt
  • od
  • pr
  • ptx
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • truncate
FALSEevaluated 16586 times by 30 tests
Evaluated by:
  • b2sum
  • base32
  • base64
  • chgrp
  • chown
  • csplit
  • dd
  • df
  • du
  • expr
  • fmt
  • fold
  • head
  • id
  • join
  • nice
  • nproc
  • numfmt
  • od
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • ...
79-16586
115 {-
116 /* If there is no number but there is a valid suffix, assume the-
117 number is 1. The string is invalid otherwise. */-
118 if (valid_suffixes && **p && strchr (valid_suffixes, **p))
valid_suffixesDescription
TRUEevaluated 72 times by 16 tests
Evaluated by:
  • chown
  • csplit
  • du
  • id
  • join
  • nl
  • nproc
  • numfmt
  • od
  • pr
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • truncate
FALSEevaluated 7 times by 4 tests
Evaluated by:
  • b2sum
  • ptx
  • shuf
  • sort
**pDescription
TRUEevaluated 67 times by 16 tests
Evaluated by:
  • chown
  • csplit
  • du
  • id
  • join
  • nl
  • nproc
  • numfmt
  • od
  • pr
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • truncate
FALSEevaluated 5 times by 3 tests
Evaluated by:
  • du
  • shuf
  • sort
(__extension__...ixes , **p )))Description
TRUEevaluated 9 times by 2 tests
Evaluated by:
  • numfmt
  • split
FALSEevaluated 58 times by 15 tests
Evaluated by:
  • chown
  • csplit
  • du
  • id
  • join
  • nl
  • nproc
  • numfmt
  • od
  • pr
  • shuf
  • sort
  • stdbuf
  • tail
  • truncate
__builtin_constant_p ( **p )Description
TRUEnever evaluated
FALSEevaluated 67 times by 16 tests
Evaluated by:
  • chown
  • csplit
  • du
  • id
  • join
  • nl
  • nproc
  • numfmt
  • od
  • pr
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • truncate
!__builtin_con...lid_suffixes )Description
TRUEnever evaluated
FALSEnever evaluated
( **p ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0-72
119 tmp = 1;
executed 9 times by 2 tests: tmp = 1;
Executed by:
  • numfmt
  • split
9
120 else-
121 return LONGINT_INVALID;
executed 70 times by 17 tests: return LONGINT_INVALID;
Executed by:
  • b2sum
  • chown
  • csplit
  • du
  • id
  • join
  • nl
  • nproc
  • numfmt
  • od
  • pr
  • ptx
  • shuf
  • sort
  • stdbuf
  • tail
  • truncate
70
122 }-
123 else if (errno != 0)
(*__errno_location ()) != 0Description
TRUEevaluated 36 times by 10 tests
Evaluated by:
  • expr
  • join
  • numfmt
  • pr
  • sort
  • split
  • stdbuf
  • tail
  • truncate
  • uniq
FALSEevaluated 16550 times by 30 tests
Evaluated by:
  • b2sum
  • base32
  • base64
  • chgrp
  • chown
  • csplit
  • dd
  • df
  • du
  • expr
  • fmt
  • fold
  • head
  • id
  • join
  • nice
  • nproc
  • numfmt
  • od
  • pr
  • ptx
  • shred
  • shuf
  • sort
  • split
  • ...
36-16550
124 {-
125 if (errno != ERANGE)
(*__errno_location ()) != 34Description
TRUEnever evaluated
FALSEevaluated 36 times by 10 tests
Evaluated by:
  • expr
  • join
  • numfmt
  • pr
  • sort
  • split
  • stdbuf
  • tail
  • truncate
  • uniq
0-36
126 return LONGINT_INVALID;
never executed: return LONGINT_INVALID;
0
127 err = LONGINT_OVERFLOW;-
128 }
executed 36 times by 10 tests: end of block
Executed by:
  • expr
  • join
  • numfmt
  • pr
  • sort
  • split
  • stdbuf
  • tail
  • truncate
  • uniq
36
129-
130 /* Let valid_suffixes == NULL mean "allow any suffix". */-
131 /* FIXME: update all callers except the ones that allow suffixes-
132 after the number, changing last parameter NULL to "". */-
133 if (!valid_suffixes)
!valid_suffixesDescription
TRUEevaluated 8455 times by 7 tests
Evaluated by:
  • b2sum
  • du
  • expr
  • ptx
  • shuf
  • sort
  • tr
FALSEevaluated 8140 times by 27 tests
Evaluated by:
  • b2sum
  • base32
  • base64
  • chgrp
  • chown
  • csplit
  • dd
  • df
  • du
  • fmt
  • fold
  • head
  • id
  • join
  • nice
  • nproc
  • numfmt
  • od
  • pr
  • shred
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • ...
8140-8455
134 {-
135 *val = tmp;-
136 return err;
executed 8455 times by 7 tests: return err;
Executed by:
  • b2sum
  • du
  • expr
  • ptx
  • shuf
  • sort
  • tr
8455
137 }-
138-
139 if (**p != '\0')
**p != '\0'Description
TRUEevaluated 693 times by 15 tests
Evaluated by:
  • base32
  • base64
  • chown
  • dd
  • df
  • du
  • fmt
  • head
  • nice
  • numfmt
  • pr
  • sort
  • split
  • tail
  • truncate
FALSEevaluated 7447 times by 27 tests
Evaluated by:
  • b2sum
  • base32
  • base64
  • chgrp
  • chown
  • csplit
  • dd
  • df
  • du
  • fmt
  • fold
  • head
  • id
  • join
  • nice
  • nproc
  • numfmt
  • od
  • pr
  • shred
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • ...
693-7447
140 {-
141 int base = 1024;-
142 int suffixes = 1;-
143 strtol_error overflow;-
144-
145 if (!strchr (valid_suffixes, **p))
! (__extension...ixes , **p )))Description
TRUEevaluated 614 times by 11 tests
Evaluated by:
  • base32
  • base64
  • chown
  • dd
  • fmt
  • nice
  • numfmt
  • pr
  • sort
  • split
  • tail
FALSEevaluated 79 times by 8 tests
Evaluated by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
__builtin_constant_p ( **p )Description
TRUEnever evaluated
FALSEevaluated 693 times by 15 tests
Evaluated by:
  • base32
  • base64
  • chown
  • dd
  • df
  • du
  • fmt
  • head
  • nice
  • numfmt
  • pr
  • sort
  • split
  • tail
  • truncate
!__builtin_con...lid_suffixes )Description
TRUEnever evaluated
FALSEnever evaluated
( **p ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0-693
146 {-
147 *val = tmp;-
148 return err | LONGINT_INVALID_SUFFIX_CHAR;
executed 614 times by 11 tests: return err | LONGINT_INVALID_SUFFIX_CHAR;
Executed by:
  • base32
  • base64
  • chown
  • dd
  • fmt
  • nice
  • numfmt
  • pr
  • sort
  • split
  • tail
614
149 }-
150-
151 switch (**p)-
152 {-
153 case 'E': case 'G': case 'g': case 'k': case 'K': case 'M': case 'm':
never executed: case 'E':
executed 6 times by 4 tests: case 'G':
Executed by:
  • dd
  • numfmt
  • split
  • truncate
never executed: case 'g':
executed 14 times by 3 tests: case 'k':
Executed by:
  • dd
  • head
  • sort
executed 18 times by 6 tests: case 'K':
Executed by:
  • dd
  • df
  • du
  • head
  • numfmt
  • split
executed 33 times by 3 tests: case 'M':
Executed by:
  • dd
  • head
  • truncate
executed 3 times by 1 test: case 'm':
Executed by:
  • head
0-33
154 case 'P': case 'T': case 't': case 'Y': case 'Z':
never executed: case 'P':
executed 2 times by 1 test: case 'T':
Executed by:
  • truncate
never executed: case 't':
never executed: case 'Y':
never executed: case 'Z':
0-2
155-
156 /* The "valid suffix" '0' is a special flag meaning that-
157 an optional second suffix is allowed, which can change-
158 the base. A suffix "B" (e.g. "100MB") stands for a power-
159 of 1000, whereas a suffix "iB" (e.g. "100MiB") stands for-
160 a power of 1024. If no suffix (e.g. "100M"), assume-
161 power-of-1024. */-
162-
163 if (strchr (valid_suffixes, '0'))
(__extension__...ixes , '0' )))Description
TRUEevaluated 66 times by 7 tests
Evaluated by:
  • dd
  • df
  • du
  • head
  • numfmt
  • split
  • truncate
FALSEevaluated 10 times by 2 tests
Evaluated by:
  • numfmt
  • sort
__builtin_constant_p ( '0' )Description
TRUEevaluated 76 times by 8 tests
Evaluated by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
FALSEnever evaluated
!__builtin_con...lid_suffixes )Description
TRUEevaluated 76 times by 8 tests
Evaluated by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
FALSEnever evaluated
( '0' ) == '\0'Description
TRUEnever evaluated
FALSEevaluated 76 times by 8 tests
Evaluated by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
0-76
164 switch (p[0][1])-
165 {-
166 case 'i':
executed 10 times by 1 test: case 'i':
Executed by:
  • truncate
10
167 if (p[0][2] == 'B')
p[0][2] == 'B'Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • truncate
FALSEnever evaluated
0-10
168 suffixes += 2;
executed 10 times by 1 test: suffixes += 2;
Executed by:
  • truncate
10
169 break;
executed 10 times by 1 test: break;
Executed by:
  • truncate
10
170-
171 case 'B':
executed 3 times by 1 test: case 'B':
Executed by:
  • numfmt
3
172 case 'D': /* 'D' is obsolescent */
never executed: case 'D':
0
173 base = 1000;-
174 suffixes++;-
175 break;
executed 3 times by 1 test: break;
Executed by:
  • numfmt
3
176 }
never executed: end of block
0
177 }
executed 76 times by 8 tests: end of block
Executed by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
76
178-
179 switch (**p)-
180 {-
181 case 'b':
executed 3 times by 1 test: case 'b':
Executed by:
  • head
3
182 overflow = bkm_scale (&tmp, 512);-
183 break;
executed 3 times by 1 test: break;
Executed by:
  • head
3
184-
185 case 'B':
never executed: case 'B':
0
186 /* This obsolescent first suffix is distinct from the 'B'-
187 second suffix above. E.g., 'tar -L 1000B' means change-
188 the tape after writing 1000 KiB of data. */-
189 overflow = bkm_scale (&tmp, 1024);-
190 break;
never executed: break;
0
191-
192 case 'c':
never executed: case 'c':
0
193 overflow = LONGINT_OK;-
194 break;
never executed: break;
0
195-
196 case 'E': /* exa or exbi */
never executed: case 'E':
0
197 overflow = bkm_scale_by_power (&tmp, base, 6);-
198 break;
never executed: break;
0
199-
200 case 'G': /* giga or gibi */
executed 6 times by 4 tests: case 'G':
Executed by:
  • dd
  • numfmt
  • split
  • truncate
6
201 case 'g': /* 'g' is undocumented; for compatibility only */
never executed: case 'g':
0
202 overflow = bkm_scale_by_power (&tmp, base, 3);-
203 break;
executed 6 times by 4 tests: break;
Executed by:
  • dd
  • numfmt
  • split
  • truncate
6
204-
205 case 'k': /* kilo */
executed 14 times by 3 tests: case 'k':
Executed by:
  • dd
  • head
  • sort
14
206 case 'K': /* kibi */
executed 18 times by 6 tests: case 'K':
Executed by:
  • dd
  • df
  • du
  • head
  • numfmt
  • split
18
207 overflow = bkm_scale_by_power (&tmp, base, 1);-
208 break;
executed 32 times by 7 tests: break;
Executed by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
32
209-
210 case 'M': /* mega or mebi */
executed 33 times by 3 tests: case 'M':
Executed by:
  • dd
  • head
  • truncate
33
211 case 'm': /* 'm' is undocumented; for compatibility only */
executed 3 times by 1 test: case 'm':
Executed by:
  • head
3
212 overflow = bkm_scale_by_power (&tmp, base, 2);-
213 break;
executed 36 times by 3 tests: break;
Executed by:
  • dd
  • head
  • truncate
36
214-
215 case 'P': /* peta or pebi */
never executed: case 'P':
0
216 overflow = bkm_scale_by_power (&tmp, base, 5);-
217 break;
never executed: break;
0
218-
219 case 'T': /* tera or tebi */
executed 2 times by 1 test: case 'T':
Executed by:
  • truncate
2
220 case 't': /* 't' is undocumented; for compatibility only */
never executed: case 't':
0
221 overflow = bkm_scale_by_power (&tmp, base, 4);-
222 break;
executed 2 times by 1 test: break;
Executed by:
  • truncate
2
223-
224 case 'w':
never executed: case 'w':
0
225 overflow = bkm_scale (&tmp, 2);-
226 break;
never executed: break;
0
227-
228 case 'Y': /* yotta or 2**80 */
never executed: case 'Y':
0
229 overflow = bkm_scale_by_power (&tmp, base, 8);-
230 break;
never executed: break;
0
231-
232 case 'Z': /* zetta or 2**70 */
never executed: case 'Z':
0
233 overflow = bkm_scale_by_power (&tmp, base, 7);-
234 break;
never executed: break;
0
235-
236 default:
never executed: default:
0
237 *val = tmp;-
238 return err | LONGINT_INVALID_SUFFIX_CHAR;
never executed: return err | LONGINT_INVALID_SUFFIX_CHAR;
0
239 }-
240-
241 err |= overflow;-
242 *p += suffixes;-
243 if (**p)
**pDescription
TRUEnever evaluated
FALSEevaluated 79 times by 8 tests
Evaluated by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
0-79
244 err |= LONGINT_INVALID_SUFFIX_CHAR;
never executed: err |= LONGINT_INVALID_SUFFIX_CHAR;
0
245 }
executed 79 times by 8 tests: end of block
Executed by:
  • dd
  • df
  • du
  • head
  • numfmt
  • sort
  • split
  • truncate
79
246-
247 *val = tmp;-
248 return err;
executed 7526 times by 27 tests: return err;
Executed by:
  • b2sum
  • base32
  • base64
  • chgrp
  • chown
  • csplit
  • dd
  • df
  • du
  • fmt
  • fold
  • head
  • id
  • join
  • nice
  • nproc
  • numfmt
  • od
  • pr
  • shred
  • shuf
  • sort
  • split
  • stdbuf
  • tail
  • ...
7526
249}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2