]> git.ipfire.org Git - thirdparty/tar.git/commitdiff
maint: switch from ERROR to paxerror etc
authorPaul Eggert <eggert@cs.ucla.edu>
Sun, 18 Aug 2024 01:16:16 +0000 (18:16 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Mon, 19 Aug 2024 16:57:13 +0000 (09:57 -0700)
Prefer functions like ‘paxerror’ to macros like ‘ERROR’.
The functions have cleaner semantics, and calls are
easier to read.

22 files changed:
src/buffer.c
src/checkpoint.c
src/common.h
src/compare.c
src/create.c
src/delete.c
src/exclist.c
src/extract.c
src/incremen.c
src/list.c
src/map.c
src/misc.c
src/names.c
src/sparse.c
src/suffix.c
src/system.c
src/tar.c
src/transform.c
src/update.c
src/warning.c
src/xattrs.c
src/xheader.c

index 11c5073e16c4347c95b9846ea0e8f1de549a9b62..1109e1e219657c819ae6697b2651917cd8cdd484 100644 (file)
@@ -456,12 +456,12 @@ open_compressed_archive (void)
             {
             case ct_tar:
               if (shortfile)
-                ERROR ((0, 0, _("This does not look like a tar archive")));
+               paxerror (0, _("This does not look like a tar archive"));
               return archive;
 
             case ct_none:
               if (shortfile)
-                ERROR ((0, 0, _("This does not look like a tar archive")));
+               paxerror (0, _("This does not look like a tar archive"));
               set_compression_program_by_suffix (archive_name_array[0], NULL,
                                                 false);
               if (!use_compress_program_option)
@@ -680,8 +680,7 @@ check_tty (enum access_mode mode)
   if (strcmp (archive_name_array[0], "-") == 0
       && isatty (mode == ACCESS_READ ? STDIN_FILENO : STDOUT_FILENO))
     {
-      FATAL_ERROR ((0, 0,
-                   mode == ACCESS_READ
+      paxfatal (0, (mode == ACCESS_READ
                    ? _("Refusing to read archive contents from terminal "
                        "(missing -f option?)")
                    : _("Refusing to write archive contents to terminal "
@@ -726,10 +725,10 @@ _open_archive (enum access_mode wanted_access)
   bool backed_up_flag = false;
 
   if (record_size == 0)
-    FATAL_ERROR ((0, 0, _("Invalid value for record_size")));
+    paxfatal (0, 0, _("Invalid value for record_size"));
 
   if (archive_names == 0)
-    FATAL_ERROR ((0, 0, _("No archive name given")));
+    paxfatal (0, _("No archive name given"));
 
   tar_stat_destroy (&current_stat_info);
 
@@ -772,7 +771,7 @@ _open_archive (enum access_mode wanted_access)
     {
       read_full_records = true; /* could be a pipe, be safe */
       if (verify_option)
-        FATAL_ERROR ((0, 0, _("Cannot verify stdin/stdout archive")));
+       paxfatal (0, _("Cannot verify stdin/stdout archive"));
 
       switch (wanted_access)
         {
@@ -784,11 +783,10 @@ _open_archive (enum access_mode wanted_access)
             archive = STDIN_FILENO;
             type = check_compressed_archive (&shortfile);
             if (type != ct_tar && type != ct_none)
-              FATAL_ERROR ((0, 0,
-                            _("Archive is compressed. Use %s option"),
-                            compress_option (type)));
+             paxfatal (0, _("Archive is compressed. Use %s option"),
+                       compress_option (type));
             if (shortfile)
-              ERROR ((0, 0, _("This does not look like a tar archive")));
+             paxerror (0, _("This does not look like a tar archive"));
           }
           break;
 
@@ -840,8 +838,7 @@ _open_archive (enum access_mode wanted_access)
             break;
 
           default:
-            FATAL_ERROR ((0, 0,
-                          _("Cannot update compressed archives")));
+           paxfatal (0, _("Cannot update compressed archives"));
           }
         break;
       }
@@ -928,13 +925,13 @@ archive_read_error (void)
   read_error (*archive_name_cursor);
 
   if (record_start_block == 0)
-    FATAL_ERROR ((0, 0, _("At beginning of tape, quitting now")));
+    paxfatal (0, _("At beginning of tape, quitting now"));
 
   /* Read error in mid archive.  We retry up to READ_ERROR_MAX times and
      then give up on reading the archive.  */
 
   if (read_error_count++ > READ_ERROR_MAX)
-    FATAL_ERROR ((0, 0, _("Too many errors, quitting")));
+    paxfatal (0, _("Too many errors, quitting"));
   return;
 }
 
@@ -966,11 +963,11 @@ short_read (size_t status)
       && archive_is_dev ())
     {
       idx_t rsize = status / BLOCKSIZE;
-      WARN ((0, 0,
-            ngettext ("Record size = %td block",
-                      "Record size = %td blocks",
-                      rsize),
-            rsize));
+      paxwarn (0,
+              ngettext ("Record size = %td block",
+                        "Record size = %td blocks",
+                        rsize),
+              rsize);
     }
 
   while (left % BLOCKSIZE != 0
@@ -987,11 +984,10 @@ short_read (size_t status)
         {
           idx_t rest = record_size - left;
 
-          FATAL_ERROR ((0, 0,
-                        ngettext ("Unaligned block (%td byte) in archive",
-                                  "Unaligned block (%td bytes) in archive",
+         paxfatal (0, ngettext ("Unaligned block (%td byte) in archive",
+                                "Unaligned block (%td bytes) in archive",
                                   rest),
-                        rest));
+                   rest);
         }
 
       left -= status;
@@ -1064,8 +1060,8 @@ backspace_output (void)
       {
         /* Lseek failed.  Try a different method.  */
 
-        WARN ((0, 0,
-               _("Cannot backspace archive file; it may be unreadable without -i")));
+       paxwarn (0, _("Cannot backspace archive file;"
+                     " it may be unreadable without -i"));
 
         /* Replace the first part of the record with NULs.  */
 
@@ -1102,7 +1098,7 @@ seek_archive (off_t size)
     return offset;
 
   if (offset % record_size)
-    FATAL_ERROR ((0, 0, _("rmtlseek not stopped at a record boundary")));
+    paxfatal (0, _("rmtlseek not stopped at a record boundary"));
 
   /* Convert to number of records */
   offset /= BLOCKSIZE;
@@ -1163,8 +1159,8 @@ init_volume_number (void)
     {
       if (fscanf (file, "%d", &global_volno) != 1
           || global_volno < 0)
-        FATAL_ERROR ((0, 0, _("%s: contains invalid volume number"),
-                      quotearg_colon (volno_file_option)));
+       paxfatal (0, _("%s: contains invalid volume number"),
+                 quotearg_colon (volno_file_option));
       if (ferror (file))
         read_error (volno_file_option);
       if (fclose (file) != 0)
@@ -1198,7 +1194,7 @@ increase_volume_number (void)
 {
   global_volno++;
   if (global_volno < 0)
-    FATAL_ERROR ((0, 0, _("Volume number overflow")));
+    paxfatal (0, _("Volume number overflow"));
   volno++;
 }
 
@@ -1219,12 +1215,12 @@ change_tape_menu (FILE *read_file)
 
       if (getline (&input_buffer, &size, read_file) <= 0)
         {
-          WARN ((0, 0, _("EOF where user reply was expected")));
+         paxwarn (0, _("EOF where user reply was expected"));
 
           if (subcommand_option != EXTRACT_SUBCOMMAND
               && subcommand_option != LIST_SUBCOMMAND
               && subcommand_option != DIFF_SUBCOMMAND)
-            WARN ((0, 0, _("WARNING: Archive is incomplete")));
+           paxwarn (0, _("WARNING: Archive is incomplete"));
 
           fatal_exit ();
         }
@@ -1251,12 +1247,12 @@ change_tape_menu (FILE *read_file)
         case 'q':
           /* Quit.  */
 
-          WARN ((0, 0, _("No new volume; exiting.\n")));
+         paxwarn (0, _("No new volume; exiting.\n"));
 
           if (subcommand_option != EXTRACT_SUBCOMMAND
               && subcommand_option != LIST_SUBCOMMAND
               && subcommand_option != DIFF_SUBCOMMAND)
-            WARN ((0, 0, _("WARNING: Archive is incomplete")));
+           paxwarn (0, _("WARNING: Archive is incomplete"));
 
           fatal_exit ();
 
@@ -1347,8 +1343,7 @@ new_volume (enum access_mode mode)
           if (volno_file_option)
             closeout_volume_number ();
           if (sys_exec_info_script (archive_name_cursor, global_volno+1))
-            FATAL_ERROR ((0, 0, _("%s command failed"),
-                          quote (info_script_option)));
+           paxfatal (0, _("%s command failed"), quote (info_script_option));
         }
       else
         change_tape_menu (read_file);
@@ -1409,7 +1404,7 @@ read_header0 (struct tar_stat_info *info)
       set_next_block_after (current_header);
       return true;
     }
-  ERROR ((0, 0, _("This does not look like a tar archive")));
+  paxerror (0, _("This does not look like a tar archive"));
   return false;
 }
 
@@ -1446,7 +1441,7 @@ try_new_volume (void)
   header = find_next_block ();
   if (!header)
     {
-      WARN ((0, 0, _("This does not look like a tar archive")));
+      paxwarn (0, _("This does not look like a tar archive"));
       return false;
     }
 
@@ -1458,7 +1453,7 @@ try_new_volume (void)
        if (read_header (&header, &dummy, read_header_x_global)
            != HEADER_SUCCESS_EXTENDED)
          {
-           WARN ((0, 0, _("This does not look like a tar archive")));
+           paxwarn (0, _("This does not look like a tar archive"));
            return false;
          }
 
@@ -1487,7 +1482,7 @@ try_new_volume (void)
            break;
 
          default:
-           WARN ((0, 0, _("This does not look like a tar archive")));
+           paxwarn (0, _("This does not look like a tar archive"));
            return false;
          }
         break;
@@ -1522,8 +1517,8 @@ try_new_volume (void)
     {
       if (!continued_file_name)
        {
-         WARN ((0, 0, _("%s is not continued on this volume"),
-                quote (bufmap_head->file_name)));
+         paxwarn (0, _("%s is not continued on this volume"),
+                  quote (bufmap_head->file_name));
          return false;
        }
 
@@ -1533,13 +1528,14 @@ try_new_volume (void)
               && strlen (bufmap_head->file_name) >= NAME_FIELD_SIZE
               && strncmp (continued_file_name, bufmap_head->file_name,
                           NAME_FIELD_SIZE) == 0)
-            WARN ((0, 0,
- _("%s is possibly continued on this volume: header contains truncated name"),
-                   quote (bufmap_head->file_name)));
+           paxwarn (0,
+                    _("%s is possibly continued on this volume:"
+                      " header contains truncated name"),
+                    quote (bufmap_head->file_name));
           else
             {
-              WARN ((0, 0, _("%s is not continued on this volume"),
-                     quote (bufmap_head->file_name)));
+             paxwarn (0, _("%s is not continued on this volume"),
+                      quote (bufmap_head->file_name));
               return false;
             }
         }
@@ -1548,21 +1544,21 @@ try_new_volume (void)
       if (ckd_add (&s, continued_file_size, continued_file_offset)
          || s != bufmap_head->sizetotal)
         {
-         WARN ((0, 0, _("%s is the wrong size (%jd != %ju + %ju)"),
-                 quote (continued_file_name),
-                intmax (bufmap_head->sizetotal),
-                uintmax (continued_file_size),
-                uintmax (continued_file_offset)));
+         paxwarn (0, _("%s is the wrong size (%jd != %ju + %ju)"),
+                  quote (continued_file_name),
+                  intmax (bufmap_head->sizetotal),
+                  uintmax (continued_file_size),
+                  uintmax (continued_file_offset));
           return false;
         }
 
       if (bufmap_head->sizetotal - bufmap_head->sizeleft
          != continued_file_offset)
         {
-         WARN ((0, 0, _("This volume is out of sequence (%jd - %jd != %ju)"),
-                intmax (bufmap_head->sizetotal),
-                intmax (bufmap_head->sizeleft),
-                uintmax (continued_file_offset)));
+         paxwarn (0, _("This volume is out of sequence (%jd - %jd != %ju)"),
+                  intmax (bufmap_head->sizetotal),
+                  intmax (bufmap_head->sizeleft),
+                  uintmax (continued_file_offset));
           return false;
         }
     }
@@ -1624,8 +1620,8 @@ match_volume_label (void)
       union block *label = find_next_block ();
 
       if (!label)
-       FATAL_ERROR ((0, 0, _("Archive not labeled to match %s"),
-                     quote (volume_label_option)));
+       paxfatal (0, _("Archive not labeled to match %s"),
+                 quote (volume_label_option));
       if (label->header.typeflag == GNUTYPE_VOLHDR)
        {
          ASSIGN_STRING_N (&volume_label, label->header.name);
@@ -1642,13 +1638,13 @@ match_volume_label (void)
     }
 
   if (!volume_label)
-    FATAL_ERROR ((0, 0, _("Archive not labeled to match %s"),
-                  quote (volume_label_option)));
+    paxfatal (0, _("Archive not labeled to match %s"),
+             quote (volume_label_option));
 
   if (!check_label_pattern (volume_label))
-    FATAL_ERROR ((0, 0, _("Volume %s does not match %s"),
-                  quote_n (0, volume_label),
-                  quote_n (1, volume_label_option)));
+    paxfatal (0, _("Volume %s does not match %s"),
+             quote_n (0, volume_label),
+             quote_n (1, volume_label_option));
 }
 
 /* Mark the archive with volume label STR. */
@@ -1737,9 +1733,10 @@ gnu_add_multi_volume_header (struct bufmap *map)
 
   if (len > NAME_FIELD_SIZE)
     {
-      WARN ((0, 0,
-            _("%s: file name too long to be stored in a GNU multivolume header, truncated"),
-            quotearg_colon (map->file_name)));
+      paxwarn (0,
+              _("%s: file name too long to be stored"
+                " in a GNU multivolume header, truncated"),
+              quotearg_colon (map->file_name));
       len = NAME_FIELD_SIZE;
     }
 
@@ -1931,7 +1928,7 @@ _gnu_flush_write (size_t buffer_level)
 
   if (status % BLOCKSIZE)
     {
-      ERROR ((0, 0, _("write did not end on a block boundary")));
+      paxerror (0, _("write did not end on a block boundary"));
       archive_write_error (status);
     }
 
index 5f82ef20d323a5cb41a17609773987a40c8588dc..cfe20d98c99e6f0222e1e188eb880bd51437cb70 100644 (file)
@@ -132,7 +132,7 @@ checkpoint_compile_action (const char *str)
       act = alloc_action (cop_sleep);
       act->v.time = stoint (arg, &p, NULL, 0, TYPE_MAXIMUM (time_t));
       if ((p == arg) | *p)
-       FATAL_ERROR ((0, 0, _("%s: not a valid timeout"), str));
+       paxfatal (0, _("%s: not a valid timeout"), str);
     }
   else if (strcmp (str, "totals") == 0)
     alloc_action (cop_totals);
@@ -143,7 +143,7 @@ checkpoint_compile_action (const char *str)
       sigaddset (&sigs, act->v.signal);
     }
   else
-    FATAL_ERROR ((0, 0, _("%s: unknown checkpoint action"), str));
+    paxfatal (0, _("%s: unknown checkpoint action"), str);
 }
 
 void
