(usage): Use EXIT_SUCCESS, not 0, for clarity.
[platform/upstream/coreutils.git] / src / od.c
1 /* od -- dump files in octal and other formats
2    Copyright (C) 92, 1995-2004 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 != EXIT_SUCCESS)
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);
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.  IN_ERRNO, if nonzero, is the error number
986    corresponding to the most recent action for IN_STREAM.  */
987
988 static int
989 check_and_close (int in_errno)
990 {
991   int err = 0;
992
993   if (in_stream != NULL)
994     {
995       if (ferror (in_stream))
996         {
997           error (0, in_errno, _("%s: read error"), input_filename);
998           if (in_stream != stdin)
999             fclose (in_stream);
1000           err = 1;
1001         }
1002       else if (in_stream != stdin && fclose (in_stream) == EOF)
1003         {
1004           error (0, errno, "%s", input_filename);
1005           err = 1;
1006         }
1007
1008       in_stream = NULL;
1009     }
1010
1011   if (ferror (stdout))
1012     {
1013       error (0, 0, _("write error"));
1014       err = 1;
1015     }
1016
1017   return err;
1018 }
1019
1020 /* Decode the modern od format string S.  Append the decoded
1021    representation to the global array SPEC, reallocating SPEC if
1022    necessary.  Return zero if S is valid, nonzero otherwise.  */
1023
1024 static int
1025 decode_format_string (const char *s)
1026 {
1027   const char *s_orig = s;
1028   assert (s != NULL);
1029
1030   while (*s != '\0')
1031     {
1032       struct tspec tspec;
1033       const char *next;
1034
1035       if (decode_one_format (s_orig, s, &next, &tspec))
1036         return 1;
1037
1038       assert (s != next);
1039       s = next;
1040
1041       if (n_specs_allocated <= n_specs)
1042         spec = x2nrealloc (spec, &n_specs_allocated, sizeof *spec);
1043
1044       memcpy (&spec[n_specs], &tspec, sizeof *spec);
1045       ++n_specs;
1046     }
1047
1048   return 0;
1049 }
1050
1051 /* Given a list of one or more input filenames FILE_LIST, set the global
1052    file pointer IN_STREAM to position N_SKIP in the concatenation of
1053    those files.  If any file operation fails or if there are fewer than
1054    N_SKIP bytes in the combined input, give an error message and return
1055    nonzero.  When possible, use seek rather than read operations to
1056    advance IN_STREAM.  */
1057
1058 static int
1059 skip (uintmax_t n_skip)
1060 {
1061   int err = 0;
1062   int in_errno = 0;
1063
1064   if (n_skip == 0)
1065     return 0;
1066
1067   while (in_stream != NULL)     /* EOF.  */
1068     {
1069       struct stat file_stats;
1070
1071       /* First try seeking.  For large offsets, this extra work is
1072          worthwhile.  If the offset is below some threshold it may be
1073          more efficient to move the pointer by reading.  There are two
1074          issues when trying to seek:
1075            - the file must be seekable.
1076            - before seeking to the specified position, make sure
1077              that the new position is in the current file.
1078              Try to do that by getting file's size using fstat.
1079              But that will work only for regular files.  */
1080
1081       if (fstat (fileno (in_stream), &file_stats) == 0)
1082         {
1083           /* The st_size field is valid only for regular files
1084              (and for symbolic links, which cannot occur here).
1085              If the number of bytes left to skip is at least
1086              as large as the size of the current file, we can
1087              decrement n_skip and go on to the next file.  */
1088
1089           if (S_ISREG (file_stats.st_mode) && 0 <= file_stats.st_size)
1090             {
1091               if ((uintmax_t) file_stats.st_size <= n_skip)
1092                 n_skip -= file_stats.st_size;
1093               else
1094                 {
1095                   if (fseeko (in_stream, n_skip, SEEK_CUR) != 0)
1096                     {
1097                       in_errno = errno;
1098                       err = 1;
1099                     }
1100                   n_skip = 0;
1101                 }
1102             }
1103
1104           /* If it's not a regular file with nonnegative size,
1105              position the file pointer by reading.  */
1106
1107           else
1108             {
1109               char buf[BUFSIZ];
1110               size_t n_bytes_read, n_bytes_to_read = BUFSIZ;
1111
1112               while (0 < n_skip)
1113                 {
1114                   if (n_skip < n_bytes_to_read)
1115                     n_bytes_to_read = n_skip;
1116                   n_bytes_read = fread (buf, 1, n_bytes_to_read, in_stream);
1117                   n_skip -= n_bytes_read;
1118                   if (n_bytes_read != n_bytes_to_read)
1119                     {
1120                       in_errno = errno;
1121                       err = 1;
1122                       n_skip = 0;
1123                       break;
1124                     }
1125                 }
1126             }
1127
1128           if (n_skip == 0)
1129             break;
1130         }
1131
1132       else   /* cannot fstat() file */
1133         {
1134           error (0, errno, "%s", input_filename);
1135           err = 1;
1136         }
1137
1138       err |= check_and_close (in_errno);
1139
1140       err |= open_next_file ();
1141     }
1142
1143   if (n_skip != 0)
1144     error (EXIT_FAILURE, 0, _("cannot skip past end of combined input"));
1145
1146   return err;
1147 }
1148
1149 static void
1150 format_address_none (uintmax_t address ATTRIBUTE_UNUSED, char c ATTRIBUTE_UNUSED)
1151 {
1152 }
1153
1154 static void
1155 format_address_std (uintmax_t address, char c)
1156 {
1157   char buf[MAX_ADDRESS_LENGTH + 2];
1158   char *p = buf + sizeof buf;
1159   char const *pbound;
1160
1161   *--p = '\0';
1162   *--p = c;
1163   pbound = p - address_pad_len;
1164
1165   /* Use a special case of the code for each base.  This is measurably
1166      faster than generic code.  */
1167   switch (address_base)
1168     {
1169     case 8:
1170       do
1171         *--p = '0' + (address & 7);
1172       while ((address >>= 3) != 0);
1173       break;
1174
1175     case 10:
1176       do
1177         *--p = '0' + (address % 10);
1178       while ((address /= 10) != 0);
1179       break;
1180
1181     case 16:
1182       do
1183         *--p = "0123456789abcdef"[address & 15];
1184       while ((address >>= 4) != 0);
1185       break;
1186     }
1187
1188   while (pbound < p)
1189     *--p = '0';
1190
1191   fputs (p, stdout);
1192 }
1193
1194 static void
1195 format_address_paren (uintmax_t address, char c)
1196 {
1197   putchar ('(');
1198   format_address_std (address, ')');
1199   putchar (c);
1200 }
1201
1202 static void
1203 format_address_label (uintmax_t address, char c)
1204 {
1205   format_address_std (address, ' ');
1206   format_address_paren (address + pseudo_offset, c);
1207 }
1208
1209 /* Write N_BYTES bytes from CURR_BLOCK to standard output once for each
1210    of the N_SPEC format specs.  CURRENT_OFFSET is the byte address of
1211    CURR_BLOCK in the concatenation of input files, and it is printed
1212    (optionally) only before the output line associated with the first
1213    format spec.  When duplicate blocks are being abbreviated, the output
1214    for a sequence of identical input blocks is the output for the first
1215    block followed by an asterisk alone on a line.  It is valid to compare
1216    the blocks PREV_BLOCK and CURR_BLOCK only when N_BYTES == BYTES_PER_BLOCK.
1217    That condition may be false only for the last input block -- and then
1218    only when it has not been padded to length BYTES_PER_BLOCK.  */
1219
1220 static void
1221 write_block (uintmax_t current_offset, size_t n_bytes,
1222              const char *prev_block, const char *curr_block)
1223 {
1224   static int first = 1;
1225   static int prev_pair_equal = 0;
1226
1227 #define EQUAL_BLOCKS(b1, b2) (memcmp ((b1), (b2), bytes_per_block) == 0)
1228
1229   if (abbreviate_duplicate_blocks
1230       && !first && n_bytes == bytes_per_block
1231       && EQUAL_BLOCKS (prev_block, curr_block))
1232     {
1233       if (prev_pair_equal)
1234         {
1235           /* The two preceding blocks were equal, and the current
1236              block is the same as the last one, so print nothing.  */
1237         }
1238       else
1239         {
1240           printf ("*\n");
1241           prev_pair_equal = 1;
1242         }
1243     }
1244   else
1245     {
1246       size_t i;
1247
1248       prev_pair_equal = 0;
1249       for (i = 0; i < n_specs; i++)
1250         {
1251           if (i == 0)
1252             format_address (current_offset, '\0');
1253           else
1254             printf ("%*s", address_pad_len, "");
1255           (*spec[i].print_function) (n_bytes, curr_block, spec[i].fmt_string);
1256           if (spec[i].hexl_mode_trailer)
1257             {
1258               /* space-pad out to full line width, then dump the trailer */
1259               int datum_width = width_bytes[spec[i].size];
1260               int blank_fields = (bytes_per_block - n_bytes) / datum_width;
1261               int field_width = spec[i].field_width + 1;
1262               printf ("%*s", blank_fields * field_width, "");
1263               dump_hexl_mode_trailer (n_bytes, curr_block);
1264             }
1265           putchar ('\n');
1266         }
1267     }
1268   first = 0;
1269 }
1270
1271 /* Read a single byte into *C from the concatenation of the input files
1272    named in the global array FILE_LIST.  On the first call to this
1273    function, the global variable IN_STREAM is expected to be an open
1274    stream associated with the input file INPUT_FILENAME.  If IN_STREAM
1275    is at end-of-file, close it and update the global variables IN_STREAM
1276    and INPUT_FILENAME so they correspond to the next file in the list.
1277    Then try to read a byte from the newly opened file.  Repeat if
1278    necessary until EOF is reached for the last file in FILE_LIST, then
1279    set *C to EOF and return.  Subsequent calls do likewise.  The return
1280    value is nonzero if any errors occured, zero otherwise.  */
1281
1282 static int
1283 read_char (int *c)
1284 {
1285   int err = 0;
1286
1287   *c = EOF;
1288
1289   while (in_stream != NULL)     /* EOF.  */
1290     {
1291       *c = fgetc (in_stream);
1292
1293       if (*c != EOF)
1294         break;
1295
1296       err |= check_and_close (errno);
1297
1298       err |= open_next_file ();
1299     }
1300
1301   return err;
1302 }
1303
1304 /* Read N bytes into BLOCK from the concatenation of the input files
1305    named in the global array FILE_LIST.  On the first call to this
1306    function, the global variable IN_STREAM is expected to be an open
1307    stream associated with the input file INPUT_FILENAME.  If all N
1308    bytes cannot be read from IN_STREAM, close IN_STREAM and update
1309    the global variables IN_STREAM and INPUT_FILENAME.  Then try to
1310    read the remaining bytes from the newly opened file.  Repeat if
1311    necessary until EOF is reached for the last file in FILE_LIST.
1312    On subsequent calls, don't modify BLOCK and return zero.  Set
1313    *N_BYTES_IN_BUFFER to the number of bytes read.  If an error occurs,
1314    it will be detected through ferror when the stream is about to be
1315    closed.  If there is an error, give a message but continue reading
1316    as usual and return nonzero.  Otherwise return zero.  */
1317
1318 static int
1319 read_block (size_t n, char *block, size_t *n_bytes_in_buffer)
1320 {
1321   int err = 0;
1322
1323   assert (0 < n && n <= bytes_per_block);
1324
1325   *n_bytes_in_buffer = 0;
1326
1327   if (n == 0)
1328     return 0;
1329
1330   while (in_stream != NULL)     /* EOF.  */
1331     {
1332       size_t n_needed;
1333       size_t n_read;
1334
1335       n_needed = n - *n_bytes_in_buffer;
1336       n_read = fread (block + *n_bytes_in_buffer, 1, n_needed, in_stream);
1337
1338       *n_bytes_in_buffer += n_read;
1339
1340       if (n_read == n_needed)
1341         break;
1342
1343       err |= check_and_close (errno);
1344
1345       err |= open_next_file ();
1346     }
1347
1348   return err;
1349 }
1350
1351 /* Return the least common multiple of the sizes associated
1352    with the format specs.  */
1353
1354 static int
1355 get_lcm (void)
1356 {
1357   size_t i;
1358   int l_c_m = 1;
1359
1360   for (i = 0; i < n_specs; i++)
1361     l_c_m = lcm (l_c_m, width_bytes[(int) spec[i].size]);
1362   return l_c_m;
1363 }
1364
1365 /* If S is a valid traditional offset specification with an optional
1366    leading '+' return nonzero and set *OFFSET to the offset it denotes.  */
1367
1368 static int
1369 parse_old_offset (const char *s, uintmax_t *offset)
1370 {
1371   int radix;
1372   enum strtol_error s_err;
1373
1374   if (*s == '\0')
1375     return 0;
1376
1377   /* Skip over any leading '+'. */
1378   if (s[0] == '+')
1379     ++s;
1380
1381   /* Determine the radix we'll use to interpret S.  If there is a `.',
1382      it's decimal, otherwise, if the string begins with `0X'or `0x',
1383      it's hexadecimal, else octal.  */
1384   if (strchr (s, '.') != NULL)
1385     radix = 10;
1386   else
1387     {
1388       if (s[0] == '0' && (s[1] == 'x' || s[1] == 'X'))
1389         radix = 16;
1390       else
1391         radix = 8;
1392     }
1393
1394   s_err = xstrtoumax (s, NULL, radix, offset, "Bb");
1395   if (s_err != LONGINT_OK)
1396     {
1397       STRTOL_FAIL_WARN (s, _("old-style offset"), s_err);
1398       return 0;
1399     }
1400   return 1;
1401 }
1402
1403 /* Read a chunk of size BYTES_PER_BLOCK from the input files, write the
1404    formatted block to standard output, and repeat until the specified
1405    maximum number of bytes has been read or until all input has been
1406    processed.  If the last block read is smaller than BYTES_PER_BLOCK
1407    and its size is not a multiple of the size associated with a format
1408    spec, extend the input block with zero bytes until its length is a
1409    multiple of all format spec sizes.  Write the final block.  Finally,
1410    write on a line by itself the offset of the byte after the last byte
1411    read.  Accumulate return values from calls to read_block and
1412    check_and_close, and if any was nonzero, return nonzero.
1413    Otherwise, return zero.  */
1414
1415 static int
1416 dump (void)
1417 {
1418   char *block[2];
1419   uintmax_t current_offset;
1420   int idx;
1421   int err;
1422   size_t n_bytes_read;
1423
1424   block[0] = xnmalloc (2, bytes_per_block);
1425   block[1] = block[0] + bytes_per_block;
1426
1427   current_offset = n_bytes_to_skip;
1428
1429   idx = 0;
1430   err = 0;
1431   if (limit_bytes_to_format)
1432     {
1433       while (1)
1434         {
1435           size_t n_needed;
1436           if (current_offset >= end_offset)
1437             {
1438               n_bytes_read = 0;
1439               break;
1440             }
1441           n_needed = MIN (end_offset - current_offset,
1442                           (uintmax_t) bytes_per_block);
1443           err |= read_block (n_needed, block[idx], &n_bytes_read);
1444           if (n_bytes_read < bytes_per_block)
1445             break;
1446           assert (n_bytes_read == bytes_per_block);
1447           write_block (current_offset, n_bytes_read,
1448                        block[!idx], block[idx]);
1449           current_offset += n_bytes_read;
1450           idx = !idx;
1451         }
1452     }
1453   else
1454     {
1455       while (1)
1456         {
1457           err |= read_block (bytes_per_block, block[idx], &n_bytes_read);
1458           if (n_bytes_read < bytes_per_block)
1459             break;
1460           assert (n_bytes_read == bytes_per_block);
1461           write_block (current_offset, n_bytes_read,
1462                        block[!idx], block[idx]);
1463           current_offset += n_bytes_read;
1464           idx = !idx;
1465         }
1466     }
1467
1468   if (n_bytes_read > 0)
1469     {
1470       int l_c_m;
1471       size_t bytes_to_write;
1472
1473       l_c_m = get_lcm ();
1474
1475       /* Make bytes_to_write the smallest multiple of l_c_m that
1476          is at least as large as n_bytes_read.  */
1477       bytes_to_write = l_c_m * ((n_bytes_read + l_c_m - 1) / l_c_m);
1478
1479       memset (block[idx] + n_bytes_read, 0, bytes_to_write - n_bytes_read);
1480       write_block (current_offset, bytes_to_write,
1481                    block[!idx], block[idx]);
1482       current_offset += n_bytes_read;
1483     }
1484
1485   format_address (current_offset, '\n');
1486
1487   if (limit_bytes_to_format && current_offset >= end_offset)
1488     err |= check_and_close (0);
1489
1490   free (block[0]);
1491
1492   return err;
1493 }
1494
1495 /* STRINGS mode.  Find each "string constant" in the input.
1496    A string constant is a run of at least `string_min' ASCII
1497    graphic (or formatting) characters terminated by a null.
1498    Based on a function written by Richard Stallman for a
1499    traditional version of od.  Return nonzero if an error
1500    occurs.  Otherwise, return zero.  */
1501
1502 static int
1503 dump_strings (void)
1504 {
1505   size_t bufsize = MAX (100, string_min);
1506   char *buf = xmalloc (bufsize);
1507   uintmax_t address = n_bytes_to_skip;
1508   int err;
1509
1510   err = 0;
1511   while (1)
1512     {
1513       size_t i;
1514       int c;
1515
1516       /* See if the next `string_min' chars are all printing chars.  */
1517     tryline:
1518
1519       if (limit_bytes_to_format
1520           && (end_offset < string_min || end_offset - string_min <= address))
1521         break;
1522
1523       for (i = 0; i < string_min; i++)
1524         {
1525           err |= read_char (&c);
1526           address++;
1527           if (c < 0)
1528             {
1529               free (buf);
1530               return err;
1531             }
1532           if (!ISPRINT (c))
1533             /* Found a non-printing.  Try again starting with next char.  */
1534             goto tryline;
1535           buf[i] = c;
1536         }
1537
1538       /* We found a run of `string_min' printable characters.
1539          Now see if it is terminated with a null byte.  */
1540       while (!limit_bytes_to_format || address < end_offset)
1541         {
1542           if (i == bufsize)
1543             {
1544               buf = x2nrealloc (buf, &bufsize, sizeof *buf);
1545             }
1546           err |= read_char (&c);
1547           address++;
1548           if (c < 0)
1549             {
1550               free (buf);
1551               return err;
1552             }
1553           if (c == '\0')
1554             break;              /* It is; print this string.  */
1555           if (!ISPRINT (c))
1556             goto tryline;       /* It isn't; give up on this string.  */
1557           buf[i++] = c;         /* String continues; store it all.  */
1558         }
1559
1560       /* If we get here, the string is all printable and null-terminated,
1561          so print it.  It is all in `buf' and `i' is its length.  */
1562       buf[i] = 0;
1563       format_address (address - i - 1, ' ');
1564
1565       for (i = 0; (c = buf[i]); i++)
1566         {
1567           switch (c)
1568             {
1569             case '\007':
1570               fputs ("\\a", stdout);
1571               break;
1572
1573             case '\b':
1574               fputs ("\\b", stdout);
1575               break;
1576
1577             case '\f':
1578               fputs ("\\f", stdout);
1579               break;
1580
1581             case '\n':
1582               fputs ("\\n", stdout);
1583               break;
1584
1585             case '\r':
1586               fputs ("\\r", stdout);
1587               break;
1588
1589             case '\t':
1590               fputs ("\\t", stdout);
1591               break;
1592
1593             case '\v':
1594               fputs ("\\v", stdout);
1595               break;
1596
1597             default:
1598               putc (c, stdout);
1599             }
1600         }
1601       putchar ('\n');
1602     }
1603
1604   /* We reach this point only if we search through
1605      (max_bytes_to_format - string_min) bytes before reaching EOF.  */
1606
1607   free (buf);
1608
1609   err |= check_and_close (0);
1610   return err;
1611 }
1612
1613 int
1614 main (int argc, char **argv)
1615 {
1616   int c;
1617   int n_files;
1618   size_t i;
1619   int l_c_m;
1620   size_t desired_width IF_LINT (= 0);
1621   int width_specified = 0;
1622   int n_failed_decodes = 0;
1623   int err;
1624   char const *short_options = (posix2_version () < 200112
1625                                ? COMMON_SHORT_OPTIONS "s::w::"
1626                                : COMMON_SHORT_OPTIONS "s:w:");
1627
1628   /* The old-style `pseudo starting address' to be printed in parentheses
1629      after any true address.  */
1630   uintmax_t pseudo_start IF_LINT (= 0);
1631
1632   initialize_main (&argc, &argv);
1633   program_name = argv[0];
1634   setlocale (LC_ALL, "");
1635   bindtextdomain (PACKAGE, LOCALEDIR);
1636   textdomain (PACKAGE);
1637
1638   atexit (close_stdout);
1639
1640   err = 0;
1641
1642   for (i = 0; i <= MAX_INTEGRAL_TYPE_SIZE; i++)
1643     integral_type_size[i] = NO_SIZE;
1644
1645   integral_type_size[sizeof (char)] = CHAR;
1646   integral_type_size[sizeof (short int)] = SHORT;
1647   integral_type_size[sizeof (int)] = INT;
1648   integral_type_size[sizeof (long int)] = LONG;
1649 #if HAVE_UNSIGNED_LONG_LONG
1650   /* If `long' and `long long' have the same size, it's fine
1651      to overwrite the entry for `long' with this one.  */
1652   integral_type_size[sizeof (ulonglong_t)] = LONG_LONG;
1653 #endif
1654
1655   for (i = 0; i <= MAX_FP_TYPE_SIZE; i++)
1656     fp_type_size[i] = NO_SIZE;
1657
1658   fp_type_size[sizeof (float)] = FLOAT_SINGLE;
1659   /* The array entry for `double' is filled in after that for LONG_DOUBLE
1660      so that if `long double' is the same type or if long double isn't
1661      supported FLOAT_LONG_DOUBLE will never be used.  */
1662   fp_type_size[sizeof (LONG_DOUBLE)] = FLOAT_LONG_DOUBLE;
1663   fp_type_size[sizeof (double)] = FLOAT_DOUBLE;
1664
1665   n_specs = 0;
1666   n_specs_allocated = 0;
1667   spec = NULL;
1668
1669   format_address = format_address_std;
1670   address_base = 8;
1671   address_pad_len = 7;
1672   flag_dump_strings = 0;
1673
1674   while ((c = getopt_long (argc, argv, short_options, long_options, NULL))
1675          != -1)
1676     {
1677       uintmax_t tmp;
1678       enum strtol_error s_err;
1679
1680       switch (c)
1681         {
1682         case 0:
1683           break;
1684
1685         case 'A':
1686           switch (optarg[0])
1687             {
1688             case 'd':
1689               format_address = format_address_std;
1690               address_base = 10;
1691               address_pad_len = 7;
1692               break;
1693             case 'o':
1694               format_address = format_address_std;
1695               address_base = 8;
1696               address_pad_len = 7;
1697               break;
1698             case 'x':
1699               format_address = format_address_std;
1700               address_base = 16;
1701               address_pad_len = 6;
1702               break;
1703             case 'n':
1704               format_address = format_address_none;
1705               address_pad_len = 0;
1706               break;
1707             default:
1708               error (EXIT_FAILURE, 0,
1709                      _("invalid output address radix `%c'; \
1710 it must be one character from [doxn]"),
1711                      optarg[0]);
1712               break;
1713             }
1714           break;
1715
1716         case 'j':
1717           s_err = xstrtoumax (optarg, NULL, 0, &n_bytes_to_skip, "bkm");
1718           if (s_err != LONGINT_OK)
1719             STRTOL_FATAL_ERROR (optarg, _("skip argument"), s_err);
1720           break;
1721
1722         case 'N':
1723           limit_bytes_to_format = 1;
1724
1725           s_err = xstrtoumax (optarg, NULL, 0, &max_bytes_to_format, "bkm");
1726           if (s_err != LONGINT_OK)
1727             STRTOL_FATAL_ERROR (optarg, _("limit argument"), s_err);
1728           break;
1729
1730         case 's':
1731           if (optarg == NULL)
1732             string_min = 3;
1733           else
1734             {
1735               s_err = xstrtoumax (optarg, NULL, 0, &tmp, "bkm");
1736               if (s_err != LONGINT_OK)
1737                 STRTOL_FATAL_ERROR (optarg, _("minimum string length"), s_err);
1738
1739               /* The minimum string length may be no larger than SIZE_MAX,
1740                  since we may allocate a buffer of this size.  */
1741               if (SIZE_MAX < tmp)
1742                 error (EXIT_FAILURE, 0, _("%s is too large"), optarg);
1743
1744               string_min = tmp;
1745             }
1746           flag_dump_strings = 1;
1747           break;
1748
1749         case 't':
1750           if (decode_format_string (optarg))
1751             ++n_failed_decodes;
1752           break;
1753
1754         case 'v':
1755           abbreviate_duplicate_blocks = 0;
1756           break;
1757
1758         case TRADITIONAL_OPTION:
1759           traditional = 1;
1760           break;
1761
1762           /* The next several cases map the traditional format
1763              specification options to the corresponding modern format
1764              specs.  GNU od accepts any combination of old- and
1765              new-style options.  Format specification options accumulate.  */
1766
1767 #define CASE_OLD_ARG(old_char,new_string)               \
1768         case old_char:                                  \
1769           {                                             \
1770             if (decode_format_string (new_string))      \
1771               ++n_failed_decodes;                       \
1772           }                                             \
1773           break
1774
1775           CASE_OLD_ARG ('a', "a");
1776           CASE_OLD_ARG ('b', "oC");
1777           CASE_OLD_ARG ('c', "c");
1778           CASE_OLD_ARG ('d', "u2");
1779           CASE_OLD_ARG ('f', "fF");
1780           CASE_OLD_ARG ('h', "x2");
1781           CASE_OLD_ARG ('i', "d2");
1782           CASE_OLD_ARG ('l', "d4");
1783           CASE_OLD_ARG ('o', "o2");
1784           CASE_OLD_ARG ('x', "x2");
1785
1786           /* FIXME: POSIX 1003.1-2001 with XSI requires this:
1787
1788              CASE_OLD_ARG ('s', "d2");
1789
1790              for the traditional syntax, but this conflicts with case
1791              's' above. */
1792
1793 #undef CASE_OLD_ARG
1794
1795         case 'w':
1796           width_specified = 1;
1797           if (optarg == NULL)
1798             {
1799               desired_width = 32;
1800             }
1801           else
1802             {
1803               uintmax_t w_tmp;
1804               s_err = xstrtoumax (optarg, NULL, 10, &w_tmp, "");
1805               if (s_err != LONGINT_OK)
1806                 STRTOL_FATAL_ERROR (optarg, _("width specification"), s_err);
1807               if (SIZE_MAX < w_tmp)
1808                 error (EXIT_FAILURE, 0, _("%s is too large"), optarg);
1809               desired_width = w_tmp;
1810             }
1811           break;
1812
1813         case_GETOPT_HELP_CHAR;
1814
1815         case_GETOPT_VERSION_CHAR (PROGRAM_NAME, AUTHORS);
1816
1817         default:
1818           usage (EXIT_FAILURE);
1819           break;
1820         }
1821     }
1822
1823   if (n_failed_decodes > 0)
1824     exit (EXIT_FAILURE);
1825
1826   if (flag_dump_strings && n_specs > 0)
1827     error (EXIT_FAILURE, 0,
1828            _("no type may be specified when dumping strings"));
1829
1830   n_files = argc - optind;
1831
1832   /* If the --traditional option is used, there may be from
1833      0 to 3 remaining command line arguments;  handle each case
1834      separately.
1835         od [file] [[+]offset[.][b] [[+]label[.][b]]]
1836      The offset and pseudo_start have the same syntax.
1837
1838      FIXME: POSIX 1003.1-2001 with XSI requires support for the
1839      traditional syntax even if --traditional is not given.  */
1840
1841   if (traditional)
1842     {
1843       uintmax_t offset;
1844
1845       if (n_files == 1)
1846         {
1847           if (parse_old_offset (argv[optind], &offset))
1848             {
1849               n_bytes_to_skip = offset;
1850               --n_files;
1851               ++argv;
1852             }
1853         }
1854       else if (n_files == 2)
1855         {
1856           uintmax_t o1, o2;
1857           if (parse_old_offset (argv[optind], &o1)
1858               && parse_old_offset (argv[optind + 1], &o2))
1859             {
1860               n_bytes_to_skip = o1;
1861               flag_pseudo_start = 1;
1862               pseudo_start = o2;
1863               argv += 2;
1864               n_files -= 2;
1865             }
1866           else if (parse_old_offset (argv[optind + 1], &o2))
1867             {
1868               n_bytes_to_skip = o2;
1869               --n_files;
1870               argv[optind + 1] = argv[optind];
1871               ++argv;
1872             }
1873           else
1874             {
1875               error (0, 0,
1876                      _("invalid second operand in compatibility mode `%s'"),
1877                      argv[optind + 1]);
1878               usage (EXIT_FAILURE);
1879             }
1880         }
1881       else if (n_files == 3)
1882         {
1883           uintmax_t o1, o2;
1884           if (parse_old_offset (argv[optind + 1], &o1)
1885               && parse_old_offset (argv[optind + 2], &o2))
1886             {
1887               n_bytes_to_skip = o1;
1888               flag_pseudo_start = 1;
1889               pseudo_start = o2;
1890               argv[optind + 2] = argv[optind];
1891               argv += 2;
1892               n_files -= 2;
1893             }
1894           else
1895             {
1896               error (0, 0,
1897             _("in compatibility mode, the last two arguments must be offsets"));
1898               usage (EXIT_FAILURE);
1899             }
1900         }
1901       else if (n_files > 3)
1902         {
1903           error (0, 0,
1904                  _("compatibility mode supports at most three arguments"));
1905           usage (EXIT_FAILURE);
1906         }
1907
1908       if (flag_pseudo_start)
1909         {
1910           if (format_address == format_address_none)
1911             {
1912               address_base = 8;
1913               address_pad_len = 7;
1914               format_address = format_address_paren;
1915             }
1916           else
1917             format_address = format_address_label;
1918         }
1919     }
1920
1921   if (limit_bytes_to_format)
1922     {
1923       end_offset = n_bytes_to_skip + max_bytes_to_format;
1924       if (end_offset < n_bytes_to_skip)
1925         error (EXIT_FAILURE, 0, _("skip-bytes + read-bytes is too large"));
1926     }
1927
1928   if (n_specs == 0)
1929     {
1930       if (decode_format_string ("o2"))
1931         {
1932           /* This happens on Cray systems that don't have a 2-byte
1933              integral type.  */
1934           exit (EXIT_FAILURE);
1935         }
1936
1937       n_specs = 1;
1938     }
1939
1940   if (n_files > 0)
1941     {
1942       /* Set the global pointer FILE_LIST so that it
1943          references the first file-argument on the command-line.  */
1944
1945       file_list = (char const *const *) &argv[optind];
1946     }
1947   else
1948     {
1949       /* No files were listed on the command line.
1950          Set the global pointer FILE_LIST so that it
1951          references the null-terminated list of one name: "-".  */
1952
1953       file_list = default_file_list;
1954     }
1955
1956   /* open the first input file */
1957   err |= open_next_file ();
1958   if (in_stream == NULL)
1959     goto cleanup;
1960
1961   /* skip over any unwanted header bytes */
1962   err |= skip (n_bytes_to_skip);
1963   if (in_stream == NULL)
1964     goto cleanup;
1965
1966   pseudo_offset = (flag_pseudo_start ? pseudo_start - n_bytes_to_skip : 0);
1967
1968   /* Compute output block length.  */
1969   l_c_m = get_lcm ();
1970
1971   if (width_specified)
1972     {
1973       if (desired_width != 0 && desired_width % l_c_m == 0)
1974         bytes_per_block = desired_width;
1975       else
1976         {
1977           error (0, 0, _("warning: invalid width %lu; using %d instead"),
1978                  (unsigned long) desired_width, l_c_m);
1979           bytes_per_block = l_c_m;
1980         }
1981     }
1982   else
1983     {
1984       if (l_c_m < DEFAULT_BYTES_PER_BLOCK)
1985         bytes_per_block = l_c_m * (DEFAULT_BYTES_PER_BLOCK / l_c_m);
1986       else
1987         bytes_per_block = l_c_m;
1988     }
1989
1990 #ifdef DEBUG
1991   for (i = 0; i < n_specs; i++)
1992     {
1993       printf (_("%d: fmt=\"%s\" width=%d\n"),
1994               i, spec[i].fmt_string, width_bytes[spec[i].size]);
1995     }
1996 #endif
1997
1998   err |= (flag_dump_strings ? dump_strings () : dump ());
1999
2000 cleanup:;
2001
2002   if (have_read_stdin && fclose (stdin) == EOF)
2003     error (EXIT_FAILURE, errno, _("standard input"));
2004
2005   exit (err == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
2006 }