OpenCoverage

od.c

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/coreutils/src/src/od.c
Source codeSwitch to Preprocessed file
LineSourceCount
1/* od -- dump files in octal and other formats-
2 Copyright (C) 1992-2018 Free Software Foundation, Inc.-
3-
4 This program is free software: you can redistribute it and/or modify-
5 it under the terms of the GNU General Public License as published by-
6 the Free Software Foundation, either version 3 of the License, or-
7 (at your option) any later version.-
8-
9 This program is distributed in the hope that it will be useful,-
10 but WITHOUT ANY WARRANTY; without even the implied warranty of-
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the-
12 GNU General Public License for more details.-
13-
14 You should have received a copy of the GNU General Public License-
15 along with this program. If not, see <https://www.gnu.org/licenses/>. */-
16-
17/* Written by Jim Meyering. */-
18-
19#include <config.h>-
20-
21#include <stdio.h>-
22#include <assert.h>-
23#include <getopt.h>-
24#include <sys/types.h>-
25#include "system.h"-
26#include "argmatch.h"-
27#include "die.h"-
28#include "error.h"-
29#include "ftoastr.h"-
30#include "quote.h"-
31#include "stat-size.h"-
32#include "xbinary-io.h"-
33#include "xprintf.h"-
34#include "xstrtol.h"-
35-
36/* The official name of this program (e.g., no 'g' prefix). */-
37#define PROGRAM_NAME "od"-
38-
39#define AUTHORS proper_name ("Jim Meyering")-
40-
41/* The default number of input bytes per output line. */-
42#define DEFAULT_BYTES_PER_BLOCK 16-
43-
44#if HAVE_UNSIGNED_LONG_LONG_INT-
45typedef unsigned long long int unsigned_long_long_int;-
46#else-
47/* This is just a place-holder to avoid a few '#if' directives.-
48 In this case, the type isn't actually used. */-
49typedef unsigned long int unsigned_long_long_int;-
50#endif-
51-
52enum size_spec-
53 {-
54 NO_SIZE,-
55 CHAR,-
56 SHORT,-
57 INT,-
58 LONG,-
59 LONG_LONG,-
60 /* FIXME: add INTMAX support, too */-
61 FLOAT_SINGLE,-
62 FLOAT_DOUBLE,-
63 FLOAT_LONG_DOUBLE,-
64 N_SIZE_SPECS-
65 };-
66-
67enum output_format-
68 {-
69 SIGNED_DECIMAL,-
70 UNSIGNED_DECIMAL,-
71 OCTAL,-
72 HEXADECIMAL,-
73 FLOATING_POINT,-
74 NAMED_CHARACTER,-
75 CHARACTER-
76 };-
77-
78#define MAX_INTEGRAL_TYPE_SIZE sizeof (unsigned_long_long_int)-
79-
80/* The maximum number of bytes needed for a format string, including-
81 the trailing nul. Each format string expects a variable amount of-
82 padding (guaranteed to be at least 1 plus the field width), then an-
83 element that will be formatted in the field. */-
84enum-
85 {-
86 FMT_BYTES_ALLOCATED =-
87 (sizeof "%*.99" - 1-
88 + MAX (sizeof "ld",-
89 MAX (sizeof PRIdMAX,-
90 MAX (sizeof PRIoMAX,-
91 MAX (sizeof PRIuMAX,-
92 sizeof PRIxMAX)))))-
93 };-
94-
95/* Ensure that our choice for FMT_BYTES_ALLOCATED is reasonable. */-
96verify (MAX_INTEGRAL_TYPE_SIZE * CHAR_BIT / 3 <= 99);-
97-
98/* Each output format specification (from '-t spec' or from-
99 old-style options) is represented by one of these structures. */-
100struct tspec-
101 {-
102 enum output_format fmt;-
103 enum size_spec size; /* Type of input object. */-
104 /* FIELDS is the number of fields per line, BLANK is the number of-
105 fields to leave blank. WIDTH is width of one field, excluding-
106 leading space, and PAD is total pad to divide among FIELDS.-
107 PAD is at least as large as FIELDS. */-
108 void (*print_function) (size_t fields, size_t blank, void const *data,-
109 char const *fmt, int width, int pad);-
110 char fmt_string[FMT_BYTES_ALLOCATED]; /* Of the style "%*d". */-
111 bool hexl_mode_trailer;-
112 int field_width; /* Minimum width of a field, excluding leading space. */-
113 int pad_width; /* Total padding to be divided among fields. */-
114 };-
115-
116/* Convert the number of 8-bit bytes of a binary representation to-
117 the number of characters (digits + sign if the type is signed)-
118 required to represent the same quantity in the specified base/type.-
119 For example, a 32-bit (4-byte) quantity may require a field width-
120 as wide as the following for these types:-
121 11 unsigned octal-
122 11 signed decimal-
123 10 unsigned decimal-
124 8 unsigned hexadecimal */-
125-
126static unsigned int const bytes_to_oct_digits[] =-
127{0, 3, 6, 8, 11, 14, 16, 19, 22, 25, 27, 30, 32, 35, 38, 41, 43};-
128-
129static unsigned int const bytes_to_signed_dec_digits[] =-
130{1, 4, 6, 8, 11, 13, 16, 18, 20, 23, 25, 28, 30, 33, 35, 37, 40};-
131-
132static unsigned int const bytes_to_unsigned_dec_digits[] =-
133{0, 3, 5, 8, 10, 13, 15, 17, 20, 22, 25, 27, 29, 32, 34, 37, 39};-
134-
135static unsigned int const bytes_to_hex_digits[] =-
136{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32};-
137-
138/* It'll be a while before we see integral types wider than 16 bytes,-
139 but if/when it happens, this check will catch it. Without this check,-
140 a wider type would provoke a buffer overrun. */-
141verify (MAX_INTEGRAL_TYPE_SIZE < ARRAY_CARDINALITY (bytes_to_hex_digits));-
142-
143/* Make sure the other arrays have the same length. */-
144verify (sizeof bytes_to_oct_digits == sizeof bytes_to_signed_dec_digits);-
145verify (sizeof bytes_to_oct_digits == sizeof bytes_to_unsigned_dec_digits);-
146verify (sizeof bytes_to_oct_digits == sizeof bytes_to_hex_digits);-
147-
148/* Convert enum size_spec to the size of the named type. */-
149static const int width_bytes[] =-
150{-
151 -1,-
152 sizeof (char),-
153 sizeof (short int),-
154 sizeof (int),-
155 sizeof (long int),-
156 sizeof (unsigned_long_long_int),-
157 sizeof (float),-
158 sizeof (double),-
159 sizeof (long double)-
160};-
161-
162/* Ensure that for each member of 'enum size_spec' there is an-
163 initializer in the width_bytes array. */-
164verify (ARRAY_CARDINALITY (width_bytes) == N_SIZE_SPECS);-
165-
166/* Names for some non-printing characters. */-
167static char const charname[33][4] =-
168{-
169 "nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel",-
170 "bs", "ht", "nl", "vt", "ff", "cr", "so", "si",-
171 "dle", "dc1", "dc2", "dc3", "dc4", "nak", "syn", "etb",-
172 "can", "em", "sub", "esc", "fs", "gs", "rs", "us",-
173 "sp"-
174};-
175-
176/* Address base (8, 10 or 16). */-
177static int address_base;-
178-
179/* The number of octal digits required to represent the largest-
180 address value. */-
181#define MAX_ADDRESS_LENGTH \-
182 ((sizeof (uintmax_t) * CHAR_BIT + CHAR_BIT - 1) / 3)-
183-
184/* Width of a normal address. */-
185static int address_pad_len;-
186-
187/* Minimum length when detecting --strings. */-
188static size_t string_min;-
189-
190/* True when in --strings mode. */-
191static bool flag_dump_strings;-
192-
193/* True if we should recognize the older non-option arguments-
194 that specified at most one file and optional arguments specifying-
195 offset and pseudo-start address. */-
196static bool traditional;-
197-
198/* True if an old-style 'pseudo-address' was specified. */-
199static bool flag_pseudo_start;-
200-
201/* The difference between the old-style pseudo starting address and-
202 the number of bytes to skip. */-
203static uintmax_t pseudo_offset;-
204-
205/* Function that accepts an address and an optional following char,-
206 and prints the address and char to stdout. */-
207static void (*format_address) (uintmax_t, char);-
208-
209/* The number of input bytes to skip before formatting and writing. */-
210static uintmax_t n_bytes_to_skip = 0;-
211-
212/* When false, MAX_BYTES_TO_FORMAT and END_OFFSET are ignored, and all-
213 input is formatted. */-
214static bool limit_bytes_to_format = false;-
215-
216/* The maximum number of bytes that will be formatted. */-
217static uintmax_t max_bytes_to_format;-
218-
219/* The offset of the first byte after the last byte to be formatted. */-
220static uintmax_t end_offset;-
221-
222/* When true and two or more consecutive blocks are equal, format-
223 only the first block and output an asterisk alone on the following-
224 line to indicate that identical blocks have been elided. */-
225static bool abbreviate_duplicate_blocks = true;-
226-
227/* An array of specs describing how to format each input block. */-
228static struct tspec *spec;-
229-
230/* The number of format specs. */-
231static size_t n_specs;-
232-
233/* The allocated length of SPEC. */-
234static size_t n_specs_allocated;-
235-
236/* The number of input bytes formatted per output line. It must be-
237 a multiple of the least common multiple of the sizes associated with-
238 the specified output types. It should be as large as possible, but-
239 no larger than 16 -- unless specified with the -w option. */-
240static size_t bytes_per_block;-
241-
242/* Human-readable representation of *file_list (for error messages).-
243 It differs from file_list[-1] only when file_list[-1] is "-". */-
244static char const *input_filename;-
245-
246/* A NULL-terminated list of the file-arguments from the command line. */-
247static char const *const *file_list;-
248-
249/* Initializer for file_list if no file-arguments-
250 were specified on the command line. */-
251static char const *const default_file_list[] = {"-", NULL};-
252-
253/* The input stream associated with the current file. */-
254static FILE *in_stream;-
255-
256/* If true, at least one of the files we read was standard input. */-
257static bool have_read_stdin;-
258-
259/* Map the size in bytes to a type identifier. */-
260static enum size_spec integral_type_size[MAX_INTEGRAL_TYPE_SIZE + 1];-
261-
262#define MAX_FP_TYPE_SIZE sizeof (long double)-
263static enum size_spec fp_type_size[MAX_FP_TYPE_SIZE + 1];-
264-
265#ifndef WORDS_BIGENDIAN-
266# define WORDS_BIGENDIAN 0-
267#endif-
268-
269/* Use native endianess by default. */-
270static bool input_swap;-
271-
272static char const short_options[] = "A:aBbcDdeFfHhIij:LlN:OoS:st:vw::Xx";-
273-
274/* For long options that have no equivalent short option, use a-
275 non-character as a pseudo short option, starting with CHAR_MAX + 1. */-
276enum-
277{-
278 TRADITIONAL_OPTION = CHAR_MAX + 1,-
279 ENDIAN_OPTION,-
280};-
281-
282enum endian_type-
283{-
284 endian_little,-
285 endian_big-
286};-
287-
288static char const *const endian_args[] =-
289{-
290 "little", "big", NULL-
291};-
292-
293static enum endian_type const endian_types[] =-
294{-
295 endian_little, endian_big-
296};-
297-
298static struct option const long_options[] =-
299{-
300 {"skip-bytes", required_argument, NULL, 'j'},-
301 {"address-radix", required_argument, NULL, 'A'},-
302 {"read-bytes", required_argument, NULL, 'N'},-
303 {"format", required_argument, NULL, 't'},-
304 {"output-duplicates", no_argument, NULL, 'v'},-
305 {"strings", optional_argument, NULL, 'S'},-
306 {"traditional", no_argument, NULL, TRADITIONAL_OPTION},-
307 {"width", optional_argument, NULL, 'w'},-
308 {"endian", required_argument, NULL, ENDIAN_OPTION },-
309-
310 {GETOPT_HELP_OPTION_DECL},-
311 {GETOPT_VERSION_OPTION_DECL},-
312 {NULL, 0, NULL, 0}-
313};-
314-
315void-
316usage (int status)-
317{-
318 if (status != EXIT_SUCCESS)
status != 0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • od
FALSEevaluated 10 times by 1 test
Evaluated by:
  • od
4-10
319 emit_try_help ();
executed 4 times by 1 test: end of block
Executed by:
  • od
4
320 else-
321 {-
322 printf (_("\-
323Usage: %s [OPTION]... [FILE]...\n\-
324 or: %s [-abcdfilosx]... [FILE] [[+]OFFSET[.][b]]\n\-
325 or: %s --traditional [OPTION]... [FILE] [[+]OFFSET[.][b] [+][LABEL][.][b]]\n\-
326"),-
327 program_name, program_name, program_name);-
328 fputs (_("\n\-
329Write an unambiguous representation, octal bytes by default,\n\-
330of FILE to standard output. With more than one FILE argument,\n\-
331concatenate them in the listed order to form the input.\n\-
332"), stdout);-
333-
334 emit_stdin_note ();-
335-
336 fputs (_("\-
337\n\-
338If first and second call formats both apply, the second format is assumed\n\-
339if the last operand begins with + or (if there are 2 operands) a digit.\n\-
340An OFFSET operand means -j OFFSET. LABEL is the pseudo-address\n\-
341at first byte printed, incremented when dump is progressing.\n\-
342For OFFSET and LABEL, a 0x or 0X prefix indicates hexadecimal;\n\-
343suffixes may be . for octal and b for multiply by 512.\n\-
344"), stdout);-
345-
346 emit_mandatory_arg_note ();-
347-
348 fputs (_("\-
349 -A, --address-radix=RADIX output format for file offsets; RADIX is one\n\-
350 of [doxn], for Decimal, Octal, Hex or None\n\-
351 --endian={big|little} swap input bytes according the specified order\n\-
352 -j, --skip-bytes=BYTES skip BYTES input bytes first\n\-
353"), stdout);-
354 fputs (_("\-
355 -N, --read-bytes=BYTES limit dump to BYTES input bytes\n\-
356 -S BYTES, --strings[=BYTES] output strings of at least BYTES graphic chars;\-
357\n\-
358 3 is implied when BYTES is not specified\n\-
359 -t, --format=TYPE select output format or formats\n\-
360 -v, --output-duplicates do not use * to mark line suppression\n\-
361 -w[BYTES], --width[=BYTES] output BYTES bytes per output line;\n\-
362 32 is implied when BYTES is not specified\n\-
363 --traditional accept arguments in third form above\n\-
364"), stdout);-
365 fputs (HELP_OPTION_DESCRIPTION, stdout);-
366 fputs (VERSION_OPTION_DESCRIPTION, stdout);-
367 fputs (_("\-
368\n\-
369\n\-
370Traditional format specifications may be intermixed; they accumulate:\n\-
371 -a same as -t a, select named characters, ignoring high-order bit\n\-
372 -b same as -t o1, select octal bytes\n\-
373 -c same as -t c, select printable characters or backslash escapes\n\-
374 -d same as -t u2, select unsigned decimal 2-byte units\n\-
375"), stdout);-
376 fputs (_("\-
377 -f same as -t fF, select floats\n\-
378 -i same as -t dI, select decimal ints\n\-
379 -l same as -t dL, select decimal longs\n\-
380 -o same as -t o2, select octal 2-byte units\n\-
381 -s same as -t d2, select decimal 2-byte units\n\-
382 -x same as -t x2, select hexadecimal 2-byte units\n\-
383"), stdout);-
384 fputs (_("\-
385\n\-
386\n\-
387TYPE is made up of one or more of these specifications:\n\-
388 a named character, ignoring high-order bit\n\-
389 c printable character or backslash escape\n\-
390"), stdout);-
391 fputs (_("\-
392 d[SIZE] signed decimal, SIZE bytes per integer\n\-
393 f[SIZE] floating point, SIZE bytes per float\n\-
394 o[SIZE] octal, SIZE bytes per integer\n\-
395 u[SIZE] unsigned decimal, SIZE bytes per integer\n\-
396 x[SIZE] hexadecimal, SIZE bytes per integer\n\-
397"), stdout);-
398 fputs (_("\-
399\n\-
400SIZE is a number. For TYPE in [doux], SIZE may also be C for\n\-
401sizeof(char), S for sizeof(short), I for sizeof(int) or L for\n\-
402sizeof(long). If TYPE is f, SIZE may also be F for sizeof(float), D\n\-
403for sizeof(double) or L for sizeof(long double).\n\-
404"), stdout);-
405 fputs (_("\-
406\n\-
407Adding a z suffix to any type displays printable characters at the end of\n\-
408each output line.\n\-
409"), stdout);-
410 fputs (_("\-
411\n\-
412\n\-
413BYTES is hex with 0x or 0X prefix, and may have a multiplier suffix:\n\-
414 b 512\n\-
415 KB 1000\n\-
416 K 1024\n\-
417 MB 1000*1000\n\-
418 M 1024*1024\n\-
419and so on for G, T, P, E, Z, Y.\n\-
420"), stdout);-
421 emit_ancillary_info (PROGRAM_NAME);-
422 }
executed 10 times by 1 test: end of block
Executed by:
  • od
10
423 exit (status);
executed 14 times by 1 test: exit (status);
Executed by:
  • od
14
424}-
425-
426/* Define the print functions. */-
427-
428#define PRINT_FIELDS(N, T, FMT_STRING, ACTION) \-
429static void \-
430N (size_t fields, size_t blank, void const *block, \-
431 char const *FMT_STRING, int width, int pad) \-
432{ \-
433 T const *p = block; \-
434 uintmax_t i; \-
435 int pad_remaining = pad; \-
436 for (i = fields; blank < i; i--) \-
437 { \-
438 int next_pad = pad * (i - 1) / fields; \-
439 int adjusted_width = pad_remaining - next_pad + width; \-
440 T x; \-
441 if (input_swap && sizeof (T) > 1) \-
442 { \-
443 size_t j; \-
444 union { \-
445 T x; \-
446 char b[sizeof (T)]; \-
447 } u; \-
448 for (j = 0; j < sizeof (T); j++) \-
449 u.b[j] = ((const char *) p)[sizeof (T) - 1 - j]; \-
450 x = u.x; \-
451 } \-
452 else \-
453 x = *p; \-
454 p++; \-
455 ACTION; \-
456 pad_remaining = next_pad; \-
457 } \-
458}-
459-
460#define PRINT_TYPE(N, T) \-
461 PRINT_FIELDS (N, T, fmt_string, xprintf (fmt_string, adjusted_width, x))-
462-
463#define PRINT_FLOATTYPE(N, T, FTOASTR, BUFSIZE) \-
464 PRINT_FIELDS (N, T, fmt_string _GL_UNUSED, \-
465 char buf[BUFSIZE]; \-
466 FTOASTR (buf, sizeof buf, 0, 0, x); \-
467 xprintf ("%*s", adjusted_width, buf))-
468-
469PRINT_TYPE (print_s_char, signed char)
executed 126 times by 1 test: end of block
Executed by:
  • od
never executed: u.b[j] = ((const char *) p)[sizeof (signed char) - 1 - j];
never executed: end of block
executed 2016 times by 1 test: x = *p;
Executed by:
  • od
executed 2016 times by 1 test: end of block
Executed by:
  • od
blank < iDescription
TRUEevaluated 2016 times by 1 test
Evaluated by:
  • od
FALSEevaluated 126 times by 1 test
Evaluated by:
  • od
j < sizeof (signed char)Description
TRUEnever evaluated
FALSEnever evaluated
input_swapDescription
TRUEnever evaluated
FALSEevaluated 2016 times by 1 test
Evaluated by:
  • od
sizeof (signed char) > 1Description
TRUEnever evaluated
FALSEnever evaluated
0-2016
470PRINT_TYPE (print_char, unsigned char)
executed 384 times by 1 test: end of block
Executed by:
  • od
never executed: u.b[j] = ((const char *) p)[sizeof (unsigned char) - 1 - j];
never executed: end of block
executed 6121 times by 1 test: x = *p;
Executed by:
  • od
executed 6121 times by 1 test: end of block
Executed by:
  • od
blank < iDescription
TRUEevaluated 6121 times by 1 test
Evaluated by:
  • od
FALSEevaluated 384 times by 1 test
Evaluated by:
  • od
j < sizeof (unsigned char)Description
TRUEnever evaluated
FALSEnever evaluated
input_swapDescription
TRUEevaluated 32 times by 1 test
Evaluated by:
  • od
FALSEevaluated 6089 times by 1 test
Evaluated by:
  • od
sizeof (unsigned char) > 1Description
TRUEnever evaluated
FALSEevaluated 32 times by 1 test
Evaluated by:
  • od
0-6121
471PRINT_TYPE (print_s_short, short int)
executed 126 times by 1 test: end of block
Executed by:
  • od
never executed: u.b[j] = ((const char *) p)[sizeof (short int) - 1 - j];
never executed: end of block
executed 1008 times by 1 test: x = *p;
Executed by:
  • od
executed 1008 times by 1 test: end of block
Executed by:
  • od
blank < iDescription
TRUEevaluated 1008 times by 1 test
Evaluated by:
  • od
FALSEevaluated 126 times by 1 test
Evaluated by:
  • od
j < sizeof (short int)Description
TRUEnever evaluated
FALSEnever evaluated
input_swapDescription
TRUEnever evaluated
FALSEevaluated 1008 times by 1 test
Evaluated by:
  • od
sizeof (short int) > 1Description
TRUEnever evaluated
FALSEnever evaluated
0-1008
472PRINT_TYPE (print_short, unsigned short int)
executed 406 times by 1 test: end of block
Executed by:
  • od
executed 32 times by 1 test: u.b[j] = ((const char *) p)[sizeof (unsigned short int) - 1 - j];
Executed by:
  • od
executed 16 times by 1 test: end of block
Executed by:
  • od
executed 3211 times by 1 test: x = *p;
Executed by:
  • od
executed 3227 times by 1 test: end of block
Executed by:
  • od
blank < iDescription
TRUEevaluated 3227 times by 1 test
Evaluated by:
  • od
FALSEevaluated 406 times by 1 test
Evaluated by:
  • od
j < sizeof (un...ned short int)Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • od
FALSEevaluated 16 times by 1 test
Evaluated by:
  • od
input_swapDescription
TRUEevaluated 16 times by 1 test
Evaluated by:
  • od
FALSEevaluated 3211 times by 1 test
Evaluated by:
  • od
sizeof (unsign...short int) > 1Description
TRUEevaluated 16 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-3227
473PRINT_TYPE (print_int, unsigned int)
executed 508 times by 1 test: end of block
Executed by:
  • od
executed 32 times by 1 test: u.b[j] = ((const char *) p)[sizeof (unsigned int) - 1 - j];
Executed by:
  • od
executed 8 times by 1 test: end of block
Executed by:
  • od
executed 2024 times by 1 test: x = *p;
Executed by:
  • od
executed 2032 times by 1 test: end of block
Executed by:
  • od
blank < iDescription
TRUEevaluated 2032 times by 1 test
Evaluated by:
  • od
FALSEevaluated 508 times by 1 test
Evaluated by:
  • od
j < sizeof (unsigned int)Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • od
FALSEevaluated 8 times by 1 test
Evaluated by:
  • od
input_swapDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • od
FALSEevaluated 2024 times by 1 test
Evaluated by:
  • od
sizeof (unsigned int) > 1Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-2032
474PRINT_TYPE (print_long, unsigned long int)
never executed: end of block
never executed: u.b[j] = ((const char *) p)[sizeof (unsigned long int) - 1 - j];
never executed: end of block
never executed: x = *p;
never executed: end of block
blank < iDescription
TRUEnever evaluated
FALSEnever evaluated
j < sizeof (unsigned long int)Description
TRUEnever evaluated
FALSEnever evaluated
input_swapDescription
TRUEnever evaluated
FALSEnever evaluated
sizeof (unsigned long int) > 1Description
TRUEnever evaluated
FALSEnever evaluated
0
475PRINT_TYPE (print_long_long, unsigned_long_long_int)
executed 509 times by 1 test: end of block
Executed by:
  • od
executed 32 times by 1 test: u.b[j] = ((const char *) p)[sizeof (unsigned_long_long_int) - 1 - j];
Executed by:
  • od
executed 4 times by 1 test: end of block
Executed by:
  • od
executed 1013 times by 1 test: x = *p;
Executed by:
  • od
executed 1017 times by 1 test: end of block
Executed by:
  • od
blank < iDescription
TRUEevaluated 1017 times by 1 test
Evaluated by:
  • od
FALSEevaluated 509 times by 1 test
Evaluated by:
  • od
j < sizeof (un...long_long_int)Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • od
FALSEevaluated 4 times by 1 test
Evaluated by:
  • od
input_swapDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • od
FALSEevaluated 1013 times by 1 test
Evaluated by:
  • od
sizeof (unsign..._long_int) > 1Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-1017
476-
477PRINT_FLOATTYPE (print_float, float, ftoastr, FLT_BUFSIZE_BOUND)
executed 131 times by 1 test: end of block
Executed by:
  • od
executed 32 times by 1 test: u.b[j] = ((const char *) p)[sizeof (float) - 1 - j];
Executed by:
  • od
executed 8 times by 1 test: end of block
Executed by:
  • od
executed 515 times by 1 test: x = *p;
Executed by:
  • od
executed 523 times by 1 test: end of block
Executed by:
  • od
blank < iDescription
TRUEevaluated 523 times by 1 test
Evaluated by:
  • od
FALSEevaluated 131 times by 1 test
Evaluated by:
  • od
j < sizeof (float)Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • od
FALSEevaluated 8 times by 1 test
Evaluated by:
  • od
input_swapDescription
TRUEevaluated 8 times by 1 test
Evaluated by:
  • od
FALSEevaluated 515 times by 1 test
Evaluated by:
  • od
sizeof (float) > 1Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-523
478PRINT_FLOATTYPE (print_double, double, dtoastr, DBL_BUFSIZE_BOUND)
executed 132 times by 1 test: end of block
Executed by:
  • od
executed 32 times by 1 test: u.b[j] = ((const char *) p)[sizeof (double) - 1 - j];
Executed by:
  • od
executed 4 times by 1 test: end of block
Executed by:
  • od
executed 259 times by 1 test: x = *p;
Executed by:
  • od
executed 263 times by 1 test: end of block
Executed by:
  • od
blank < iDescription
TRUEevaluated 263 times by 1 test
Evaluated by:
  • od
FALSEevaluated 132 times by 1 test
Evaluated by:
  • od
j < sizeof (double)Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • od
FALSEevaluated 4 times by 1 test
Evaluated by:
  • od
input_swapDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • od
FALSEevaluated 259 times by 1 test
Evaluated by:
  • od
sizeof (double) > 1Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-263
479PRINT_FLOATTYPE (print_long_double, long double, ldtoastr, LDBL_BUFSIZE_BOUND)
executed 134 times by 1 test: end of block
Executed by:
  • od
executed 32 times by 1 test: u.b[j] = ((const char *) p)[sizeof (long double) - 1 - j];
Executed by:
  • od
executed 2 times by 1 test: end of block
Executed by:
  • od
executed 132 times by 1 test: x = *p;
Executed by:
  • od
executed 134 times by 1 test: end of block
Executed by:
  • od
blank < iDescription
TRUEevaluated 134 times by 1 test
Evaluated by:
  • od
FALSEevaluated 134 times by 1 test
Evaluated by:
  • od
j < sizeof (long double)Description
TRUEevaluated 32 times by 1 test
Evaluated by:
  • od
FALSEevaluated 2 times by 1 test
Evaluated by:
  • od
input_swapDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEevaluated 132 times by 1 test
Evaluated by:
  • od
sizeof (long double) > 1Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-134
480-
481#undef PRINT_TYPE-
482#undef PRINT_FLOATTYPE-
483-
484static void-
485dump_hexl_mode_trailer (size_t n_bytes, const char *block)-
486{-
487 fputs (" >", stdout);-
488 for (size_t i = n_bytes; i > 0; i--)
i > 0Description
TRUEevaluated 42336 times by 1 test
Evaluated by:
  • od
FALSEevaluated 2646 times by 1 test
Evaluated by:
  • od
2646-42336
489 {-
490 unsigned char c = *block++;-
491 unsigned char c2 = (isprint (c) ? c : '.');
((*__ctype_b_l...int) _ISprint)Description
TRUEevaluated 25578 times by 1 test
Evaluated by:
  • od
FALSEevaluated 16758 times by 1 test
Evaluated by:
  • od
16758-25578
492 putchar (c2);-
493 }
executed 42336 times by 1 test: end of block
Executed by:
  • od
42336
494 putchar ('<');-
495}
executed 2646 times by 1 test: end of block
Executed by:
  • od
2646
496-
497static void-
498print_named_ascii (size_t fields, size_t blank, void const *block,-
499 const char *unused_fmt_string _GL_UNUSED,-
500 int width, int pad)-
501{-
502 unsigned char const *p = block;-
503 uintmax_t i;-
504 int pad_remaining = pad;-
505 for (i = fields; blank < i; i--)
blank < iDescription
TRUEevaluated 2017 times by 1 test
Evaluated by:
  • od
FALSEevaluated 127 times by 1 test
Evaluated by:
  • od
127-2017
506 {-
507 int next_pad = pad * (i - 1) / fields;-
508 int masked_c = *p++ & 0x7f;-
509 const char *s;-
510 char buf[2];-
511-
512 if (masked_c == 127)
masked_c == 127Description
TRUEnever evaluated
FALSEevaluated 2017 times by 1 test
Evaluated by:
  • od
0-2017
513 s = "del";
never executed: s = "del";
0
514 else if (masked_c <= 040)
masked_c <= 040Description
TRUEevaluated 798 times by 1 test
Evaluated by:
  • od
FALSEevaluated 1219 times by 1 test
Evaluated by:
  • od
798-1219
515 s = charname[masked_c];
executed 798 times by 1 test: s = charname[masked_c];
Executed by:
  • od
798
516 else-
517 {-
518 buf[0] = masked_c;-
519 buf[1] = 0;-
520 s = buf;-
521 }
executed 1219 times by 1 test: end of block
Executed by:
  • od
1219
522-
523 xprintf ("%*s", pad_remaining - next_pad + width, s);-
524 pad_remaining = next_pad;-
525 }
executed 2017 times by 1 test: end of block
Executed by:
  • od
2017
526}
executed 127 times by 1 test: end of block
Executed by:
  • od
127
527-
528static void-
529print_ascii (size_t fields, size_t blank, void const *block,-
530 const char *unused_fmt_string _GL_UNUSED, int width,-
531 int pad)-
532{-
533 unsigned char const *p = block;-
534 uintmax_t i;-
535 int pad_remaining = pad;-
536 for (i = fields; blank < i; i--)
blank < iDescription
TRUEevaluated 2025 times by 1 test
Evaluated by:
  • od
FALSEevaluated 131 times by 1 test
Evaluated by:
  • od
131-2025
537 {-
538 int next_pad = pad * (i - 1) / fields;-
539 unsigned char c = *p++;-
540 const char *s;-
541 char buf[4];-
542-
543 switch (c)-
544 {-
545 case '\0':
never executed: case '\0':
0
546 s = "\\0";-
547 break;
never executed: break;
0
548-
549 case '\a':
never executed: case '\a':
0
550 s = "\\a";-
551 break;
never executed: break;
0
552-
553 case '\b':
never executed: case '\b':
0
554 s = "\\b";-
555 break;
never executed: break;
0
556-
557 case '\f':
never executed: case '\f':
0
558 s = "\\f";-
559 break;
never executed: break;
0
560-
561 case '\n':
executed 798 times by 1 test: case '\n':
Executed by:
  • od
798
562 s = "\\n";-
563 break;
executed 798 times by 1 test: break;
Executed by:
  • od
798
564-
565 case '\r':
never executed: case '\r':
0
566 s = "\\r";-
567 break;
never executed: break;
0
568-
569 case '\t':
never executed: case '\t':
0
570 s = "\\t";-
571 break;
never executed: break;
0
572-
573 case '\v':
never executed: case '\v':
0
574 s = "\\v";-
575 break;
never executed: break;
0
576-
577 default:
executed 1227 times by 1 test: default:
Executed by:
  • od
1227
578 sprintf (buf, (isprint (c) ? "%c" : "%03o"), c);-
579 s = buf;-
580 }
executed 1227 times by 1 test: end of block
Executed by:
  • od
1227
581-
582 xprintf ("%*s", pad_remaining - next_pad + width, s);-
583 pad_remaining = next_pad;-
584 }
executed 2025 times by 1 test: end of block
Executed by:
  • od
2025
585}
executed 131 times by 1 test: end of block
Executed by:
  • od
131
586-
587/* Convert a null-terminated (possibly zero-length) string S to an-
588 unsigned long integer value. If S points to a non-digit set *P to S,-
589 *VAL to 0, and return true. Otherwise, accumulate the integer value of-
590 the string of digits. If the string of digits represents a value-
591 larger than ULONG_MAX, don't modify *VAL or *P and return false.-
592 Otherwise, advance *P to the first non-digit after S, set *VAL to-
593 the result of the conversion and return true. */-
594-
595static bool-
596simple_strtoul (const char *s, const char **p, unsigned long int *val)-
597{-
598 unsigned long int sum;-
599-
600 sum = 0;-
601 while (ISDIGIT (*s))
((unsigned int...s) - '0' <= 9)Description
TRUEevaluated 60 times by 1 test
Evaluated by:
  • od
FALSEevaluated 52 times by 1 test
Evaluated by:
  • od
52-60
602 {-
603 int c = *s++ - '0';-
604 if (sum > (ULONG_MAX - c) / 10)
sum > ( (0x7ff...1UL) - c) / 10Description
TRUEnever evaluated
FALSEevaluated 60 times by 1 test
Evaluated by:
  • od
0-60
605 return false;
never executed: return 0 ;
0
606 sum = sum * 10 + c;-
607 }
executed 60 times by 1 test: end of block
Executed by:
  • od
60
608 *p = s;-
609 *val = sum;-
610 return true;
executed 52 times by 1 test: return 1 ;
Executed by:
  • od
52
611}-
612-
613/* If S points to a single valid modern od format string, put-
614 a description of that format in *TSPEC, make *NEXT point at the-
615 character following the just-decoded format (if *NEXT is non-NULL),-
616 and return true. If S is not valid, don't modify *NEXT or *TSPEC,-
617 give a diagnostic, and return false. For example, if S were-
618 "d4afL" *NEXT would be set to "afL" and *TSPEC would be-
619 {-
620 fmt = SIGNED_DECIMAL;-
621 size = INT or LONG; (whichever integral_type_size[4] resolves to)-
622 print_function = print_int; (assuming size == INT)-
623 field_width = 11;-
624 fmt_string = "%*d";-
625 }-
626 pad_width is determined later, but is at least as large as the-
627 number of fields printed per row.-
628 S_ORIG is solely for reporting errors. It should be the full format-
629 string argument.-
630 */-
631-
632static bool-
633decode_one_format (const char *s_orig, const char *s, const char **next,-
634 struct tspec *tspec)-
635{-
636 enum size_spec size_spec;-
637 unsigned long int size;-
638 enum output_format fmt;-
639 void (*print_function) (size_t, size_t, void const *, char const *,-
640 int, int);-
641 const char *p;-
642 char c;-
643 int field_width;-
644-
645 assert (tspec != NULL);-
646-
647 switch (*s)-
648 {-
649 case 'd':
executed 168 times by 1 test: case 'd':
Executed by:
  • od
168
650 case 'o':
executed 178 times by 1 test: case 'o':
Executed by:
  • od
178
651 case 'u':
executed 168 times by 1 test: case 'u':
Executed by:
  • od
168
652 case 'x':
executed 198 times by 1 test: case 'x':
Executed by:
  • od
198
653 c = *s;-
654 ++s;-
655 switch (*s)-
656 {-
657 case 'C':
executed 168 times by 1 test: case 'C':
Executed by:
  • od
168
658 ++s;-
659 size = sizeof (char);-
660 break;
executed 168 times by 1 test: break;
Executed by:
  • od
168
661-
662 case 'S':
executed 178 times by 1 test: case 'S':
Executed by:
  • od
178
663 ++s;-
664 size = sizeof (short int);-
665 break;
executed 178 times by 1 test: break;
Executed by:
  • od
178
666-
667 case 'I':
executed 168 times by 1 test: case 'I':
Executed by:
  • od
168
668 ++s;-
669 size = sizeof (int);-
670 break;
executed 168 times by 1 test: break;
Executed by:
  • od
168
671-
672 case 'L':
executed 168 times by 1 test: case 'L':
Executed by:
  • od
168
673 ++s;-
674 size = sizeof (long int);-
675 break;
executed 168 times by 1 test: break;
Executed by:
  • od
168
676-
677 default:
executed 30 times by 1 test: default:
Executed by:
  • od
30
678 if (! simple_strtoul (s, &p, &size))
! simple_strto...(s, &p, &size)Description
TRUEnever evaluated
FALSEevaluated 30 times by 1 test
Evaluated by:
  • od
0-30
679 {-
680 /* The integer at P in S would overflow an unsigned long int.-
681 A digit string that long is sufficiently odd looking-
682 that the following diagnostic is sufficient. */-
683 error (0, 0, _("invalid type string %s"), quote (s_orig));-
684 return false;
never executed: return 0 ;
0
685 }-
686 if (p == s)
p == sDescription
TRUEnever evaluated
FALSEevaluated 30 times by 1 test
Evaluated by:
  • od
0-30
687 size = sizeof (int);
never executed: size = sizeof (int);
0
688 else-
689 {-
690 if (MAX_INTEGRAL_TYPE_SIZE < size
sizeof (unsign...ng_int) < sizeDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEevaluated 28 times by 1 test
Evaluated by:
  • od
2-28
691 || integral_type_size[size] == NO_SIZE)
integral_type_...ze] == NO_SIZEDescription
TRUEnever evaluated
FALSEevaluated 28 times by 1 test
Evaluated by:
  • od
0-28
692 {-
693 error (0, 0, _("invalid type string %s;\nthis system"-
694 " doesn't provide a %lu-byte integral type"),-
695 quote (s_orig), size);-
696 return false;
executed 2 times by 1 test: return 0 ;
Executed by:
  • od
2
697 }-
698 s = p;-
699 }
executed 28 times by 1 test: end of block
Executed by:
  • od
28
700 break;
executed 28 times by 1 test: break;
Executed by:
  • od
28
701 }-
702-
703#define ISPEC_TO_FORMAT(Spec, Min_format, Long_format, Max_format) \-
704 ((Spec) == LONG_LONG ? (Max_format) \-
705 : ((Spec) == LONG ? (Long_format) \-
706 : (Min_format))) \-
707-
708 size_spec = integral_type_size[size];-
709-
710 switch (c)-
711 {-
712 case 'd':
executed 168 times by 1 test: case 'd':
Executed by:
  • od
168
713 fmt = SIGNED_DECIMAL;-
714 field_width = bytes_to_signed_dec_digits[size];-
715 sprintf (tspec->fmt_string, "%%*%s",-
716 ISPEC_TO_FORMAT (size_spec, "d", "ld", PRIdMAX));-
717 break;
executed 168 times by 1 test: break;
Executed by:
  • od
168
718-
719 case 'o':
executed 178 times by 1 test: case 'o':
Executed by:
  • od
178
720 fmt = OCTAL;-
721 sprintf (tspec->fmt_string, "%%*.%d%s",-
722 (field_width = bytes_to_oct_digits[size]),-
723 ISPEC_TO_FORMAT (size_spec, "o", "lo", PRIoMAX));-
724 break;
executed 178 times by 1 test: break;
Executed by:
  • od
178
725-
726 case 'u':
executed 168 times by 1 test: case 'u':
Executed by:
  • od
168
727 fmt = UNSIGNED_DECIMAL;-
728 field_width = bytes_to_unsigned_dec_digits[size];-
729 sprintf (tspec->fmt_string, "%%*%s",-
730 ISPEC_TO_FORMAT (size_spec, "u", "lu", PRIuMAX));-
731 break;
executed 168 times by 1 test: break;
Executed by:
  • od
168
732-
733 case 'x':
executed 196 times by 1 test: case 'x':
Executed by:
  • od
196
734 fmt = HEXADECIMAL;-
735 sprintf (tspec->fmt_string, "%%*.%d%s",-
736 (field_width = bytes_to_hex_digits[size]),-
737 ISPEC_TO_FORMAT (size_spec, "x", "lx", PRIxMAX));-
738 break;
executed 196 times by 1 test: break;
Executed by:
  • od
196
739-
740 default:
never executed: default:
0
741 abort ();
never executed: abort ();
0
742 }-
743-
744 assert (strlen (tspec->fmt_string) < FMT_BYTES_ALLOCATED);-
745-
746 switch (size_spec)-
747 {-
748 case CHAR:
executed 176 times by 1 test: case CHAR:
Executed by:
  • od
176
749 print_function = (fmt == SIGNED_DECIMAL
fmt == SIGNED_DECIMALDescription
TRUEevaluated 42 times by 1 test
Evaluated by:
  • od
FALSEevaluated 134 times by 1 test
Evaluated by:
  • od
42-134
750 ? print_s_char-
751 : print_char);-
752 break;
executed 176 times by 1 test: break;
Executed by:
  • od
176
753-
754 case SHORT:
executed 184 times by 1 test: case SHORT:
Executed by:
  • od
184
755 print_function = (fmt == SIGNED_DECIMAL
fmt == SIGNED_DECIMALDescription
TRUEevaluated 42 times by 1 test
Evaluated by:
  • od
FALSEevaluated 142 times by 1 test
Evaluated by:
  • od
42-142
756 ? print_s_short-
757 : print_short);-
758 break;
executed 184 times by 1 test: break;
Executed by:
  • od
184
759-
760 case INT:
executed 174 times by 1 test: case INT:
Executed by:
  • od
174
761 print_function = print_int;-
762 break;
executed 174 times by 1 test: break;
Executed by:
  • od
174
763-
764 case LONG:
never executed: case LONG:
0
765 print_function = print_long;-
766 break;
never executed: break;
0
767-
768 case LONG_LONG:
executed 176 times by 1 test: case LONG_LONG:
Executed by:
  • od
176
769 print_function = print_long_long;-
770 break;
executed 176 times by 1 test: break;
Executed by:
  • od
176
771-
772 default:
never executed: default:
0
773 abort ();
never executed: abort ();
0
774 }-
775 break;
executed 710 times by 1 test: break;
Executed by:
  • od
710
776-
777 case 'f':
executed 152 times by 1 test: case 'f':
Executed by:
  • od
152
778 fmt = FLOATING_POINT;-
779 ++s;-
780 switch (*s)-
781 {-
782 case 'F':
executed 43 times by 1 test: case 'F':
Executed by:
  • od
43
783 ++s;-
784 size = sizeof (float);-
785 break;
executed 43 times by 1 test: break;
Executed by:
  • od
43
786-
787 case 'D':
executed 43 times by 1 test: case 'D':
Executed by:
  • od
43
788 ++s;-
789 size = sizeof (double);-
790 break;
executed 43 times by 1 test: break;
Executed by:
  • od
43
791-
792 case 'L':
executed 44 times by 1 test: case 'L':
Executed by:
  • od
44
793 ++s;-
794 size = sizeof (long double);-
795 break;
executed 44 times by 1 test: break;
Executed by:
  • od
44
796-
797 default:
executed 22 times by 1 test: default:
Executed by:
  • od
22
798 if (! simple_strtoul (s, &p, &size))
! simple_strto...(s, &p, &size)Description
TRUEnever evaluated
FALSEevaluated 22 times by 1 test
Evaluated by:
  • od
0-22
799 {-
800 /* The integer at P in S would overflow an unsigned long int.-
801 A digit string that long is sufficiently odd looking-
802 that the following diagnostic is sufficient. */-
803 error (0, 0, _("invalid type string %s"), quote (s_orig));-
804 return false;
never executed: return 0 ;
0
805 }-
806 if (p == s)
p == sDescription
TRUEnever evaluated
FALSEevaluated 22 times by 1 test
Evaluated by:
  • od
0-22
807 size = sizeof (double);
never executed: size = sizeof (double);
0
808 else-
809 {-
810 if (size > MAX_FP_TYPE_SIZE
size > sizeof (long double)Description
TRUEnever evaluated
FALSEevaluated 22 times by 1 test
Evaluated by:
  • od
0-22
811 || fp_type_size[size] == NO_SIZE)
fp_type_size[size] == NO_SIZEDescription
TRUEevaluated 4 times by 1 test
Evaluated by:
  • od
FALSEevaluated 18 times by 1 test
Evaluated by:
  • od
4-18
812 {-
813 error (0, 0,-
814 _("invalid type string %s;\n"-
815 "this system doesn't provide a %lu-byte"-
816 " floating point type"),-
817 quote (s_orig), size);-
818 return false;
executed 4 times by 1 test: return 0 ;
Executed by:
  • od
4
819 }-
820 s = p;-
821 }
executed 18 times by 1 test: end of block
Executed by:
  • od
18
822 break;
executed 18 times by 1 test: break;
Executed by:
  • od
18
823 }-
824 size_spec = fp_type_size[size];-
825-
826 {-
827 struct lconv const *locale = localeconv ();-
828 size_t decimal_point_len =-
829 (locale->decimal_point[0] ? strlen (locale->decimal_point) : 1);
locale->decimal_point[0]Description
TRUEevaluated 148 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-148
830-
831 switch (size_spec)-
832 {-
833 case FLOAT_SINGLE:
executed 49 times by 1 test: case FLOAT_SINGLE:
Executed by:
  • od
49
834 print_function = print_float;-
835 field_width = FLT_STRLEN_BOUND_L (decimal_point_len);
-100 < ((-37))Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
(38) < 100Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
-1000 < ((-37))Description
TRUEnever evaluated
FALSEnever evaluated
(38) < 1000Description
TRUEnever evaluated
FALSEnever evaluated
-10000 < ((-37))Description
TRUEnever evaluated
FALSEnever evaluated
(38) < 10000Description
TRUEnever evaluated
FALSEnever evaluated
-100000 < ((-37))Description
TRUEnever evaluated
FALSEnever evaluated
(38) < 100000Description
TRUEnever evaluated
FALSEnever evaluated
-1000000 < ((-37))Description
TRUEnever evaluated
FALSEnever evaluated
(38) < 1000000Description
TRUEnever evaluated
FALSEnever evaluated
0-49
836 break;
executed 49 times by 1 test: break;
Executed by:
  • od
49
837-
838 case FLOAT_DOUBLE:
executed 49 times by 1 test: case FLOAT_DOUBLE:
Executed by:
  • od
49
839 print_function = print_double;-
840 field_width = DBL_STRLEN_BOUND_L (decimal_point_len);
-100 < ((-307))Description
TRUEnever evaluated
FALSEevaluated 49 times by 1 test
Evaluated by:
  • od
(308) < 100Description
TRUEnever evaluated
FALSEnever evaluated
-1000 < ((-307))Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
(308) < 1000Description
TRUEevaluated 49 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
-10000 < ((-307))Description
TRUEnever evaluated
FALSEnever evaluated
(308) < 10000Description
TRUEnever evaluated
FALSEnever evaluated
-100000 < ((-307))Description
TRUEnever evaluated
FALSEnever evaluated
(308) < 100000Description
TRUEnever evaluated
FALSEnever evaluated
-1000000 < ((-307))Description
TRUEnever evaluated
FALSEnever evaluated
(308) < 1000000Description
TRUEnever evaluated
FALSEnever evaluated
0-49
841 break;
executed 49 times by 1 test: break;
Executed by:
  • od
49
842-
843 case FLOAT_LONG_DOUBLE:
executed 50 times by 1 test: case FLOAT_LONG_DOUBLE:
Executed by:
  • od
50
844 print_function = print_long_double;-
845 field_width = LDBL_STRLEN_BOUND_L (decimal_point_len);
-100 < ((-4931))Description
TRUEnever evaluated
FALSEevaluated 50 times by 1 test
Evaluated by:
  • od
(4932) < 100Description
TRUEnever evaluated
FALSEnever evaluated
-1000 < ((-4931))Description
TRUEnever evaluated
FALSEevaluated 50 times by 1 test
Evaluated by:
  • od
(4932) < 1000Description
TRUEnever evaluated
FALSEnever evaluated
-10000 < ((-4931))Description
TRUEevaluated 50 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
(4932) < 10000Description
TRUEevaluated 50 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
-100000 < ((-4931))Description
TRUEnever evaluated
FALSEnever evaluated
(4932) < 100000Description
TRUEnever evaluated
FALSEnever evaluated
-1000000 < ((-4931))Description
TRUEnever evaluated
FALSEnever evaluated
(4932) < 1000000Description
TRUEnever evaluated
FALSEnever evaluated
0-50
846 break;
executed 50 times by 1 test: break;
Executed by:
  • od
50
847-
848 default:
never executed: default:
0
849 abort ();
never executed: abort ();
0
850 }-
851-
852 break;
executed 148 times by 1 test: break;
Executed by:
  • od
148
853 }-
854-
855 case 'a':
executed 43 times by 1 test: case 'a':
Executed by:
  • od
43
856 ++s;-
857 fmt = NAMED_CHARACTER;-
858 size_spec = CHAR;-
859 print_function = print_named_ascii;-
860 field_width = 3;-
861 break;
executed 43 times by 1 test: break;
Executed by:
  • od
43
862-
863 case 'c':
executed 50 times by 1 test: case 'c':
Executed by:
  • od
50
864 ++s;-
865 fmt = CHARACTER;-
866 size_spec = CHAR;-
867 print_function = print_ascii;-
868 field_width = 3;-
869 break;
executed 50 times by 1 test: break;
Executed by:
  • od
50
870-
871 default:
executed 2 times by 1 test: default:
Executed by:
  • od
2
872 error (0, 0, _("invalid character '%c' in type string %s"),-
873 *s, quote (s_orig));-
874 return false;
executed 2 times by 1 test: return 0 ;
Executed by:
  • od
2
875 }-
876-
877 tspec->size = size_spec;-
878 tspec->fmt = fmt;-
879 tspec->print_function = print_function;-
880-
881 tspec->field_width = field_width;-
882 tspec->hexl_mode_trailer = (*s == 'z');-
883 if (tspec->hexl_mode_trailer)
tspec->hexl_mode_trailerDescription
TRUEevaluated 882 times by 1 test
Evaluated by:
  • od
FALSEevaluated 69 times by 1 test
Evaluated by:
  • od
69-882
884 s++;
executed 882 times by 1 test: s++;
Executed by:
  • od
882
885-
886 if (next != NULL)
next != ((void *)0)Description
TRUEevaluated 951 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-951
887 *next = s;
executed 951 times by 1 test: *next = s;
Executed by:
  • od
951
888-
889 return true;
executed 951 times by 1 test: return 1 ;
Executed by:
  • od
951
890}-
891-
892/* Given a list of one or more input filenames FILE_LIST, set the global-
893 file pointer IN_STREAM and the global string INPUT_FILENAME to the-
894 first one that can be successfully opened. Modify FILE_LIST to-
895 reference the next filename in the list. A file name of "-" is-
896 interpreted as standard input. If any file open fails, give an error-
897 message and return false. */-
898-
899static bool-
900open_next_file (void)-
901{-
902 bool ok = true;-
903-
904 do-
905 {-
906 input_filename = *file_list;-
907 if (input_filename == NULL)
input_filename == ((void *)0)Description
TRUEevaluated 508 times by 1 test
Evaluated by:
  • od
FALSEevaluated 523 times by 1 test
Evaluated by:
  • od
508-523
908 return ok;
executed 508 times by 1 test: return ok;
Executed by:
  • od
508
909 ++file_list;-
910-
911 if (STREQ (input_filename, "-"))
never executed: __result = (((const unsigned char *) (const char *) ( input_filename ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "-" ))[3] - __s2[3]);
never executed: end of block
executed 36 times by 1 test: end of block
Executed by:
  • od
( __extension_...)))); }) == 0)Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • od
FALSEevaluated 487 times by 1 test
Evaluated by:
  • od
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEevaluated 523 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
__result == 0Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • od
FALSEevaluated 487 times by 1 test
Evaluated by:
  • od
__s2_len > 1Description
TRUEnever evaluated
FALSEevaluated 36 times by 1 test
Evaluated by:
  • od
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
0-523
912 {-
913 input_filename = _("standard input");-
914 in_stream = stdin;-
915 have_read_stdin = true;-
916 xset_binary_mode (STDIN_FILENO, O_BINARY);-
917 }
executed 36 times by 1 test: end of block
Executed by:
  • od
36
918 else-
919 {-
920 in_stream = fopen (input_filename, (O_BINARY ? "rb" : "r"));-
921 if (in_stream == NULL)
in_stream == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 487 times by 1 test
Evaluated by:
  • od
0-487
922 {-
923 error (0, errno, "%s", quotef (input_filename));-
924 ok = false;-
925 }
never executed: end of block
0
926 }
executed 487 times by 1 test: end of block
Executed by:
  • od
487
927 }-
928 while (in_stream == NULL);
in_stream == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 523 times by 1 test
Evaluated by:
  • od
0-523
929-
930 if (limit_bytes_to_format && !flag_dump_strings)
limit_bytes_to_formatDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEevaluated 521 times by 1 test
Evaluated by:
  • od
!flag_dump_stringsDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-521
931 setvbuf (in_stream, NULL, _IONBF, 0);
executed 2 times by 1 test: setvbuf (in_stream, ((void *)0) , 2 , 0);
Executed by:
  • od
2
932-
933 return ok;
executed 523 times by 1 test: return ok;
Executed by:
  • od
523
934}-
935-
936/* Test whether there have been errors on in_stream, and close it if-
937 it is not standard input. Return false if there has been an error-
938 on in_stream or stdout; return true otherwise. This function will-
939 report more than one error only if both a read and a write error-
940 have occurred. IN_ERRNO, if nonzero, is the error number-
941 corresponding to the most recent action for IN_STREAM. */-
942-
943static bool-
944check_and_close (int in_errno)-
945{-
946 bool ok = true;-
947-
948 if (in_stream != NULL)
in_stream != ((void *)0)Description
TRUEevaluated 523 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-523
949 {-
950 if (ferror (in_stream))
ferror_unlocked (in_stream)Description
TRUEnever evaluated
FALSEevaluated 523 times by 1 test
Evaluated by:
  • od
0-523
951 {-
952 error (0, in_errno, _("%s: read error"), quotef (input_filename));-
953 if (! STREQ (file_list[-1], "-"))
never executed: __result = (((const unsigned char *) (const char *) ( file_list[-1] ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "-" ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
! ( __extensio...)))); }) == 0)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
954 fclose (in_stream);
never executed: rpl_fclose (in_stream);
0
955 ok = false;-
956 }
never executed: end of block
0
957 else if (! STREQ (file_list[-1], "-") && fclose (in_stream) != 0)
never executed: __result = (((const unsigned char *) (const char *) ( file_list[-1] ))[3] - __s2[3]);
never executed: end of block
never executed: end of block
never executed: __result = (((const unsigned char *) (const char *) ( "-" ))[3] - __s2[3]);
never executed: end of block
executed 36 times by 1 test: end of block
Executed by:
  • od
! ( __extensio...)))); }) == 0)Description
TRUEevaluated 487 times by 1 test
Evaluated by:
  • od
FALSEevaluated 36 times by 1 test
Evaluated by:
  • od
__s1_len > 0Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 1Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s1_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 0Description
TRUEevaluated 523 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
__result == 0Description
TRUEevaluated 36 times by 1 test
Evaluated by:
  • od
FALSEevaluated 487 times by 1 test
Evaluated by:
  • od
__s2_len > 1Description
TRUEnever evaluated
FALSEevaluated 36 times by 1 test
Evaluated by:
  • od
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
__s2_len > 2Description
TRUEnever evaluated
FALSEnever evaluated
__result == 0Description
TRUEnever evaluated
FALSEnever evaluated
rpl_fclose (in_stream) != 0Description
TRUEnever evaluated
FALSEevaluated 487 times by 1 test
Evaluated by:
  • od
0-523
958 {-
959 error (0, errno, "%s", quotef (input_filename));-
960 ok = false;-
961 }
never executed: end of block
0
962-
963 in_stream = NULL;-
964 }
executed 523 times by 1 test: end of block
Executed by:
  • od
523
965-
966 if (ferror (stdout))
ferror_unlocked ( stdout )Description
TRUEnever evaluated
FALSEevaluated 523 times by 1 test
Evaluated by:
  • od
0-523
967 {-
968 error (0, 0, _("write error"));-
969 ok = false;-
970 }
never executed: end of block
0
971-
972 return ok;
executed 523 times by 1 test: return ok;
Executed by:
  • od
523
973}-
974-
975/* Decode the modern od format string S. Append the decoded-
976 representation to the global array SPEC, reallocating SPEC if-
977 necessary. Return true if S is valid. */-
978-
979static bool-
980decode_format_string (const char *s)-
981{-
982 const char *s_orig = s;-
983 assert (s != NULL);-
984-
985 while (*s != '\0')
*s != '\0'Description
TRUEevaluated 959 times by 1 test
Evaluated by:
  • od
FALSEevaluated 951 times by 1 test
Evaluated by:
  • od
951-959
986 {-
987 const char *next;-
988-
989 if (n_specs_allocated <= n_specs)
n_specs_allocated <= n_specsDescription
TRUEevaluated 518 times by 1 test
Evaluated by:
  • od
FALSEevaluated 441 times by 1 test
Evaluated by:
  • od
441-518
990 spec = X2NREALLOC (spec, &n_specs_allocated);
executed 518 times by 1 test: spec = ((void) (!!sizeof (struct { _Static_assert (sizeof *(spec) != 1, "verify_true (" "sizeof *(spec) != 1" ")"); int _gl_dummy; })), x2nrealloc (spec, &n_specs_allocated, sizeof *(spec)));
Executed by:
  • od
518
991-
992 if (! decode_one_format (s_orig, s, &next, &spec[n_specs]))
! decode_one_f...spec[n_specs])Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • od
FALSEevaluated 951 times by 1 test
Evaluated by:
  • od
8-951
993 return false;
executed 8 times by 1 test: return 0 ;
Executed by:
  • od
8
994-
995 assert (s != next);-
996 s = next;-
997 ++n_specs;-
998 }
executed 951 times by 1 test: end of block
Executed by:
  • od
951
999-
1000 return true;
executed 951 times by 1 test: return 1 ;
Executed by:
  • od
951
1001}-
1002-
1003/* Given a list of one or more input filenames FILE_LIST, set the global-
1004 file pointer IN_STREAM to position N_SKIP in the concatenation of-
1005 those files. If any file operation fails or if there are fewer than-
1006 N_SKIP bytes in the combined input, give an error message and return-
1007 false. When possible, use seek rather than read operations to-
1008 advance IN_STREAM. */-
1009-
1010static bool-
1011skip (uintmax_t n_skip)-
1012{-
1013 bool ok = true;-
1014 int in_errno = 0;-
1015-
1016 if (n_skip == 0)
n_skip == 0Description
TRUEevaluated 499 times by 1 test
Evaluated by:
  • od
FALSEevaluated 11 times by 1 test
Evaluated by:
  • od
11-499
1017 return true;
executed 499 times by 1 test: return 1 ;
Executed by:
  • od
499
1018-
1019 while (in_stream != NULL) /* EOF. */
in_stream != ((void *)0)Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • od
FALSEevaluated 4 times by 1 test
Evaluated by:
  • od
4-20
1020 {-
1021 struct stat file_stats;-
1022-
1023 /* First try seeking. For large offsets, this extra work is-
1024 worthwhile. If the offset is below some threshold it may be-
1025 more efficient to move the pointer by reading. There are two-
1026 issues when trying to seek:-
1027 - the file must be seekable.-
1028 - before seeking to the specified position, make sure-
1029 that the new position is in the current file.-
1030 Try to do that by getting file's size using fstat.-
1031 But that will work only for regular files. */-
1032-
1033 if (fstat (fileno (in_stream), &file_stats) == 0)
fstat (fileno ...le_stats) == 0Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-20
1034 {-
1035 /* The st_size field is valid for regular files.-
1036 If the number of bytes left to skip is larger than-
1037 the size of the current file, we can decrement n_skip-
1038 and go on to the next file. Skip this optimization also-
1039 when st_size is no greater than the block size, because-
1040 some kernels report nonsense small file sizes for-
1041 proc-like file systems. */-
1042 if (usable_st_size (&file_stats)
usable_st_size (&file_stats)Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-20
1043 && ST_BLKSIZE (file_stats) < file_stats.st_size)
((0 < (file_st..._stats.st_sizeDescription
TRUEnever evaluated
FALSEevaluated 20 times by 1 test
Evaluated by:
  • od
0 < (file_stats).st_blksizeDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
(file_stats).s..._t)-1) / 8 + 1Description
TRUEevaluated 20 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-20
1044 {-
1045 if ((uintmax_t) file_stats.st_size < n_skip)
(uintmax_t) fi..._size < n_skipDescription
TRUEnever evaluated
FALSEnever evaluated
0
1046 n_skip -= file_stats.st_size;
never executed: n_skip -= file_stats.st_size;
0
1047 else-
1048 {-
1049 if (fseeko (in_stream, n_skip, SEEK_CUR) != 0)
rpl_fseeko (in...skip, 1 ) != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1050 {-
1051 in_errno = errno;-
1052 ok = false;-
1053 }
never executed: end of block
0
1054 n_skip = 0;-
1055 }
never executed: end of block
0
1056 }-
1057-
1058 /* If it's not a regular file with nonnegative size,-
1059 or if it's so small that it might be in a proc-like file system,-
1060 position the file pointer by reading. */-
1061-
1062 else-
1063 {-
1064 char buf[BUFSIZ];-
1065 size_t n_bytes_read, n_bytes_to_read = BUFSIZ;-
1066-
1067 while (0 < n_skip)
0 < n_skipDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • od
FALSEevaluated 7 times by 1 test
Evaluated by:
  • od
7-20
1068 {-
1069 if (n_skip < n_bytes_to_read)
n_skip < n_bytes_to_readDescription
TRUEevaluated 20 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-20
1070 n_bytes_to_read = n_skip;
executed 20 times by 1 test: n_bytes_to_read = n_skip;
Executed by:
  • od
20
1071 n_bytes_read = fread (buf, 1, n_bytes_to_read, in_stream);-
1072 n_skip -= n_bytes_read;-
1073 if (n_bytes_read != n_bytes_to_read)
n_bytes_read !..._bytes_to_readDescription
TRUEevaluated 13 times by 1 test
Evaluated by:
  • od
FALSEevaluated 7 times by 1 test
Evaluated by:
  • od
7-13
1074 {-
1075 if (ferror (in_stream))
ferror_unlocked (in_stream)Description
TRUEnever evaluated
FALSEevaluated 13 times by 1 test
Evaluated by:
  • od
0-13
1076 {-
1077 in_errno = errno;-
1078 ok = false;-
1079 n_skip = 0;-
1080 break;
never executed: break;
0
1081 }-
1082 if (feof (in_stream))
feof_unlocked (in_stream)Description
TRUEevaluated 13 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-13
1083 break;
executed 13 times by 1 test: break;
Executed by:
  • od
13
1084 }
never executed: end of block
0
1085 }
executed 7 times by 1 test: end of block
Executed by:
  • od
7
1086 }
executed 20 times by 1 test: end of block
Executed by:
  • od
20
1087-
1088 if (n_skip == 0)
n_skip == 0Description
TRUEevaluated 7 times by 1 test
Evaluated by:
  • od
FALSEevaluated 13 times by 1 test
Evaluated by:
  • od
7-13
1089 break;
executed 7 times by 1 test: break;
Executed by:
  • od
7
1090 }
executed 13 times by 1 test: end of block
Executed by:
  • od
13
1091-
1092 else /* cannot fstat() file */-
1093 {-
1094 error (0, errno, "%s", quotef (input_filename));-
1095 ok = false;-
1096 }
never executed: end of block
0
1097-
1098 ok &= check_and_close (in_errno);-
1099-
1100 ok &= open_next_file ();-
1101 }
executed 13 times by 1 test: end of block
Executed by:
  • od
13
1102-
1103 if (n_skip != 0)
n_skip != 0Description
TRUEevaluated 4 times by 1 test
Evaluated by:
  • od
FALSEevaluated 7 times by 1 test
Evaluated by:
  • od
4-7
1104 die (EXIT_FAILURE, 0, _("cannot skip past end of combined input"));
executed 4 times by 1 test: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"cannot skip past end of combined input\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "cannot skip past end of combined input" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "cannot skip past end of combined input" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
Executed by:
  • od
4
1105-
1106 return ok;
executed 7 times by 1 test: return ok;
Executed by:
  • od
7
1107}-
1108-
1109static void-
1110format_address_none (uintmax_t address _GL_UNUSED,-
1111 char c _GL_UNUSED)-
1112{-
1113}-
1114-
1115static void-
1116format_address_std (uintmax_t address, char c)-
1117{-
1118 char buf[MAX_ADDRESS_LENGTH + 2];-
1119 char *p = buf + sizeof buf;-
1120 char const *pbound;-
1121-
1122 *--p = '\0';-
1123 *--p = c;-
1124 pbound = p - address_pad_len;-
1125-
1126 /* Use a special case of the code for each base. This is measurably-
1127 faster than generic code. */-
1128 switch (address_base)-
1129 {-
1130 case 8:
executed 30 times by 1 test: case 8:
Executed by:
  • od
30
1131 do-
1132 *--p = '0' + (address & 7);
executed 38 times by 1 test: *--p = '0' + (address & 7);
Executed by:
  • od
38
1133 while ((address >>= 3) != 0);
(address >>= 3) != 0Description
TRUEevaluated 8 times by 1 test
Evaluated by:
  • od
FALSEevaluated 30 times by 1 test
Evaluated by:
  • od
8-30
1134 break;
executed 30 times by 1 test: break;
Executed by:
  • od
30
1135-
1136 case 10:
never executed: case 10:
0
1137 do-
1138 *--p = '0' + (address % 10);
never executed: *--p = '0' + (address % 10);
0
1139 while ((address /= 10) != 0);
(address /= 10) != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1140 break;
never executed: break;
0
1141-
1142 case 16:
never executed: case 16:
0
1143 do-
1144 *--p = "0123456789abcdef"[address & 15];
never executed: *--p = "0123456789abcdef"[address & 15];
0
1145 while ((address >>= 4) != 0);
(address >>= 4) != 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1146 break;
never executed: break;
0
1147 }-
1148-
1149 while (pbound < p)
pbound < pDescription
TRUEevaluated 172 times by 1 test
Evaluated by:
  • od
FALSEevaluated 30 times by 1 test
Evaluated by:
  • od
30-172
1150 *--p = '0';
executed 172 times by 1 test: *--p = '0';
Executed by:
  • od
172
1151-
1152 fputs (p, stdout);-
1153}
executed 30 times by 1 test: end of block
Executed by:
  • od
30
1154-
1155static void-
1156format_address_paren (uintmax_t address, char c)-
1157{-
1158 putchar ('(');-
1159 format_address_std (address, ')');-
1160 if (c)
cDescription
TRUEnever evaluated
FALSEnever evaluated
0
1161 putchar (c);
never executed: putchar_unlocked (c);
0
1162}
never executed: end of block
0
1163-
1164static void-
1165format_address_label (uintmax_t address, char c)-
1166{-
1167 format_address_std (address, ' ');-
1168 format_address_paren (address + pseudo_offset, c);-
1169}
never executed: end of block
0
1170-
1171/* Write N_BYTES bytes from CURR_BLOCK to standard output once for each-
1172 of the N_SPEC format specs. CURRENT_OFFSET is the byte address of-
1173 CURR_BLOCK in the concatenation of input files, and it is printed-
1174 (optionally) only before the output line associated with the first-
1175 format spec. When duplicate blocks are being abbreviated, the output-
1176 for a sequence of identical input blocks is the output for the first-
1177 block followed by an asterisk alone on a line. It is valid to compare-
1178 the blocks PREV_BLOCK and CURR_BLOCK only when N_BYTES == BYTES_PER_BLOCK.-
1179 That condition may be false only for the last input block. */-
1180-
1181static void-
1182write_block (uintmax_t current_offset, size_t n_bytes,-
1183 const char *prev_block, const char *curr_block)-
1184{-
1185 static bool first = true;-
1186 static bool prev_pair_equal = false;-
1187-
1188#define EQUAL_BLOCKS(b1, b2) (memcmp (b1, b2, bytes_per_block) == 0)-
1189-
1190 if (abbreviate_duplicate_blocks
abbreviate_duplicate_blocksDescription
TRUEevaluated 1391 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-1391
1191 && !first && n_bytes == bytes_per_block
!firstDescription
TRUEevaluated 903 times by 1 test
Evaluated by:
  • od
FALSEevaluated 488 times by 1 test
Evaluated by:
  • od
n_bytes == bytes_per_blockDescription
TRUEevaluated 899 times by 1 test
Evaluated by:
  • od
FALSEevaluated 4 times by 1 test
Evaluated by:
  • od
4-903
1192 && EQUAL_BLOCKS (prev_block, curr_block))
(memcmp (prev_...r_block) == 0)Description
TRUEnever evaluated
FALSEevaluated 899 times by 1 test
Evaluated by:
  • od
0-899
1193 {-
1194 if (prev_pair_equal)
prev_pair_equalDescription
TRUEnever evaluated
FALSEnever evaluated
0
1195 {-
1196 /* The two preceding blocks were equal, and the current-
1197 block is the same as the last one, so print nothing. */-
1198 }
never executed: end of block
0
1199 else-
1200 {-
1201 printf ("*\n");-
1202 prev_pair_equal = true;-
1203 }
never executed: end of block
0
1204 }-
1205 else-
1206 {-
1207 prev_pair_equal = false;-
1208 for (size_t i = 0; i < n_specs; i++)
i < n_specsDescription
TRUEevaluated 2714 times by 1 test
Evaluated by:
  • od
FALSEevaluated 1391 times by 1 test
Evaluated by:
  • od
1391-2714
1209 {-
1210 int datum_width = width_bytes[spec[i].size];-
1211 int fields_per_block = bytes_per_block / datum_width;-
1212 int blank_fields = (bytes_per_block - n_bytes) / datum_width;-
1213 if (i == 0)
i == 0Description
TRUEevaluated 1391 times by 1 test
Evaluated by:
  • od
FALSEevaluated 1323 times by 1 test
Evaluated by:
  • od
1323-1391
1214 format_address (current_offset, '\0');
executed 1391 times by 1 test: format_address (current_offset, '\0');
Executed by:
  • od
1391
1215 else-
1216 printf ("%*s", address_pad_len, "");
executed 1323 times by 1 test: printf ("%*s", address_pad_len, "");
Executed by:
  • od
1323
1217 (*spec[i].print_function) (fields_per_block, blank_fields,-
1218 curr_block, spec[i].fmt_string,-
1219 spec[i].field_width, spec[i].pad_width);-
1220 if (spec[i].hexl_mode_trailer)
spec[i].hexl_mode_trailerDescription
TRUEevaluated 2646 times by 1 test
Evaluated by:
  • od
FALSEevaluated 68 times by 1 test
Evaluated by:
  • od
68-2646
1221 {-
1222 /* space-pad out to full line width, then dump the trailer */-
1223 int field_width = spec[i].field_width;-
1224 int pad_width = (spec[i].pad_width * blank_fields-
1225 / fields_per_block);-
1226 printf ("%*s", blank_fields * field_width + pad_width, "");-
1227 dump_hexl_mode_trailer (n_bytes, curr_block);-
1228 }
executed 2646 times by 1 test: end of block
Executed by:
  • od
2646
1229 putchar ('\n');-
1230 }
executed 2714 times by 1 test: end of block
Executed by:
  • od
2714
1231 }
executed 1391 times by 1 test: end of block
Executed by:
  • od
1391
1232 first = false;-
1233}
executed 1391 times by 1 test: end of block
Executed by:
  • od
1391
1234-
1235/* Read a single byte into *C from the concatenation of the input files-
1236 named in the global array FILE_LIST. On the first call to this-
1237 function, the global variable IN_STREAM is expected to be an open-
1238 stream associated with the input file INPUT_FILENAME. If IN_STREAM-
1239 is at end-of-file, close it and update the global variables IN_STREAM-
1240 and INPUT_FILENAME so they correspond to the next file in the list.-
1241 Then try to read a byte from the newly opened file. Repeat if-
1242 necessary until EOF is reached for the last file in FILE_LIST, then-
1243 set *C to EOF and return. Subsequent calls do likewise. Return-
1244 true if successful. */-
1245-
1246static bool-
1247read_char (int *c)-
1248{-
1249 bool ok = true;-
1250-
1251 *c = EOF;-
1252-
1253 while (in_stream != NULL) /* EOF. */
in_stream != ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
0
1254 {-
1255 *c = fgetc (in_stream);-
1256-
1257 if (*c != EOF)
*c != (-1)Description
TRUEnever evaluated
FALSEnever evaluated
0
1258 break;
never executed: break;
0
1259-
1260 ok &= check_and_close (errno);-
1261-
1262 ok &= open_next_file ();-
1263 }
never executed: end of block
0
1264-
1265 return ok;
never executed: return ok;
0
1266}-
1267-
1268/* Read N bytes into BLOCK from the concatenation of the input files-
1269 named in the global array FILE_LIST. On the first call to this-
1270 function, the global variable IN_STREAM is expected to be an open-
1271 stream associated with the input file INPUT_FILENAME. If all N-
1272 bytes cannot be read from IN_STREAM, close IN_STREAM and update-
1273 the global variables IN_STREAM and INPUT_FILENAME. Then try to-
1274 read the remaining bytes from the newly opened file. Repeat if-
1275 necessary until EOF is reached for the last file in FILE_LIST.-
1276 On subsequent calls, don't modify BLOCK and return true. Set-
1277 *N_BYTES_IN_BUFFER to the number of bytes read. If an error occurs,-
1278 it will be detected through ferror when the stream is about to be-
1279 closed. If there is an error, give a message but continue reading-
1280 as usual and return false. Otherwise return true. */-
1281-
1282static bool-
1283read_block (size_t n, char *block, size_t *n_bytes_in_buffer)-
1284{-
1285 bool ok = true;-
1286-
1287 assert (0 < n && n <= bytes_per_block);-
1288-
1289 *n_bytes_in_buffer = 0;-
1290-
1291 while (in_stream != NULL) /* EOF. */
in_stream != ((void *)0)Description
TRUEevaluated 1883 times by 1 test
Evaluated by:
  • od
FALSEevaluated 504 times by 1 test
Evaluated by:
  • od
504-1883
1292 {-
1293 size_t n_needed;-
1294 size_t n_read;-
1295-
1296 n_needed = n - *n_bytes_in_buffer;-
1297 n_read = fread (block + *n_bytes_in_buffer, 1, n_needed, in_stream);-
1298-
1299 *n_bytes_in_buffer += n_read;-
1300-
1301 if (n_read == n_needed)
n_read == n_neededDescription
TRUEevaluated 1375 times by 1 test
Evaluated by:
  • od
FALSEevaluated 508 times by 1 test
Evaluated by:
  • od
508-1375
1302 break;
executed 1375 times by 1 test: break;
Executed by:
  • od
1375
1303-
1304 ok &= check_and_close (errno);-
1305-
1306 ok &= open_next_file ();-
1307 }
executed 508 times by 1 test: end of block
Executed by:
  • od
508
1308-
1309 return ok;
executed 1879 times by 1 test: return ok;
Executed by:
  • od
1879
1310}-
1311-
1312/* Return the least common multiple of the sizes associated-
1313 with the format specs. */-
1314-
1315static int _GL_ATTRIBUTE_PURE-
1316get_lcm (void)-
1317{-
1318 int l_c_m = 1;-
1319-
1320 for (size_t i = 0; i < n_specs; i++)
i < n_specsDescription
TRUEevaluated 965 times by 1 test
Evaluated by:
  • od
FALSEevaluated 524 times by 1 test
Evaluated by:
  • od
524-965
1321 l_c_m = lcm (l_c_m, width_bytes[spec[i].size]);
executed 965 times by 1 test: l_c_m = lcm (l_c_m, width_bytes[spec[i].size]);
Executed by:
  • od
965
1322 return l_c_m;
executed 524 times by 1 test: return l_c_m;
Executed by:
  • od
524
1323}-
1324-
1325/* If S is a valid traditional offset specification with an optional-
1326 leading '+' return true and set *OFFSET to the offset it denotes. */-
1327-
1328static bool-
1329parse_old_offset (const char *s, uintmax_t *offset)-
1330{-
1331 int radix;-
1332-
1333 if (*s == '\0')
*s == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
1334 return false;
never executed: return 0 ;
0
1335-
1336 /* Skip over any leading '+'. */-
1337 if (s[0] == '+')
s[0] == '+'Description
TRUEnever evaluated
FALSEnever evaluated
0
1338 ++s;
never executed: ++s;
0
1339-
1340 /* Determine the radix we'll use to interpret S. If there is a '.',-
1341 it's decimal, otherwise, if the string begins with '0X'or '0x',-
1342 it's hexadecimal, else octal. */-
1343 if (strchr (s, '.') != NULL)
(__extension__...!= ((void *)0)Description
TRUEnever evaluated
FALSEnever evaluated
__builtin_constant_p ( '.' )Description
TRUEnever evaluated
FALSEnever evaluated
!__builtin_constant_p ( s )Description
TRUEnever evaluated
FALSEnever evaluated
( '.' ) == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
1344 radix = 10;
never executed: radix = 10;
0
1345 else-
1346 {-
1347 if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X'))
s[0] == '0'Description
TRUEnever evaluated
FALSEnever evaluated
s[1] == 'x'Description
TRUEnever evaluated
FALSEnever evaluated
s[1] == 'X'Description
TRUEnever evaluated
FALSEnever evaluated
0
1348 radix = 16;
never executed: radix = 16;
0
1349 else-
1350 radix = 8;
never executed: radix = 8;
0
1351 }-
1352-
1353 return xstrtoumax (s, NULL, radix, offset, "Bb") == LONGINT_OK;
never executed: return xstrtoumax (s, ((void *)0) , radix, offset, "Bb") == LONGINT_OK;
0
1354}-
1355-
1356/* Read a chunk of size BYTES_PER_BLOCK from the input files, write the-
1357 formatted block to standard output, and repeat until the specified-
1358 maximum number of bytes has been read or until all input has been-
1359 processed. If the last block read is smaller than BYTES_PER_BLOCK-
1360 and its size is not a multiple of the size associated with a format-
1361 spec, extend the input block with zero bytes until its length is a-
1362 multiple of all format spec sizes. Write the final block. Finally,-
1363 write on a line by itself the offset of the byte after the last byte-
1364 read. Accumulate return values from calls to read_block and-
1365 check_and_close, and if any was false, return false.-
1366 Otherwise, return true. */-
1367-
1368static bool-
1369dump (void)-
1370{-
1371 char *block[2];-
1372 uintmax_t current_offset;-
1373 bool idx = false;-
1374 bool ok = true;-
1375 size_t n_bytes_read;-
1376-
1377 block[0] = xnmalloc (2, bytes_per_block);-
1378 block[1] = block[0] + bytes_per_block;-
1379-
1380 current_offset = n_bytes_to_skip;-
1381-
1382 if (limit_bytes_to_format)
limit_bytes_to_formatDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEevaluated 504 times by 1 test
Evaluated by:
  • od
2-504
1383 {-
1384 while (1)-
1385 {-
1386 size_t n_needed;-
1387 if (current_offset >= end_offset)
current_offset >= end_offsetDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • od
0-2
1388 {-
1389 n_bytes_read = 0;-
1390 break;
never executed: break;
0
1391 }-
1392 n_needed = MIN (end_offset - current_offset,
(( end_offset ...s_per_block ))Description
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-2
1393 (uintmax_t) bytes_per_block);-
1394 ok &= read_block (n_needed, block[idx], &n_bytes_read);-
1395 if (n_bytes_read < bytes_per_block)
n_bytes_read < bytes_per_blockDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-2
1396 break;
executed 2 times by 1 test: break;
Executed by:
  • od
2
1397 assert (n_bytes_read == bytes_per_block);-
1398 write_block (current_offset, n_bytes_read,-
1399 block[!idx], block[idx]);-
1400 current_offset += n_bytes_read;-
1401 idx = !idx;-
1402 }
never executed: end of block
0
1403 }
executed 2 times by 1 test: end of block
Executed by:
  • od
2
1404 else-
1405 {-
1406 while (1)-
1407 {-
1408 ok &= read_block (bytes_per_block, block[idx], &n_bytes_read);-
1409 if (n_bytes_read < bytes_per_block)
n_bytes_read < bytes_per_blockDescription
TRUEevaluated 504 times by 1 test
Evaluated by:
  • od
FALSEevaluated 1373 times by 1 test
Evaluated by:
  • od
504-1373
1410 break;
executed 504 times by 1 test: break;
Executed by:
  • od
504
1411 assert (n_bytes_read == bytes_per_block);-
1412 write_block (current_offset, n_bytes_read,-
1413 block[!idx], block[idx]);-
1414 current_offset += n_bytes_read;-
1415 idx = !idx;-
1416 }
executed 1373 times by 1 test: end of block
Executed by:
  • od
1373
1417 }
executed 504 times by 1 test: end of block
Executed by:
  • od
504
1418-
1419 if (n_bytes_read > 0)
n_bytes_read > 0Description
TRUEevaluated 18 times by 1 test
Evaluated by:
  • od
FALSEevaluated 488 times by 1 test
Evaluated by:
  • od
18-488
1420 {-
1421 int l_c_m;-
1422 size_t bytes_to_write;-
1423-
1424 l_c_m = get_lcm ();-
1425-
1426 /* Ensure zero-byte padding up to the smallest multiple of l_c_m that-
1427 is at least as large as n_bytes_read. */-
1428 bytes_to_write = l_c_m * ((n_bytes_read + l_c_m - 1) / l_c_m);-
1429-
1430 memset (block[idx] + n_bytes_read, 0, bytes_to_write - n_bytes_read);-
1431 write_block (current_offset, n_bytes_read, block[!idx], block[idx]);-
1432 current_offset += n_bytes_read;-
1433 }
executed 18 times by 1 test: end of block
Executed by:
  • od
18
1434-
1435 format_address (current_offset, '\n');-
1436-
1437 if (limit_bytes_to_format && current_offset >= end_offset)
limit_bytes_to_formatDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEevaluated 504 times by 1 test
Evaluated by:
  • od
current_offset >= end_offsetDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-504
1438 ok &= check_and_close (0);
executed 2 times by 1 test: ok &= check_and_close (0);
Executed by:
  • od
2
1439-
1440 free (block[0]);-
1441-
1442 return ok;
executed 506 times by 1 test: return ok;
Executed by:
  • od
506
1443}-
1444-
1445/* STRINGS mode. Find each "string constant" in the input.-
1446 A string constant is a run of at least 'string_min' ASCII-
1447 graphic (or formatting) characters terminated by a null.-
1448 Based on a function written by Richard Stallman for a-
1449 traditional version of od. Return true if successful. */-
1450-
1451static bool-
1452dump_strings (void)-
1453{-
1454 size_t bufsize = MAX (100, string_min);
(( 100 )>( string_min ))Description
TRUEnever evaluated
FALSEnever evaluated
0
1455 char *buf = xmalloc (bufsize);-
1456 uintmax_t address = n_bytes_to_skip;-
1457 bool ok = true;-
1458-
1459 while (1)-
1460 {-
1461 size_t i;-
1462 int c;-
1463-
1464 /* See if the next 'string_min' chars are all printing chars. */-
1465 tryline:
code before this statement never executed: tryline:
0
1466-
1467 if (limit_bytes_to_format
limit_bytes_to_formatDescription
TRUEnever evaluated
FALSEnever evaluated
0
1468 && (end_offset < string_min || end_offset - string_min <= address))
end_offset < string_minDescription
TRUEnever evaluated
FALSEnever evaluated
end_offset - s...min <= addressDescription
TRUEnever evaluated
FALSEnever evaluated
0
1469 break;
never executed: break;
0
1470-
1471 for (i = 0; i < string_min; i++)
i < string_minDescription
TRUEnever evaluated
FALSEnever evaluated
0
1472 {-
1473 ok &= read_char (&c);-
1474 address++;-
1475 if (c < 0)
c < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1476 {-
1477 free (buf);-
1478 return ok;
never executed: return ok;
0
1479 }-
1480 if (! isprint (c))
! ((*__ctype_b...int) _ISprint)Description
TRUEnever evaluated
FALSEnever evaluated
0
1481 /* Found a non-printing. Try again starting with next char. */-
1482 goto tryline;
never executed: goto tryline;
0
1483 buf[i] = c;-
1484 }
never executed: end of block
0
1485-
1486 /* We found a run of 'string_min' printable characters.-
1487 Now see if it is terminated with a null byte. */-
1488 while (!limit_bytes_to_format || address < end_offset)
!limit_bytes_to_formatDescription
TRUEnever evaluated
FALSEnever evaluated
address < end_offsetDescription
TRUEnever evaluated
FALSEnever evaluated
0
1489 {-
1490 if (i == bufsize)
i == bufsizeDescription
TRUEnever evaluated
FALSEnever evaluated
0
1491 {-
1492 buf = X2REALLOC (buf, &bufsize);-
1493 }
never executed: end of block
0
1494 ok &= read_char (&c);-
1495 address++;-
1496 if (c < 0)
c < 0Description
TRUEnever evaluated
FALSEnever evaluated
0
1497 {-
1498 free (buf);-
1499 return ok;
never executed: return ok;
0
1500 }-
1501 if (c == '\0')
c == '\0'Description
TRUEnever evaluated
FALSEnever evaluated
0
1502 break; /* It is; print this string. */
never executed: break;
0
1503 if (! isprint (c))
! ((*__ctype_b...int) _ISprint)Description
TRUEnever evaluated
FALSEnever evaluated
0
1504 goto tryline; /* It isn't; give up on this string. */
never executed: goto tryline;
0
1505 buf[i++] = c; /* String continues; store it all. */-
1506 }
never executed: end of block
0
1507-
1508 /* If we get here, the string is all printable and null-terminated,-
1509 so print it. It is all in 'buf' and 'i' is its length. */-
1510 buf[i] = 0;-
1511 format_address (address - i - 1, ' ');-
1512-
1513 for (i = 0; (c = buf[i]); i++)
(c = buf[i])Description
TRUEnever evaluated
FALSEnever evaluated
0
1514 {-
1515 switch (c)-
1516 {-
1517 case '\a':
never executed: case '\a':
0
1518 fputs ("\\a", stdout);-
1519 break;
never executed: break;
0
1520-
1521 case '\b':
never executed: case '\b':
0
1522 fputs ("\\b", stdout);-
1523 break;
never executed: break;
0
1524-
1525 case '\f':
never executed: case '\f':
0
1526 fputs ("\\f", stdout);-
1527 break;
never executed: break;
0
1528-
1529 case '\n':
never executed: case '\n':
0
1530 fputs ("\\n", stdout);-
1531 break;
never executed: break;
0
1532-
1533 case '\r':
never executed: case '\r':
0
1534 fputs ("\\r", stdout);-
1535 break;
never executed: break;
0
1536-
1537 case '\t':
never executed: case '\t':
0
1538 fputs ("\\t", stdout);-
1539 break;
never executed: break;
0
1540-
1541 case '\v':
never executed: case '\v':
0
1542 fputs ("\\v", stdout);-
1543 break;
never executed: break;
0
1544-
1545 default:
never executed: default:
0
1546 putc (c, stdout);-
1547 }
never executed: end of block
0
1548 }-
1549 putchar ('\n');-
1550 }
never executed: end of block
0
1551-
1552 /* We reach this point only if we search through-
1553 (max_bytes_to_format - string_min) bytes before reaching EOF. */-
1554-
1555 free (buf);-
1556-
1557 ok &= check_and_close (0);-
1558 return ok;
never executed: return ok;
0
1559}-
1560-
1561int-
1562main (int argc, char **argv)-
1563{-
1564 int n_files;-
1565 size_t i;-
1566 int l_c_m;-
1567 size_t desired_width IF_LINT ( = 0);-
1568 bool modern = false;-
1569 bool width_specified = false;-
1570 bool ok = true;-
1571 size_t width_per_block = 0;-
1572 static char const multipliers[] = "bEGKkMmPTYZ0";-
1573-
1574 /* The old-style 'pseudo starting address' to be printed in parentheses-
1575 after any true address. */-
1576 uintmax_t pseudo_start IF_LINT ( = 0);-
1577-
1578 initialize_main (&argc, &argv);-
1579 set_program_name (argv[0]);-
1580 setlocale (LC_ALL, "");-
1581 bindtextdomain (PACKAGE, LOCALEDIR);-
1582 textdomain (PACKAGE);-
1583-
1584 atexit (close_stdout);-
1585-
1586 for (i = 0; i <= MAX_INTEGRAL_TYPE_SIZE; i++)
i <= sizeof (u...long_long_int)Description
TRUEevaluated 4923 times by 1 test
Evaluated by:
  • od
FALSEevaluated 547 times by 1 test
Evaluated by:
  • od
547-4923
1587 integral_type_size[i] = NO_SIZE;
executed 4923 times by 1 test: integral_type_size[i] = NO_SIZE;
Executed by:
  • od
4923
1588-
1589 integral_type_size[sizeof (char)] = CHAR;-
1590 integral_type_size[sizeof (short int)] = SHORT;-
1591 integral_type_size[sizeof (int)] = INT;-
1592 integral_type_size[sizeof (long int)] = LONG;-
1593#if HAVE_UNSIGNED_LONG_LONG_INT-
1594 /* If 'long int' and 'long long int' have the same size, it's fine-
1595 to overwrite the entry for 'long' with this one. */-
1596 integral_type_size[sizeof (unsigned_long_long_int)] = LONG_LONG;-
1597#endif-
1598-
1599 for (i = 0; i <= MAX_FP_TYPE_SIZE; i++)
i <= sizeof (long double)Description
TRUEevaluated 9299 times by 1 test
Evaluated by:
  • od
FALSEevaluated 547 times by 1 test
Evaluated by:
  • od
547-9299
1600 fp_type_size[i] = NO_SIZE;
executed 9299 times by 1 test: fp_type_size[i] = NO_SIZE;
Executed by:
  • od
9299
1601-
1602 fp_type_size[sizeof (float)] = FLOAT_SINGLE;-
1603 /* The array entry for 'double' is filled in after that for 'long double'-
1604 so that if they are the same size, we avoid any overhead of-
1605 long double computation in libc. */-
1606 fp_type_size[sizeof (long double)] = FLOAT_LONG_DOUBLE;-
1607 fp_type_size[sizeof (double)] = FLOAT_DOUBLE;-
1608-
1609 n_specs = 0;-
1610 n_specs_allocated = 0;-
1611 spec = NULL;-
1612-
1613 format_address = format_address_std;-
1614 address_base = 8;-
1615 address_pad_len = 7;-
1616 flag_dump_strings = false;-
1617-
1618 while (true)-
1619 {-
1620 uintmax_t tmp;-
1621 enum strtol_error s_err;-
1622 int oi = -1;-
1623 int c = getopt_long (argc, argv, short_options, long_options, &oi);-
1624 if (c == -1)
c == -1Description
TRUEevaluated 516 times by 1 test
Evaluated by:
  • od
FALSEevaluated 1538 times by 1 test
Evaluated by:
  • od
516-1538
1625 break;
executed 516 times by 1 test: break;
Executed by:
  • od
516
1626-
1627 switch (c)-
1628 {-
1629 case 'A':
executed 491 times by 1 test: case 'A':
Executed by:
  • od
491
1630 modern = true;-
1631 switch (optarg[0])-
1632 {-
1633 case 'd':
never executed: case 'd':
0
1634 format_address = format_address_std;-
1635 address_base = 10;-
1636 address_pad_len = 7;-
1637 break;
never executed: break;
0
1638 case 'o':
never executed: case 'o':
0
1639 format_address = format_address_std;-
1640 address_base = 8;-
1641 address_pad_len = 7;-
1642 break;
never executed: break;
0
1643 case 'x':
never executed: case 'x':
0
1644 format_address = format_address_std;-
1645 address_base = 16;-
1646 address_pad_len = 6;-
1647 break;
never executed: break;
0
1648 case 'n':
executed 489 times by 1 test: case 'n':
Executed by:
  • od
489
1649 format_address = format_address_none;-
1650 address_pad_len = 0;-
1651 break;
executed 489 times by 1 test: break;
Executed by:
  • od
489
1652 default:
executed 2 times by 1 test: default:
Executed by:
  • od
2
1653 die (EXIT_FAILURE, 0,-
1654 _("invalid output address radix '%c';\-
1655 it must be one character from [doxn]"),-
1656 optarg[0]);-
1657 break;
never executed: break;
0
1658 }-
1659 break;
executed 489 times by 1 test: break;
Executed by:
  • od
489
1660-
1661 case 'j':
executed 13 times by 1 test: case 'j':
Executed by:
  • od
13
1662 modern = true;-
1663 s_err = xstrtoumax (optarg, NULL, 0, &n_bytes_to_skip, multipliers);-
1664 if (s_err != LONGINT_OK)
s_err != LONGINT_OKDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEevaluated 11 times by 1 test
Evaluated by:
  • od
2-11
1665 xstrtol_fatal (s_err, oi, c, long_options, optarg);
executed 2 times by 1 test: xstrtol_fatal (s_err, oi, c, long_options, optarg);
Executed by:
  • od
2
1666 break;
executed 11 times by 1 test: break;
Executed by:
  • od
11
1667-
1668 case 'N':
executed 4 times by 1 test: case 'N':
Executed by:
  • od
4
1669 modern = true;-
1670 limit_bytes_to_format = true;-
1671-
1672 s_err = xstrtoumax (optarg, NULL, 0, &max_bytes_to_format,-
1673 multipliers);-
1674 if (s_err != LONGINT_OK)
s_err != LONGINT_OKDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEevaluated 2 times by 1 test
Evaluated by:
  • od
2
1675 xstrtol_fatal (s_err, oi, c, long_options, optarg);
executed 2 times by 1 test: xstrtol_fatal (s_err, oi, c, long_options, optarg);
Executed by:
  • od
2
1676 break;
executed 2 times by 1 test: break;
Executed by:
  • od
2
1677-
1678 case 'S':
executed 2 times by 1 test: case 'S':
Executed by:
  • od
2
1679 modern = true;-
1680 if (optarg == NULL)
optarg == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • od
FALSEevaluated 1 time by 1 test
Evaluated by:
  • od
1
1681 string_min = 3;
executed 1 time by 1 test: string_min = 3;
Executed by:
  • od
1
1682 else-
1683 {-
1684 s_err = xstrtoumax (optarg, NULL, 0, &tmp, multipliers);-
1685 if (s_err != LONGINT_OK)
s_err != LONGINT_OKDescription
TRUEevaluated 1 time by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-1
1686 xstrtol_fatal (s_err, oi, c, long_options, optarg);
executed 1 time by 1 test: xstrtol_fatal (s_err, oi, c, long_options, optarg);
Executed by:
  • od
1
1687-
1688 /* The minimum string length may be no larger than SIZE_MAX,-
1689 since we may allocate a buffer of this size. */-
1690 if (SIZE_MAX < tmp)
(18446744073709551615UL) < tmpDescription
TRUEnever evaluated
FALSEnever evaluated
0
1691 die (EXIT_FAILURE, 0, _("%s is too large"), quote (optarg));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s is too large\", 5), quote (optarg)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s is too large" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s is too large" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
1692-
1693 string_min = tmp;-
1694 }
never executed: end of block
0
1695 flag_dump_strings = true;-
1696 break;
executed 1 time by 1 test: break;
Executed by:
  • od
1
1697-
1698 case 't':
executed 940 times by 1 test: case 't':
Executed by:
  • od
940
1699 modern = true;-
1700 ok &= decode_format_string (optarg);-
1701 break;
executed 940 times by 1 test: break;
Executed by:
  • od
940
1702-
1703 case 'v':
executed 2 times by 1 test: case 'v':
Executed by:
  • od
2
1704 modern = true;-
1705 abbreviate_duplicate_blocks = false;-
1706 break;
executed 2 times by 1 test: break;
Executed by:
  • od
2
1707-
1708 case TRADITIONAL_OPTION:
executed 1 time by 1 test: case TRADITIONAL_OPTION:
Executed by:
  • od
1
1709 traditional = true;-
1710 break;
executed 1 time by 1 test: break;
Executed by:
  • od
1
1711-
1712 case ENDIAN_OPTION:
executed 49 times by 1 test: case ENDIAN_OPTION:
Executed by:
  • od
49
1713 switch (XARGMATCH ("--endian", optarg, endian_args, endian_types))-
1714 {-
1715 case endian_big:
executed 24 times by 1 test: case endian_big:
Executed by:
  • od
24
1716 input_swap = ! WORDS_BIGENDIAN;-
1717 break;
executed 24 times by 1 test: break;
Executed by:
  • od
24
1718 case endian_little:
executed 24 times by 1 test: case endian_little:
Executed by:
  • od
24
1719 input_swap = WORDS_BIGENDIAN;-
1720 break;
executed 24 times by 1 test: break;
Executed by:
  • od
24
1721 }-
1722 break;
executed 48 times by 1 test: break;
Executed by:
  • od
48
1723-
1724 /* The next several cases map the traditional format-
1725 specification options to the corresponding modern format-
1726 specs. GNU od accepts any combination of old- and-
1727 new-style options. Format specification options accumulate.-
1728 The obsolescent and undocumented formats are compatible-
1729 with FreeBSD 4.10 od. */-
1730-
1731#define CASE_OLD_ARG(old_char,new_string) \-
1732 case old_char: \-
1733 ok &= decode_format_string (new_string); \-
1734 break-
1735-
1736 CASE_OLD_ARG ('a', "a");
executed 1 time by 1 test: break;
Executed by:
  • od
executed 1 time by 1 test: case 'a':
Executed by:
  • od
1
1737 CASE_OLD_ARG ('b', "o1");
never executed: break;
never executed: case 'b':
0
1738 CASE_OLD_ARG ('c', "c");
executed 8 times by 1 test: break;
Executed by:
  • od
executed 8 times by 1 test: case 'c':
Executed by:
  • od
8
1739 CASE_OLD_ARG ('D', "u4"); /* obsolescent and undocumented */
never executed: break;
never executed: case 'D':
0
1740 CASE_OLD_ARG ('d', "u2");
never executed: break;
never executed: case 'd':
0
1741 case 'F': /* obsolescent and undocumented alias */
never executed: case 'F':
0
1742 CASE_OLD_ARG ('e', "fD"); /* obsolescent and undocumented */
never executed: break;
never executed: case 'e':
0
1743 CASE_OLD_ARG ('f', "fF");
never executed: break;
never executed: case 'f':
0
1744 case 'X': /* obsolescent and undocumented alias */
never executed: case 'X':
0
1745 CASE_OLD_ARG ('H', "x4"); /* obsolescent and undocumented */
never executed: break;
never executed: case 'H':
0
1746 CASE_OLD_ARG ('i', "dI");
never executed: break;
never executed: case 'i':
0
1747 case 'I': case 'L': /* obsolescent and undocumented aliases */
never executed: case 'I':
never executed: case 'L':
0
1748 CASE_OLD_ARG ('l', "dL");
never executed: break;
never executed: case 'l':
0
1749 CASE_OLD_ARG ('O', "o4"); /* obsolesent and undocumented */
never executed: break;
never executed: case 'O':
0
1750 case 'B': /* obsolescent and undocumented alias */
never executed: case 'B':
0
1751 CASE_OLD_ARG ('o', "o2");
never executed: break;
never executed: case 'o':
0
1752 CASE_OLD_ARG ('s', "d2");
never executed: break;
never executed: case 's':
0
1753 case 'h': /* obsolescent and undocumented alias */
never executed: case 'h':
0
1754 CASE_OLD_ARG ('x', "x2");
never executed: break;
never executed: case 'x':
0
1755-
1756#undef CASE_OLD_ARG-
1757-
1758 case 'w':
executed 4 times by 1 test: case 'w':
Executed by:
  • od
4
1759 modern = true;-
1760 width_specified = true;-
1761 if (optarg == NULL)
optarg == ((void *)0)Description
TRUEevaluated 1 time by 1 test
Evaluated by:
  • od
FALSEevaluated 3 times by 1 test
Evaluated by:
  • od
1-3
1762 {-
1763 desired_width = 32;-
1764 }
executed 1 time by 1 test: end of block
Executed by:
  • od
1
1765 else-
1766 {-
1767 uintmax_t w_tmp;-
1768 s_err = xstrtoumax (optarg, NULL, 10, &w_tmp, "");-
1769 if (s_err != LONGINT_OK)
s_err != LONGINT_OKDescription
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • od
0-3
1770 xstrtol_fatal (s_err, oi, c, long_options, optarg);
never executed: xstrtol_fatal (s_err, oi, c, long_options, optarg);
0
1771 if (SIZE_MAX < w_tmp)
(1844674407370...615UL) < w_tmpDescription
TRUEnever evaluated
FALSEevaluated 3 times by 1 test
Evaluated by:
  • od
0-3
1772 die (EXIT_FAILURE, 0, _("%s is too large"), quote (optarg));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"%s is too large\", 5), quote (optarg)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "%s is too large" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "%s is too large" , 5) , quote (optarg)), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
1773 desired_width = w_tmp;-
1774 }
executed 3 times by 1 test: end of block
Executed by:
  • od
3
1775 break;
executed 4 times by 1 test: break;
Executed by:
  • od
4
1776-
1777 case_GETOPT_HELP_CHAR;
never executed: break;
executed 10 times by 1 test: case GETOPT_HELP_CHAR:
Executed by:
  • od
0-10
1778-
1779 case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
executed 10 times by 1 test: exit ( 0 );
Executed by:
  • od
never executed: break;
executed 10 times by 1 test: case GETOPT_VERSION_CHAR:
Executed by:
  • od
0-10
1780-
1781 default:
executed 3 times by 1 test: default:
Executed by:
  • od
3
1782 usage (EXIT_FAILURE);-
1783 break;
never executed: break;
0
1784 }-
1785 }-
1786-
1787 if (!ok)
!okDescription
TRUEevaluated 6 times by 1 test
Evaluated by:
  • od
FALSEevaluated 510 times by 1 test
Evaluated by:
  • od
6-510
1788 return EXIT_FAILURE;
executed 6 times by 1 test: return 1 ;
Executed by:
  • od
6
1789-
1790 if (flag_dump_strings && n_specs > 0)
flag_dump_stringsDescription
TRUEnever evaluated
FALSEevaluated 510 times by 1 test
Evaluated by:
  • od
n_specs > 0Description
TRUEnever evaluated
FALSEnever evaluated
0-510
1791 die (EXIT_FAILURE, 0,
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"no type may be specified when dumping strings\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "no type may be specified when dumping strings" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "no type may be specified when dumping strings" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1792 _("no type may be specified when dumping strings"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"no type may be specified when dumping strings\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "no type may be specified when dumping strings" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "no type may be specified when dumping strings" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ())))) ;
0
1793-
1794 n_files = argc - optind;-
1795-
1796 /* If the --traditional option is used, there may be from-
1797 0 to 3 remaining command line arguments; handle each case-
1798 separately.-
1799 od [file] [[+]offset[.][b] [[+]label[.][b]]]-
1800 The offset and label have the same syntax.-
1801-
1802 If --traditional is not given, and if no modern options are-
1803 given, and if the offset begins with + or (if there are two-
1804 operands) a digit, accept only this form, as per POSIX:-
1805 od [file] [[+]offset[.][b]]-
1806 */-
1807-
1808 if (!modern || traditional)
!modernDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEevaluated 508 times by 1 test
Evaluated by:
  • od
traditionalDescription
TRUEnever evaluated
FALSEevaluated 508 times by 1 test
Evaluated by:
  • od
0-508
1809 {-
1810 uintmax_t o1;-
1811 uintmax_t o2;-
1812-
1813 switch (n_files)-
1814 {-
1815 case 1:
never executed: case 1:
0
1816 if ((traditional || argv[optind][0] == '+')
traditionalDescription
TRUEnever evaluated
FALSEnever evaluated
argv[optind][0] == '+'Description
TRUEnever evaluated
FALSEnever evaluated
0
1817 && parse_old_offset (argv[optind], &o1))
parse_old_offs...[optind], &o1)Description
TRUEnever evaluated
FALSEnever evaluated
0
1818 {-
1819 n_bytes_to_skip = o1;-
1820 --n_files;-
1821 ++argv;-
1822 }
never executed: end of block
0
1823 break;
never executed: break;
0
1824-
1825 case 2:
never executed: case 2:
0
1826 if ((traditional || argv[optind + 1][0] == '+'
traditionalDescription
TRUEnever evaluated
FALSEnever evaluated
argv[optind + 1][0] == '+'Description
TRUEnever evaluated
FALSEnever evaluated
0
1827 || ISDIGIT (argv[optind + 1][0]))
((unsigned int...]) - '0' <= 9)Description
TRUEnever evaluated
FALSEnever evaluated
0
1828 && parse_old_offset (argv[optind + 1], &o2))
parse_old_offs...ind + 1], &o2)Description
TRUEnever evaluated
FALSEnever evaluated
0
1829 {-
1830 if (traditional && parse_old_offset (argv[optind], &o1))
traditionalDescription
TRUEnever evaluated
FALSEnever evaluated
parse_old_offs...[optind], &o1)Description
TRUEnever evaluated
FALSEnever evaluated
0
1831 {-
1832 n_bytes_to_skip = o1;-
1833 flag_pseudo_start = true;-
1834 pseudo_start = o2;-
1835 argv += 2;-
1836 n_files -= 2;-
1837 }
never executed: end of block
0
1838 else-
1839 {-
1840 n_bytes_to_skip = o2;-
1841 --n_files;-
1842 argv[optind + 1] = argv[optind];-
1843 ++argv;-
1844 }
never executed: end of block
0
1845 }-
1846 break;
never executed: break;
0
1847-
1848 case 3:
never executed: case 3:
0
1849 if (traditional
traditionalDescription
TRUEnever evaluated
FALSEnever evaluated
0
1850 && parse_old_offset (argv[optind + 1], &o1)
parse_old_offs...ind + 1], &o1)Description
TRUEnever evaluated
FALSEnever evaluated
0
1851 && parse_old_offset (argv[optind + 2], &o2))
parse_old_offs...ind + 2], &o2)Description
TRUEnever evaluated
FALSEnever evaluated
0
1852 {-
1853 n_bytes_to_skip = o1;-
1854 flag_pseudo_start = true;-
1855 pseudo_start = o2;-
1856 argv[optind + 2] = argv[optind];-
1857 argv += 2;-
1858 n_files -= 2;-
1859 }
never executed: end of block
0
1860 break;
never executed: break;
0
1861 }-
1862-
1863 if (traditional && 1 < n_files)
traditionalDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • od
1 < n_filesDescription
TRUEnever evaluated
FALSEnever evaluated
0-2
1864 {-
1865 error (0, 0, _("extra operand %s"), quote (argv[optind + 1]));-
1866 error (0, 0, "%s",-
1867 _("compatibility mode supports at most one file"));-
1868 usage (EXIT_FAILURE);-
1869 }
never executed: end of block
0
1870 }
executed 2 times by 1 test: end of block
Executed by:
  • od