@@ -304,10 +304,10 @@ format_checkpoint_string (FILE *fp, size_t len,
                    if (wordsplit (arg, &ws,
                                   (WRDSF_NOVAR | WRDSF_NOCMD
                                    | WRDSF_QUOTE | WRDSF_DELIM)))
-                     ERROR ((0, 0, _("cannot split string '%s': %s"),
-                             arg, wordsplit_strerror (&ws)));
+                     paxerror (0, _("cannot split string '%s': %s"),
+                               arg, wordsplit_strerror (&ws));
                    else if (3 < ws.ws_wordc)
-                     ERROR ((0, 0, _("too many words in '%s'"), arg));
+                     paxerror (0, _("too many words in '%s'"), arg);
                    else
                      {
                        int i;
index 5216d09d1e9bfb86bec5a3d0022f9d7613b68531..2d7f76cd4eb9800996db345098687903b7b87149 100644 (file)
@@ -1027,12 +1027,8 @@ extern int warning_option;
 
 #define WARNING_ENABLED(opt) (warning_option & (opt))
 
-#define WARNOPT(opt,args)                      \
-  do                                           \
-    {                                          \
-      if (WARNING_ENABLED (opt)) WARN (args);  \
-    }                                          \
-  while (0)
+extern void warnopt (int, int, char const *, ...)
+  ATTRIBUTE_COLD ATTRIBUTE_FORMAT ((printf, 3, 4));
 
 /* Module unlink.c */
 
index 90c89c9e4197ad931cecf2d83be3f81cf4eb40ac..7716dfcdbf971eb16c813b29f8ee3d58a4b3a1da 100644 (file)
@@ -133,7 +133,7 @@ read_and_process (struct tar_stat_info *st, bool (*processor) (idx_t, char *))
       data_block = find_next_block ();
       if (! data_block)
        {
-         ERROR ((0, 0, _("Unexpected EOF in archive")));
+         paxerror (0, _("Unexpected EOF in archive"));
          return;
        }
 
@@ -477,9 +477,9 @@ diff_archive (void)
   switch (current_header->header.typeflag)
     {
     default:
-      ERROR ((0, 0, _("%s: Unknown file type '%c', diffed as normal file"),
-             quotearg_colon (current_stat_info.file_name),
-             current_header->header.typeflag));
+      paxerror (0, _("%s: Unknown file type '%c', diffed as normal file"),
+               quotearg_colon (current_stat_info.file_name),
+               current_header->header.typeflag);
       FALLTHROUGH;
     case AREGTYPE:
     case REGTYPE:
@@ -529,19 +529,17 @@ verify_volume (void)
   int may_fail = 0;
   if (removed_prefixes_p ())
     {
-      WARN((0, 0,
-           _("Archive contains file names with leading prefixes removed.")));
+      paxwarn (0,
+              _("Archive contains file names with leading prefixes removed."));
       may_fail = 1;
     }
   if (transform_program_p ())
     {
-      WARN((0, 0,
-           _("Archive contains transformed file names.")));
+      paxwarn (0, _("Archive contains transformed file names."));
       may_fail = 1;
     }
   if (may_fail)
-    WARN((0, 0,
-         _("Verification may fail to locate original files.")));
+    paxwarn (0, _("Verification may fail to locate original files."));
 
   clear_directory_table ();
 
@@ -595,10 +593,11 @@ verify_volume (void)
            }
          while (status == HEADER_FAILURE);
 
-         ERROR ((0, 0,
-                 ngettext ("VERIFY FAILURE: %d invalid header detected",
-                           "VERIFY FAILURE: %d invalid headers detected",
-                           counter), counter));
+         paxerror (0,
+                   ngettext ("VERIFY FAILURE: %d invalid header detected",
+                             "VERIFY FAILURE: %d invalid headers detected",
+                             counter),
+                   counter);
        }
       if (status == HEADER_END_OF_FILE)
        break;
@@ -611,9 +610,9 @@ verify_volume (void)
                                    read_header_auto);
              if (status == HEADER_ZERO_BLOCK)
                break;
-             WARNOPT (WARN_ALONE_ZERO_BLOCK,
-                      (0, 0, _("A lone zero block at %jd"),
-                       intmax (current_block_ordinal ())));
+             warnopt (WARN_ALONE_ZERO_BLOCK,
+                      0, _("A lone zero block at %jd"),
+                      intmax (current_block_ordinal ()));
             }
          continue;
        }
index 65a386b48b149879205d9952d7a72404a383f20f..b6e555e35cddd1f78d9d313f5ea7f0c80f537190 100644 (file)
@@ -69,12 +69,11 @@ exclusion_tag_warning (const char *dirname, const char *tagname,
                       const char *message)
 {
   if (verbose_option)
-    WARNOPT (WARN_CACHEDIR,
-            (0, 0,
-             _("%s: contains a cache directory tag %s; %s"),
-             quotearg_colon (dirname),
-             quotearg_n (1, tagname),
-             message));
+    warnopt (WARN_CACHEDIR, 0,
+            _("%s: contains a cache directory tag %s; %s"),
+            quotearg_colon (dirname),
+            quotearg_n (1, tagname),
+            message);
 }
 
 enum exclusion_tag_type
@@ -238,14 +237,14 @@ to_chars_subst (bool negative, bool gnu_format, uintmax_t value, size_t valsize,
         Apart from this they are completely identical. */
       uintmax_t s = (negsub &= archive_format == GNU_FORMAT) ? - sub : sub;
       char const *ssign = &"-"[!negsub];
-      WARN ((0, 0, _("value %s%ju out of %s range %jd..%ju;"
-                    " substituting %s%ju"),
-            valuesign, value, type, minval, maxval, ssign, s));
+      paxwarn (0, _("value %s%ju out of %s range %jd..%ju;"
+                   " substituting %s%ju"),
+              valuesign, value, type, minval, maxval, ssign, s);
       return to_chars (negsub, s, valsize, 0, where, size, type);
     }
   else
-    ERROR ((0, 0, _("value %s%ju out of %s range %jd..%ju"),
-           valuesign, value, type, minval, maxval));
+    paxerror (0, _("value %s%ju out of %s range %jd..%ju"),
+             valuesign, value, type, minval, maxval);
   return false;
 }
 
@@ -304,7 +303,7 @@ to_chars (bool negative, uintmax_t value, size_t valsize,
          if (! warned_once)
            {
              warned_once = true;
-             WARN ((0, 0, _("Generating negative octal headers")));
+             paxwarn (0, _("Generating negative octal headers"));
            }
          where[size - 1] = '\0';
          to_octal (value & MAX_VAL_WITH_DIGITS (valsize * CHAR_BIT, 1),
@@ -581,18 +580,17 @@ write_ustar_long_name (const char *name)
 
   if (length > PREFIX_FIELD_SIZE + NAME_FIELD_SIZE + 1)
     {
-      ERROR ((0, 0, _("%s: file name is too long (max %d); not dumped"),
-             quotearg_colon (name),
-             PREFIX_FIELD_SIZE + NAME_FIELD_SIZE + 1));
+      paxerror (0, _("%s: file name is too long (max %d); not dumped"),
+               quotearg_colon (name),
+               PREFIX_FIELD_SIZE + NAME_FIELD_SIZE + 1);
       return NULL;
     }
 
   i = split_long_name (name, length);
   if (i == 0 || (nlen = length - i - 1) > NAME_FIELD_SIZE || nlen == 0)
     {
-      ERROR ((0, 0,
-             _("%s: file name is too long (cannot be split); not dumped"),
-             quotearg_colon (name)));
+      paxerror (0, _("%s: file name is too long (cannot be split); not dumped"),
+               quotearg_colon (name));
       return NULL;
     }
 
@@ -617,9 +615,8 @@ write_long_link (struct tar_stat_info *st)
     case V7_FORMAT:                    /* old V7 tar format */
     case USTAR_FORMAT:
     case STAR_FORMAT:
-      ERROR ((0, 0,
-             _("%s: link name is too long; not dumped"),
-             quotearg_colon (st->link_name)));
+      paxerror (0, _("%s: link name is too long; not dumped"),
+               quotearg_colon (st->link_name));
       break;
 
     case OLDGNU_FORMAT:
@@ -644,9 +641,8 @@ write_long_name (struct tar_stat_info *st)
     case V7_FORMAT:
       if (strlen (st->file_name) > NAME_FIELD_SIZE-1)
        {
-         ERROR ((0, 0, _("%s: file name is too long (max %d); not dumped"),
-                 quotearg_colon (st->file_name),
-                 NAME_FIELD_SIZE - 1));
+         paxerror (0, _("%s: file name is too long (max %d); not dumped"),
+                   quotearg_colon (st->file_name), NAME_FIELD_SIZE - 1);
          return NULL;
        }
       break;
@@ -1080,15 +1076,14 @@ dump_regular_file (int fd, struct tar_stat_info *st)
       if (count != bufsize)
        {
          memset (blk->buffer + count, 0, bufsize - count);
-         WARNOPT (WARN_FILE_SHRANK,
-                  (0, 0,
-                   ngettext (("%s: File shrank by %jd byte;"
-                              " padding with zeros"),
-                             ("%s: File shrank by %jd bytes;"
-                              " padding with zeros"),
-                             size_left),
-                   quotearg_colon (st->orig_file_name),
-                   intmax (size_left)));
+         warnopt (WARN_FILE_SHRANK, 0,
+                  ngettext (("%s: File shrank by %jd byte;"
+                             " padding with zeros"),
+                            ("%s: File shrank by %jd bytes;"
+                             " padding with zeros"),
+                            size_left),
+                  quotearg_colon (st->orig_file_name),
+                  intmax (size_left));
          if (! ignore_failed_read_option)
            set_exit_status (TAREXIT_DIFFERS);
          pad_archive (size_left - (bufsize - count));
@@ -1180,10 +1175,9 @@ dump_dir0 (struct tar_stat_info *st, char const *directory)
       && st->parent->stat.st_dev != st->stat.st_dev)
     {
       if (verbose_option)
-       WARNOPT (WARN_XDEV,
-                (0, 0,
-                 _("%s: file is on a different filesystem; not dumped"),
-                 quotearg_colon (st->orig_file_name)));
+       warnopt (WARN_XDEV, 0,
+                _("%s: file is on a different filesystem; not dumped"),
+                quotearg_colon (st->orig_file_name));
     }
   else
     {
@@ -1433,9 +1427,8 @@ compare_links (void const *entry1, void const *entry2)
 static void
 unknown_file_error (char const *p)
 {
-  WARNOPT (WARN_FILE_IGNORED,
-          (0, 0, _("%s: Unknown file type; file ignored"),
-           quotearg_colon (p)));
+  warnopt (WARN_FILE_IGNORED, 0,
+          _("%s: Unknown file type; file ignored"), quotearg_colon (p));
   if (!ignore_failed_read_option)
     set_exit_status (TAREXIT_FAILURE);
 }
@@ -1535,19 +1528,13 @@ file_count_links (struct tar_stat_info *st)
 void
 check_links (void)
 {
-  struct link *lp;
-
   if (!link_table)
     return;
 
-  for (lp = hash_get_first (link_table); lp;
+  for (struct link *lp = hash_get_first (link_table); lp;
        lp = hash_get_next (link_table, lp))
-    {
-      if (lp->nlink)
-       {
-         WARN ((0, 0, _("Missing links to %s."), quote (lp->name)));
-       }
-    }
+    if (lp->nlink)
+      paxwarn (0, _("Missing links to %s."), quote (lp->name));
 }
 
 /* Assuming DIR is the working directory, open FILE, using FLAGS to
@@ -1704,18 +1691,16 @@ dump_file0 (struct tar_stat_info *st, char const *name, char const *p)
       && (!after_date_option || OLDER_TAR_STAT_TIME (*st, c)))
     {
       if (!incremental_option && verbose_option)
-       WARNOPT (WARN_FILE_UNCHANGED,
-                (0, 0, _("%s: file is unchanged; not dumped"),
-                 quotearg_colon (p)));
+       warnopt (WARN_FILE_UNCHANGED, 0, _("%s: file is unchanged; not dumped"),
+                quotearg_colon (p));
       return allocated;
     }
 
   /* See if we are trying to dump the archive.  */
   if (sys_file_is_archive (st))
     {
-      WARNOPT (WARN_IGNORE_ARCHIVE,
-              (0, 0, _("%s: archive cannot contain itself; not dumped"),
-               quotearg_colon (p)));
+      warnopt (WARN_IGNORE_ARCHIVE, 0,
+              _("%s: archive cannot contain itself; not dumped"), quotearg_colon (p));
       return allocated;
     }
 
@@ -1835,9 +1820,8 @@ dump_file0 (struct tar_stat_info *st, char const *name, char const *p)
 
          if (!ok)
            {
-             WARNOPT (WARN_FILE_CHANGED,
-                      (0, 0, _("%s: file changed as we read it"),
-                       quotearg_colon (p)));
+             warnopt (WARN_FILE_CHANGED, 0, _("%s: file changed as we read it"),
+                      quotearg_colon (p));
              if (! ignore_failed_read_option)
                set_exit_status (TAREXIT_DIFFERS);
            }
@@ -1910,14 +1894,12 @@ dump_file0 (struct tar_stat_info *st, char const *name, char const *p)
     }
   else if (S_ISSOCK (st->stat.st_mode))
     {
-      WARNOPT (WARN_FILE_IGNORED,
-              (0, 0, _("%s: socket ignored"), quotearg_colon (p)));
+      warnopt (WARN_FILE_IGNORED, 0, _("%s: socket ignored"), quotearg_colon (p));
       return allocated;
     }
   else if (S_ISDOOR (st->stat.st_mode))
     {
-      WARNOPT (WARN_FILE_IGNORED,
-              (0, 0, _("%s: door ignored"), quotearg_colon (p)));
+      warnopt (WARN_FILE_IGNORED, 0, _("%s: door ignored"), quotearg_colon (p));
       return allocated;
     }
   else
index 069c47fdbf165f04c351f9e7c4dd0c8a7504265f..ecf8bbae2a680d2509092f107475fc9a92432b70 100644 (file)
@@ -57,7 +57,7 @@ move_archive (off_t count)
          || ckd_add (&position, move_start, increment)
          || position < 0)
        {
-         ERROR ((0, EOVERFLOW, "lseek: %s", archive_name_array[0]));
+         paxerror (EOVERFLOW, "lseek: %s", archive_name_array[0]);
          return;
        }
       else if (rmtlseek (archive, position, SEEK_SET) == position)
@@ -205,12 +205,12 @@ delete_archive_members (void)
          switch (previous_status)
            {
            case HEADER_STILL_UNREAD:
-             WARN ((0, 0, _("This does not look like a tar archive")));
+             paxwarn (0, _("This does not look like a tar archive"));
              FALLTHROUGH;
            case HEADER_SUCCESS:
            case HEADER_SUCCESS_EXTENDED:
            case HEADER_ZERO_BLOCK:
-             ERROR ((0, 0, _("Skipping to next header")));
+             paxerror (0, _("Skipping to next header"));
              FALLTHROUGH;
            case HEADER_FAILURE:
              break;
@@ -348,7 +348,7 @@ delete_archive_members (void)
              break;
 
            case HEADER_FAILURE:
-             ERROR ((0, 0, _("Deleting non-header from archive")));
+             paxerror (0, _("Deleting non-header from archive"));
              set_next_block_after (current_header);
              break;
 
index e8d636e44f39de0049343051334ffc4d96b7588d..6c1a3dfd20ebc3cc2a2b8deed3e94094b921ff61 100644 (file)
@@ -93,7 +93,7 @@ info_attach_exclist (struct tar_stat_info *dir)
          fp = fdopen (fd, "r");
          if (!fp)
            {
-             ERROR ((0, errno, _("%s: fdopen failed"), file->name));
+             paxerror (errno, _("%s: fdopen failed"), file->name);
              close (fd);
              continue;
            }
@@ -110,10 +110,7 @@ info_attach_exclist (struct tar_stat_info *dir)
                              FNM_FILE_NAME|EXCLUDE_WILDCARDS|EXCLUDE_ANCHORED,
                              '\n',
                              vcsfile->data))
-           {
-             int e = errno;
-             FATAL_ERROR ((0, e, "%s", quotearg_colon (file->name)));
-           }
+           paxfatal (errno, "%s", quotearg_colon (file->name));
          fclose (fp);
 
          ent = xmalloc (sizeof (*ent));
index 36d34f9239721f3d24e7316945b2a27836e39b23..77dbd5c939257a3d70dc45b1f4945f146e963df6 100644 (file)
@@ -369,9 +369,8 @@ static void
 check_time (char const *file_name, struct timespec t)
 {
   if (t.tv_sec < 0)
-    WARNOPT (WARN_TIMESTAMP,
-            (0, 0, _("%s: implausibly old time stamp %s"),
-             file_name, tartime (t, true)));
+    warnopt (WARN_TIMESTAMP, 0, _("%s: implausibly old time stamp %s"),
+            file_name, tartime (t, true));
   else if (timespec_cmp (volume_start_time, t) < 0)
     {
       struct timespec now;
@@ -387,9 +386,8 @@ check_time (char const *file_name, struct timespec t)
              diff.tv_nsec += BILLION;
              diff.tv_sec--;
            }
-         WARNOPT (WARN_TIMESTAMP,
-                  (0, 0, _("%s: time stamp %s is %s s in the future"),
-                   file_name, tartime (t, true), code_timespec (diff, buf)));
+         warnopt (WARN_TIMESTAMP, 0, _("%s: time stamp %s is %s s in the future"),
+                  file_name, tartime (t, true), code_timespec (diff, buf));
        }
     }
 }
