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