2
1871-
1872 if (flag_pseudo_start)
flag_pseudo_startDescription
TRUEnever evaluated
FALSEevaluated 510 times by 1 test
Evaluated by:
  • od
0-510
1873 {-
1874 if (format_address == format_address_none)
format_address...t_address_noneDescription
TRUEnever evaluated
FALSEnever evaluated
0
1875 {-
1876 address_base = 8;-
1877 address_pad_len = 7;-
1878 format_address = format_address_paren;-
1879 }
never executed: end of block
0
1880 else-
1881 format_address = format_address_label;
never executed: format_address = format_address_label;
0
1882 }-
1883-
1884 if (limit_bytes_to_format)
limit_bytes_to_formatDescription
TRUEevaluated 2 times by 1 test
Evaluated by:
  • od
FALSEevaluated 508 times by 1 test
Evaluated by:
  • od
2-508
1885 {-
1886 end_offset = n_bytes_to_skip + max_bytes_to_format;-
1887 if (end_offset < n_bytes_to_skip)
end_offset < n_bytes_to_skipDescription
TRUEnever evaluated
FALSEevaluated 2 times by 1 test
Evaluated by:
  • od
0-2
1888 die (EXIT_FAILURE, 0, _("skip-bytes + read-bytes is too large"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, 0, dcgettext (((void *)0), \"skip-bytes + read-bytes is too large\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , 0, dcgettext (((void *)0), "skip-bytes + read-bytes is too large" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , 0, dcgettext (((void *)0), "skip-bytes + read-bytes is too large" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
1889 }
executed 2 times by 1 test: end of block
Executed by:
  • od
2
1890-
1891 if (n_specs == 0)
n_specs == 0Description
TRUEevaluated 10 times by 1 test
Evaluated by:
  • od
FALSEevaluated 500 times by 1 test
Evaluated by:
  • od
10-500
1892 decode_format_string ("oS");
executed 10 times by 1 test: decode_format_string ("oS");
Executed by:
  • od
10
1893-
1894 if (n_files > 0)
n_files > 0Description
TRUEevaluated 474 times by 1 test
Evaluated by:
  • od
FALSEevaluated 36 times by 1 test
Evaluated by:
  • od
36-474
1895 {-
1896 /* Set the global pointer FILE_LIST so that it-
1897 references the first file-argument on the command-line. */-
1898-
1899 file_list = (char const *const *) &argv[optind];-
1900 }
executed 474 times by 1 test: end of block
Executed by:
  • od
474
1901 else-
1902 {-
1903 /* No files were listed on the command line.-
1904 Set the global pointer FILE_LIST so that it-
1905 references the null-terminated list of one name: "-". */-
1906-
1907 file_list = default_file_list;-
1908 }
executed 36 times by 1 test: end of block
Executed by:
  • od
36
1909-
1910 /* open the first input file */-
1911 ok = open_next_file ();-
1912 if (in_stream == NULL)
in_stream == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 510 times by 1 test
Evaluated by:
  • od
0-510
1913 goto cleanup;
never executed: goto cleanup;
0
1914-
1915 /* skip over any unwanted header bytes */-
1916 ok &= skip (n_bytes_to_skip);-
1917 if (in_stream == NULL)
in_stream == ((void *)0)Description
TRUEnever evaluated
FALSEevaluated 506 times by 1 test
Evaluated by:
  • od
0-506
1918 goto cleanup;
never executed: goto cleanup;
0
1919-
1920 pseudo_offset = (flag_pseudo_start ? pseudo_start - n_bytes_to_skip : 0);
flag_pseudo_startDescription
TRUEnever evaluated
FALSEevaluated 506 times by 1 test
Evaluated by:
  • od
0-506
1921-
1922 /* Compute output block length. */-
1923 l_c_m = get_lcm ();-
1924-
1925 if (width_specified)
width_specifiedDescription
TRUEevaluated 3 times by 1 test
Evaluated by:
  • od
FALSEevaluated 503 times by 1 test
Evaluated by:
  • od
3-503
1926 {-
1927 if (desired_width != 0 && desired_width % l_c_m == 0)
desired_width != 0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
desired_width % l_c_m == 0Description
TRUEevaluated 3 times by 1 test
Evaluated by:
  • od
FALSEnever evaluated
0-3
1928 bytes_per_block = desired_width;
executed 3 times by 1 test: bytes_per_block = desired_width;
Executed by:
  • od
3
1929 else-
1930 {-
1931 error (0, 0, _("warning: invalid width %lu; using %d instead"),-
1932 (unsigned long int) desired_width, l_c_m);-
1933 bytes_per_block = l_c_m;-
1934 }
never executed: end of block
0
1935 }-
1936 else-
1937 {-
1938 if (l_c_m < DEFAULT_BYTES_PER_BLOCK)
l_c_m < 16Description
TRUEevaluated 454 times by 1 test
Evaluated by:
  • od
FALSEevaluated 49 times by 1 test
Evaluated by:
  • od
49-454
1939 bytes_per_block = l_c_m * (DEFAULT_BYTES_PER_BLOCK / l_c_m);
executed 454 times by 1 test: bytes_per_block = l_c_m * (16 / l_c_m);
Executed by:
  • od
454
1940 else-
1941 bytes_per_block = l_c_m;
executed 49 times by 1 test: bytes_per_block = l_c_m;
Executed by:
  • od
49
1942 }-
1943-
1944 /* Compute padding necessary to align output block. */-
1945 for (i = 0; i < n_specs; i++)
i < n_specsDescription
TRUEevaluated 947 times by 1 test
Evaluated by:
  • od
FALSEevaluated 506 times by 1 test
Evaluated by:
  • od
506-947
1946 {-
1947 int fields_per_block = bytes_per_block / width_bytes[spec[i].size];-
1948 int block_width = (spec[i].field_width + 1) * fields_per_block;-
1949 if (width_per_block < block_width)
width_per_block < block_widthDescription
TRUEevaluated 698 times by 1 test
Evaluated by:
  • od
FALSEevaluated 249 times by 1 test
Evaluated by:
  • od
249-698
1950 width_per_block = block_width;
executed 698 times by 1 test: width_per_block = block_width;
Executed by:
  • od
698
1951 }
executed 947 times by 1 test: end of block
Executed by:
  • od
947
1952 for (i = 0; i < n_specs; i++)
i < n_specsDescription
TRUEevaluated 947 times by 1 test
Evaluated by:
  • od
FALSEevaluated 506 times by 1 test
Evaluated by:
  • od
506-947
1953 {-
1954 int fields_per_block = bytes_per_block / width_bytes[spec[i].size];-
1955 int block_width = spec[i].field_width * fields_per_block;-
1956 spec[i].pad_width = width_per_block - block_width;-
1957 }
executed 947 times by 1 test: end of block
Executed by:
  • od
947
1958-
1959#ifdef DEBUG-
1960 printf ("lcm=%d, width_per_block=%"PRIuMAX"\n", l_c_m,-
1961 (uintmax_t) width_per_block);-
1962 for (i = 0; i < n_specs; i++)-
1963 {-
1964 int fields_per_block = bytes_per_block / width_bytes[spec[i].size];-
1965 assert (bytes_per_block % width_bytes[spec[i].size] == 0);-
1966 assert (1 <= spec[i].pad_width / fields_per_block);-
1967 printf ("%d: fmt=\"%s\" in_width=%d out_width=%d pad=%d\n",-
1968 i, spec[i].fmt_string, width_bytes[spec[i].size],-
1969 spec[i].field_width, spec[i].pad_width);-
1970 }-
1971#endif-
1972-
1973 ok &= (flag_dump_strings ? dump_strings () : dump ());
flag_dump_stringsDescription
TRUEnever evaluated
FALSEevaluated 506 times by 1 test
Evaluated by:
  • od
0-506
1974-
1975cleanup:
code before this statement executed 506 times by 1 test: cleanup:
Executed by:
  • od
506
1976-
1977 if (have_read_stdin && fclose (stdin) == EOF)
have_read_stdinDescription
TRUEevaluated 36 times by 1 test
Evaluated by:
  • od
FALSEevaluated 470 times by 1 test
Evaluated by:
  • od
rpl_fclose ( stdin ) == (-1)Description
TRUEnever evaluated
FALSEevaluated 36 times by 1 test
Evaluated by:
  • od
0-470
1978 die (EXIT_FAILURE, errno, _("standard input"));
never executed: ((!!sizeof (struct { _Static_assert ( 1 , "verify_expr (" "1" ", " "(error (1, (*__errno_location ()), dcgettext (((void *)0), \"standard input\", 5)), assume (false))" ")"); int _gl_dummy; })) ? ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "standard input" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))) : ((error ( 1 , (*__errno_location ()) , dcgettext (((void *)0), "standard input" , 5) ), (( 0 ) ? (void) 0 : __builtin_unreachable ()))));
0
1979-
1980 return ok ? EXIT_SUCCESS : EXIT_FAILURE;
executed 506 times by 1 test: return ok ? 0 : 1 ;
Executed by:
  • od
506
1981}-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.1.2