@@ -653,8 +651,8 @@ repair_delayed_set_stat (char const *dir,
        }
     }
 
-  ERROR ((0, 0, _("%s: Unexpected inconsistency when making directory"),
-         quotearg_colon (dir)));
+  paxerror (0, _("%s: Unexpected inconsistency when making directory"),
+           quotearg_colon (dir));
 }
 
 static void
@@ -891,8 +889,7 @@ maybe_recoverable (char *file_name, bool regular, bool *interdir_made)
       switch (old_files_option)
        {
        case SKIP_OLD_FILES:
-         WARNOPT (WARN_EXISTING_FILE,
-                  (0, 0, _("%s: skipping existing file"), file_name));
+         warnopt (WARN_EXISTING_FILE, 0, _("%s: skipping existing file"), file_name);
          return RECOVER_SKIP;
 
        case KEEP_OLD_FILES:
@@ -1000,9 +997,10 @@ apply_nonancestor_delayed_set_stat (char const *file_name, bool after_links)
              current_mode_mask = ALL_MODE_BITS;
              if (! (st.st_dev == data->dev && st.st_ino == data->ino))
                {
-                 ERROR ((0, 0,
-                         _("%s: Directory renamed before its status could be extracted"),
-                         quotearg_colon (data->file_name)));
+                 paxerror (0,
+                           _("%s: Directory renamed before its status"
+                             " could be extracted"),
+                           quotearg_colon (data->file_name));
                  skip_this_one = 1;
                }
            }
@@ -1223,8 +1221,8 @@ open_output_file (char const *file_name, int typeflag, mode_t mode,
       if (!conttype_diagnosed)
        {
          conttype_diagnosed = 1;
-         WARNOPT (WARN_CONTIGUOUS_CAST,
-                  (0, 0, _("Extracting contiguous files as regular files")));
+         warnopt (WARN_CONTIGUOUS_CAST, 0,
+                  _("Extracting contiguous files as regular files"));
        }
     }
 
@@ -1341,7 +1339,7 @@ extract_file (char *file_name, int typeflag)
        data_block = find_next_block ();
        if (! data_block)
          {
-           ERROR ((0, 0, _("Unexpected EOF in archive")));
+           paxerror (0, _("Unexpected EOF in archive"));
            break;              /* FIXME: What happens, then?  */
          }
 
@@ -1611,10 +1609,9 @@ extract_symlink (char *file_name, MAYBE_UNUSED int typeflag)
            if (!warned)
              {
                warned = true;
-               WARNOPT (WARN_SYMLINK_CAST,
-                        (0, 0,
-                         _("Attempting extraction of symbolic links"
-                           " as hard links")));
+               warnopt (WARN_SYMLINK_CAST, 0,
+                        _("Attempting extraction of symbolic links"
+                          " as hard links"));
              }
            return extract_link (file_name, typeflag);
          }
@@ -1755,21 +1752,19 @@ prepare_to_extract (char const *file_name, int typeflag, tar_extractor_t *fun)
       return false;
 
     case GNUTYPE_MULTIVOL:
-      ERROR ((0, 0,
-             _("%s: Cannot extract -- file is continued from another volume"),
-             quotearg_colon (current_stat_info.file_name)));
+      paxerror (0, _("%s: Cannot extract -- file is continued from another volume"),
+               quotearg_colon (current_stat_info.file_name));
       return false;
 
     case GNUTYPE_LONGNAME:
     case GNUTYPE_LONGLINK:
-      ERROR ((0, 0, _("Unexpected long name header")));
+      paxerror (0, _("Unexpected long name header"));
       return false;
 
     default:
-      WARNOPT (WARN_UNKNOWN_CAST,
-              (0, 0,
-               _("%s: Unknown file type '%c', extracted as normal file"),
-               quotearg_colon (file_name), typeflag));
+      warnopt (WARN_UNKNOWN_CAST, 0,
+              _("%s: Unknown file type '%c', extracted as normal file"),
+              quotearg_colon (file_name), typeflag);
       extractor = extract_file;
     }
 
@@ -1797,9 +1792,8 @@ prepare_to_extract (char const *file_name, int typeflag, tar_extractor_t *fun)
        case KEEP_NEWER_FILES:
          if (file_newer_p (file_name, 0, &current_stat_info))
            {
-             WARNOPT (WARN_IGNORE_NEWER,
-                      (0, 0, _("Current %s is newer or same age"),
-                       quote (file_name)));
+             warnopt (WARN_IGNORE_NEWER, 0, _("Current %s is newer or same age"),
+                      quote (file_name));
              return false;
            }
          break;
@@ -1828,8 +1822,8 @@ extract_archive (void)
   skip_dotdot_name = (!absolute_names_option
                      && contains_dot_dot (current_stat_info.orig_file_name));
   if (skip_dotdot_name)
-    ERROR ((0, 0, _("%s: Member name contains '..'"),
-           quotearg_colon (current_stat_info.orig_file_name)));
+    paxerror (0, _("%s: Member name contains '..'"),
+             quotearg_colon (current_stat_info.orig_file_name));
 
   if (!current_stat_info.file_name[0]
       || skip_dotdot_name
@@ -1859,9 +1853,8 @@ extract_archive (void)
   if (backup_option)
     if (!maybe_backup_file (current_stat_info.file_name, 0))
       {
-       int e = errno;
-       ERROR ((0, e, _("%s: Was unable to backup this file"),
-               quotearg_colon (current_stat_info.file_name)));
+       paxerror (errno, _("%s: Was unable to backup this file"),
+                 quotearg_colon (current_stat_info.file_name));
        skip_member ();
        return;
       }
@@ -2027,9 +2020,9 @@ rename_directory (char *src, char *dst)
          break;
        }
 
-      ERROR ((0, e, _("Cannot rename %s to %s"),
-             quote_n (0, src),
-             quote_n (1, dst)));
+      paxerror (e, _("Cannot rename %s to %s"),
+               quote_n (0, src),
+               quote_n (1, dst));
       return false;
     }
   return true;
index 0654e1550fd17de3e6e176bc9456f51061618e1f..115bab3dadaefd50175bd290574d5c7fe9538ad7 100644 (file)
@@ -492,11 +492,10 @@ procdir (const char *name_buffer, struct tar_stat_info *st,
            {
              if (strcmp (d->name, name_buffer))
                {
-                 WARNOPT (WARN_RENAME_DIRECTORY,
-                          (0, 0,
-                           _("%s: Directory has been renamed from %s"),
-                           quotearg_colon (name_buffer),
-                           quote_n (1, d->name)));
+                 warnopt (WARN_RENAME_DIRECTORY, 0,
+                          _("%s: Directory has been renamed from %s"),
+                          quotearg_colon (name_buffer),
+                          quote_n (1, d->name));
                  directory->orig = d;
                  DIR_SET_FLAG (directory, DIRF_RENAMED);
                  DIR_CLEAR_FLAG (d, DIRF_RENAMED);
@@ -536,10 +535,10 @@ procdir (const char *name_buffer, struct tar_stat_info *st,
        {
          if (strcmp (d->name, name_buffer))
            {
-             WARNOPT (WARN_RENAME_DIRECTORY,
-                      (0, 0, _("%s: Directory has been renamed from %s"),
-                       quotearg_colon (name_buffer),
-                       quote_n (1, d->name)));
+             warnopt (WARN_RENAME_DIRECTORY, 0,
+                      _("%s: Directory has been renamed from %s"),
+                      quotearg_colon (name_buffer),
+                      quote_n (1, d->name));
              directory->orig = d;
              DIR_SET_FLAG (directory, DIRF_RENAMED);
              DIR_CLEAR_FLAG (d, DIRF_RENAMED);
@@ -550,9 +549,8 @@ procdir (const char *name_buffer, struct tar_stat_info *st,
       else
        {
          DIR_SET_FLAG (directory, DIRF_NEW);
-         WARNOPT (WARN_NEW_DIRECTORY,
-                  (0, 0, _("%s: Directory is new"),
-                   quotearg_colon (name_buffer)));
+         warnopt (WARN_NEW_DIRECTORY, 0, _("%s: Directory is new"),
+                  quotearg_colon (name_buffer));
          directory->children =
            (listed_incremental_option
             || (OLDER_STAT_TIME (*stat_data, m)
@@ -566,10 +564,9 @@ procdir (const char *name_buffer, struct tar_stat_info *st,
   if (one_file_system_option && st->parent
       && stat_data->st_dev != st->parent->stat.st_dev)
     {
-      WARNOPT (WARN_XDEV,
-              (0, 0,
-               _("%s: directory is on a different filesystem; not dumped"),
-               quotearg_colon (directory->name)));
+      warnopt (WARN_XDEV, 0,
+              _("%s: directory is on a different filesystem; not dumped"),
+              quotearg_colon (directory->name));
       directory->children = NO_CHILDREN;
       /* If there is any dumpdir info in that directory, remove it */
       if (directory->dump)
@@ -588,9 +585,8 @@ procdir (const char *name_buffer, struct tar_stat_info *st,
     }
 
   if (perhaps_renamed)
-    WARNOPT (WARN_RENAME_DIRECTORY,
-            (0, 0, _("%s: Directory has been renamed"),
-             quotearg_colon (name_buffer)));
+    warnopt (WARN_RENAME_DIRECTORY, 0, _("%s: Directory has been renamed"),
+            quotearg_colon (name_buffer));
 
   DIR_SET_FLAG (directory, DIRF_INIT);
 
@@ -995,10 +991,9 @@ read_incr_db_01 (int version, const char *initbuf)
   newer_mtime_option = decode_timespec (buf, &ebuf, false);
 
   if (! valid_timespec (newer_mtime_option))
-    FATAL_ERROR ((0, errno, "%s:%jd: %s",
-                 quotearg_colon (listed_incremental_option),
-                 lineno,
-                 _("Invalid time stamp")));
+    paxfatal (errno, "%s:%jd: %s",
+             quotearg_colon (listed_incremental_option),
+             lineno, _("Invalid time stamp"));
   else
     {
       if (version == 1 && *ebuf)
@@ -1009,10 +1004,9 @@ read_incr_db_01 (int version, const char *initbuf)
            = stoint (buf_ns, &ebuf, &overflow, 0, BILLION - 1);
          if ((ebuf == buf_ns) | *ebuf | overflow)
            {
-             ERROR ((0, 0, "%s:%jd: %s",
-                     quotearg_colon (listed_incremental_option),
-                     lineno,
-                     _("Invalid time stamp")));
+             paxerror (0, "%s:%jd: %s",
+                       quotearg_colon (listed_incremental_option), lineno,
+                       _("Invalid time stamp"));
              newer_mtime_option.tv_sec = TYPE_MINIMUM (time_t);
              newer_mtime_option.tv_nsec = -1;
            }
@@ -1037,17 +1031,17 @@ read_incr_db_01 (int version, const char *initbuf)
          mtime = decode_timespec (strp, &ebuf, false);
          strp = ebuf;
          if (!valid_timespec (mtime) || *strp != ' ')
-           FATAL_ERROR ((0, errno, "%s:%jd: %s",
-                         quotearg_colon (listed_incremental_option), lineno,
-                         _("Invalid modification time")));
+           paxfatal (errno, "%s:%jd: %s",
+                     quotearg_colon (listed_incremental_option), lineno,
+                     _("Invalid modification time"));
 
          bool overflow;
          mtime.tv_nsec = stoint (strp, &ebuf, &overflow, 0, BILLION - 1);
          if ((ebuf == strp) | (*ebuf != ' ') | overflow)
            {
-             FATAL_ERROR ((0, 0, "%s:%jd: %s",
-                           quotearg_colon (listed_incremental_option), lineno,
-                           _("Invalid modification time (nanoseconds)")));
+             paxfatal (0, "%s:%jd: %s",
+                       quotearg_colon (listed_incremental_option), lineno,
+                       _("Invalid modification time (nanoseconds)"));
              mtime.tv_nsec = -1;
            }
          strp = ebuf;
@@ -1059,17 +1053,17 @@ read_incr_db_01 (int version, const char *initbuf)
       dev = stoint (strp, &ebuf, &overflow,
                    TYPE_MINIMUM (dev_t), TYPE_MAXIMUM (dev_t));
       if ((ebuf == strp) | (*ebuf != ' ') | overflow)
-       FATAL_ERROR ((0, 0, "%s:%jd: %s",
-               quotearg_colon (listed_incremental_option), lineno,
-                     _("Invalid device number")));
+       paxfatal (0, "%s:%jd: %s",
+                 quotearg_colon (listed_incremental_option), lineno,
+                 _("Invalid device number"));
       strp = ebuf + 1;
 
       ino = stoint (strp, &ebuf, &overflow,
                    TYPE_MINIMUM (ino_t), TYPE_MAXIMUM (ino_t));
       if ((ebuf == strp) | (*ebuf != ' ') | overflow)
-       FATAL_ERROR ((0, 0, "%s:%jd: %s",
-                     quotearg_colon (listed_incremental_option), lineno,
-                     _("Invalid inode number")));
+       paxfatal (0, "%s:%jd: %s",
+                 quotearg_colon (listed_incremental_option), lineno,
+                 _("Invalid inode number"));
       strp = ebuf + 1;
 
       unquote_string (strp);
@@ -1120,11 +1114,11 @@ read_num (FILE *fp, char const *fieldname,
     {
       buf[i] = c;
       if (i == sizeof buf - 1)
-       FATAL_ERROR ((0, 0,
-                     _("%s: byte %jd: %s %.*s... too long"),
-                     quotearg_colon (listed_incremental_option),
-                     intmax (ftello (fp)),
-                     fieldname, i + 1, buf));
+       paxfatal (0,
+                 _("%s: byte %jd: %s %.*s... too long"),
+                 quotearg_colon (listed_incremental_option),
+                 intmax (ftello (fp)),
+                 fieldname, i + 1, buf);
       c = getc (fp);
     }
 
@@ -1135,20 +1129,18 @@ read_num (FILE *fp, char const *fieldname,
       if (ferror (fp))
        read_fatal (listed_incremental_option);
       if (i != 0)
-       FATAL_ERROR ((0, 0, "%s: %s",
-                     quotearg_colon (listed_incremental_option),
-                     _("Unexpected EOF in snapshot file")));
+       paxfatal (0, "%s: %s",
+                 quotearg_colon (listed_incremental_option),
+                 _("Unexpected EOF in snapshot file"));
       return false;
     }
 
   if (c)
     {
       unsigned uc = c;
-      FATAL_ERROR ((0, 0,
-                   _("%s: byte %jd: %s %s followed by invalid byte 0x%02x"),
-                   quotearg_colon (listed_incremental_option),
-                   intmax (ftello (fp)),
-                   fieldname, buf, uc));
+      paxfatal (0, _("%s: byte %jd: %s %s followed by invalid byte 0x%02x"),
+               quotearg_colon (listed_incremental_option),
+               intmax (ftello (fp)), fieldname, buf, uc);
     }
 
   char *bufend;
@@ -1156,15 +1148,13 @@ read_num (FILE *fp, char const *fieldname,
   *pval = stoint (buf, &bufend, &overflow, min_val, max_val);
 
   if (buf == bufend)
-    FATAL_ERROR ((0, EINVAL,
-                 _("%s: byte %jd: %s %s"),
-                 quotearg_colon (listed_incremental_option),
-                 intmax (ftello (fp)), fieldname, buf));
+    paxfatal (EINVAL, _("%s: byte %jd: %s %s"),
+             quotearg_colon (listed_incremental_option),
+             intmax (ftello (fp)), fieldname, buf);
   if (overflow)
-    FATAL_ERROR ((0, ERANGE,
-                 _("%s: byte %jd: (valid range %jd..%ju)\n\t%s %s"),
-                 quotearg_colon (listed_incremental_option),
-                 intmax (ftello (fp)), min_val, max_val, fieldname, buf));
+    paxfatal (ERANGE, _("%s: byte %jd: (valid range %jd..%ju)\n\t%s %s"),
+             quotearg_colon (listed_incremental_option),
+             intmax (ftello (fp)), min_val, max_val, fieldname, buf);
 
   return true;
 }
@@ -1187,9 +1177,8 @@ read_timespec (FILE *fp, struct timespec *pval)
     }
   else
     {
-      FATAL_ERROR ((0, 0, "%s: %s",
-                   quotearg_colon (listed_incremental_option),
-                   _("Unexpected EOF in snapshot file")));
+      paxfatal (0, "%s: %s", quotearg_colon (listed_incremental_option),
+               _("Unexpected EOF in snapshot file"));
     }
 }
 
@@ -1240,18 +1229,17 @@ read_incr_db_2 (void)
       while (read_obstack (listed_incremental_stream, &stk, &s) == 0 && s > 1)
        ;
       if (getc (listed_incremental_stream) != 0)
-       FATAL_ERROR ((0, 0, _("%s: byte %s: %s"),
-                     quotearg_colon (listed_incremental_option),
-                     offtostr (ftello (listed_incremental_stream), offbuf),
-                     _("Missing record terminator")));
+       paxfatal (0, _("%s: byte %s: %s"),
+                 quotearg_colon (listed_incremental_option),
+                 offtostr (ftello (listed_incremental_stream), offbuf),
+                 _("Missing record terminator"));
 
       content = obstack_finish (&stk);
       note_directory (name, mtime, dev, ino, nfs, false, content);
       obstack_free (&stk, content);
     }
-  FATAL_ERROR ((0, 0, "%s: %s",
-               quotearg_colon (listed_incremental_option),
-               _("Unexpected EOF in snapshot file")));
+  paxfatal (0, "%s: %s", quotearg_colon (listed_incremental_option),
+           _("Unexpected EOF in snapshot file"));
 }
 
 /* Display (to stdout) the range of allowed values for each field
@@ -1349,17 +1337,15 @@ read_directory_file (void)
        {
          ebuf = buf + sizeof PACKAGE_NAME - 1;
          if (*ebuf++ != '-')
-           FATAL_ERROR ((0, 0, _("Bad incremental file format")));
+           paxfatal (0, _("Bad incremental file format"));
          for (; *ebuf != '-'; ebuf++)
            if (!*ebuf)
-             FATAL_ERROR ((0, 0, _("Bad incremental file format")));
+             paxfatal (0, _("Bad incremental file format"));
 
          ebuf++;
          if (! ('0' <= *ebuf && *ebuf <= '0' + TAR_INCREMENTAL_VERSION
                 && !c_isdigit (ebuf[1])))
-           FATAL_ERROR ((0, 0,
-                         _("Unsupported incremental format version: %s"),
-                         ebuf));
+           paxfatal (0, _("Unsupported incremental format version: %s"), ebuf);
          incremental_version = *ebuf - '0';
        }
       else
@@ -1483,7 +1469,7 @@ get_gnu_dumpdir (struct tar_stat_info *stat_info)
       mv_size_left (size);
       data_block = find_next_block ();
       if (!data_block)
-       FATAL_ERROR ((0, 0, _("Unexpected EOF in archive")));
+       paxfatal (0, _("Unexpected EOF in archive"));
       copied = available_space_after (data_block);
       if (copied > size)
        copied = size;
@@ -1523,9 +1509,8 @@ dumpdir_ok (char *dumpdir)
       if (expect && *p != expect)
        {
          unsigned char uc = *p;
-         ERROR ((0, 0,
-                 _("Malformed dumpdir: expected '%c' but found %#3o"),
-                 expect, uc));
+         paxerror (0, _("Malformed dumpdir: expected '%c' but found %#3o"),
+                   expect, uc);
          return false;
        }
       switch (*p)
@@ -1533,8 +1518,7 @@ dumpdir_ok (char *dumpdir)
        case 'X':
          if (has_tempdir)
            {
-             ERROR ((0, 0,
-                     _("Malformed dumpdir: 'X' duplicated")));
+             paxerror (0, _("Malformed dumpdir: 'X' duplicated"));
              return false;
            }
          else
@@ -1546,8 +1530,7 @@ dumpdir_ok (char *dumpdir)
            {
              if (!has_tempdir)
                {
-                 ERROR ((0, 0,
-                         _("Malformed dumpdir: empty name in 'R'")));
+                 paxerror (0, _("Malformed dumpdir: empty name in 'R'"));
                  return false;
                }
              else
@@ -1559,14 +1542,12 @@ dumpdir_ok (char *dumpdir)
        case 'T':
          if (expect != 'T')
            {
-             ERROR ((0, 0,
-                     _("Malformed dumpdir: 'T' not preceded by 'R'")));
+             paxerror (0, _("Malformed dumpdir: 'T' not preceded by 'R'"));
              return false;
            }
          if (p[1] == 0 && !has_tempdir)
            {
-             ERROR ((0, 0,
-                     _("Malformed dumpdir: empty name in 'T'")));
+             paxerror (0, _("Malformed dumpdir: empty name in 'T'"));
              return false;
            }
          expect = 0;
@@ -1585,15 +1566,12 @@ dumpdir_ok (char *dumpdir)
 
   if (expect)
     {
-      ERROR ((0, 0,
-             _("Malformed dumpdir: expected '%c' but found end of data"),
-             expect));
+      paxerror (0, _("Malformed dumpdir: expected '%c' but found end of data"), expect);
       return false;
     }
 
   if (has_tempdir)
-    WARNOPT (WARN_BAD_DUMPDIR,
-            (0, 0, _("Malformed dumpdir: 'X' never used")));
+    warnopt (WARN_BAD_DUMPDIR, 0, _("Malformed dumpdir: 'X' never used"));
 
   return true;
 }
@@ -1636,9 +1614,8 @@ try_purge_directory (char const *directory_name)
                  sizeof TEMP_DIR_TEMPLATE);
          if (!mkdtemp (temp_stub))
            {
-             ERROR ((0, errno,
-                     _("Cannot create temporary directory using template %s"),
-                     quote (temp_stub)));
+             paxerror (errno, _("Cannot create temporary directory using template %s"),
+                       quote (temp_stub));
              free (temp_stub);
              free (current_dir);
              return false;
@@ -1698,8 +1675,8 @@ try_purge_directory (char const *directory_name)
                                  dirs and check it here? */
            {
              stat_diag (p);
-             WARN ((0, 0, _("%s: Not purging directory: unable to stat"),
-                    quotearg_colon (p)));
+             paxwarn (0, _("%s: Not purging directory: unable to stat"),
+                      quotearg_colon (p));
            }
          continue;
        }
@@ -1710,9 +1687,8 @@ try_purge_directory (char const *directory_name)
        {
          if (one_file_system_option && st.st_dev != root_device)
            {
-             WARN ((0, 0,
-                    _("%s: directory is on a different device: not purging"),
-                    quotearg_colon (p)));
+             paxwarn (0, _("%s: directory is on a different device: not purging"),
+                      quotearg_colon (p));
              continue;
            }
 
@@ -1722,10 +1698,7 @@ try_purge_directory (char const *directory_name)
                fprintf (stdlis, _("%s: Deleting %s\n"),
                         program_name, quote (p));
              if (! remove_any_file (p, RECURSIVE_REMOVE_OPTION))
-               {
-                 int e = errno;
-                 ERROR ((0, e, _("%s: Cannot remove"), quotearg_colon (p)));
-               }
+               paxerror (errno, _("%s: Cannot remove"), quotearg_colon (p));
            }
        }
     }
index 0026378fd15e6fcc64c0168a801bea6d62964d8c..beca8ee8a038ab92ee0ec4d928353013b9c4a78a 100644 (file)
@@ -216,8 +216,8 @@ read_and (void (*do_something) (void))
 
                case DIRTYPE:
                  if (show_omitted_dirs_option)
-                   WARN ((0, 0, _("%s: Omitting"),
-                          quotearg_colon (current_stat_info.file_name)));
+                   paxwarn (0, _("%s: Omitting"),
+                            quotearg_colon (current_stat_info.file_name));
                  FALLTHROUGH;
                default:
                  skip_member ();
@@ -243,9 +243,8 @@ read_and (void (*do_something) (void))
                                    read_header_auto);
              if (status == HEADER_ZERO_BLOCK)
                break;
-             WARNOPT (WARN_ALONE_ZERO_BLOCK,
-                      (0, 0, _("A lone zero block at %jd"),
-                       intmax (current_block_ordinal ())));
+             warnopt (WARN_ALONE_ZERO_BLOCK, 0, _("A lone zero block at %jd"),
+                      intmax (current_block_ordinal ()));
              break;
            }
          status = prev_status;
@@ -253,9 +252,9 @@ read_and (void (*do_something) (void))
 
        case HEADER_END_OF_FILE:
          if (!ignore_zeros_option)
-           WARNOPT (WARN_MISSING_ZERO_BLOCKS,
-                    (0, 0, _("Terminating zero blocks missing at %jd"),
-                     intmax (current_block_ordinal ())));
+           warnopt (WARN_MISSING_ZERO_BLOCKS, 0,
+                    _("Terminating zero blocks missing at %jd"),
+                    intmax (current_block_ordinal ()));
          if (block_number_option)
            fprintf (stdlis, _("block %jd: ** End of File **\n"),
                     intmax (current_block_ordinal ()));
@@ -268,7 +267,7 @@ read_and (void (*do_something) (void))
          switch (prev_status)
            {
            case HEADER_STILL_UNREAD:
-             ERROR ((0, 0, _("This does not look like a tar archive")));
+             paxerror (0, _("This does not look like a tar archive"));
              FALLTHROUGH;
            case HEADER_ZERO_BLOCK:
            case HEADER_SUCCESS:
@@ -280,7 +279,7 @@ read_and (void (*do_something) (void))
                  fprintf (stdlis, _("block %jd: "),
                           intmax (block_ordinal));
                }
-             ERROR ((0, 0, _("Skipping to next header")));
+             paxerror (0, _("Skipping to next header"));
              break;
 
            case HEADER_END_OF_FILE:
@@ -476,7 +475,7 @@ read_header (union block **return_block, struct tar_stat_info *info,
                  data_block = find_next_block ();
                  if (! data_block)
                    {
-                     ERROR ((0, 0, _("Unexpected EOF in archive")));
+                     paxerror (0, _("Unexpected EOF in archive"));
                      break;
                    }
                  written = available_space_after (data_block);
@@ -750,11 +749,11 @@ from_header (char const *where0, size_t digs, char const *type,
       if (where == lim)
        {
          if (type && !silent)
-           ERROR ((0, 0,
-                   /* TRANSLATORS: %s is type of the value (gid_t, uid_t,
-                      etc.) */
-                   _("Blanks in header where numeric %s value expected"),
-                   type));
+           paxerror (0,
+                     /* TRANSLATORS: %s is type of the value (gid_t, uid_t,
+                        etc.) */
+                     _("Blanks in header where numeric %s value expected"),
+                     type);
          return -1;
        }
       if (!c_isspace (*where))
@@ -803,10 +802,11 @@ from_header (char const *where0, size_t digs, char const *type,
          if (!overflow && value <= minus_minval)
            {
              if (!silent)
-               WARN ((0, 0,
-                      /* TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.) */
-                      _("Archive octal value %.*s is out of %s range; assuming two's complement"),
-                      (int) (where - where1), where1, type));
+               paxwarn (0,
+                        /* TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.) */
+                        _("Archive octal value %.*s is out of %s range;"
+                          " assuming two's complement"),
+                        (int) (where - where1), where1, type);
              negative = true;
            }
        }
@@ -814,10 +814,10 @@ from_header (char const *where0, size_t digs, char const *type,
       if (overflow)
        {
          if (type && !silent)
-           ERROR ((0, 0,
-                   /* TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.) */
-                   _("Archive octal value %.*s is out of %s range"),
-                   (int) (where - where1), where1, type));
+           paxerror (0,
+                     /* TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.) */
+                     _("Archive octal value %.*s is out of %s range"),
+                     (int) (where - where1), where1, type);
          return -1;
        }
     }
@@ -836,7 +836,7 @@ from_header (char const *where0, size_t digs, char const *type,
          if (! warned_once)
            {
              warned_once = true;
-             WARN ((0, 0, _("Archive contains obsolescent base-64 headers")));
+             paxwarn (0, _("Archive contains obsolescent base-64 headers"));
            }
        }
       negative = *where++ == '-';
@@ -849,9 +849,8 @@ from_header (char const *where0, size_t digs, char const *type,
          if (ckd_mul (&value, value, 64))
            {
              if (type && !silent)
-               ERROR ((0, 0,
-                       _("Archive signed base-64 string %s is out of %s range"),
-                       quote_mem (where0, digs), type));
+               paxerror (0, _("Archive signed base-64 string %s is out of %s range"),
+                         quote_mem (where0, digs), type);
              return -1;
            }
          value |= dig - 1;
@@ -881,9 +880,7 @@ from_header (char const *where0, size_t digs, char const *type,
          if (((value << LG_256 >> LG_256) | topbits) != value)
            {
              if (type && !silent)
-               ERROR ((0, 0,
-                       _("Archive base-256 value is out of %s range"),
-                       type));
+               paxerror (0, _("Archive base-256 value is out of %s range"), type);
              return -1;
            }
        }
@@ -909,10 +906,10 @@ from_header (char const *where0, size_t digs, char const *type,
            lim--;
          quotearg_buffer (buf, sizeof buf, where0, lim - where0, o);
          if (!silent)
-           ERROR ((0, 0,
-                   /* TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.) */
-                   _("Archive contains %.*s where numeric %s value expected"),
-                   (int) sizeof buf, buf, type));
+           paxerror (0,
+                     /* TRANSLATORS: Second %s is a type name (gid_t,uid_t,etc.) */
+                     _("Archive contains %.*s where numeric %s value expected"),
+                     (int) sizeof buf, buf, type);
        }
 
       return -1;
@@ -925,8 +922,8 @@ from_header (char const *where0, size_t digs, char const *type,
     {
       char const *value_sign = &"-"[!negative];
       /* TRANSLATORS: Second %s is type name (gid_t,uid_t,etc.) */
-      ERROR ((0, 0, _("Archive value %s%ju is out of %s range %jd..%ju"),
-             value_sign, value, type, minval, maxval));
+      paxerror (0, _("Archive value %s%ju is out of %s range %jd..%ju"),
+               value_sign, value, type, minval, maxval);
     }
 
   return -1;
@@ -1150,7 +1147,7 @@ simple_print_header (struct tar_stat_info *st, union block *blk,
        case GNUTYPE_LONGNAME:
        case GNUTYPE_LONGLINK:
          modes[0] = 'L';
-         ERROR ((0, 0, _("Unexpected long name header")));
+         paxerror (0, _("Unexpected long name header"));
          break;
 
        case GNUTYPE_SPARSE:
@@ -1387,7 +1384,7 @@ skim_file (off_t size, bool must_copy)
     {
       x = find_next_block ();
       if (! x)
-       FATAL_ERROR ((0, 0, _("Unexpected EOF in archive")));
+       paxfatal (0, _("Unexpected EOF in archive"));
 
       set_next_block_after (x);
       size -= BLOCKSIZE;
index 499c3fb38416ca9569c93dffd47b1256274b8e32..69d1a688f216db5338a60bb22ea6a16ee8fe4250 100644 (file)
--- a/src/map.c
+++ b/src/map.c
@@ -98,8 +98,8 @@ map_read (Hash_table **ptab, char const *file,
 
       ++line;
       if (wordsplit (buf, &ws, wsopt))
-       FATAL_ERROR ((0, 0, _("%s:%jd: cannot split line: %s"),
-                     file, line, wordsplit_strerror (&ws)));
+       paxfatal (0, _("%s:%jd: cannot split line: %s"),
+                 file, line, wordsplit_strerror (&ws));
       wsopt |= WRDSF_REUSE;
       if (ws.ws_wordc == 0)
        continue;
@@ -177,7 +177,7 @@ map_read (Hash_table **ptab, char const *file,
     wordsplit_free (&ws);
   fclose (fp);
   if (err)
-    FATAL_ERROR ((0, 0, _("errors reading map file")));
+    paxfatal (0, _("errors reading map file"));
 }
 \f
 /* UID translation */
index 073af842c049536bb336381b1dc389e1abfab647..03da6f442422d20ea76cb2d38398fce6337568f1 100644 (file)
@@ -798,9 +798,9 @@ maybe_backup_file (const char *file_name, bool this_is_the_archive)
     {
       /* The backup operation failed.  */
       int e = errno;
-      ERROR ((0, e, _("%s: Cannot rename to %s"),
-             quotearg_colon (before_backup_name),
-             quote_n (1, after_backup_name)));
+      paxerror (e, _("%s: Cannot rename to %s"),
+               quotearg_colon (before_backup_name),
+               quote_n (1, after_backup_name));
       assign_null (&after_backup_name);
       return false;
     }
@@ -817,9 +817,9 @@ undo_last_backup (void)
          != 0)
        {
          int e = errno;
-         ERROR ((0, e, _("%s: Cannot rename to %s"),
-                 quotearg_colon (after_backup_name),
-                 quote_n (1, before_backup_name)));
+         paxerror (e, _("%s: Cannot rename to %s"),
+                   quotearg_colon (after_backup_name),
+                   quote_n (1, before_backup_name));
        }
       if (verbose_option)
        fprintf (stdlis, _("Renaming %s back to %s\n"),
@@ -1201,9 +1201,8 @@ file_removed_diag (const char *name, bool top_level,
 {
   if (!top_level && errno == ENOENT)
     {
-      WARNOPT (WARN_FILE_REMOVED,
-              (0, 0, _("%s: File removed before we read it"),
-               quotearg_colon (name)));
+      warnopt (WARN_FILE_REMOVED, 0, _("%s: File removed before we read it"),
+              quotearg_colon (name));
       set_exit_status (TAREXIT_DIFFERS);
     }
   else
index bdb7519fb073c7be4a6f0679e4e0ff5a8e619648..c161f9092d8b5a3f5d17b052e8cd1ac62c7ae1fc 100644 (file)
@@ -385,10 +385,7 @@ handle_file_selection_option (int key, const char *arg)
     case 'X':
       if (add_exclude_file (add_exclude, excluded, arg, EXCLUDE_OPTIONS, '\n')
          != 0)
-       {
-         int e = errno;
-         FATAL_ERROR ((0, e, "%s", quotearg_colon (arg)));
-       }
+       paxfatal (errno, "%s", quotearg_colon (arg));
       break;
 
     case ANCHORED_OPTION:
@@ -433,7 +430,7 @@ handle_file_selection_option (int key, const char *arg)
       break;
 
     default:
-      FATAL_ERROR ((0, 0, "unhandled positional option %d", key));
+      paxfatal (0, "unhandled positional option %d", key);
     }
 }
 
@@ -745,7 +742,10 @@ unconsumed_option_report (void)
     {
       struct name_elt *elt;
 
-      ERROR ((0, 0, _("The following options were used after non-option arguments.  These options are positional and affect only arguments that follow them.  Please, rearrange them properly.")));
+      paxerror (0, _("The following options were used after non-option arguments."
+                    "  These options are positional and affect"
+                    " only arguments that follow them."
+                    "  Please, rearrange them properly."));
 
       elt = unconsumed_option_tail;
       while (elt->prev)
@@ -756,17 +756,17 @@ unconsumed_option_report (void)
          switch (elt->type)
            {
            case NELT_CHDIR:
-             ERROR ((0, 0, _("-C %s has no effect"), quote (elt->v.name)));
+             paxerror (0, _("-C %s has no effect"), quote (elt->v.name));
              break;
 
            case NELT_OPTION:
              if (elt->v.opt.arg)
-               ERROR ((0, 0, _("--%s %s has no effect"),
-                       file_selection_option_name (elt->v.opt.option),
-                       quote (elt->v.opt.arg)));
+               paxerror (0, _("--%s %s has no effect"),
+                         file_selection_option_name (elt->v.opt.option),
+                         quote (elt->v.opt.arg));
              else
-               ERROR ((0, 0, _("--%s has no effect"),
-                       file_selection_option_name (elt->v.opt.option)));
+               paxerror (0, _("--%s has no effect"),
+                         file_selection_option_name (elt->v.opt.option));
              break;
 
            default:
@@ -917,10 +917,9 @@ add_file_id (const char *filename)
     if (p->ino == st.st_ino && p->dev == st.st_dev)
       {
        int oldc = set_char_quoting (NULL, ':', 1);
-       ERROR ((0, 0,
-               _("%s: file list requested from %s already read from %s"),
-               quotearg_n (0, filename),
-               reading_from, p->from_file));
+       paxerror (0, _("%s: file list requested from %s already read from %s"),
+                 quotearg_n (0, filename),
+                 reading_from, p->from_file);
        set_char_quoting (NULL, ':', oldc);
        return 1;
       }
@@ -997,11 +996,11 @@ handle_option (const char *str, struct name_elt const *ent)
 
   ws.ws_offs = 1;
   if (wordsplit (str, &ws, WRDSF_DEFFLAGS|WRDSF_DOOFFS))
-    FATAL_ERROR ((0, 0, _("cannot split string '%s': %s"),
-                 str, wordsplit_strerror (&ws)));
+    paxfatal (0, _("cannot split string '%s': %s"),
+             str, wordsplit_strerror (&ws));
   int argc;
   if (ckd_add (&argc, ws.ws_wordc, ws.ws_offs))
-    FATAL_ERROR ((0, 0, _("too many options")));
+    paxfatal (0, _("too many options"));
   ws.ws_wordv[0] = (char *) program_name;
   loc.source = OPTS_FILE;
   loc.name = ent->v.file.name;
@@ -1046,9 +1045,9 @@ read_next_name (struct name_elt *ent, struct name_elt *ret)
          continue;
 
        case file_list_zero:
-         WARNOPT (WARN_FILENAME_WITH_NULS,
-                  (0, 0, N_("%s: file name read contains nul character"),
-                   quotearg_colon (ent->v.file.name)));
+         warnopt (WARN_FILENAME_WITH_NULS, 0,
+                  N_("%s: file name read contains nul character"),
+                   quotearg_colon (ent->v.file.name));
          ent->v.file.term = 0;
          FALLTHROUGH;
        case file_list_success:
@@ -1410,11 +1409,9 @@ regex_usage_warning (const char *name)
       && fnmatch_pattern_has_wildcards (name, 0))
     {
       warned_once = 1;
-      WARN ((0, 0,
-            _("Pattern matching characters used in file names")));
-      WARN ((0, 0,
-            _("Use --wildcards to enable pattern matching,"
-              " or --no-wildcards to suppress this warning")));
+      paxwarn (0, _("Pattern matching characters used in file names"));
+      paxwarn (0, _("Use --wildcards to enable pattern matching,"
+                   " or --no-wildcards to suppress this warning"));
     }
   return warned_once;
 }
@@ -1429,11 +1426,11 @@ names_notfound (void)
     if (!WASFOUND (cursor) && cursor->name[0])
       {
        regex_usage_warning (cursor->name);
-       ERROR ((0, 0,
-               (cursor->found_count == 0) ?
-                    _("%s: Not found in archive") :
-                    _("%s: Required occurrence not found in archive"),
-               quotearg_colon (cursor->name)));
+       paxerror (0,
+                 (cursor->found_count == 0
+                  ? _("%s: Not found in archive")
+                  : _("%s: Required occurrence not found in archive")),
+                 quotearg_colon (cursor->name));
       }
 
   /* Don't bother freeing the name list; we're about to exit.  */
@@ -1447,8 +1444,7 @@ names_notfound (void)
       while ((name = name_next (true)))
        {
          regex_usage_warning (name);
-         ERROR ((0, 0, _("%s: Not found in archive"),
-                 quotearg_colon (name)));
+         paxerror (0, _("%s: Not found in archive"), quotearg_colon (name));
        }
     }
 }
@@ -1760,15 +1756,13 @@ collect_and_sort_names (void)
 
        case 1:
          if (namelist->change_dir == 0)
-           USAGE_ERROR ((0, 0,
-                         _("Using -C option inside file list is not "
-                           "allowed with --listed-incremental")));
+           paxusage (_("Using -C option inside file list is not "
+                       "allowed with --listed-incremental"));
          break;
 
        default:
-         USAGE_ERROR ((0, 0,
-                       _("Only one -C option is allowed with "
-                         "--listed-incremental")));
+         paxusage (_("Only one -C option is allowed with "
+                     "--listed-incremental"));
        }
 
       read_directory_file ();
index 70ab557aef791848a4c1e5931799ddcc0a80a3cb..80a1ff59174d237681b9edcbfdee3e64f9aa494b 100644 (file)
@@ -360,8 +360,7 @@ sparse_scan_file (struct tar_sparse_file *file)
         return true;
 #else
       if (hole_detection == HOLE_DETECTION_SEEK)
-       WARN((0, 0,
-             _("\"seek\" hole detection is not supported, using \"raw\".")));
+       paxwarn (0, _("\"seek\" hole detection is not supported, using \"raw\"."));
       /* fall back to "raw" for this and all other files */
       hole_detection = HOLE_DETECTION_RAW;
 #endif
@@ -454,13 +453,12 @@ sparse_dump_region (struct tar_sparse_file *file, size_t i)
                     + file->stat_info->sparse_map[i].numbytes
                     - bytes_left);
 
-             WARNOPT (WARN_FILE_SHRANK,
-                      (0, 0,
-                       ngettext ("%s: File shrank by %jd byte; padding with zeros",
-                                 "%s: File shrank by %jd bytes; padding with zeros",
-                                 n),
-                       quotearg_colon (file->stat_info->orig_file_name),
-                       intmax (n)));
+             warnopt (WARN_FILE_SHRANK, 0,
+                      ngettext ("%s: File shrank by %jd byte; padding with zeros",
+                                "%s: File shrank by %jd bytes; padding with zeros",
+                                n),
+                      quotearg_colon (file->stat_info->orig_file_name),
+                      intmax (n));
              if (! ignore_failed_read_option)
                set_exit_status (TAREXIT_DIFFERS);
              return false;
@@ -498,7 +496,7 @@ sparse_extract_region (struct tar_sparse_file *file, size_t i)
       union block *blk = find_next_block ();
       if (!blk)
        {
-         ERROR ((0, 0, _("Unexpected EOF in archive")));
+         paxerror (0, _("Unexpected EOF in archive"));
          return false;
        }
       set_next_block_after (blk);
@@ -684,7 +682,7 @@ check_data_region (struct tar_sparse_file *file, size_t i)
       union block *blk = find_next_block ();
       if (!blk)
        {
-         ERROR ((0, 0, _("Unexpected EOF in archive")));
+         paxerror (0, _("Unexpected EOF in archive"));
          return false;
        }
       set_next_block_after (blk);
@@ -843,7 +841,7 @@ oldgnu_get_sparse_info (struct tar_sparse_file *file)
       h = find_next_block ();
       if (!h)
        {
-         ERROR ((0, 0, _("Unexpected EOF in archive")));
+         paxerror (0, _("Unexpected EOF in archive"));
          return false;
        }
       set_next_block_after (h);
@@ -853,8 +851,8 @@ oldgnu_get_sparse_info (struct tar_sparse_file *file)
 
   if (rc == add_fail)
     {
-      ERROR ((0, 0, _("%s: invalid sparse archive member"),
-             file->stat_info->orig_file_name));
+      paxerror (0, _("%s: invalid sparse archive member"),
+               file->stat_info->orig_file_name);
       return false;
     }
   return true;
@@ -975,7 +973,7 @@ star_get_sparse_info (struct tar_sparse_file *file)
       h = find_next_block ();
       if (!h)
        {
-         ERROR ((0, 0, _("Unexpected EOF in archive")));
+         paxerror (0, _("Unexpected EOF in archive"));
          return false;
        }
       set_next_block_after (h);
@@ -986,8 +984,8 @@ star_get_sparse_info (struct tar_sparse_file *file)
 
   if (rc == add_fail)
     {
-      ERROR ((0, 0, _("%s: invalid sparse archive member"),
-             file->stat_info->orig_file_name));
+      paxerror (0, _("%s: invalid sparse archive member"),
+               file->stat_info->orig_file_name);
       return false;
     }
   return true;
@@ -1279,8 +1277,8 @@ pax_decode_header (struct tar_sparse_file *file)
      {                                                             \
        if (dst == buf + UINTMAX_STRSIZE_BOUND -1)                  \
          {                                                         \
-           ERROR ((0, 0, _("%s: numeric overflow in sparse archive member"), \
-                 file->stat_info->orig_file_name));               \
+          paxerror (0, _("%s: numeric overflow in sparse archive member"), \
+                    file->stat_info->orig_file_name);             \
            return false;                                           \
          }                                                         \
        if (src == endp)                                            \
@@ -1288,7 +1286,7 @@ pax_decode_header (struct tar_sparse_file *file)
           set_next_block_after (b);                               \
            b = find_next_block ();                                 \
            if (!b)                                                 \
-             FATAL_ERROR ((0, 0, _("Unexpected EOF in archive"))); \
+            paxfatal (0, _("Unexpected EOF in archive"));         \
            src = b->buffer;                                        \
           endp = b->buffer + BLOCKSIZE;                           \
         }                                                         \
@@ -1302,13 +1300,13 @@ pax_decode_header (struct tar_sparse_file *file)
       set_next_block_after (current_header);
       blk = find_next_block ();
       if (!blk)
-        FATAL_ERROR ((0, 0, _("Unexpected EOF in archive")));
+       paxfatal (0, _("Unexpected EOF in archive"));
       p = blk->buffer;
       COPY_BUF (blk,nbuf,p);
       if (!decode_num (&u, nbuf, SIZE_MAX))
        {
-         ERROR ((0, 0, _("%s: malformed sparse archive member"),
-                 file->stat_info->orig_file_name));
+         paxerror (0, _("%s: malformed sparse archive member"),
+                   file->stat_info->orig_file_name);
          return false;
        }
       file->stat_info->sparse_map_size = u;
@@ -1322,8 +1320,8 @@ pax_decode_header (struct tar_sparse_file *file)
          COPY_BUF (blk,nbuf,p);
          if (!decode_num (&u, nbuf, TYPE_MAXIMUM (off_t)))
            {
-             ERROR ((0, 0, _("%s: malformed sparse archive member"),
-                     file->stat_info->orig_file_name));
+             paxerror (0, _("%s: malformed sparse archive member"),
+                       file->stat_info->orig_file_name);
              return false;
            }
          sp.offset = u;
@@ -1333,8 +1331,8 @@ pax_decode_header (struct tar_sparse_file *file)
              || ckd_add (&size, sp.offset, u)
              || file->stat_info->stat.st_size < size)
            {
-             ERROR ((0, 0, _("%s: malformed sparse archive member"),
-                     file->stat_info->orig_file_name));
+             paxerror (0, _("%s: malformed sparse archive member"),
+                       file->stat_info->orig_file_name);
              return false;
            }
          sp.numbytes = u;
index 6128ec0ba399f98b877d6af279db3bb0f9b23b56..0d1f34ee7e4eb96e29336f072eed40fd5c9774e9 100644 (file)
@@ -103,11 +103,11 @@ set_compression_program_by_suffix (const char *name, const char *defprog,
     {
       use_compress_program_option = defprog;
       if (len > 0 && verbose)
-       WARN ((0, 0,
-              _("no compression program is defined for suffix '%s';"
-                " assuming %s"),
-              name + len,
-              defprog ? defprog : "uncompressed archive"));
+       paxwarn (0,
+                _("no compression program is defined for suffix '%s';"
+                  " assuming %s"),
+                name + len,
+                defprog ? defprog : "uncompressed archive");
     }
 }
 
index 296053fc7911fcb7fd221b166e4ed6ec13553d4f..eff8dae588c5b471ffe92f71b1d208d1c03879c3 100644 (file)
@@ -147,14 +147,14 @@ sys_write_archive_buffer (void)
 void
 sys_child_open_for_compress (void)
 {
-  FATAL_ERROR ((0, 0, _("Cannot use compressed or remote archives")));
+  paxfatal (0, _("Cannot use compressed or remote archives"));
 }
 
 /* Set ARCHIVE for uncompressing, then reading an archive.  */
 void
 sys_child_open_for_uncompress (void)
 {
-  FATAL_ERROR ((0, 0, _("Cannot use compressed or remote archives")));
+  paxfatal (0, _("Cannot use compressed or remote archives"));
 }
 
 int
@@ -164,7 +164,7 @@ sys_exec_setmtime_script (const char *script_name,
                          const char *fmt,
                          struct timespec *ts)
 {
-  FATAL_ERROR ((0, 0, _("--set-mtime-command not implemented on this platform")));
+  paxfatal (0, _("--set-mtime-command not implemented on this platform"));
 }
 #else
 
@@ -233,11 +233,11 @@ sys_wait_for_child (pid_t child_pid, bool eof)
        {
          int sig = WTERMSIG (wait_status);
          if (!(!eof && sig == SIGPIPE))
-           FATAL_ERROR ((0, 0, _("Child died with signal %d"), sig));
+           paxfatal (0, _("Child died with signal %d"), sig);
        }
       else if (WEXITSTATUS (wait_status) != 0)
-       FATAL_ERROR ((0, 0, _("Child returned status %d"),
-                     WEXITSTATUS (wait_status)));
+       paxfatal (0, _("Child returned status %d"),
+                 WEXITSTATUS (wait_status));
     }
 }
 
@@ -328,10 +328,7 @@ xdup2 (int from, int into)
   if (from != into)
     {
       if (dup2 (from, into) < 0)
-       {
-         int e = errno;
-         FATAL_ERROR ((0, e, _("Cannot dup2")));
-       }
+       paxfatal (errno, _("Cannot dup2"));
       xclose (from);
     }
 }
@@ -517,14 +514,12 @@ run_decompress_program (void)
     {
       if (prog)
        {
-         WARNOPT (WARN_DECOMPRESS_PROGRAM,
-                  (0, errno, _("cannot run %s"), prog));
-         WARNOPT (WARN_DECOMPRESS_PROGRAM,
-                  (0, 0, _("trying %s"), p));
+         warnopt (WARN_DECOMPRESS_PROGRAM, errno, _("cannot run %s"), prog);
+         warnopt (WARN_DECOMPRESS_PROGRAM, 0, _("trying %s"), p);
        }
       if (wordsplit (p, &ws, wsflags))
-       FATAL_ERROR ((0, 0, _("cannot split string '%s': %s"),
-                     p, wordsplit_strerror (&ws)));
+       paxfatal (0, _("cannot split string '%s': %s"),
+                 p, wordsplit_strerror (&ws));
       wsflags |= WRDSF_REUSE;
       memmove (ws.ws_wordv, ws.ws_wordv + ws.ws_offs,
               ws.ws_wordc * sizeof *ws.ws_wordv);
@@ -534,7 +529,7 @@ run_decompress_program (void)
       ws.ws_wordv[ws.ws_wordc] = NULL;
     }
   if (!prog)
-    FATAL_ERROR ((0, 0, _("unable to run decompression program")));
+    paxfatal (0, _("unable to run decompression program"));
   exec_fatal (prog);
 }
 
@@ -805,17 +800,17 @@ sys_wait_command (void)
   if (WIFEXITED (status))
     {
       if (!ignore_command_error_option && WEXITSTATUS (status))
-       ERROR ((0, 0, _("%jd: Child returned status %d"),
-               intmax (global_pid), WEXITSTATUS (status)));
+       paxerror (0, _("%jd: Child returned status %d"),
+                 intmax (global_pid), WEXITSTATUS (status));
     }
   else if (WIFSIGNALED (status))
     {
-      WARN ((0, 0, _("%jd: Child terminated on signal %d"),
-            intmax (global_pid), WTERMSIG (status)));
+      paxwarn (0, _("%jd: Child terminated on signal %d"),
+              intmax (global_pid), WTERMSIG (status));
     }
   else
-    ERROR ((0, 0, _("%jd: Child terminated on unknown reason"),
-           intmax (global_pid)));
+    paxerror (0, _("%jd: Child terminated on unknown reason"),
+             intmax (global_pid));
 
   global_pid = -1;
 }
@@ -951,7 +946,7 @@ sys_exec_setmtime_script (const char *script_name,
   int rc = 0;
 
   if (pipe (p))
-    FATAL_ERROR ((0, errno, _("pipe failed")));
+    paxfatal (errno, _("pipe failed"));
 
   if ((pid = xfork ()) == 0)
     {
@@ -964,12 +959,12 @@ sys_exec_setmtime_script (const char *script_name,
       if (dirfd != AT_FDCWD)
        {
          if (fchdir (dirfd))
-           FATAL_ERROR ((0, errno, _("chdir failed")));
+           paxfatal (errno, _("chdir failed"));
        }
 
       close (p[0]);
       if (dup2 (p[1], STDOUT_FILENO) < 0)
-       FATAL_ERROR ((0, errno, _("dup2 failed")));
+       paxfatal (errno, _("dup2 failed"));
       if (p[1] != STDOUT_FILENO)
        close (p[1]);
 
@@ -992,7 +987,7 @@ sys_exec_setmtime_script (const char *script_name,
        {
          if (errno != EINTR)
            {
-             ERROR ((0, errno, _("poll failed")));
+             paxerror (errno, _("poll failed"));
              stop = 1;
              break;
            }
@@ -1010,7 +1005,7 @@ sys_exec_setmtime_script (const char *script_name,
          ssize_t nread = read (pfd.fd, buffer + buflen, bufsize - buflen);
          if (nread < 0)
            {
-             ERROR ((0, errno, _("error reading output of %s"), script_name));
+             paxerror (errno, _("error reading output of %s"), script_name);
              stop = 1;
              break;
            }
@@ -1036,7 +1031,7 @@ sys_exec_setmtime_script (const char *script_name,
 
   if (buflen == 0)
     {
-      ERROR ((0, 0, _("empty output from \"%s %s\""), script_name, file_name));
+      paxerror (0, _("empty output from \"%s %s\""), script_name, file_name);
       return -1;
     }
 
@@ -1057,14 +1052,15 @@ sys_exec_setmtime_script (const char *script_name,
       cp = strptime (buffer, fmt, &tm);
       if (cp == NULL)
        {
-         ERROR ((0, 0, _("output from \"%s %s\" does not satisfy format string: %s"),
-                 script_name, file_name, buffer));
+         paxerror (0, _("output from \"%s %s\" does not satisfy format string:"
+                        " %s"),
+                   script_name, file_name, buffer);
          rc = -1;
        }
       else if (*cp != 0)
        {
-         WARN ((0, 0, _("unconsumed output from \"%s %s\": %s"),
-                script_name, file_name, cp));
+         paxwarn (0, _("unconsumed output from \"%s %s\": %s"),
+                  script_name, file_name, cp);
          rc = -1;
        }
       else
@@ -1073,7 +1069,7 @@ sys_exec_setmtime_script (const char *script_name,
          t = mktime (&tm);
          if (tm.tm_wday < 0)
            {
-             ERROR ((0, errno, _("mktime failed")));
+             paxerror (errno, _("mktime failed"));
              rc = -1;
            }
          else
@@ -1085,8 +1081,8 @@ sys_exec_setmtime_script (const char *script_name,
     }
   else if (! parse_datetime (ts, buffer, NULL))
     {
-      ERROR ((0, 0, _("unparsable output from \"%s %s\": %s"),
-             script_name, file_name, buffer));
+      paxerror (0, _("unparsable output from \"%s %s\": %s"),
+               script_name, file_name, buffer);
       rc = -1;
     }
 
index 72a8bed46856dd70fbfe78e06f02a9d8e130a3ca..5a5d4b2d44bf6b1903e0dc8785f022941d21a40c 100644 (file)
--- a/src/tar.c
+++ b/src/tar.c
@@ -167,8 +167,8 @@ void
 request_stdin (const char *option)
 {
   if (stdin_used_by)
-    USAGE_ERROR ((0, 0, _("Options '%s' and '%s' both want standard input"),
-                 stdin_used_by, option));
+    paxusage (_("Options '%s' and '%s' both want standard input"),
+             stdin_used_by, option);
 
   stdin_used_by = option;
 }
@@ -242,8 +242,8 @@ set_archive_format (char const *name)
 
   for (p = fmttab; strcmp (p->name, name) != 0; )
     if (! (++p)->name)
-      USAGE_ERROR ((0, 0, _("%s: Invalid archive format"),
-                   quotearg_colon (name)));
+      paxusage (_("%s: Invalid archive format"),
+               quotearg_colon (name));
 
   archive_format = p->fmt;
 }
@@ -273,8 +273,7 @@ static void
 assert_format (int fmt_mask)
 {
   if ((FORMAT_MASK (archive_format) & fmt_mask) == 0)
-    USAGE_ERROR ((0, 0,
-                 _("GNU features wanted on incompatible archive format")));
+    paxusage (_("GNU features wanted on incompatible archive format"));
 }
 
 const char *
@@ -341,8 +340,10 @@ tar_set_quoting_style (char *arg)
        set_quoting_style (NULL, i);
        return;
       }
-  FATAL_ERROR ((0, 0,
-               _("Unknown quoting style '%s'. Try '%s --quoting-style=help' to get a list."), arg, program_name));
+  paxfatal (0,
+           _("Unknown quoting style '%s'."
+             " Try '%s --quoting-style=help' to get a list."),
+           arg, program_name);
 }
 
 \f
@@ -944,7 +945,7 @@ easprintf (char const *format, ...)
   va_end (args);
 
   if (!result)
-    FATAL_ERROR ((0, err, "vasprintf"));
+    paxfatal (err, "vasprintf");
   return result;
 }
 
@@ -972,7 +973,7 @@ option_conflict_error (const char *a, const char *b)
 {
   /* TRANSLATORS: Both %s in this statement are replaced with
      option names. */
-  USAGE_ERROR ((0, 0, _("'%s' cannot be used with '%s'"), a, b));
+  paxusage (_("'%s' cannot be used with '%s'"), a, b);
 }
 \f
 /* Classes of options that can conflict: */
@@ -1047,8 +1048,8 @@ set_subcommand_option (enum subcommand subcommand)
 {
   if (subcommand_option != UNKNOWN_SUBCOMMAND
       && subcommand_option != subcommand)
-    USAGE_ERROR ((0, 0,
-                 _("You may not specify more than one '-Acdtrux', '--delete' or  '--test-label' option")));
+    paxusage (_("You may not specify more than one '-Acdtrux',"
+               " '--delete' or  '--test-label' option"));
 
   subcommand_option = subcommand;
 }
@@ -1060,7 +1061,7 @@ set_use_compress_program_option (const char *string, struct option_locus *loc)
   if (use_compress_program_option
       && strcmp (use_compress_program_option, string) != 0
       && p->source == OPTS_COMMAND_LINE)
-    USAGE_ERROR ((0, 0, _("Conflicting compression options")));
+    paxusage (_("Conflicting compression options"));
 
   use_compress_program_option = string;
 }
@@ -1114,7 +1115,7 @@ decode_signal (const char *name)
   for (p = sigtab; p < sigtab + sizeof (sigtab) / sizeof (sigtab[0]); p++)
     if (strcmp (p->name, s) == 0)
       return p->signo;
-  FATAL_ERROR ((0, 0, _("Unknown signal name: %s"), name));
+  paxfatal (0, _("Unknown signal name: %s"), name);
 }
 
 static void
@@ -1144,7 +1145,7 @@ get_date_or_file (struct tar_args *args, const char *option,
       if (stat (str, &st) != 0)
        {
          stat_error (str);
-         USAGE_ERROR ((0, 0, _("Date sample file not found")));
+         paxusage (_("Date sample file not found"));
        }
       *ts = get_stat_mtime (&st);
     }
@@ -1152,8 +1153,8 @@ get_date_or_file (struct tar_args *args, const char *option,
     {
       if (! parse_datetime (ts, str, NULL))
        {
-         WARN ((0, 0, _("Substituting %s for unknown date format %s"),
-                tartime (*ts, false), quote (str)));
+         paxwarn (0, _("Substituting %s for unknown date format %s"),
+                  tartime (*ts, false), quote (str));
          ts->tv_nsec = 0;
          return 1;
        }
@@ -1181,8 +1182,8 @@ report_textual_dates (struct tar_args *args)
        {
          char const *treated_as = tartime (p->ts, true);
          if (strcmp (p->date, treated_as) != 0)
-           WARN ((0, 0, _("Option %s: Treating date '%s' as %s"),
-                  p->option, p->date, treated_as));
+           paxwarn (0, _("Option %s: Treating date '%s' as %s"),
+                    p->option, p->date, treated_as);
        }
       free (p->date);
       free (p);
@@ -1346,8 +1347,8 @@ parse_owner_group (char *arg, uintmax_t field_max, char const **name_option)
   char *end;
   uintmax_t u = stoint (num, &end, &overflow, 0, field_max);
   if ((end == num) | *end | overflow)
-    FATAL_ERROR ((0, 0, "%s: %s", quotearg_colon (num),
-                 _("Invalid owner or group ID")));
+    paxfatal (0, "%s: %s", quotearg_colon (num),
+             _("Invalid owner or group ID"));
   if (name_option)
     *name_option = name;
   return u;
@@ -1464,8 +1465,8 @@ parse_opt (int key, char *arg, struct argp_state *state)
                                  (min (IDX_MAX, min (SSIZE_MAX, SIZE_MAX))
                                   / BLOCKSIZE));
        if ((end == arg) | *end | overflow | !blocking_factor)
-         USAGE_ERROR ((0, 0, "%s: %s", quotearg_colon (arg),
-                       _("Invalid blocking factor")));
+         paxusage ("%s: %s", quotearg_colon (arg),
+                   _("Invalid blocking factor"));
        record_size = blocking_factor * BLOCKSIZE;
       }
       break;
@@ -1663,8 +1664,8 @@ parse_opt (int key, char *arg, struct argp_state *state)
            break;
 
          default:
-           USAGE_ERROR ((0, 0, "%s: %s", quotearg_colon (arg),
-                         _("Invalid tape length")));
+           paxusage ("%s: %s", quotearg_colon (arg),
+                     _("Invalid tape length"));
          }
 
        multi_volume_option = true;
@@ -1676,7 +1677,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
        char *end;
        incremental_level = stoint (arg, &end, NULL, 0, 1);
        if ((end == arg) | *end)
-         USAGE_ERROR ((0, 0, _("Invalid incremental level value")));
+         paxusage (_("Invalid incremental level value"));
       }
       break;
 
@@ -1722,7 +1723,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
       FALLTHROUGH;
     case NEWER_MTIME_OPTION:
       if (TIME_OPTION_INITIALIZED (newer_mtime_option))
-       USAGE_ERROR ((0, 0, _("More than one threshold date")));
+       paxusage (_("More than one threshold date"));
       get_date_or_file (args,
                        key == NEWER_MTIME_OPTION ? "--newer-mtime"
                        : "--after-date", arg, &newer_mtime_option);
@@ -1798,7 +1799,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
        if ((p != arg) & (*p == '.'))
          tar_sparse_minor = stoint (p + 1, &p, &vminor, 0, INTMAX_MAX);
        if ((p == arg) | *p | vmajor | vminor)
-         USAGE_ERROR ((0, 0, _("Invalid sparse version value")));
+         paxusage (_("Invalid sparse version value"));
       }
       break;
 
@@ -1872,9 +1873,8 @@ parse_opt (int key, char *arg, struct argp_state *state)
                      atime_preserve_args, atime_preserve_types)
         : replace_atime_preserve);
       if (! O_NOATIME && atime_preserve_option == system_atime_preserve)
-       FATAL_ERROR ((0, 0,
-                     _("--atime-preserve='system' is not supported"
-                       " on this platform")));
+       paxfatal (0, _("--atime-preserve='system' is not supported"
+                      " on this platform"));
       break;
 
     case CHECK_DEVICE_OPTION:
@@ -1897,8 +1897,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
            }
          checkpoint_option = stoint (arg, &p, NULL, 0, INTMAX_MAX);
          if (*p | (checkpoint_option <= 0))
-           FATAL_ERROR ((0, 0,
-                         _("invalid --checkpoint value")));
+           paxfatal (0, _("invalid --checkpoint value"));
        }
       else
        checkpoint_option = DEFAULT_CHECKPOINT;
@@ -1976,7 +1975,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
     case MODE_OPTION:
       mode_option = mode_compile (arg);
       if (!mode_option)
-       FATAL_ERROR ((0, 0, _("Invalid mode given on option")));
+       paxfatal (0, _("Invalid mode given on option"));
       initial_umask = umask (0);
       umask (initial_umask);
       break;
@@ -2007,8 +2006,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
          char *end;
          occurrence_option = stoint (arg, &end, NULL, 0, UINTMAX_MAX);
          if (*end)
-           FATAL_ERROR ((0, 0, "%s: %s", quotearg_colon (arg),
-                         _("Invalid number")));
+           paxfatal (0, "%s: %s", quotearg_colon (arg), _("Invalid number"));
        }
       break;
 
@@ -2072,11 +2070,9 @@ parse_opt (int key, char *arg, struct argp_state *state)
        if (! (xstrtoumax (arg, NULL, 10, &u, TAR_SIZE_SUFFIXES) == LONGINT_OK
               && !ckd_add (&record_size, u, 0)
               && record_size <= min (SSIZE_MAX, SIZE_MAX)))
-         USAGE_ERROR ((0, 0, "%s: %s", quotearg_colon (arg),
-                       _("Invalid record size")));
+         paxusage ("%s: %s", quotearg_colon (arg), _("Invalid record size"));
        if (record_size % BLOCKSIZE != 0)
-         USAGE_ERROR ((0, 0, _("Record size must be a multiple of %d."),
-                       BLOCKSIZE));
+         paxusage (_("Record size must be a multiple of %d."), BLOCKSIZE);
        blocking_factor = record_size / BLOCKSIZE;
       }
       break;
@@ -2120,8 +2116,8 @@ parse_opt (int key, char *arg, struct argp_state *state)
        char *end;
        strip_name_components = stoint (arg, &end, NULL, 0, SIZE_MAX);
        if (*end)
-         USAGE_ERROR ((0, 0, "%s: %s", quotearg_colon (arg),
-                       _("Invalid number of elements")));
+         paxusage ("%s: %s", quotearg_colon (arg),
+                   _("Invalid number of elements"));
       }
       break;
 
@@ -2145,7 +2141,7 @@ parse_opt (int key, char *arg, struct argp_state *state)
 
     case TO_COMMAND_OPTION:
       if (to_command_option)
-        USAGE_ERROR ((0, 0, _("Only one --to-command option allowed")));
+       paxusage (_("Only one --to-command option allowed"));
       to_command_option = arg;
       break;
 
@@ -2338,8 +2334,7 @@ parse_default_options (struct tar_args *args)
 
   ws.ws_offs = 1;
   if (wordsplit (opts, &ws, WRDSF_DEFFLAGS|WRDSF_DOOFFS))
-    FATAL_ERROR ((0, 0, _("cannot split TAR_OPTIONS: %s"),
-                 wordsplit_strerror (&ws)));
+    paxfatal (0, _("cannot split TAR_OPTIONS: %s"), wordsplit_strerror (&ws));
   if (ws.ws_wordc)
     {
       int idx;
@@ -2348,13 +2343,13 @@ parse_default_options (struct tar_args *args)
       args->loc = &loc;
       int argc;
       if (ckd_add (&argc, ws.ws_offs, ws.ws_wordc))
-       FATAL_ERROR ((0, 0, "too many options"));
+       paxfatal (0, _("too many options"));
       if (argp_parse (&argp, argc, ws.ws_wordv,
                      ARGP_IN_ORDER | ARGP_NO_EXIT, &idx, args))
        abort (); /* shouldn't happen */
       args->loc = save_loc_ptr;
       if (name_more_files ())
-       USAGE_ERROR ((0, 0, _("non-option arguments in %s"), loc.name));
+       paxusage (_("non-option arguments in %s"), loc.name);
       /* Don't free consumed words */
       ws.ws_wordc = 0;
     }
@@ -2439,11 +2434,9 @@ decode_options (int argc, char **argv)
          opt = find_argp_option (&argp, *letter);
          if (opt && opt->arg)
            {
-             if (in < argv + argc)
-               *out++ = *in++;
-             else
-               USAGE_ERROR ((0, 0, _("Old option '%c' requires an argument."),
-                             *letter));
+             if (! (in < argv + argc))
+               paxusage (_("Old option '%c' requires an argument."), *letter);
+             *out++ = *in++;
            }
        }
 
@@ -2513,8 +2506,7 @@ decode_options (int argc, char **argv)
   if (occurrence_option)
     {
       if (!name_more_files ())
-       USAGE_ERROR ((0, 0,
-                     _("--occurrence is meaningless without a file list")));
+       paxusage (_("--occurrence is meaningless without a file list"));
       if (!IS_SUBCOMMAND_CLASS (SUBCL_OCCUR))
        {
          if (option_set_in_cl (OC_OCCURRENCE))
@@ -2539,8 +2531,7 @@ decode_options (int argc, char **argv)
   /* Allow multiple archives only with '-M'.  */
 
   if (archive_names > 1 && !multi_volume_option)
-    USAGE_ERROR ((0, 0,
-                 _("Multiple archive files require '-M' option")));
+    paxusage (_("Multiple archive files require '-M' option"));
 
   if (listed_incremental_option
       && TIME_OPTION_INITIALIZED (newer_mtime_option))
@@ -2556,8 +2547,7 @@ decode_options (int argc, char **argv)
     }
 
   if (0 <= incremental_level && !listed_incremental_option)
-    WARN ((0, 0,
-          _("--level is meaningless without --listed-incremental")));
+    paxwarn (0, _("--level is meaningless without --listed-incremental"));
 
   if (volume_label_option)
     {
@@ -2573,10 +2563,9 @@ decode_options (int argc, char **argv)
                   - 1 /* for sign, as 0 <= volno */)
                : 0));
          if (volume_label_max_len < strlen (volume_label_option))
-           USAGE_ERROR ((0, 0,
-                         _("%s: Volume label length exceeds %d bytes"),
-                         quotearg_colon (volume_label_option),
-                         volume_label_max_len));
+           paxusage (_("%s: Volume label length exceeds %d bytes"),
+                     quotearg_colon (volume_label_option),
+                     volume_label_max_len);
        }
       /* else FIXME
         Label length in PAX format is limited by the volume size. */
@@ -2585,9 +2574,9 @@ decode_options (int argc, char **argv)
   if (verify_option)
     {
       if (multi_volume_option)
-       USAGE_ERROR ((0, 0, _("Cannot verify multi-volume archives")));
+       paxusage (_("Cannot verify multi-volume archives"));
       if (use_compress_program_option)
-       USAGE_ERROR ((0, 0, _("Cannot verify compressed archives")));
+       paxusage (_("Cannot verify compressed archives"));
       if (!IS_SUBCOMMAND_CLASS (SUBCL_WRITE))
        {
          if (option_set_in_cl (OC_VERIFY))
@@ -2601,27 +2590,23 @@ decode_options (int argc, char **argv)
   if (use_compress_program_option)
     {
       if (multi_volume_option)
-       USAGE_ERROR ((0, 0, _("Cannot use multi-volume compressed archives")));
+       paxusage (_("Cannot use multi-volume compressed archives"));
       if (IS_SUBCOMMAND_CLASS (SUBCL_UPDATE))
-       USAGE_ERROR ((0, 0, _("Cannot update compressed archives")));
+       paxusage (_("Cannot update compressed archives"));
       if (subcommand_option == CAT_SUBCOMMAND)
-       USAGE_ERROR ((0, 0, _("Cannot concatenate compressed archives")));
+       paxusage (_("Cannot concatenate compressed archives"));
     }
 
   if (set_mtime_command)
     {
       if (set_mtime_option != USE_FILE_MTIME)
-       {
-         USAGE_ERROR ((0, 0,
-                       _("--mtime conflicts with --set-mtime-command")));
-       }
+       paxusage (_("--mtime conflicts with --set-mtime-command"));
       set_mtime_option = COMMAND_MTIME;
     }
   else if (set_mtime_option == CLAMP_MTIME)
     {
       if (!TIME_OPTION_INITIALIZED (mtime_option))
-       USAGE_ERROR ((0, 0,
-                     _("--clamp-mtime needs a date specified using --mtime")));
+       paxusage (_("--clamp-mtime needs a date specified using --mtime"));
     }
 
   /* It is no harm to use --pax-option on non-pax archives in archive
@@ -2631,24 +2616,24 @@ decode_options (int argc, char **argv)
   if (args.pax_option
       && archive_format != POSIX_FORMAT
       && !IS_SUBCOMMAND_CLASS (SUBCL_READ))
-    USAGE_ERROR ((0, 0, _("--pax-option can be used only on POSIX archives")));
+    paxusage (_("--pax-option can be used only on POSIX archives"));
 
   /* star creates non-POSIX typed archives with xattr support, so allow the
      extra headers when reading */
   if ((acls_option > 0)
       && archive_format != POSIX_FORMAT
       && !IS_SUBCOMMAND_CLASS (SUBCL_READ))
-    USAGE_ERROR ((0, 0, _("--acls can be used only on POSIX archives")));
+    paxusage (_("--acls can be used only on POSIX archives"));
 
   if ((selinux_context_option > 0)
       && archive_format != POSIX_FORMAT
       && !IS_SUBCOMMAND_CLASS (SUBCL_READ))
-    USAGE_ERROR ((0, 0, _("--selinux can be used only on POSIX archives")));
+    paxusage (_("--selinux can be used only on POSIX archives"));
 
   if ((xattrs_option > 0)
       && archive_format != POSIX_FORMAT
       && !IS_SUBCOMMAND_CLASS (SUBCL_READ))
-    USAGE_ERROR ((0, 0, _("--xattrs can be used only on POSIX archives")));
+    paxusage (_("--xattrs can be used only on POSIX archives"));
 
   if (starting_file_option && !IS_SUBCOMMAND_CLASS (SUBCL_READ))
     {
@@ -2696,9 +2681,8 @@ decode_options (int argc, char **argv)
          free (base);
 
          if (!one_top_level_dir)
-           USAGE_ERROR ((0, 0,
-                         _("Cannot deduce top-level directory name; "
-                           "please set it explicitly with --one-top-level=DIR")));
+           paxusage (_("Cannot deduce top-level directory name; "
+                       "please set it explicitly with --one-top-level=DIR"));
        }
     }
 
@@ -2730,7 +2714,7 @@ decode_options (int argc, char **argv)
     verbose_option = 2;
 
   if (tape_length_option && tape_length_option < record_size)
-    USAGE_ERROR ((0, 0, _("Volume length cannot be less than record size")));
+    paxusage (_("Volume length cannot be less than record size"));
 
   if (same_order_option && listed_incremental_option)
     {
@@ -2753,8 +2737,7 @@ decode_options (int argc, char **argv)
     {
     case CREATE_SUBCOMMAND:
       if (!name_more_files ())
-       USAGE_ERROR ((0, 0,
-                     _("Cowardly refusing to create an empty archive")));
+       paxusage (_("Cowardly refusing to create an empty archive"));
       if (args.compress_autodetect && archive_names
          && strcmp (archive_name_array[0], "-"))
        set_compression_program_by_suffix (archive_name_array[0],
@@ -2780,8 +2763,7 @@ decode_options (int argc, char **argv)
           archive_name_cursor < archive_name_array + archive_names;
           archive_name_cursor++)
        if (!strcmp (*archive_name_cursor, "-"))
-         USAGE_ERROR ((0, 0,
-                       _("Options '-Aru' are incompatible with '-f -'")));
+         paxusage (_("Options '-Aru' are incompatible with '-f -'"));
 
     default:
       break;
@@ -2864,8 +2846,8 @@ main (int argc, char **argv)
   close_stdout_set_file_name (_("stdout"));
   /* Make sure we have first three descriptors available */
   if (stdopen ())
-    FATAL_ERROR ((0, 0, "%s",
-                 _("failed to assert availability of the standard file descriptors")));
+    paxfatal (0, _("failed to assert availability"
+                  " of the standard file descriptors"));
 
   /* Pre-allocate a few structures.  */
 
@@ -2894,8 +2876,8 @@ main (int argc, char **argv)
   switch (subcommand_option)
     {
     case UNKNOWN_SUBCOMMAND:
-      USAGE_ERROR ((0, 0,
-                   _("You must specify one of the '-Acdtrux', '--delete' or '--test-label' options")));
+      paxusage (_("You must specify one of the '-Acdtrux',"
+                 " '--delete' or '--test-label' options"));
 
     case CAT_SUBCOMMAND:
     case UPDATE_SUBCOMMAND:
index 3926301b3c8be0a2d213a1e71d69d67471878d3a..b0023915acc8e235eb4a4b041c2622e90ac47786 100644 (file)
@@ -200,17 +200,16 @@ parse_transform_expr (const char *expr)
                  break;
                }
              if (parse_xform_flags (&transform_flags, *expr))
-               USAGE_ERROR ((0, 0, _("Unknown transform flag: %c"),
-                             *expr));
+               paxusage (_("Unknown transform flag: %c"), *expr);
            }
          return expr;
        }
-      USAGE_ERROR ((0, 0, _("Invalid transform expression")));
+      paxusage (_("Invalid transform expression"));
     }
 
   delim = expr[1];
   if (!delim)
-    USAGE_ERROR ((0, 0, _("Invalid transform expression")));
+    paxusage (_("Invalid transform expression"));
 
   /* Scan regular expression */
   for (i = 2; expr[i] && expr[i] != delim; i++)
@@ -218,7 +217,7 @@ parse_transform_expr (const char *expr)
       i++;
 
   if (expr[i] != delim)
-    USAGE_ERROR ((0, 0, _("Invalid transform expression")));
+    paxusage (_("Invalid transform expression"));
 
   /* Scan replacement expression */
   for (j = i + 1; expr[j] && expr[j] != delim; j++)
@@ -226,7 +225,7 @@ parse_transform_expr (const char *expr)
       j++;
 
   if (expr[j] != delim)
-    USAGE_ERROR ((0, 0, _("Invalid transform expression")));
+    paxusage (_("Invalid transform expression"));
 
   /* Check flags */
   tf->transform_type = transform_first;
@@ -257,8 +256,7 @@ parse_transform_expr (const char *expr)
 
       default:
        if (parse_xform_flags (&tf->flags, *p))
-         USAGE_ERROR ((0, 0, _("Unknown flag in transform expression: %c"),
-                       *p));
+         paxusage (_("Unknown flag in transform expression: %c"), *p);
       }
 
   if (*p == ';')
@@ -275,7 +273,7 @@ parse_transform_expr (const char *expr)
     {
       char errbuf[512];
       regerror (rc, &tf->regex, errbuf, sizeof (errbuf));
-      USAGE_ERROR ((0, 0, _("Invalid transform expression: %s"), errbuf));
+      paxusage (_("Invalid transform expression: %s"), errbuf);
     }
 
   if (str[0] == '^' || (i > 2 && str[i - 3] == '$'))
@@ -301,8 +299,8 @@ parse_transform_expr (const char *expr)
              {
                idx_t n = stoint (cur, &cur, NULL, 0, IDX_MAX);
                if (tf->regex.re_nsub < n)
-                 USAGE_ERROR ((0, 0, _("Invalid transform replacement:"
-                                       " back reference out of range")));
+                 paxusage (_("Invalid transform replacement:"
+                             " back reference out of range"));
                add_backref_segment (tf, n);
              }
              break;
index 98c5014daf961a8bba66402fc3301e0e0dfecd33..3ce959014c0a99f469d21a24a127e0da9b7f2c39 100644 (file)
@@ -186,11 +186,11 @@ update_archive (void)
          switch (previous_status)
            {
            case HEADER_STILL_UNREAD:
-             WARN ((0, 0, _("This does not look like a tar archive")));
+             paxwarn (0, _("This does not look like a tar archive"));
              FALLTHROUGH;
            case HEADER_SUCCESS:
            case HEADER_ZERO_BLOCK:
-             ERROR ((0, 0, _("Skipping to next header")));
+             paxerror (0, _("Skipping to next header"));
              FALLTHROUGH;
            case HEADER_FAILURE:
              break;
index 7d21eb0289dc15b9100ff7f3ee4e2eec2b4bd3f7..a7559f23b862b3b29a90ecaa96fda898eeadaa3b 100644 (file)
@@ -111,3 +111,17 @@ set_warning_option (const char *arg)
   else
     warning_option |= option;
 }
+
+void
+warnopt (int opt, int errnum, char const *format, ...)
+{
+  if (WARNING_ENABLED (opt))
+    {
+      if (error_hook)
+       error_hook ();
+      va_list ap;
+      va_start (ap, format);
+      verror (0, errnum, format, ap);
+      va_end (ap);
+    }
+}
index dc22269aa20700fbb0de01992c4d3b2d69835e24..f8f6c29541ff2e4f29758d2fdc00df8c86245e45 100644 (file)
@@ -300,11 +300,10 @@ xattrs__acls_set (struct tar_stat_info const *st,
          FILE_NAME may already have inherited default acls from parent
          directory;  clean them up. */
       if (acl_delete_def_file_at (chdir_fd, file_name))
-        WARNOPT (WARN_XATTR_WRITE,
-                (0, errno,
+       warnopt (WARN_XATTR_WRITE, errno,
                  _("acl_delete_def_file_at: Cannot drop default POSIX ACLs "
                    "for file '%s'"),
-                 file_name));
+                file_name);
       return;
     }
   else
@@ -318,10 +317,9 @@ xattrs__acls_set (struct tar_stat_info const *st,
 
   if (acl_set_file_at (chdir_fd, file_name, type, acl) < 0)
     /* warn even if filesystem does not support acls */
-    WARNOPT (WARN_XATTR_WRITE,
-            (0, errno,
-             _ ("acl_set_file_at: Cannot set POSIX ACLs for file '%s'"),
-             file_name));
+    warnopt (WARN_XATTR_WRITE, errno,
+            _ ("acl_set_file_at: Cannot set POSIX ACLs for file '%s'"),
+            file_name);
 
   acl_free (acl);
 }
@@ -373,7 +371,8 @@ acls_get_text (int parentfd, const char *file_name, acl_type_t type,
       static int warned;
       if (!warned)
        {
-         WARN ((0, 0, _("--numeric-owner is ignored for ACLs: libacl is not available")));
+         paxwarn (0, _("--numeric-owner is ignored for ACLs:"
+                       " libacl is not available"));
          warned = 1;
        }
 #endif
@@ -456,7 +455,7 @@ xattrs_acls_get (MAYBE_UNUSED int parentfd, MAYBE_UNUSED char const *file_name,
 #ifndef HAVE_POSIX_ACLS
       static int done = 0;
       if (!done)
-        WARN ((0, 0, _("POSIX ACL support is not available")));
+       paxwarn (0, _("POSIX ACL support is not available"));
       done = 1;
 #else
       int err = file_has_acl_at (parentfd, file_name, &st->stat);
@@ -486,7 +485,7 @@ xattrs_acls_set (MAYBE_UNUSED struct tar_stat_info const *st,
 #ifndef HAVE_POSIX_ACLS
       static int done = 0;
       if (!done)
-        WARN ((0, 0, _("POSIX ACL support is not available")));
+       paxwarn (0, _("POSIX ACL support is not available"));
       done = 1;
 #else
       xattrs__acls_set (st, file_name, ACL_TYPE_ACCESS,
@@ -550,7 +549,7 @@ xattrs_xattrs_get (int parentfd, char const *file_name,
 #ifndef HAVE_XATTRS
       static int done = 0;
       if (!done)
-        WARN ((0, 0, _("XATTR support is not available")));
+       paxwarn (0, _("XATTR support is not available"));
       done = 1;
 #else
       static size_t xsz = 1024;
@@ -631,10 +630,9 @@ xattrs__fd_set (char const *file_name, char typeflag,
         }
 
       if (ret < 0)
-        WARNOPT (WARN_XATTR_WRITE,
-                (0, errno,
-                 _("%s: Cannot set '%s' extended attribute for file '%s'"),
-                 sysname, attr, file_name));
+       warnopt (WARN_XATTR_WRITE, errno,
+                _("%s: Cannot set '%s' extended attribute for file '%s'"),
+                sysname, attr, file_name);
     }
 }
 #endif
@@ -650,7 +648,7 @@ xattrs_selinux_get (MAYBE_UNUSED int parentfd, MAYBE_UNUSED char const *file_nam
 #if HAVE_SELINUX_SELINUX_H != 1
       static int done = 0;
       if (!done)
-        WARN ((0, 0, _("SELinux support is not available")));
+       paxwarn (0, _("SELinux support is not available"));
       done = 1;
 #else
       int result = (fd
@@ -672,7 +670,7 @@ xattrs_selinux_set (MAYBE_UNUSED struct tar_stat_info const *st,
 #if HAVE_SELINUX_SELINUX_H != 1
       static int done = 0;
       if (!done)
-        WARN ((0, 0, _("SELinux support is not available")));
+       paxwarn (0, _("SELinux support is not available"));
       done = 1;
 #else
       const char *sysname = "setfilecon";
@@ -693,10 +691,9 @@ xattrs_selinux_set (MAYBE_UNUSED struct tar_stat_info const *st,
         }
 
       if (ret < 0)
-        WARNOPT (WARN_XATTR_WRITE,
-                (0, errno,
-                 _("%s: Cannot set SELinux context for file '%s'"),
-                 sysname, file_name));
+       warnopt (WARN_XATTR_WRITE, errno,
+                _("%s: Cannot set SELinux context for file '%s'"),
+                sysname, file_name);
 #endif
     }
 }
@@ -754,7 +751,7 @@ xattrs_xattrs_set (struct tar_stat_info const *st,
 #ifndef HAVE_XATTRS
       static int done = 0;
       if (!done)
-        WARN ((0, 0, _("XATTR support is not available")));
+       paxwarn (0, _("XATTR support is not available"));
       done = 1;
 #else
       size_t i;
index 0fe1ce14561e9be8bc2916d005c31c047fc3ecbb..7f2c53ddf6943f9591bc6968156bcec577dd36d6 100644 (file)
@@ -161,7 +161,7 @@ xheader_list_destroy (struct keyword_list **root)
 static _Noreturn void
 xheader_set_single_keyword (char *kw)
 {
-  USAGE_ERROR ((0, 0, _("Keyword %s is unknown or not yet implemented"), kw));
+  paxusage (_("Keyword %s is unknown or not yet implemented"), kw);
 }
 
 static void
@@ -170,7 +170,7 @@ assign_time_option (char **sval, time_t *tval, const char *input)
   char *p;
   struct timespec t = decode_timespec (input, &p, false);
   if (! valid_timespec (t) || *p)
-    ERROR ((0, 0, _("Time stamp is out of allowed range")));
+    paxerror (0, _("Time stamp is out of allowed range"));
   else
     {
       *tval = t.tv_sec;
@@ -185,7 +185,7 @@ xheader_set_keyword_equal (char *kw, char *eq)
   char *p = eq;
 
   if (eq == kw)
-    USAGE_ERROR ((0, 0, _("Malformed pax option: %s"), quote (kw)));
+    paxusage (_("Malformed pax option: %s"), quote (kw));
 
   if (eq[-1] == ':')
     {
@@ -204,7 +204,7 @@ xheader_set_keyword_equal (char *kw, char *eq)
   if (strcmp (kw, "delete") == 0)
     {
       if (xheader_protected_pattern_p (p))
-       USAGE_ERROR ((0, 0, _("Pattern %s cannot be used"), quote (p)));
+       paxusage (_("Pattern %s cannot be used"), quote (p));
       xheader_list_append (&keyword_pattern_list, p, NULL);
     }
   else if (strcmp (kw, "exthdr.name") == 0)
@@ -218,7 +218,7 @@ xheader_set_keyword_equal (char *kw, char *eq)
   else
     {
       if (xheader_protected_keyword_p (kw))
-       USAGE_ERROR ((0, 0, _("Keyword %s cannot be overridden"), kw));
+       paxusage (_("Keyword %s cannot be overridden"), kw);
       if (global)
        xheader_list_append (&keyword_global_override_list, kw, p);
       else
@@ -490,7 +490,7 @@ void
 xheader_forbid_global (void)
 {
   if (keyword_global_override_list)
-    USAGE_ERROR ((0, 0, _("can't update global extended header record")));
+    paxusage (_("can't update global extended header record"));
 }
 
 /* This is reversal function for xattr_encode_keyword.  See comment for
@@ -623,7 +623,7 @@ decode_record (struct xheader *xhdr,
       /* The length is missing.
         FIXME: Comment why this is diagnosed only if (*p), or change code.  */
       if (*p)
-       ERROR ((0, 0, _("Malformed extended header: missing length")));
+       paxerror (0, _("Malformed extended header: missing length"));
       return false;
     }
 
@@ -632,8 +632,8 @@ decode_record (struct xheader *xhdr,
       /* Avoid giant diagnostics, as this won't help user.  */
       int len_len = min (len_lim - p, 1000);
 
-      ERROR ((0, 0, _("Extended header length %.*s is out of range"),
-             len_len, p));
+      paxerror (0, _("Extended header length %.*s is out of range"),
+               len_len, p);
       return false;
     }
 
@@ -643,8 +643,7 @@ decode_record (struct xheader *xhdr,
     continue;
   if (p == len_lim)
     {
-      ERROR ((0, 0,
-             _("Malformed extended header: missing blank after length")));
+      paxerror (0, _("Malformed extended header: missing blank after length"));
       return false;
     }
 
@@ -652,13 +651,13 @@ decode_record (struct xheader *xhdr,
   p = strchr (p, '=');
   if (! (p && p < nextp))
     {
-      ERROR ((0, 0, _("Malformed extended header: missing equal sign")));
+      paxerror (0, _("Malformed extended header: missing equal sign"));
       return false;
     }
 
   if (nextp[-1] != '\n')
     {
-      ERROR ((0, 0, _("Malformed extended header: missing newline")));
+      paxerror (0, _("Malformed extended header: missing newline"));
       return false;
     }
 
@@ -695,9 +694,9 @@ decx (void *data, char const *keyword, char const *value, size_t size)
   if (t)
     t->decoder (st, keyword, value, size);
   else
-    WARNOPT (WARN_UNKNOWN_KEYWORD,
-            (0, 0, _("Ignoring unknown extended header keyword %s"),
-             quotearg_style (shell_escape_always_quoting_style, keyword)));
+    warnopt (WARN_UNKNOWN_KEYWORD, 0,
+            _("Ignoring unknown extended header keyword %s"),
+            quotearg_style (shell_escape_always_quoting_style, keyword));
 }
 
 void
@@ -803,7 +802,7 @@ xheader_read (struct xheader *xhdr, union block *p, off_t size)
        len = BLOCKSIZE;
 
       if (!p)
-       FATAL_ERROR ((0, 0, _("Unexpected EOF in archive")));
+       paxfatal (0, _("Unexpected EOF in archive"));
 
       memcpy (&xhdr->buffer[j], p->buffer, len);
       set_next_block_after (p);
@@ -978,9 +977,10 @@ xheader_string_end (struct xheader *xhdr, char const *keyword)
   size = p;
   if (size != p)
     {
-      ERROR ((0, 0,
-        _("Generated keyword/value pair is too long (keyword=%s, length=%s)"),
-             keyword, nbuf));
+      paxerror (0,
+               _("Generated keyword/value pair is too long"
+                 " (keyword=%s, length=%s)"),
+               keyword, nbuf);
       obstack_free (xhdr->stk, obstack_finish (xhdr->stk));
       return false;
     }
@@ -1004,8 +1004,8 @@ out_of_range_header (char const *keyword, char const *value,
 {
   /* TRANSLATORS: The first %s is the pax extended header keyword
      (atime, gid, etc.).  */
-  ERROR ((0, 0, _("Extended header %s=%s is out of range %jd..%ju"),
-         keyword, value, minval, maxval));
+  paxerror (0, _("Extended header %s=%s is out of range %jd..%ju"),
+           keyword, value, minval, maxval);
 }
 
 static void
@@ -1055,14 +1055,14 @@ decode_time (struct timespec *ts, char const *arg, char const *keyword)
        out_of_range_header (keyword, arg, TYPE_MINIMUM (time_t),
                             TYPE_MAXIMUM (time_t));
       else
-       ERROR ((0, 0, _("Malformed extended header: invalid %s=%s"),
-               keyword, arg));
+       paxerror (0, _("Malformed extended header: invalid %s=%s"),
+                 keyword, arg);
       return false;
     }
   if (*arg_lim)
     {
-      ERROR ((0, 0, _("Malformed extended header: invalid %s=%s"),
-             keyword, arg));
+      paxerror (0, _("Malformed extended header: invalid %s=%s"),
+               keyword, arg);
       return false;
     }
 
@@ -1095,8 +1095,8 @@ decode_signed_num (intmax_t *num, char const *arg,
 
   if ((arg_lim == arg) | *arg_lim)
     {
-      ERROR ((0, 0, _("Malformed extended header: invalid %s=%s"),
-             keyword, arg));
+      paxerror (0, _("Malformed extended header: invalid %s=%s"),
+               keyword, arg);
       return false;
     }
 
@@ -1401,8 +1401,8 @@ sparse_offset_decoder (struct tar_stat_info *st,
       if (st->sparse_map_avail < st->sparse_map_size)
        st->sparse_map[st->sparse_map_avail].offset = u;
       else
-       ERROR ((0, 0, _("Malformed extended header: excess %s=%s"),
-               "GNU.sparse.offset", arg));
+       paxerror (0, _("Malformed extended header: excess %s=%s"),
+                 "GNU.sparse.offset", arg);
     }
 }
 
@@ -1426,8 +1426,8 @@ sparse_numbytes_decoder (struct tar_stat_info *st,
       if (st->sparse_map_avail < st->sparse_map_size)
        st->sparse_map[st->sparse_map_avail++].numbytes = u;
       else
-       ERROR ((0, 0, _("Malformed extended header: excess %s=%s"),
-               keyword, arg));
+       paxerror (0, _("Malformed extended header: excess %s=%s"),
+                 keyword, arg);
     }
 }
 
@@ -1448,8 +1448,8 @@ sparse_map_decoder (struct tar_stat_info *st,
       off_t u = stoint (arg, &delim, &overflow, 0, TYPE_MAXIMUM (off_t));
       if (delim == arg)
        {
-         ERROR ((0, 0, _("Malformed extended header: invalid %s=%s"),
-                 keyword, arg));
+         paxerror (0, _("Malformed extended header: invalid %s=%s"),
+                   keyword, arg);
          return;
        }
 
@@ -1474,8 +1474,8 @@ sparse_map_decoder (struct tar_stat_info *st,
            st->sparse_map[st->sparse_map_avail++] = e;
          else
            {
-             ERROR ((0, 0, _("Malformed extended header: excess %s=%s"),
-                     keyword, arg));
+             paxerror (0, _("Malformed extended header: excess %s=%s"),
+                       keyword, arg);
              return;
            }
        }
@@ -1486,9 +1486,10 @@ sparse_map_decoder (struct tar_stat_info *st,
        break;
       else if (*delim != ',')
        {
-         ERROR ((0, 0,
-                 _("Malformed extended header: invalid %s: unexpected delimiter %c"),
-                 keyword, *delim));
+         paxerror (0,
+                   _("Malformed extended header: invalid %s:"
+                     " unexpected delimiter %c"),
+                   keyword, *delim);
          return;
        }
 
@@ -1496,9 +1497,10 @@ sparse_map_decoder (struct tar_stat_info *st,
     }
 
   if (!offset)
-    ERROR ((0, 0,
-           _("Malformed extended header: invalid %s: odd number of values"),
-           keyword));
+    paxerror (0,
+             _("Malformed extended header: invalid %s:"
+               " odd number of values"),
+             keyword);
 }
 
 static void