]> git.cworth.org Git - tar/blobdiff - tests/testsuite
Imported Upstream version 1.23
[tar] / tests / testsuite
index a9b869c38cf562e2658907f5574d1f703289ed88..f846810c31dddc8043d025c5ffcfa4e7e28255d1 100755 (executable)
@@ -1,7 +1,8 @@
 #! /bin/sh
+# Generated from testsuite.at by GNU Autoconf 2.63.
 #
-# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
-# Foundation, Inc.
+# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+# Free Software Foundation, Inc.
 # This test suite is free software; the Free Software Foundation gives
 # unlimited permission to copy, distribute and modify it.
 ## --------------------- ##
@@ -13,7 +14,7 @@ DUALCASE=1; export DUALCASE # for MKS sh
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
@@ -35,17 +36,45 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS
 as_cr_digits='0123456789'
 as_cr_alnum=$as_cr_Letters$as_cr_digits
 
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  echo "#! /bin/sh" >conf$$.sh
-  echo  "exit 0"   >>conf$$.sh
-  chmod +x conf$$.sh
-  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
-    PATH_SEPARATOR=';'
+as_nl='
+'
+export as_nl
+# Printing a long string crashes Solaris 7 /usr/bin/printf.
+as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
+as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
+if (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='printf %s\n'
+  as_echo_n='printf %s'
+else
+  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
+    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
+    as_echo_n='/usr/ucb/echo -n'
   else
-    PATH_SEPARATOR=:
+    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
+    as_echo_n_body='eval
+      arg=$1;
+      case $arg in
+      *"$as_nl"*)
+       expr "X$arg" : "X\\(.*\\)$as_nl";
+       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
+      esac;
+      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
+    '
+    export as_echo_n_body
+    as_echo_n='sh -c $as_echo_n_body as_echo'
   fi
-  rm -f conf$$.sh
+  export as_echo_body
+  as_echo='sh -c $as_echo_body as_echo'
+fi
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  PATH_SEPARATOR=:
+  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
+    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
+      PATH_SEPARATOR=';'
+  }
 fi
 
 # Support unset when possible.
@@ -61,8 +90,6 @@ fi
 # there to prevent editors from complaining about space-tab.
 # (If _AS_PATH_WALK were called with IFS unset, it would disable word
 # splitting by setting IFS to empty value.)
-as_nl='
-'
 IFS=" ""       $as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
@@ -85,7 +112,7 @@ if test "x$as_myself" = x; then
   as_myself=$0
 fi
 if test ! -f "$as_myself"; then
-  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
   { (exit 1); exit 1; }
 fi
 
@@ -98,17 +125,10 @@ PS2='> '
 PS4='+ '
 
 # NLS nuisances.
-for as_var in \
-  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
-  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
-  LC_TELEPHONE LC_TIME
-do
-  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
-    eval $as_var=C; export $as_var
-  else
-    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-  fi
-done
+LC_ALL=C
+export LC_ALL
+LANGUAGE=C
+export LANGUAGE
 
 # Required to use basename.
 if expr a : '\(a\)' >/dev/null 2>&1 &&
@@ -130,7 +150,7 @@ as_me=`$as_basename -- "$0" ||
 $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
         X"$0" : 'X\(//\)$' \| \
         X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
+$as_echo X/"$0" |
     sed '/^.*\/\([^/][^/]*\)\/*$/{
            s//\1/
            q
@@ -156,7 +176,7 @@ else
   as_have_required=no
 fi
 
-  if test $as_have_required = yes &&    (eval ":
+  if test $as_have_required = yes &&    (eval ":
 (as_func_return () {
   (exit \$1)
 }
@@ -238,7 +258,7 @@ IFS=$as_save_IFS
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
@@ -259,7 +279,7 @@ _ASEOF
 if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   emulate sh
   NULLCMD=:
-  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
   # is contrary to our usage.  Disable this feature.
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
@@ -339,10 +359,10 @@ fi
 
       if test "x$CONFIG_SHELL" != x; then
   for as_var in BASH_ENV ENV
-        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-        done
-        export CONFIG_SHELL
-        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+       do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+       done
+       export CONFIG_SHELL
+       exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
 fi
 
 
@@ -411,9 +431,10 @@ fi
 
 test \$exitcode = 0") || {
   echo No shell found that supports shell functions.
-  echo Please tell autoconf@gnu.org about your system,
-  echo including any error possibly output before this
-  echo message
+  echo Please tell bug-autoconf@gnu.org about your system,
+  echo including any error possibly output before this message.
+  echo This can help us improve future autoconf versions.
+  echo Configuration will now proceed without shell functions.
 }
 
 
@@ -449,7 +470,8 @@ test \$exitcode = 0") || {
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+    { { $as_echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+$as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
    { (exit 1); exit 1; }; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
@@ -477,7 +499,6 @@ case `echo -n x` in
 *)
   ECHO_N='-n';;
 esac
-
 if expr a : '\(a\)' >/dev/null 2>&1 &&
    test "X`expr 00001 : '.*\(...\)'`" = X001; then
   as_expr=expr
@@ -490,19 +511,22 @@ if test -d conf$$.dir; then
   rm -f conf$$.dir/conf$$.file
 else
   rm -f conf$$.dir
-  mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s='ln -s'
-  # ... but there are two gotchas:
-  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-  # In both cases, we have to default to `cp -p'.
-  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+  mkdir conf$$.dir 2>/dev/null
+fi
+if (echo >conf$$.file) 2>/dev/null; then
+  if ln -s conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s='ln -s'
+    # ... but there are two gotchas:
+    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+    # In both cases, we have to default to `cp -p'.
+    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+      as_ln_s='cp -p'
+  elif ln conf$$.file conf$$ 2>/dev/null; then
+    as_ln_s=ln
+  else
     as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
-  as_ln_s=ln
+  fi
 else
   as_ln_s='cp -p'
 fi
@@ -527,10 +551,10 @@ else
   as_test_x='
     eval sh -c '\''
       if test -d "$1"; then
-        test -d "$1/.";
+       test -d "$1/.";
       else
        case $1 in
-        -*)set "./$1";;
+       -*)set "./$1";;
        esac;
        case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
        ???[sx]*):;;*)false;;esac;fi
@@ -547,32 +571,13 @@ as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
 
 
 
+
+
 SHELL=${CONFIG_SHELL-/bin/sh}
 
 # How were we run?
 at_cli_args="$@"
 
-# Load the config file.
-for at_file in atconfig atlocal
-do
-  test -r $at_file || continue
-  . ./$at_file || { echo "$as_me: error: invalid content: $at_file" >&2
-   { (exit 1); exit 1; }; }
-done
-
-# Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix:
-: ${at_top_build_prefix=$at_top_builddir}
-
-# atconfig delivers names relative to the directory the test suite is
-# in, but the groups themselves are run in testsuite-dir/group-dir.
-if test -n "$at_top_srcdir"; then
-  builddir=../..
-  for at_dir in srcdir top_srcdir top_build_prefix
-  do
-    at_val=`eval echo '${'at_$at_dir'}'`
-    eval "$at_dir=\$at_val/../.."
-  done
-fi
 
 # Not all shells have the 'times' builtin; the subshell is needed to make
 # sure we discard the 'times: not found' message from the shell.
@@ -583,9 +588,9 @@ at_times_p=false
 at_debug_args=
 # -e sets to true
 at_errexit_p=false
-# Shall we be verbose?
+# Shall we be verbose?  ':' means no, empty means yes.
 at_verbose=:
-at_quiet=echo
+at_quiet=
 
 # Shall we keep the debug scripts?  Must be `:' when the suite is
 # run by a debug script, so that the script doesn't remove itself.
@@ -596,115 +601,156 @@ at_help_p=false
 at_version_p=false
 # List test groups?
 at_list_p=false
+# --clean
+at_clean=false
 # Test groups to run
 at_groups=
+# Whether a write failure occurred
+at_write_fail=0
 
-# The directory we are in.
+# The directory we run the suite in.  Default to . if no -C option.
 at_dir=`pwd`
-# The directory the whole suite works in.
-# Should be absolutely to let the user `cd' at will.
-at_suite_dir=$at_dir/$as_me.dir
-# The file containing the suite.
-at_suite_log=$at_dir/$as_me.log
-# The file containing the location of the last AT_CHECK.
-at_check_line_file=$at_suite_dir/at-check-line
-# The file containing the exit status of the last command.
-at_status_file=$at_suite_dir/at-status
-# The files containing the output of the tested commands.
-at_stdout=$at_suite_dir/at-stdout
-at_stder1=$at_suite_dir/at-stder1
-at_stderr=$at_suite_dir/at-stderr
-# The file containing dates.
-at_times_file=$at_suite_dir/at-times
+# An absolute reference to this testsuite script.
+case $as_myself in
+  [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;;
+  * ) at_myself=$at_dir/$as_myself ;;
+esac
+# Whether -C is in effect.
+at_change_dir=false
 
 # List of the tested programs.
 at_tested='tar'
 # List of the all the test groups.
-at_groups_all=' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77'
+at_groups_all=' 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98'
 # As many question marks as there are digits in the last test group number.
 # Used to normalize the test group numbers so that `ls' lists them in
 # numerical order.
 at_format='??'
 # Description of all the test groups.
 at_help_all="1;version.at:19;tar version;;
-2;pipe.at:29;decompressing from stdin;pipe;
+2;pipe.at:30;decompressing from stdin;pipe;
 3;options.at:24;mixing options;options options00;
 4;options02.at:26;interspersed options;options options02;
 5;T-empty.at:26;files-from: empty entries;files-from empty;
-6;T-null.at:21;files-from: 0-separated file without -0;files-from null T-null;
-7;indexfile.at:26;tar --index-file=this_is_a_very_long_file_name_which_raises_issues.c --file=-;stdout indexfile;
+6;T-null.at:21;files-from: 0-separated file without -0;files-from null t-null;
+7;indexfile.at:26;tar --index-file=FILE --file=-;stdout indexfile;
 8;verbose.at:26;tar cvf -;stdout verbose;
 9;append.at:21;append;append append00;
 10;append01.at:29;appending files with long names;append append01;
-11;append02.at:40;append vs. create;append append02 append-gnu;
-12;exclude.at:23;exclude;exclude;
-13;delete01.at:23;deleting a member after a big one;delete delete01;
-14;delete02.at:23;deleting a member from stdin archive;delete delete02;
-15;delete03.at:21;deleting members with long names;delete delete03;
-16;delete04.at:23;deleting a large last member;delete delete04;
-17;delete05.at:27;deleting non-existing member;delete delete05;
-18;extrac01.at:23;extract over an existing directory;extract extract01;
-19;extrac02.at:23;extracting symlinks over an existing file;extract extract02 symlink;
-20;extrac03.at:23;extraction loops;extract extract03;
-21;extrac04.at:23;extract + fnmatch;extract extract04 fnmatch;
-22;extrac05.at:30;extracting selected members from pax;extract extract05;
-23;extrac06.at:33;mode of extracted directories;extract extract06 directory mode;
-24;extrac07.at:27;extracting symlinks to a read-only dir;extract extract07 read-only symlink;
-25;gzip.at:23;gzip;gzip;
-26;incremental.at:23;incremental;incremental incr00;
-27;incr01.at:27;restore broken symlinks from incremental;incremental incr01;
-28;incr02.at:32;restoring timestamps from incremental;incremental timestamp restore incr02;
-29;listed01.at:26;--listed for individual files;listed incremental listed01;
-30;listed02.at:28;working --listed;listed incremental listed02;
-31;incr03.at:28;renamed files in incrementals;incremental incr03 rename;
-32;incr04.at:29;proper icontents initialization;incremental incr04 icontents;
-33;rename01.at:24;renamed dirs in incrementals;incremental rename rename01;
-34;rename02.at:24;move between hierarchies;incremental rename rename02;
-35;rename03.at:23;cyclic renames;incremental rename rename03 cyclic-rename;
-36;rename04.at:27;renamed directory containing subdirectories;incremental rename04 rename;
-37;rename05.at:24;renamed subdirectories;incremental rename05 rename;
-38;chtype.at:27;changed file types in incrementals;incremental chtype;
-39;ignfail.at:23;ignfail;ignfail;
-40;link01.at:33;link count gt 2;link01;
-41;longv7.at:24;long names in V7 archives;longname longv7;
-42;long01.at:28;long file names divisible by block size;longname long512;
-43;lustar01.at:21;ustar: unsplittable file name;longname ustar lustar01;
-44;lustar02.at:21;ustar: unsplittable path name;longname ustar lustar02;
-45;lustar03.at:21;ustar: splitting long names;longname ustar lustar03;
-46;multiv01.at:23;multivolume dumps from pipes;multivolume multiv multiv01;
-47;multiv02.at:28;skipping a straddling member;multivolume multiv multiv02;
-48;multiv03.at:30;MV archive & long filenames;multivolume multiv multiv03;
-49;multiv04.at:36;split directory members in a MV archive;multivolume multiv incremental multiv04;
-50;multiv05.at:26;Restoring after an out of sync volume;multivolume multiv multiv05 sync;
-51;multiv06.at:27;Multivolumes with L=record_size;multivolume multiv multiv06;
-52;old.at:23;old archives;old;
-53;recurse.at:21;recurse;recurse;
-54;same-order01.at:26;working -C with --same-order;same-order same-order01;
-55;same-order02.at:25;multiple -C options;same-order same-order02;
-56;shortrec.at:25;short records;shortrec;
-57;sparse01.at:21;sparse files;sparse sparse01;
-58;sparse02.at:21;extracting sparse file over a pipe;sparse sparse02;
-59;sparse03.at:21;storing sparse files > 8G;sparse sparse03;
-60;sparsemv.at:21;sparse files in MV archives;sparse multiv sparsemv;
-61;spmvp00.at:21;sparse files in PAX MV archives, v.0.0;sparse multiv sparsemvp sparsemvp00;
-62;spmvp01.at:21;sparse files in PAX MV archives, v.0.1;sparse multiv sparsemvp sparsemvp01;
-63;spmvp10.at:21;sparse files in PAX MV archives, v.1.0;sparse multiv sparsemvp sparsemvp10;
-64;update.at:27;update unchanged directories;update;
-65;volume.at:23;volume;volume volcheck;
-66;volsize.at:29;volume header size;volume volsize;
-67;comprec.at:21;compressed format recognition;comprec;
-68;shortfile.at:26;short input files;shortfile shortfile0;
-69;shortupd.at:29;updating short archives;shortfile shortfile1 shortupd;
-70;truncate.at:29;truncate;truncate filechange;
-71;grow.at:24;grow;grow filechange;
-72;gtarfail.at:21;gtarfail;star gtarfail;
-73;gtarfail2.at:21;gtarfail2;star gtarfail2;
-74;multi-fail.at:21;multi-fail;star multivolume multiv multi-fail;
-75;ustar-big-2g.at:21;ustar-big-2g;star ustar-big-2g;
-76;ustar-big-8g.at:21;ustar-big-8g;star ustar-big-8g;
-77;pax-big-10g.at:21;pax-big-10g;star pax-big-10g;
+11;append02.at:54;append vs. create;append append02 append-gnu;
+12;xform-h.at:30;transforming hard links on create;transform xform xform-h;
+13;exclude.at:23;exclude;exclude;
+14;exclude01.at:17;exclude wildcards;exclude exclude01;
+15;exclude02.at:17;exclude: anchoring;exclude exclude02;
+16;exclude03.at:17;exclude: wildcards match slash;exclude exclude03;
+17;exclude04.at:17;exclude: case insensitive;exclude exclude04;
+18;exclude05.at:19;exclude: lots of excludes;exclude exclude05;
+19;delete01.at:23;deleting a member after a big one;delete delete01;
+20;delete02.at:23;deleting a member from stdin archive;delete delete02;
+21;delete03.at:21;deleting members with long names;delete delete03;
+22;delete04.at:23;deleting a large last member;delete delete04;
+23;delete05.at:27;deleting non-existing member;delete delete05;
+24;extrac01.at:23;extract over an existing directory;extract extract01;
+25;extrac02.at:23;extracting symlinks over an existing file;extract extract02 symlink;
+26;extrac03.at:23;extraction loops;extract extract03;
+27;extrac04.at:23;extract + fnmatch;extract extract04 fnmatch;
+28;extrac05.at:30;extracting selected members from pax;extract extract05;
+29;extrac06.at:33;mode of extracted directories;extract extract06 directory mode;
+30;extrac07.at:27;extracting symlinks to a read-only dir;extract extract07 read-only symlink;
+31;extrac08.at:33;restoring mode on existing directory;extract extrac08;
+32;label01.at:19;single-volume label;label label01;
+33;label02.at:19;multi-volume label;label label02 multi-label multivolume multiv;
+34;backup01.at:33;extracting existing dir with --backup;extract backup backup01;
+35;gzip.at:23;gzip;gzip;
+36;incremental.at:23;incremental;incremental incr00;
+37;incr01.at:27;restore broken symlinks from incremental;incremental incr01;
+38;incr02.at:32;restoring timestamps from incremental;incremental timestamp restore incr02;
+39;listed01.at:26;--listed for individual files;listed incremental listed01;
+40;listed02.at:28;working --listed;listed incremental listed02;
+41;incr03.at:28;renamed files in incrementals;incremental incr03 rename;
+42;incr04.at:29;proper icontents initialization;incremental incr04 icontents;
+43;incr05.at:19;incremental dumps with -C;incremental incr05;
+44;incr06.at:19;incremental dumps of nested directories;incremental incr06;
+45;filerem01.at:34;file removed as we read it (ca. 22 seconds);create incremental filechange filerem filerem01;
+46;filerem02.at:24;toplevel file removed (ca. 24 seconds);create incremental filechange filerem filerem02;
+47;rename01.at:24;renamed dirs in incrementals;incremental rename rename01;
+48;rename02.at:24;move between hierarchies;incremental rename rename02;
+49;rename03.at:23;cyclic renames;incremental rename rename03 cyclic-rename;
+50;rename04.at:27;renamed directory containing subdirectories;incremental rename04 rename;
+51;rename05.at:24;renamed subdirectories;incremental rename05 rename;
+52;chtype.at:27;changed file types in incrementals;incremental chtype;
+53;ignfail.at:23;ignfail;ignfail;
+54;link01.at:33;link count gt 2;hardlinks link01;
+55;link02.at:32;preserve hard links with --remove-files;hardlinks link02;
+56;link03.at:24;working -l with --remove-files;hardlinks link03;
+57;longv7.at:24;long names in V7 archives;longname longv7;
+58;long01.at:28;long file names divisible by block size;longname long512;
+59;lustar01.at:21;ustar: unsplittable file name;longname ustar lustar01;
+60;lustar02.at:21;ustar: unsplittable path name;longname ustar lustar02;
+61;lustar03.at:21;ustar: splitting long names;longname ustar lustar03;
+62;multiv01.at:23;multivolume dumps from pipes;multivolume multiv multiv01;
+63;multiv02.at:28;skipping a straddling member;multivolume multiv multiv02;
+64;multiv03.at:30;MV archive & long filenames;multivolume multiv multiv03;
+65;multiv04.at:36;split directory members in a MV archive;multivolume multiv incremental multiv04;
+66;multiv05.at:26;Restoring after an out of sync volume;multivolume multiv multiv05 sync;
+67;multiv06.at:27;Multivolumes with L=record_size;multivolume multiv multiv06;
+68;multiv07.at:26;volumes split at an extended header;multivolume multiv multiv07 xsplit;
+69;old.at:23;old archives;old;
+70;recurse.at:21;recurse;recurse;
+71;same-order01.at:26;working -C with --same-order;same-order same-order01;
+72;same-order02.at:25;multiple -C options;same-order same-order02;
+73;shortrec.at:25;short records;shortrec;
+74;sparse01.at:21;sparse files;sparse sparse01;
+75;sparse02.at:21;extracting sparse file over a pipe;sparse sparse02;
+76;sparse03.at:21;storing sparse files > 8G;sparse sparse03;
+77;sparsemv.at:21;sparse files in MV archives;sparse multiv sparsemv;
+78;spmvp00.at:21;sparse files in PAX MV archives, v.0.0;sparse multiv sparsemvp sparsemvp00;
+79;spmvp01.at:21;sparse files in PAX MV archives, v.0.1;sparse multiv sparsemvp sparsemvp01;
+80;spmvp10.at:21;sparse files in PAX MV archives, v.1.0;sparse multiv sparsemvp sparsemvp10;
+81;update.at:28;update unchanged directories;update update00;
+82;update01.at:29;update directories;update update01;
+83;update02.at:26;update changed files;update update02;
+84;volume.at:23;volume;volume volcheck;
+85;volsize.at:29;volume header size;volume volsize;
+86;comprec.at:21;compressed format recognition;comprec;
+87;shortfile.at:26;short input files;shortfile shortfile0;
+88;shortupd.at:29;updating short archives;shortfile shortfile1 shortupd;
+89;truncate.at:29;truncate;truncate filechange;
+90;grow.at:24;grow;grow filechange;
+91;remfiles01.at:28;remove-files with compression;create remove-files remfiles01 gzip;
+92;remfiles02.at:28;remove-files with compression: grand-child;create remove-files remfiles02 gzip;
+93;gtarfail.at:21;gtarfail;star gtarfail;
+94;gtarfail2.at:21;gtarfail2;star gtarfail2;
+95;multi-fail.at:21;multi-fail;star multivolume multiv multi-fail;
+96;ustar-big-2g.at:21;ustar-big-2g;star ustar-big-2g;
+97;ustar-big-8g.at:21;ustar-big-8g;star ustar-big-8g;
+98;pax-big-10g.at:21;pax-big-10g;star pax-big-10g;
 "
 
+# at_func_validate_ranges [NAME...]
+# ---------------------------------
+# Validate and normalize the test group number contained in each
+# variable NAME.  Leading zeroes are treated as decimal.
+at_func_validate_ranges ()
+{
+  for at_grp
+  do
+    eval at_value=\$$at_grp
+    if test $at_value -lt 1 || test $at_value -gt 98; then
+      $as_echo "invalid test group: $at_value" >&2
+      exit 1
+    fi
+    case $at_value in
+      0*) # We want to treat leading 0 as decimal, like expr and test, but
+         # at_func_arith treats it as octal if it uses $(( )).
+         # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the
+         # expr fork, but it is not worth the effort to determine if the
+         # shell supports XSI when the user can just avoid leading 0.
+         eval $at_grp='`expr $at_value + 0`' ;;
+    esac
+  done
+}
+
 at_prev=
 for at_option
 do
@@ -735,10 +781,7 @@ do
        ;;
 
     --clean | -c )
-       test -d "$at_suite_dir" &&
-         find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
-       rm -f -r "$at_suite_dir" "$at_suite_log"
-       exit 0
+       at_clean=:
        ;;
 
     --debug | -d )
@@ -751,7 +794,7 @@ do
        ;;
 
     --verbose | -v )
-       at_verbose=echo; at_quiet=:
+       at_verbose=; at_quiet=:
        ;;
 
     --trace | -x )
@@ -759,20 +802,23 @@ do
        ;;
 
     [0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9])
+       at_func_validate_ranges at_option
        at_groups="$at_groups$at_option "
        ;;
 
     # Ranges
     [0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-)
        at_range_start=`echo $at_option |tr -d X-`
-       at_range=`echo " $at_groups_all " | \
+       at_func_validate_ranges at_range_start
+       at_range=`$as_echo " $at_groups_all " | \
          sed -e 's/^.* \('$at_range_start' \)/\1/'`
        at_groups="$at_groups$at_range "
        ;;
 
     -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9])
        at_range_end=`echo $at_option |tr -d X-`
-       at_range=`echo " $at_groups_all " | \
+       at_func_validate_ranges at_range_end
+       at_range=`$as_echo " $at_groups_all " | \
          sed -e 's/\( '$at_range_end'\) .*$/\1/'`
        at_groups="$at_groups$at_range "
        ;;
@@ -790,12 +836,22 @@ do
          at_range_end=$at_range_start
          at_range_start=$at_tmp
        fi
-       at_range=`echo " $at_groups_all " | \
+       at_func_validate_ranges at_range_start at_range_end
+       at_range=`$as_echo " $at_groups_all " | \
          sed -e 's/^.*\( '$at_range_start' \)/\1/' \
              -e 's/\( '$at_range_end'\) .*$/\1/'`
        at_groups="$at_groups$at_range "
        ;;
 
+    # Directory selection.
+    --directory | -C )
+       at_prev=--directory
+       ;;
+    --directory=* )
+       at_change_dir=:
+       at_dir=$at_optarg
+       ;;
+
     # Keywords.
     --keywords | -k )
        at_prev=--keywords
@@ -817,68 +873,57 @@ do
            ;;
          esac
          # It is on purpose that we match the test group titles too.
-         at_groups_selected=`echo "$at_groups_selected" |
+         at_groups_selected=`$as_echo "$at_groups_selected" |
              grep -i $at_invert "^[1-9][^;]*;.*[; ]$at_keyword[ ;]"`
        done
-       at_groups_selected=`echo "$at_groups_selected" | sed 's/;.*//'`
        # Smash the newlines.
-       at_groups="$at_groups`echo $at_groups_selected` "
+       at_groups_selected=`$as_echo "$at_groups_selected" | sed 's/;.*//' |
+         tr "$as_nl" ' '
+       `
+       at_groups="$at_groups$at_groups_selected "
        ;;
 
     *=*)
        at_envvar=`expr "x$at_option" : 'x\([^=]*\)='`
        # Reject names that are not valid shell variable names.
-       expr "x$at_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
-         { echo "$as_me: error: invalid variable name: $at_envvar" >&2
-   { (exit 1); exit 1; }; }
-       at_value=`echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"`
-       eval "$at_envvar='$at_value'"
+       case $at_envvar in
+         '' | [0-9]* | *[!_$as_cr_alnum]* )
+           { { $as_echo "$as_me:$LINENO: error: invalid variable name: $at_envvar" >&5
+$as_echo "$as_me: error: invalid variable name: $at_envvar" >&2;}
+   { (exit 1); exit 1; }; } ;;
+       esac
+       at_value=`$as_echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"`
+       # Export now, but save eval for later and for debug scripts.
        export $at_envvar
-       # Propagate to debug scripts.
        at_debug_args="$at_debug_args $at_envvar='$at_value'"
        ;;
 
-     *) echo "$as_me: invalid option: $at_option" >&2
-       echo "Try \`$0 --help' for more information." >&2
+     *) $as_echo "$as_me: invalid option: $at_option" >&2
+       $as_echo "Try \`$0 --help' for more information." >&2
        exit 1
        ;;
   esac
 done
 
+# Verify our last option didn't require an argument
+if test -n "$at_prev"; then
+  { { $as_echo "$as_me:$LINENO: error: \`$at_prev' requires an argument." >&5
+$as_echo "$as_me: error: \`$at_prev' requires an argument." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
 # Selected test groups.
 if test -z "$at_groups"; then
   at_groups=$at_groups_all
 else
-  # Sort the tests, removing duplicates:
-  at_groups=`echo $at_groups | tr ' ' "$as_nl" | sort -nu`
-  # and add banners.  (Passing at_groups_all is tricky--see the comment
-  # starting with "Passing at_groups is tricky.")
-  at_groups=`echo "$at_groups$as_nl $at_groups_all" |
-    awk 'BEGIN { FS = "@" } # Effectively switch off field splitting.
-       /^$/ { next }  # Ignore the empty line.
-       !/ / { groups++; selected[$ 0] = 1; next }
-       # The last line, containing at_groups_all.
-       {
-               n = split($ 0, a, " ")
-               # If there are several tests, select their banners:
-               if (groups > 1) {
-                       for (i = 1; i <= n; i++) {
-                               if (a[i] ~ /^banner-/)
-                                       banner = a[i]
-                               else if (banner != "" && selected[a[i]] == 1)
-                                       selected[banner] = 1
-                       }
-               }
-               for (i = 1; i <= n; i++)
-                       if (selected[a[i]] == 1)
-                               list = list " " a[i]
-               print list
-       }'`
+  # Sort the tests, removing duplicates.
+  at_groups=`$as_echo "$at_groups" | tr ' ' "$as_nl" | sort -nu`
 fi
 
 # Help message.
 if $at_help_p; then
-  cat <<_ATEOF
+  cat <<_ATEOF || at_write_fail=1
 Usage: $0 [OPTION]... [VARIABLE=VALUE]... [TESTS]
 
 Run all the tests, or the selected TESTS, given by numeric ranges, and
@@ -895,7 +940,7 @@ possibly amounts into
 
   PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH
 _ATEOF
-cat <<_ATEOF
+cat <<_ATEOF || at_write_fail=1
 
 Operation modes:
   -h, --help     print the help message, then exit
@@ -903,30 +948,32 @@ Operation modes:
   -c, --clean    remove all the files this test suite might create and exit
   -l, --list     describes all the tests, or the selected TESTS
 _ATEOF
-cat <<_ATEOF
+cat <<_ATEOF || at_write_fail=1
 
 Execution tuning:
+  -C, --directory=DIR
+                 change to directory DIR before starting
   -k, --keywords=KEYWORDS
-                select the tests matching all the comma-separated KEYWORDS
-                multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD
+                 select the tests matching all the comma-separated KEYWORDS
+                 multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD
   -e, --errexit  abort as soon as a test fails; implies --debug
   -v, --verbose  force more detailed output
-                default for debugging scripts
+                 default for debugging scripts
   -d, --debug    inhibit clean up and top-level logging
-                default for debugging scripts
+                 default for debugging scripts
   -x, --trace    enable tests shell tracing
 _ATEOF
-cat <<_ATEOF
+cat <<_ATEOF || at_write_fail=1
 
 Report bugs to <bug-tar@gnu.org>.
 _ATEOF
-  exit 0
+  exit $at_write_fail
 fi
 
 # List of tests.
 if $at_list_p; then
-  cat <<_ATEOF
-GNU tar 1.22 test suite test groups:
+  cat <<_ATEOF || at_write_fail=1
+GNU tar 1.23 test suite test groups:
 
  NUM: FILE-NAME:LINE     TEST-GROUP-NAME
       KEYWORDS
@@ -935,7 +982,12 @@ _ATEOF
   # Passing at_groups is tricky.  We cannot use it to form a literal string
   # or regexp because of the limitation of AIX awk.  And Solaris' awk
   # doesn't grok more than 99 fields in a record, so we have to use `split'.
-  echo "$at_groups$as_nl$at_help_all" |
+  # at_groups needs to be space-separated for this script to work.
+  case $at_groups in
+    *"$as_nl"* )
+      at_groups=`$as_echo "$at_groups" | tr "$as_nl" ' '` ;;
+  esac
+  $as_echo "$at_groups$as_nl$at_help_all" |
     awk 'BEGIN { FS = ";" }
         NR == 1 {
           for (n = split($ 0, a, " "); n; n--) selected[a[n]] = 1
@@ -946,29 +998,129 @@ _ATEOF
             printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3
             if ($ 4) printf "      %s\n", $ 4
           }
-        }'
-  exit 0
+        }' || at_write_fail=1
+  exit $at_write_fail
 fi
 if $at_version_p; then
-  echo "$as_me (GNU tar 1.22)"
-  cat <<\_ACEOF
+  $as_echo "$as_me (GNU tar 1.23)" &&
+  cat <<\_ACEOF || at_write_fail=1
 
-Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software
-Foundation, Inc.
+Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
+Free Software Foundation, Inc.
 This test suite is free software; the Free Software Foundation gives
 unlimited permission to copy, distribute and modify it.
 _ACEOF
-  exit 0
+  exit $at_write_fail
+fi
+
+# Should we print banners?  at_groups is space-separated for entire test,
+# newline-separated if only a subset of the testsuite is run.
+case $at_groups in
+  *' '*' '* | *"$as_nl"*"$as_nl"* )
+      at_print_banners=: ;;
+  * ) at_print_banners=false ;;
+esac
+# Text for banner N, set to empty once printed.
+
+# Take any -C into account.
+if $at_change_dir ; then
+  if test x- = "x$at_dir" ; then
+    at_dir=./-
+  fi
+  test x != "x$at_dir" && cd "$at_dir" \
+    || { { $as_echo "$as_me:$LINENO: error: unable to change directory" >&5
+$as_echo "$as_me: error: unable to change directory" >&2;}
+   { (exit 1); exit 1; }; }
+  at_dir=`pwd`
+fi
+
+# Load the config files for any default variable assignments.
+for at_file in atconfig atlocal
+do
+  test -r $at_file || continue
+  . ./$at_file || { { $as_echo "$as_me:$LINENO: error: invalid content: $at_file" >&5
+$as_echo "$as_me: error: invalid content: $at_file" >&2;}
+   { (exit 1); exit 1; }; }
+done
+
+# Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix:
+: ${at_top_build_prefix=$at_top_builddir}
+
+# Perform any assignments requested during argument parsing.
+eval "$at_debug_args"
+
+# atconfig delivers names relative to the directory the test suite is
+# in, but the groups themselves are run in testsuite-dir/group-dir.
+if test -n "$at_top_srcdir"; then
+  builddir=../..
+  for at_dir_var in srcdir top_srcdir top_build_prefix
+  do
+    at_val=`eval 'as_val=${'at_$at_dir_var'}
+                $as_echo "$as_val"'`
+    case $at_val in
+      [\\/$]* | ?:[\\/]* ) at_prefix= ;;
+      *) at_prefix=../../ ;;
+    esac
+    eval "$at_dir_var=\$at_prefix\$at_val"
+  done
+fi
+
+## ------------------- ##
+## Directory structure ##
+## ------------------- ##
+
+# This is the set of directories and files used by this script
+# (non-literals are capitalized):
+#
+# TESTSUITE         - the testsuite
+# TESTSUITE.log     - summarizes the complete testsuite run
+# TESTSUITE.dir/    - created during a run, remains after -d or failed test
+# + at-groups/      - during a run: status of all groups in run
+# | + NNN/          - during a run: meta-data about test group NNN
+# | | + check-line  - location (source file and line) of current AT_CHECK
+# | | + status      - exit status of current AT_CHECK
+# | | + stdout      - stdout of current AT_CHECK
+# | | + stder1      - stderr, including trace
+# | | + stderr      - stderr, with trace filtered out
+# | | + test-source - portion of testsuite that defines group
+# | | + times       - timestamps for computing duration
+# | | + pass        - created if group passed
+# | | + xpass       - created if group xpassed
+# | | + fail        - created if group failed
+# | | + xfail       - created if group xfailed
+# | | + skip        - created if group skipped
+# + at-stop         - during a run: end the run if this file exists
+# + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction
+# + 0..NNN/         - created for each group NNN, remains after -d or failed test
+# | + TESTSUITE.log - summarizes the group results
+# | + ...           - files created during the group
+
+# The directory the whole suite works in.
+# Should be absolute to let the user `cd' at will.
+at_suite_dir=$at_dir/$as_me.dir
+# The file containing the suite.
+at_suite_log=$at_dir/$as_me.log
+# The directory containing helper files per test group.
+at_helper_dir=$at_suite_dir/at-groups
+# Stop file: if it exists, do not start new jobs.
+at_stop_file=$at_suite_dir/at-stop
+
+if $at_clean; then
+  test -d "$at_suite_dir" &&
+    find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
+  rm -f -r "$at_suite_dir" "$at_suite_log"
+  exit $?
 fi
 
 # Don't take risks: use only absolute directories in PATH.
 #
-# For stand-alone test suites, AUTOTEST_PATH is relative to `.'.
+# For stand-alone test suites (ie. atconfig was not found),
+# AUTOTEST_PATH is relative to `.'.
 #
 # For embedded test suites, AUTOTEST_PATH is relative to the top level
 # of the package.  Then expand it into build/src parts, since users
 # may create executables in both places.
-AUTOTEST_PATH=`echo $AUTOTEST_PATH | sed "s&:&$PATH_SEPARATOR&g"`
+AUTOTEST_PATH=`$as_echo "$AUTOTEST_PATH" | sed "s|:|$PATH_SEPARATOR|g"`
 at_path=
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $AUTOTEST_PATH $PATH
@@ -999,31 +1151,30 @@ IFS=$as_save_IFS
 #
 # There might be directories that don't exist, but don't redirect
 # builtins' (eg., cd) stderr directly: Ultrix's sh hates that.
-PATH=
+at_new_path=
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $at_path
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  as_dir=`(cd "$as_dir" && pwd) 2>/dev/null`
-test -d "$as_dir" || continue
-case $PATH in
-                 $as_dir                 | \
-                 $as_dir$PATH_SEPARATOR* | \
-  *$PATH_SEPARATOR$as_dir                 | \
-  *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR* ) ;;
-
-  '') PATH=$as_dir ;;
-   *) PATH=$PATH$PATH_SEPARATOR$as_dir ;;
+  test -d "$as_dir" || continue
+case $as_dir in
+  [\\/]* | ?:[\\/]* ) ;;
+  * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;;
+esac
+case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in
+  *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;;
+  $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;;
+  *) at_new_path=$at_new_path$PATH_SEPARATOR$as_dir ;;
 esac
 done
 IFS=$as_save_IFS
 
+PATH=$at_new_path
 export PATH
 
 # Setting up the FDs.
 # 5 is the log file.  Not to be overwritten if `-d'.
-
 if $at_debug_p; then
   at_suite_log=/dev/null
 else
@@ -1034,25 +1185,27 @@ exec 5>>"$at_suite_log"
 # Banners and logs.
 cat <<\_ASBOX
 ## ------------------------ ##
-## GNU tar 1.22 test suite. ##
+## GNU tar 1.23 test suite. ##
 ## ------------------------ ##
 _ASBOX
 {
   cat <<\_ASBOX
 ## ------------------------ ##
-## GNU tar 1.22 test suite. ##
+## GNU tar 1.23 test suite. ##
 ## ------------------------ ##
 _ASBOX
   echo
 
-  echo "$as_me: command line was:"
-  echo "  $ $0 $at_cli_args"
+  $as_echo "$as_me: command line was:"
+  $as_echo "  \$ $0 $at_cli_args"
   echo
 
   # Try to find a few ChangeLogs in case it might help determining the
   # exact version.  Use the relative dir: if the top dir is a symlink,
   # find will not follow it (and options to follow the links are not
-  # portable), which would result in no output here.
+  # portable), which would result in no output here.  Prune directories
+  # matching the package tarname, since they tend to be leftovers from
+  # `make dist' or `make distcheck' and contain redundant or stale logs.
   if test -n "$at_top_srcdir"; then
     cat <<\_ASBOX
 ## ----------- ##
@@ -1060,14 +1213,16 @@ _ASBOX
 ## ----------- ##
 _ASBOX
     echo
-    for at_file in `find "$at_top_srcdir" -name ChangeLog -print`
+    for at_file in `find "$at_top_srcdir" -name "tar-*" -prune -o -name ChangeLog -print`
     do
-      echo "$as_me: $at_file:"
+      $as_echo "$as_me: $at_file:"
       sed 's/^/| /;10q' $at_file
       echo
     done
 
-    {
+  fi
+
+  {
 cat <<_ASUNAME
 ## --------- ##
 ## Platform. ##
@@ -1097,23 +1252,162 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  echo "PATH: $as_dir"
+  $as_echo "PATH: $as_dir"
 done
 IFS=$as_save_IFS
 
 }
-    echo
-  fi
+  echo
 
   # Contents of the config files.
   for at_file in atconfig atlocal
   do
     test -r $at_file || continue
-    echo "$as_me: $at_file:"
+    $as_echo "$as_me: $at_file:"
     sed 's/^/| /' $at_file
     echo
   done
+} >&5
+
+
+## --------------- ##
+## Shell functions ##
+## --------------- ##
+
+# at_func_banner NUMBER
+# ---------------------
+# Output banner NUMBER, provided the testsuite is running multiple groups
+# and this particular banner has not yet been printed.
+at_func_banner ()
+{
+  $at_print_banners || return 0
+  eval at_banner_text=\$at_banner_text_$1
+  test "x$at_banner_text" = x && return 0
+  eval at_banner_text_$1=
+  $as_echo "$as_nl$at_banner_text$as_nl"
+} # at_func_banner
+
+# at_func_check_newline COMMAND
+# -----------------------------
+# Test if COMMAND includes a newline and, if so, print a message and return
+# exit code 1
+at_func_check_newline ()
+{
+  case "$1" in
+ *'
+'*) echo 'Not enabling shell tracing (command contains an embedded newline)'
+    return 1 ;;
+ *) return 0 ;;
+  esac
+}
+
+# at_func_filter_trace EXIT-CODE
+# ------------------------------
+# Split the contents of file "$at_stder1" into the "set -x" trace (on stderr)
+# and the other lines (on file "$at_stderr").  Return the exit code EXIT-CODE.
+at_func_filter_trace ()
+{
+  grep '^ *+' "$at_stder1" >&2
+  grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  return $1
+}
+
+# at_func_log_failure FILE-LIST
+# -----------------------------
+# Copy the files in the list on stdout with a "> " prefix, and exit the shell
+# with a failure exit code.
+at_func_log_failure ()
+{
+  for file
+    do $as_echo "$file:"; sed 's/^/> /' "$file"; done
+  echo 1 > "$at_status_file"
+  exit 1
+}
+
+# at_func_check_skip EXIT-CODE
+# ----------------------------
+# Check whether EXIT-CODE is the special exit code 77, and if so exit the shell
+# with that same exit code.
+at_func_check_skip ()
+{
+  case $1 in
+    77) echo 77 > "$at_status_file"; exit 77;;
+  esac
+}
+
+# at_func_check_status EXPECTED EXIT-CODE LINE
+# --------------------------------------------
+# Check whether EXIT-CODE is the expected exit code, and if so do nothing.
+# Otherwise, if it is 77 exit the shell with that same exit code; if it is
+# anything else print an error message and fail the test.
+at_func_check_status ()
+{
+  case $2 in
+    $1 ) ;;
+    77) echo 77 > "$at_status_file"; exit 77;;
+    *) $as_echo "$3: exit code was $2, expected $1"
+      at_failed=:;;
+  esac
+}
+
+# at_func_diff_devnull FILE
+# -------------------------
+# Emit a diff between /dev/null and FILE.  Uses "test -s" to avoid useless
+# diff invocations.
+at_func_diff_devnull ()
+{
+  test -s "$1" || return 0
+  $at_diff "$at_devnull" "$1"
+}
+
+# at_func_test NUMBER
+# -------------------
+# Parse out test NUMBER from the tail of this file.
+at_func_test ()
+{
+  eval at_sed=\$at_sed$1
+  sed "$at_sed" "$at_myself" > "$at_test_source"
+}
+
+# at_func_create_debugging_script
+# -------------------------------
+# Create the debugging script $at_group_dir/run which will reproduce the
+# current test group.
+at_func_create_debugging_script ()
+{
+  {
+    echo "#! /bin/sh" &&
+    echo 'test "${ZSH_VERSION+set}" = set && alias -g '\''${1+"$@"}'\''='\''"$@"'\''' &&
+    $as_echo "cd '$at_dir'" &&
+    $as_echo "exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d $at_debug_args $at_group \${1+\"\$@\"}" &&
+    echo 'exit 1'
+  } >"$at_group_dir/run" &&
+  chmod +x "$at_group_dir/run"
+}
+
+# at_func_arith
+# -------------
+# Arithmetic evaluation, avoids expr if the shell is sane.  The
+# interpretation of leading zeroes is unspecified.
+#
+# subshell and eval are needed to keep Solaris sh from bailing out:
+if ( eval 'test $(( 1 + 1 )) = 2' ) 2>/dev/null; then
+  # With "$@", bash does not split positional parameters:
+  eval 'at_func_arith ()
+  {
+    at_func_arith_result=$(( $* ))
+  }'
+else
+  at_func_arith ()
+  {
+    at_func_arith_result=`expr "$@"`
+  }
+fi
 
+## ---------------------- ##
+## End of shell functions ##
+## ---------------------- ##
+{
   cat <<\_ASBOX
 ## ---------------- ##
 ## Tested programs. ##
@@ -1137,13 +1431,13 @@ IFS=$as_save_IFS
 
   if test -f "$as_dir/$at_program"; then
     {
-      echo "$at_srcdir/testsuite.at:104: $as_dir/$at_program --version"
-      "$as_dir/$at_program" --version
+      $as_echo "$at_srcdir/testsuite.at:104: $as_dir/$at_program --version"
+      "$as_dir/$at_program" --version </dev/null
       echo
     } >&5 2>&1
   else
-    { { echo "$as_me:$LINENO: error: cannot find $at_program" >&5
-echo "$as_me: error: cannot find $at_program" >&2;}
+    { { $as_echo "$as_me:$LINENO: error: cannot find $at_program" >&5
+$as_echo "$as_me: error: cannot find $at_program" >&2;}
    { (exit 1); exit 1; }; }
   fi
 done
@@ -1158,19 +1452,13 @@ _ASBOX
 
 at_start_date=`date`
 at_start_time=`date +%s 2>/dev/null`
-echo "$as_me: starting at: $at_start_date" >&5
-at_xpass_list=
-at_xfail_list=
-at_pass_list=
-at_fail_list=
-at_skip_list=
-at_group_count=0
+$as_echo "$as_me: starting at: $at_start_date" >&5
 
 # Create the master directory if it doesn't already exist.
 test -d "$at_suite_dir" ||
   mkdir "$at_suite_dir" ||
-  { { echo "$as_me:$LINENO: error: cannot create '$at_suite_dir'" >&5
-echo "$as_me: error: cannot create '$at_suite_dir'" >&2;}
+  { { $as_echo "$as_me:$LINENO: error: cannot create '$at_suite_dir'" >&5
+$as_echo "$as_me: error: cannot create '$at_suite_dir'" >&2;}
    { (exit 1); exit 1; }; }
 
 # Can we diff with `/dev/null'?  DU 5.0 refuses.
@@ -1189,37 +1477,87 @@ else
   at_diff=diff
 fi
 
+# Get the last needed group.
+for at_group in : $at_groups; do :; done
+
+# Extract the start and end lines of each test group at the tail
+# of this file
+awk '
+BEGIN { FS="\a" }
+/^#AT_START_/ {
+  start = NR
+}
+/^#AT_STOP_/ {
+  test = substr ($ 0, 10)
+  print "at_sed" test "=\"1," start "d;" (NR-1) "q\""
+  if (test == "'"$at_group"'") exit
+}' "$at_myself" > "$at_suite_dir/at-source-lines" &&
+. "$at_suite_dir/at-source-lines" ||
+  { { $as_echo "$as_me:$LINENO: error: cannot create test line number cache" >&5
+$as_echo "$as_me: error: cannot create test line number cache" >&2;}
+   { (exit 1); exit 1; }; }
+rm -f "$at_suite_dir/at-source-lines"
+
+# Set up helper dirs.
+rm -rf "$at_helper_dir" &&
+mkdir "$at_helper_dir" &&
+cd "$at_helper_dir" &&
+{ test -z "$at_groups" || mkdir $at_groups; } ||
+{ { $as_echo "$as_me:$LINENO: error: testsuite directory setup failed" >&5
+$as_echo "$as_me: error: testsuite directory setup failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+# Functions for running a test group.  We leave the actual
+# test group execution outside of a shell function in order
+# to avoid hitting zsh 4.x exit status bugs.
+
+# at_func_group_prepare
+# ---------------------
+# Prepare running a test group
+at_func_group_prepare ()
+{
+  # The directory for additional per-group helper files.
+  at_job_dir=$at_helper_dir/$at_group
+  # The file containing the location of the last AT_CHECK.
+  at_check_line_file=$at_job_dir/check-line
+  # The file containing the exit status of the last command.
+  at_status_file=$at_job_dir/status
+  # The files containing the output of the tested commands.
+  at_stdout=$at_job_dir/stdout
+  at_stder1=$at_job_dir/stder1
+  at_stderr=$at_job_dir/stderr
+  # The file containing the code for a test group.
+  at_test_source=$at_job_dir/test-source
+  # The file containing dates.
+  at_times_file=$at_job_dir/times
 
-for at_group in $at_groups
-do
   # Be sure to come back to the top test directory.
   cd "$at_suite_dir"
 
-  case $at_group in
-    banner-*)
-      at_group_log=$at_suite_log
-      ;;
+  # Clearly separate the test groups when verbose.
+  $at_first || $at_verbose echo
 
-    *)
-      at_group_normalized=$at_group
+  at_group_normalized=$at_group
 
-  while :; do
+  eval 'while :; do
     case $at_group_normalized in #(
-    $at_format*) break;;
+    '"$at_format"'*) break;;
     esac
     at_group_normalized=0$at_group_normalized
-  done
+  done'
 
 
-      # Create a fresh directory for the next test group, and enter.
-      at_group_dir=$at_suite_dir/$at_group_normalized
-      at_group_log=$at_group_dir/$as_me.log
-      if test -d "$at_group_dir"; then
-       find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
-       rm -fr "$at_group_dir"
-      fi
-      # Be tolerant if the above `rm' was not able to remove the directory.
-      { as_dir=$at_group_dir
+  # Create a fresh directory for the next test group, and enter.
+  at_group_dir=$at_suite_dir/$at_group_normalized
+  at_group_log=$at_group_dir/$as_me.log
+  if test -d "$at_group_dir"; then
+    find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
+    rm -fr "$at_group_dir" ||
+    { $as_echo "$as_me:$LINENO: WARNING: test directory for $at_group_normalized could not be cleaned." >&5
+$as_echo "$as_me: WARNING: test directory for $at_group_normalized could not be cleaned." >&2;}
+  fi
+  # Be tolerant if the above `rm' was not able to remove the directory.
+  { as_dir="$at_group_dir"
   case $as_dir in #(
   -*) as_dir=./$as_dir;;
   esac
@@ -1227,7 +1565,7 @@ do
     as_dirs=
     while :; do
       case $as_dir in #(
-      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
       *) as_qdir=$as_dir;;
       esac
       as_dirs="'$as_qdir' $as_dirs"
@@ -1236,7 +1574,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
         X"$as_dir" : 'X\(//\)[^/]' \| \
         X"$as_dir" : 'X\(//\)$' \| \
         X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$as_dir" |
+$as_echo X"$as_dir" |
     sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
            s//\1/
            q
@@ -1257,142 +1595,447 @@ echo X"$as_dir" |
       test -d "$as_dir" && break
     done
     test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-echo "$as_me: error: cannot create directory $as_dir" >&2;}
+  } || test -d "$as_dir" || { { $as_echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+$as_echo "$as_me: error: cannot create directory $as_dir" >&2;}
    { (exit 1); exit 1; }; }; }
-      cd $at_group_dir
-      ;;
-  esac
 
   echo 0 > "$at_status_file"
 
-  # Clearly separate the test groups when verbose.
-  test $at_group_count != 0 && $at_verbose
-
   # In verbose mode, append to the log file *and* show on
-  # the standard output; in quiet mode only write to the log
-  if test $at_verbose = echo; then
+  # the standard output; in quiet mode only write to the log.
+  if test -z "$at_verbose"; then
     at_tee_pipe='tee -a "$at_group_log"'
   else
     at_tee_pipe='cat >> "$at_group_log"'
   fi
+}
 
-  case $at_group in
-  1 ) # 1. version.at:19: tar version
-    at_setup_line='version.at:19'
-    at_desc="tar version"
-    $at_quiet $ECHO_N "  1: tar version                                    $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "1. version.at:19: testing ..."
-      $at_traceon
-
-
-$at_traceoff
-echo "$at_srcdir/version.at:21: tar --version | sed 1q"
-echo version.at:21 >"$at_check_line_file"
+# at_func_group_postprocess
+# -------------------------
+at_func_group_postprocess ()
+{
+  # Be sure to come back to the suite directory, in particular
+  # since below we might `rm' the group directory we are in currently.
+  cd "$at_suite_dir"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
+  if test ! -f "$at_check_line_file"; then
+    sed "s/^ */$as_me: WARNING: /" <<_ATEOF
+      A failure happened in a test group before any test could be
+      run. This means that test suite is improperly designed.  Please
+      report this failure to <bug-tar@gnu.org>.
+_ATEOF
+    $as_echo "$at_setup_line" >"$at_check_line_file"
+  fi
+  $at_verbose $as_echo_n "$at_group. $at_setup_line: "
+  $as_echo_n "$at_group. $at_setup_line: " >> "$at_group_log"
+  case $at_xfail:$at_status in
+    yes:0)
+       at_msg="UNEXPECTED PASS"
+       at_res=xpass
+       at_errexit=$at_errexit_p
+       ;;
+    no:0)
+       at_msg="ok"
+       at_res=pass
+       at_errexit=false
+       ;;
+    *:77)
+       at_msg='skipped ('`cat "$at_check_line_file"`')'
+       at_res=skip
+       at_errexit=false
+       ;;
+    yes:*)
+       at_msg='expected failure ('`cat "$at_check_line_file"`')'
+       at_res=xfail
+       at_errexit=false
+       ;;
+    no:*)
+       at_msg='FAILED ('`cat "$at_check_line_file"`')'
+       at_res=fail
+       at_errexit=$at_errexit_p
+       ;;
+  esac
+  echo "$at_res" > "$at_job_dir/$at_res"
+  # Make sure there is a separator even with long titles.
+  $as_echo " $at_msg"
+  at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg"
+  case $at_status in
+    0|77)
+      # $at_times_file is only available if the group succeeded.
+      # We're not including the group log, so the success message
+      # is written in the global log separately.  But we also
+      # write to the group log in case they're using -d.
+      if test -f "$at_times_file"; then
+       at_log_msg="$at_log_msg     ("`sed 1d "$at_times_file"`')'
+       rm -f "$at_times_file"
+      fi
+      $as_echo "$at_log_msg" >> "$at_group_log"
+      $as_echo "$at_log_msg" >&5
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon; tar --version | sed 1q ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :; tar --version | sed 1q ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+      # Cleanup the group directory, unless the user wants the files.
+      if $at_debug_p; then
+       at_func_create_debugging_script
+      else
+       if test -d "$at_group_dir"; then
+         find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
+         rm -fr "$at_group_dir"
+       fi
+       rm -f "$at_test_source"
+      fi
+      ;;
+    *)
+      # Upon failure, include the log into the testsuite's global
+      # log.  The failure message is written in the group log.  It
+      # is later included in the global log.
+      $as_echo "$at_log_msg" >> "$at_group_log"
+
+      # Upon failure, keep the group directory for autopsy, and create
+      # the debugging script.  With -e, do not start any further tests.
+      at_func_create_debugging_script
+      if $at_errexit; then
+       echo stop > "$at_stop_file"
+      fi
+      ;;
+  esac
+}
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "tar (GNU tar) 1.22
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/version.at:21: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-  cat >$XFAILFILE <<'_EOT'
 
-==============================================================
-WARNING: Not using the proper version, *all* checks dubious...
-==============================================================
-_EOT
+## ------------ ##
+## Driver loop. ##
+## ------------ ##
 
+rm -f "$at_stop_file"
+at_first=:
 
-  echo 1 > "$at_status_file"
-  exit 1
-else
-  rm -f $XFAILFILE
-fi
+for at_group in $at_groups; do
+  at_func_group_prepare
+  if cd "$at_group_dir" &&
+     at_func_test $at_group &&
+     . "$at_test_source"; then :; else
+    { $as_echo "$as_me:$LINENO: WARNING: unable to parse test group: $at_group" >&5
+$as_echo "$as_me: WARNING: unable to parse test group: $at_group" >&2;}
+    at_failed=:
+  fi
+  at_func_group_postprocess
+  test -f "$at_stop_file" && break
+  at_first=false
+done
 
-$at_traceon
+# Wrap up the test suite with summary statistics.
+cd "$at_helper_dir"
+
+# Use ?..???? when the list must remain sorted, the faster * otherwise.
+at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'`
+at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'`
+at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'`
+at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do
+                echo $f; done | sed '/?/d; s,/xpass,,'`
+at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do
+               echo $f; done | sed '/?/d; s,/fail,,'`
+
+set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list
+shift; at_group_count=$#
+set X $at_xpass_list; shift; at_xpass_count=$#; at_xpass_list=$*
+set X $at_xfail_list; shift; at_xfail_count=$#
+set X $at_fail_list; shift; at_fail_count=$#; at_fail_list=$*
+set X $at_skip_list; shift; at_skip_count=$#
+
+at_func_arith $at_group_count - $at_skip_count
+at_run_count=$at_func_arith_result
+at_func_arith $at_xpass_count + $at_fail_count
+at_unexpected_count=$at_func_arith_result
+at_func_arith $at_xfail_count + $at_fail_count
+at_total_fail_count=$at_func_arith_result
 
+# Back to the top directory.
+cd "$at_dir"
+rm -rf "$at_helper_dir"
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
+# Compute the duration of the suite.
+at_stop_date=`date`
+at_stop_time=`date +%s 2>/dev/null`
+$as_echo "$as_me: ending at: $at_stop_date" >&5
+case $at_start_time,$at_stop_time in
+  [0-9]*,[0-9]*)
+    at_func_arith $at_stop_time - $at_start_time
+    at_duration_s=$at_func_arith_result
+    at_func_arith $at_duration_s / 60
+    at_duration_m=$at_func_arith_result
+    at_func_arith $at_duration_m / 60
+    at_duration_h=$at_func_arith_result
+    at_func_arith $at_duration_s % 60
+    at_duration_s=$at_func_arith_result
+    at_func_arith $at_duration_m % 60
+    at_duration_m=$at_func_arith_result
+    at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s"
+    $as_echo "$as_me: test suite duration: $at_duration" >&5
     ;;
+esac
 
-  2 ) # 2. pipe.at:29: decompressing from stdin
-    at_setup_line='pipe.at:29'
-    at_desc="decompressing from stdin"
-    $at_quiet $ECHO_N "  2: decompressing from stdin                       $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "2. pipe.at:29: testing ..."
-      $at_traceon
-
-
-
-
-
-
-
-
-  $at_traceoff
-echo "$at_srcdir/pipe.at:33:
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
-export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H v7\"
-export TAR_OPTIONS
-rm -rf *
-
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo
+cat <<\_ASBOX
+## ------------- ##
+## Test results. ##
+## ------------- ##
+_ASBOX
+echo
+{
+  echo
+  cat <<\_ASBOX
+## ------------- ##
+## Test results. ##
+## ------------- ##
+_ASBOX
+  echo
+} >&5
+
+if test $at_run_count = 1; then
+  at_result="1 test"
+  at_were=was
+else
+  at_result="$at_run_count tests"
+  at_were=were
+fi
+if $at_errexit_p && test $at_unexpected_count != 0; then
+  if test $at_xpass_count = 1; then
+    at_result="$at_result $at_were run, one passed"
+  else
+    at_result="$at_result $at_were run, one failed"
+  fi
+  at_result="$at_result unexpectedly and inhibited subsequent tests."
+else
+  # Don't you just love exponential explosion of the number of cases?
+  case $at_xpass_count:$at_fail_count:$at_xfail_count in
+    # So far, so good.
+    0:0:0) at_result="$at_result $at_were successful." ;;
+    0:0:*) at_result="$at_result behaved as expected." ;;
+
+    # Some unexpected failures
+    0:*:0) at_result="$at_result $at_were run,
+$at_fail_count failed unexpectedly." ;;
+
+    # Some failures, both expected and unexpected
+    0:*:1) at_result="$at_result $at_were run,
+$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
+    0:*:*) at_result="$at_result $at_were run,
+$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
+
+    # No unexpected failures, but some xpasses
+    *:0:*) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly." ;;
+
+    # No expected failures, but failures and xpasses
+    *:1:0) at_result="$at_result $at_were run,
+$at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;;
+    *:*:0) at_result="$at_result $at_were run,
+$at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;;
+
+    # All of them.
+    *:*:1) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly,
+$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
+    *:*:*) at_result="$at_result $at_were run,
+$at_xpass_count passed unexpectedly,
+$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
+  esac
+
+  if test $at_skip_count = 0 && test $at_run_count -gt 1; then
+    at_result="All $at_result"
+  fi
+fi
+
+# Now put skips in the mix.
+case $at_skip_count in
+  0) ;;
+  1) at_result="$at_result
+1 test was skipped." ;;
+  *) at_result="$at_result
+$at_skip_count tests were skipped." ;;
+esac
+
+if test $at_unexpected_count = 0; then
+  echo "$at_result"
+  echo "$at_result" >&5
+else
+  echo "ERROR: $at_result" >&2
+  echo "ERROR: $at_result" >&5
+  {
+    echo
+    cat <<\_ASBOX
+## ------------------------ ##
+## Summary of the failures. ##
+## ------------------------ ##
+_ASBOX
+
+    # Summary of failed and skipped tests.
+    if test $at_fail_count != 0; then
+      echo "Failed tests:"
+      $SHELL "$at_myself" $at_fail_list --list
+      echo
+    fi
+    if test $at_skip_count != 0; then
+      echo "Skipped tests:"
+      $SHELL "$at_myself" $at_skip_list --list
+      echo
+    fi
+    if test $at_xpass_count != 0; then
+      echo "Unexpected passes:"
+      $SHELL "$at_myself" $at_xpass_list --list
+      echo
+    fi
+    if test $at_fail_count != 0; then
+      cat <<\_ASBOX
+## ---------------------- ##
+## Detailed failed tests. ##
+## ---------------------- ##
+_ASBOX
+      echo
+      for at_group in $at_fail_list
+      do
+       at_group_normalized=$at_group
+
+  eval 'while :; do
+    case $at_group_normalized in #(
+    '"$at_format"'*) break;;
+    esac
+    at_group_normalized=0$at_group_normalized
+  done'
+
+       cat "$at_suite_dir/$at_group_normalized/$as_me.log"
+       echo
+      done
+      echo
+    fi
+    if test -n "$at_top_srcdir"; then
+      sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## ${at_top_build_prefix}config.log ##
+_ASBOX
+      sed 's/^/| /' ${at_top_build_prefix}config.log
+      echo
+    fi
+  } >&5
+
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## $as_me.log was created. ##
+_ASBOX
+
+  echo
+  $as_echo "Please send \`${at_testdir+${at_testdir}/}$as_me.log' and all information you think might help:
+
+   To: <bug-tar@gnu.org>
+   Subject: [GNU tar 1.23] $as_me: $at_fail_list${at_fail_list:+ failed${at_xpass_list:+, }}$at_xpass_list${at_xpass_list:+ passed unexpectedly}
+"
+  if test $at_debug_p = false; then
+    echo
+    echo 'You may investigate any problem if you feel able to do so, in which'
+    echo 'case the test suite provides a good starting point.  Its output may'
+    $as_echo "be found below \`${at_testdir+${at_testdir}/}$as_me.dir'."
+    echo
+  fi
+    exit 1
+fi
+
+exit 0
+
+## ------------- ##
+## Actual tests. ##
+## ------------- ##
+#AT_START_1
+# 1. version.at:19: tar version
+at_setup_line='version.at:19'
+at_desc="tar version"
+$at_quiet $as_echo_n "  1: $at_desc                                    "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "1. version.at:19: testing ..."
+  $at_traceon
+
+
+{ $at_traceoff
+$as_echo "$at_srcdir/version.at:21: tar --version | sed 1q"
+echo version.at:21 >"$at_check_line_file"
+
+if test -n "$at_traceon"; then
+  ( $at_traceon; tar --version | sed 1q ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :; tar --version | sed 1q ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "tar (GNU tar) 1.23
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/version.at:21"
+if $at_failed; then
+  cat >$XFAILFILE <<'_EOT'
+
+==============================================================
+WARNING: Not using the proper version, *all* checks dubious...
+==============================================================
+_EOT
+
+else
+  rm -f $XFAILFILE
+fi
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_1
+#AT_START_2
+# 2. pipe.at:30: decompressing from stdin
+at_setup_line='pipe.at:30'
+at_desc="decompressing from stdin"
+$at_quiet $as_echo_n "  2: $at_desc                       "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "2. pipe.at:30: testing ..."
+  $at_traceon
+
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/pipe.at:34:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H v7\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo \"separator\"
 cmp orig/file1 directory/file1
 echo \"separator\"
 cmp orig/file2 directory/file2)"
-echo pipe.at:33 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo pipe.at:34 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -1408,18 +2051,16 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
 cmp orig/file2 directory/file2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -1435,79 +2076,31 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
 cmp orig/file2 directory/file2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo stderr:; tee stderr <"$at_stderr"
-echo >>"$at_stdout"; echo "directory/
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
 directory/file1
 directory/file2
 separator
 separator
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pipe.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/pipe.at:34"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-  $at_traceoff
-echo "$at_srcdir/pipe.at:33: grep -v '^.*tar: Record size = ' stderr; exit 0"
-echo pipe.at:33 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pipe.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "$at_srcdir/pipe.at:33:
+              { $at_traceoff
+$as_echo "$at_srcdir/pipe.at:34:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -1523,22 +2116,18 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo \"separator\"
 cmp orig/file1 directory/file1
 echo \"separator\"
 cmp orig/file2 directory/file2)"
-echo pipe.at:33 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo pipe.at:34 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -1554,18 +2143,16 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
 cmp orig/file2 directory/file2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -1581,79 +2168,31 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
 cmp orig/file2 directory/file2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo stderr:; tee stderr <"$at_stderr"
-echo >>"$at_stdout"; echo "directory/
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
 directory/file1
 directory/file2
 separator
 separator
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pipe.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-  $at_traceoff
-echo "$at_srcdir/pipe.at:33: grep -v '^.*tar: Record size = ' stderr; exit 0"
-echo pipe.at:33 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pipe.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/pipe.at:34"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "$at_srcdir/pipe.at:33:
+              { $at_traceoff
+$as_echo "$at_srcdir/pipe.at:34:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -1669,22 +2208,18 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo \"separator\"
 cmp orig/file1 directory/file1
 echo \"separator\"
 cmp orig/file2 directory/file2)"
-echo pipe.at:33 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo pipe.at:34 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -1700,18 +2235,16 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
 cmp orig/file2 directory/file2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -1727,79 +2260,31 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
 cmp orig/file2 directory/file2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo stderr:; tee stderr <"$at_stderr"
-echo >>"$at_stdout"; echo "directory/
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
 directory/file1
 directory/file2
 separator
 separator
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pipe.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-  $at_traceoff
-echo "$at_srcdir/pipe.at:33: grep -v '^.*tar: Record size = ' stderr; exit 0"
-echo pipe.at:33 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pipe.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/pipe.at:34"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "$at_srcdir/pipe.at:33:
+              { $at_traceoff
+$as_echo "$at_srcdir/pipe.at:34:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -1815,22 +2300,18 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo \"separator\"
 cmp orig/file1 directory/file1
 echo \"separator\"
 cmp orig/file2 directory/file2)"
-echo pipe.at:33 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo pipe.at:34 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -1846,18 +2327,16 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
 cmp orig/file2 directory/file2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -1873,79 +2352,31 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
 cmp orig/file2 directory/file2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo stderr:; tee stderr <"$at_stderr"
-echo >>"$at_stdout"; echo "directory/
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
 directory/file1
 directory/file2
 separator
 separator
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pipe.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-  $at_traceoff
-echo "$at_srcdir/pipe.at:33: grep -v '^.*tar: Record size = ' stderr; exit 0"
-echo pipe.at:33 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pipe.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/pipe.at:34"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "$at_srcdir/pipe.at:33:
+              { $at_traceoff
+$as_echo "$at_srcdir/pipe.at:34:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -1961,22 +2392,18 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo \"separator\"
 cmp orig/file1 directory/file1
 echo \"separator\"
 cmp orig/file2 directory/file2)"
-echo pipe.at:33 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo pipe.at:34 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -1992,18 +2419,16 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
 cmp orig/file2 directory/file2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -2019,236 +2444,154 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir directory
 genfile --length 10240 --pattern zeros --file directory/file1
 genfile --length 13 --file directory/file2
-tar cf archive directory|sort
+tar cf archive directory
 mv directory orig
 cat archive | tar xfv - | sort
 echo "separator"
 cmp orig/file1 directory/file1
 echo "separator"
 cmp orig/file2 directory/file2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo stderr:; tee stderr <"$at_stderr"
-echo >>"$at_stdout"; echo "directory/
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
 directory/file1
 directory/file2
 separator
 separator
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pipe.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/pipe.at:34"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
 
   $at_traceoff
-echo "$at_srcdir/pipe.at:33: grep -v '^.*tar: Record size = ' stderr; exit 0"
-echo pipe.at:33 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pipe.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  3 ) # 3. options.at:24: mixing options
-    at_setup_line='options.at:24'
-    at_desc="mixing options"
-    $at_quiet $ECHO_N "  3: mixing options                                 $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "3. options.at:24: testing ..."
-      $at_traceon
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_2
+#AT_START_3
+# 3. options.at:24: mixing options
+at_setup_line='options.at:24'
+at_desc="mixing options"
+$at_quiet $as_echo_n "  3: $at_desc                                 "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "3. options.at:24: testing ..."
+  $at_traceon
 
 
 
-$at_traceoff
-echo "$at_srcdir/options.at:27:
+$at_traceoff
+$as_echo "$at_srcdir/options.at:27:
 echo > file1
 TAR_OPTIONS=--numeric-owner tar chof archive file1
 tar tf archive
 "
 echo options.at:27 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 echo > file1
 TAR_OPTIONS=--numeric-owner tar chof archive file1
 tar tf archive
  ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 echo > file1
 TAR_OPTIONS=--numeric-owner tar chof archive file1
 tar tf archive
  ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/options.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/options.at:27"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  4 ) # 4. options02.at:26: interspersed options
-    at_setup_line='options02.at:26'
-    at_desc="interspersed options"
-    $at_quiet $ECHO_N "  4: interspersed options                           $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "4. options02.at:26: testing ..."
-      $at_traceon
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_3
+#AT_START_4
+# 4. options02.at:26: interspersed options
+at_setup_line='options02.at:26'
+at_desc="interspersed options"
+$at_quiet $as_echo_n "  4: $at_desc                           "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "4. options02.at:26: testing ..."
+  $at_traceon
 
 
 
-$at_traceoff
-echo "$at_srcdir/options02.at:29:
+$at_traceoff
+$as_echo "$at_srcdir/options02.at:29:
 echo > file1
 tar c file1 -f archive
 tar tf archive
 "
 echo options02.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 echo > file1
 tar c file1 -f archive
 tar tf archive
  ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 echo > file1
 tar c file1 -f archive
 tar tf archive
  ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/options02.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/options02.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  5 ) # 5. T-empty.at:26: files-from: empty entries
-    at_setup_line='T-empty.at:26'
-    at_desc="files-from: empty entries"
-    $at_quiet $ECHO_N "  5: files-from: empty entries                      $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_4
+#AT_START_5
+# 5. T-empty.at:26: files-from: empty entries
+at_setup_line='T-empty.at:26'
+at_desc="files-from: empty entries"
+$at_quiet $as_echo_n "  5: $at_desc                      "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "5. T-empty.at:26: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "5. T-empty.at:26: testing ..."
+  $at_traceon
 
 
 
@@ -2262,8 +2605,8 @@ _ATEOF
 
 
 
-  $at_traceoff
-echo "$at_srcdir/T-empty.at:36:
+  $at_traceoff
+$as_echo "$at_srcdir/T-empty.at:36:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -2284,13 +2627,9 @@ tar cfvT archive ../file-list | sort
 )"
 echo T-empty.at:36 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -2309,11 +2648,9 @@ genfile --file trzy
 
 tar cfvT archive ../file-list | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -2332,49 +2669,39 @@ genfile --file trzy
 
 tar cfvT archive ../file-list | sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "dwa
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dwa
 jeden
 trzy
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/T-empty.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/T-empty.at:36"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
  # Testing one format is enough
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  6 ) # 6. T-null.at:21: files-from: 0-separated file without -0
-    at_setup_line='T-null.at:21'
-    at_desc="files-from: 0-separated file without -0"
-    $at_quiet $ECHO_N "  6: files-from: 0-separated file without -0        $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_5
+#AT_START_6
+# 6. T-null.at:21: files-from: 0-separated file without -0
+at_setup_line='T-null.at:21'
+at_desc="files-from: 0-separated file without -0"
+$at_quiet $as_echo_n "  6: $at_desc        "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "6. T-null.at:21: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "6. T-null.at:21: testing ..."
+  $at_traceon
 
 
 
@@ -2386,8 +2713,8 @@ _ATEOF
 
 
 
-  $at_traceoff
-echo "$at_srcdir/T-null.at:28:
+  $at_traceoff
+$as_echo "$at_srcdir/T-null.at:28:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -2414,13 +2741,9 @@ tar cfTv archive file-list | sort
 )"
 echo T-null.at:28 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -2445,11 +2768,9 @@ genfile -f trzy
 
 tar cfTv archive file-list | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -2474,54 +2795,44 @@ genfile -f trzy
 
 tar cfTv archive file-list | sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: file-list: file name read contains nul character
-" | $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stderr"; $as_echo "tar: file-list: file name read contains nul character
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
 $at_diff expout "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/T-null.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_check_status 0 $at_status "$at_srcdir/T-null.at:28"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
  # Testing one format is enough
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  7 ) # 7. indexfile.at:26: tar --index-file=FILE --file=-
-    at_setup_line='indexfile.at:26'
-    at_desc="tar --index-file=FILE --file=-"
-    $at_quiet $ECHO_N "  7: tar --index-file=FILE --file=-                 $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_6
+#AT_START_7
+# 7. indexfile.at:26: tar --index-file=FILE --file=-
+at_setup_line='indexfile.at:26'
+at_desc="tar --index-file=FILE --file=-"
+$at_quiet $as_echo_n "  7: $at_desc                 "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "7. indexfile.at:26: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "7. indexfile.at:26: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/indexfile.at:29:
+  $at_traceoff
+$as_echo "$at_srcdir/indexfile.at:29:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -2542,13 +2853,9 @@ tar -tf archive
 )"
 echo indexfile.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -2567,11 +2874,9 @@ tar -c -v -f - --index-file=idx directory > archive
 echo "Testing the archive"
 tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -2590,33 +2895,23 @@ tar -c -v -f - --index-file=idx directory > archive
 echo "Testing the archive"
 tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating the archive
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating the archive
 Testing the archive
 directory/
 directory/a
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/indexfile.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/indexfile.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/indexfile.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/indexfile.at:29:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -2637,13 +2932,9 @@ tar -tf archive
 )"
 echo indexfile.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -2662,11 +2953,9 @@ tar -c -v -f - --index-file=idx directory > archive
 echo "Testing the archive"
 tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -2685,33 +2974,23 @@ tar -c -v -f - --index-file=idx directory > archive
 echo "Testing the archive"
 tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating the archive
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating the archive
 Testing the archive
 directory/
 directory/a
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/indexfile.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/indexfile.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/indexfile.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/indexfile.at:29:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -2732,13 +3011,9 @@ tar -tf archive
 )"
 echo indexfile.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -2757,11 +3032,9 @@ tar -c -v -f - --index-file=idx directory > archive
 echo "Testing the archive"
 tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -2780,33 +3053,23 @@ tar -c -v -f - --index-file=idx directory > archive
 echo "Testing the archive"
 tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating the archive
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating the archive
 Testing the archive
 directory/
 directory/a
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/indexfile.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/indexfile.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/indexfile.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/indexfile.at:29:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -2827,13 +3090,9 @@ tar -tf archive
 )"
 echo indexfile.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -2852,11 +3111,9 @@ tar -c -v -f - --index-file=idx directory > archive
 echo "Testing the archive"
 tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -2875,33 +3132,23 @@ tar -c -v -f - --index-file=idx directory > archive
 echo "Testing the archive"
 tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating the archive
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating the archive
 Testing the archive
 directory/
 directory/a
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/indexfile.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/indexfile.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/indexfile.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/indexfile.at:29:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -2922,13 +3169,9 @@ tar -tf archive
 )"
 echo indexfile.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -2947,11 +3190,9 @@ tar -c -v -f - --index-file=idx directory > archive
 echo "Testing the archive"
 tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -2970,57 +3211,47 @@ tar -c -v -f - --index-file=idx directory > archive
 echo "Testing the archive"
 tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating the archive
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating the archive
 Testing the archive
 directory/
 directory/a
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/indexfile.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/indexfile.at:29"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  8 ) # 8. verbose.at:26: tar cvf -
-    at_setup_line='verbose.at:26'
-    at_desc="tar cvf -"
-    $at_quiet $ECHO_N "  8: tar cvf -                                      $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_7
+#AT_START_8
+# 8. verbose.at:26: tar cvf -
+at_setup_line='verbose.at:26'
+at_desc="tar cvf -"
+$at_quiet $as_echo_n "  8: $at_desc                                      "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "8. verbose.at:26: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "8. verbose.at:26: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/verbose.at:29:
+  $at_traceoff
+$as_echo "$at_srcdir/verbose.at:29:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -3037,13 +3268,9 @@ tar tf archive
 )"
 echo verbose.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -3058,11 +3285,9 @@ tar cvf - file > archive
 echo Testing the archive
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -3077,33 +3302,24 @@ tar cvf - file > archive
 echo Testing the archive
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "file
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating the archive
+echo >>"$at_stderr"; $as_echo "file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating the archive
 Testing the archive
 file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/verbose.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/verbose.at:29"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/verbose.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/verbose.at:29:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -3120,13 +3336,9 @@ tar tf archive
 )"
 echo verbose.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -3141,11 +3353,9 @@ tar cvf - file > archive
 echo Testing the archive
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -3160,33 +3370,24 @@ tar cvf - file > archive
 echo Testing the archive
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "file
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating the archive
+echo >>"$at_stderr"; $as_echo "file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating the archive
 Testing the archive
 file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/verbose.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/verbose.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/verbose.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/verbose.at:29:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -3203,13 +3404,9 @@ tar tf archive
 )"
 echo verbose.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -3224,11 +3421,9 @@ tar cvf - file > archive
 echo Testing the archive
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -3243,33 +3438,24 @@ tar cvf - file > archive
 echo Testing the archive
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "file
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating the archive
+echo >>"$at_stderr"; $as_echo "file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating the archive
 Testing the archive
 file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/verbose.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/verbose.at:29"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/verbose.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/verbose.at:29:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -3286,13 +3472,9 @@ tar tf archive
 )"
 echo verbose.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -3307,11 +3489,9 @@ tar cvf - file > archive
 echo Testing the archive
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -3326,33 +3506,24 @@ tar cvf - file > archive
 echo Testing the archive
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "file
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating the archive
+echo >>"$at_stderr"; $as_echo "file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating the archive
 Testing the archive
 file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/verbose.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/verbose.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/verbose.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/verbose.at:29:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -3369,13 +3540,9 @@ tar tf archive
 )"
 echo verbose.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -3390,11 +3557,9 @@ tar cvf - file > archive
 echo Testing the archive
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -3409,57 +3574,48 @@ tar cvf - file > archive
 echo Testing the archive
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "file
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating the archive
+echo >>"$at_stderr"; $as_echo "file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating the archive
 Testing the archive
 file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/verbose.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/verbose.at:29"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  9 ) # 9. append.at:21: append
-    at_setup_line='append.at:21'
-    at_desc="append"
-    $at_quiet $ECHO_N "  9: append                                         $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_8
+#AT_START_9
+# 9. append.at:21: append
+at_setup_line='append.at:21'
+at_desc="append"
+$at_quiet $as_echo_n "  9: $at_desc                                         "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "9. append.at:21: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "9. append.at:21: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/append.at:24:
+  $at_traceoff
+$as_echo "$at_srcdir/append.at:24:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -3474,13 +3630,9 @@ touch file1
           tar tf archive)"
 echo append.at:24 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -3493,11 +3645,9 @@ touch file1
           tar cf archive file1
           tar rf archive file2
           tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -3510,31 +3660,21 @@ touch file1
           tar cf archive file1
           tar rf archive file2
           tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
 file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append.at:24"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-              $at_traceoff
-echo "$at_srcdir/append.at:24:
+              { $at_traceoff
+$as_echo "$at_srcdir/append.at:24:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -3549,13 +3689,9 @@ touch file1
           tar tf archive)"
 echo append.at:24 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -3568,11 +3704,9 @@ touch file1
           tar cf archive file1
           tar rf archive file2
           tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -3585,31 +3719,21 @@ touch file1
           tar cf archive file1
           tar rf archive file2
           tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
 file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append.at:24"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/append.at:24:
+              $at_traceoff
+$as_echo "$at_srcdir/append.at:24:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -3624,13 +3748,9 @@ touch file1
           tar tf archive)"
 echo append.at:24 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -3643,11 +3763,9 @@ touch file1
           tar cf archive file1
           tar rf archive file2
           tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -3660,31 +3778,21 @@ touch file1
           tar cf archive file1
           tar rf archive file2
           tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
 file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append.at:24"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-              $at_traceoff
-echo "$at_srcdir/append.at:24:
+              { $at_traceoff
+$as_echo "$at_srcdir/append.at:24:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -3699,13 +3807,9 @@ touch file1
           tar tf archive)"
 echo append.at:24 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -3718,11 +3822,9 @@ touch file1
           tar cf archive file1
           tar rf archive file2
           tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -3735,31 +3837,21 @@ touch file1
           tar cf archive file1
           tar rf archive file2
           tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
 file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append.at:24"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/append.at:24:
+              $at_traceoff
+$as_echo "$at_srcdir/append.at:24:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -3774,13 +3866,9 @@ touch file1
           tar tf archive)"
 echo append.at:24 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -3793,11 +3881,9 @@ touch file1
           tar cf archive file1
           tar rf archive file2
           tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -3810,48 +3896,38 @@ touch file1
           tar cf archive file1
           tar rf archive file2
           tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
 file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append.at:24"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
 
 
 
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  10 ) # 10. append01.at:29: appending files with long names
-    at_setup_line='append01.at:29'
-    at_desc="appending files with long names"
-    $at_quiet $ECHO_N " 10: appending files with long names                $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_9
+#AT_START_10
+# 10. append01.at:29: appending files with long names
+at_setup_line='append01.at:29'
+at_desc="appending files with long names"
+$at_quiet $as_echo_n " 10: $at_desc                "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "10. append01.at:29: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "10. append01.at:29: testing ..."
+  $at_traceon
 
 
 
@@ -3859,8 +3935,8 @@ $at_traceon
 
 
 
-  $at_traceoff
-echo "$at_srcdir/append01.at:34:
+  $at_traceoff
+$as_echo "$at_srcdir/append01.at:34:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -3877,13 +3953,9 @@ tar tf archive
 )"
 echo append01.at:34 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -3898,11 +3970,9 @@ tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_pr
 tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -3917,31 +3987,21 @@ tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_pr
 tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1
 This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append01.at:34: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append01.at:34"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/append01.at:34:
+              $at_traceoff
+$as_echo "$at_srcdir/append01.at:34:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -3958,13 +4018,9 @@ tar tf archive
 )"
 echo append01.at:34 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -3979,11 +4035,9 @@ tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_pr
 tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -3998,31 +4052,21 @@ tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_pr
 tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1
 This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append01.at:34: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append01.at:34"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/append01.at:34:
+              $at_traceoff
+$as_echo "$at_srcdir/append01.at:34:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -4039,13 +4083,9 @@ tar tf archive
 )"
 echo append01.at:34 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -4060,11 +4100,9 @@ tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_pr
 tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -4079,31 +4117,21 @@ tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_pr
 tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1
 This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append01.at:34: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append01.at:34"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/append01.at:34:
+              $at_traceoff
+$as_echo "$at_srcdir/append01.at:34:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -4120,13 +4148,9 @@ tar tf archive
 )"
 echo append01.at:34 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -4141,11 +4165,9 @@ tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_pr
 tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -4160,55 +4182,45 @@ tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_pr
 tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1
 This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append01.at:34: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append01.at:34"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  11 ) # 11. append02.at:40: append vs. create
-    at_setup_line='append02.at:40'
-    at_desc="append vs. create"
-    $at_quiet $ECHO_N " 11: append vs. create                              $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_10
+#AT_START_11
+# 11. append02.at:54: append vs. create
+at_setup_line='append02.at:54'
+at_desc="append vs. create"
+$at_quiet $as_echo_n " 11: $at_desc                              "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "11. append02.at:40: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "11. append02.at:54: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/append02.at:43:
+  $at_traceoff
+$as_echo "$at_srcdir/append02.at:57:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -4240,15 +4252,11 @@ tar \$MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 )"
-echo append02.at:43 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo append02.at:57 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -4280,11 +4288,9 @@ tar $MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -4316,32 +4322,22 @@ tar $MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating archive.1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating archive.1
 Creating archive.2
 Comparing archives
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append02.at:43: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append02.at:57"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/append02.at:43:
+              $at_traceoff
+$as_echo "$at_srcdir/append02.at:57:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -4373,15 +4369,11 @@ tar \$MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 )"
-echo append02.at:43 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo append02.at:57 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -4413,11 +4405,9 @@ tar $MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -4449,32 +4439,22 @@ tar $MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating archive.1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating archive.1
 Creating archive.2
 Comparing archives
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append02.at:43: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append02.at:57"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/append02.at:43:
+              $at_traceoff
+$as_echo "$at_srcdir/append02.at:57:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -4506,15 +4486,11 @@ tar \$MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 )"
-echo append02.at:43 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo append02.at:57 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -4546,11 +4522,9 @@ tar $MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -4582,32 +4556,22 @@ tar $MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating archive.1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating archive.1
 Creating archive.2
 Comparing archives
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append02.at:43: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append02.at:57"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/append02.at:43:
+              $at_traceoff
+$as_echo "$at_srcdir/append02.at:57:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -4639,15 +4603,11 @@ tar \$MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 )"
-echo append02.at:43 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo append02.at:57 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -4679,11 +4639,9 @@ tar $MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -4715,32 +4673,22 @@ tar $MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating archive.1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating archive.1
 Creating archive.2
 Comparing archives
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append02.at:43: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append02.at:57"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/append02.at:43:
+              $at_traceoff
+$as_echo "$at_srcdir/append02.at:57:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -4772,15 +4720,11 @@ tar \$MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 )"
-echo append02.at:43 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo append02.at:57 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -4812,11 +4756,9 @@ tar $MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -4848,515 +4790,303 @@ tar $MTIME -rf archive.2 file2
 echo Comparing archives
 cmp archive.1 archive.2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating archive.1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating archive.1
 Creating archive.2
 Comparing archives
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/append02.at:43: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/append02.at:57"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
 
 
 
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_11
+#AT_START_12
+# 12. xform-h.at:30: transforming hard links on create
+at_setup_line='xform-h.at:30'
+at_desc="transforming hard links on create"
+$at_quiet $as_echo_n " 12: $at_desc              "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "12. xform-h.at:30: testing ..."
+  $at_traceon
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  12 ) # 12. exclude.at:23: exclude
-    at_setup_line='exclude.at:23'
-    at_desc="exclude"
-    $at_quiet $ECHO_N " 12: exclude                                        $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "12. exclude.at:23: testing ..."
-      $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/exclude.at:26:
-mkdir ustar
-(cd ustar
-TEST_TAR_FORMAT=ustar
+  $at_traceoff
+$as_echo "$at_srcdir/xform-h.at:39:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H ustar\"
+TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir basedir
+echo \"hello\" > basedir/test
+ln basedir/test basedir/test_link
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
 
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-mkdir dir
-echo blues > dir/blues
-echo jazz > dir/jazz
-mkdir dir/folk
-echo tagfile > dir/folk/tagfile
-echo sanjuan > dir/folk/sanjuan
-mkdir dir/rock
-echo \"Signature: 8a477f597d28d172789f06886806bc55\" > dir/rock/CACHEDIR.TAG
-echo \"test\" > dir/rock/file
 
-for option in exclude-caches exclude-caches-under exclude-caches-all
-do
-  echo OPTION \$option
-  tar -cf archive.tar --\$option -v dir 2>err | sort
-  cat err
-  echo ARCHIVE
-  tar tf archive.tar | sort
-done
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-for option in exclude-tag exclude-tag-under exclude-tag-all
-do
-  echo OPTION \$option
-  tar -cf archive.tar --\${option}=tagfile -v dir 2>err | sort
-  cat err
-  echo ARCHIVE
-  tar tf archive.tar | sort
-done
-)"
-echo exclude.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
-fi
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir ustar
-(cd ustar
-TEST_TAR_FORMAT=ustar
+)"
+echo xform-h.at:39 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H ustar"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
 
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-mkdir dir
-echo blues > dir/blues
-echo jazz > dir/jazz
-mkdir dir/folk
-echo tagfile > dir/folk/tagfile
-echo sanjuan > dir/folk/sanjuan
-mkdir dir/rock
-echo "Signature: 8a477f597d28d172789f06886806bc55" > dir/rock/CACHEDIR.TAG
-echo "test" > dir/rock/file
 
-for option in exclude-caches exclude-caches-under exclude-caches-all
-do
-  echo OPTION $option
-  tar -cf archive.tar --$option -v dir 2>err | sort
-  cat err
-  echo ARCHIVE
-  tar tf archive.tar | sort
-done
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-for option in exclude-tag exclude-tag-under exclude-tag-all
-do
-  echo OPTION $option
-  tar -cf archive.tar --${option}=tagfile -v dir 2>err | sort
-  cat err
-  echo ARCHIVE
-  tar tf archive.tar | sort
-done
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir ustar
-(cd ustar
-TEST_TAR_FORMAT=ustar
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H ustar"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
 
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-mkdir dir
-echo blues > dir/blues
-echo jazz > dir/jazz
-mkdir dir/folk
-echo tagfile > dir/folk/tagfile
-echo sanjuan > dir/folk/sanjuan
-mkdir dir/rock
-echo "Signature: 8a477f597d28d172789f06886806bc55" > dir/rock/CACHEDIR.TAG
-echo "test" > dir/rock/file
 
-for option in exclude-caches exclude-caches-under exclude-caches-all
-do
-  echo OPTION $option
-  tar -cf archive.tar --$option -v dir 2>err | sort
-  cat err
-  echo ARCHIVE
-  tar tf archive.tar | sort
-done
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-for option in exclude-tag exclude-tag-under exclude-tag-all
-do
-  echo OPTION $option
-  tar -cf archive.tar --${option}=tagfile -v dir 2>err | sort
-  cat err
-  echo ARCHIVE
-  tar tf archive.tar | sort
-done
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "OPTION exclude-caches
-dir/
-dir/blues
-dir/folk/
-dir/folk/sanjuan
-dir/folk/tagfile
-dir/jazz
-dir/rock/
-dir/rock/CACHEDIR.TAG
-tar: dir/rock/: contains a cache directory tag CACHEDIR.TAG; contents not dumped
-ARCHIVE
-dir/
-dir/blues
-dir/folk/
-dir/folk/sanjuan
-dir/folk/tagfile
-dir/jazz
-dir/rock/
-dir/rock/CACHEDIR.TAG
-OPTION exclude-caches-under
-dir/
-dir/blues
-dir/folk/
-dir/folk/sanjuan
-dir/folk/tagfile
-dir/jazz
-dir/rock/
-tar: dir/rock/: contains a cache directory tag CACHEDIR.TAG; contents not dumped
-ARCHIVE
-dir/
-dir/blues
-dir/folk/
-dir/folk/sanjuan
-dir/folk/tagfile
-dir/jazz
-dir/rock/
-OPTION exclude-caches-all
-dir/
-dir/blues
-dir/folk/
-dir/folk/sanjuan
-dir/folk/tagfile
-dir/jazz
-tar: dir/rock/: contains a cache directory tag CACHEDIR.TAG; directory not dumped
-ARCHIVE
-dir/
-dir/blues
-dir/folk/
-dir/folk/sanjuan
-dir/folk/tagfile
-dir/jazz
-OPTION exclude-tag
-dir/
-dir/blues
-dir/folk/
-dir/folk/tagfile
-dir/jazz
-dir/rock/
-dir/rock/CACHEDIR.TAG
-dir/rock/file
-tar: dir/folk/: contains a cache directory tag tagfile; contents not dumped
-ARCHIVE
-dir/
-dir/blues
-dir/folk/
-dir/folk/tagfile
-dir/jazz
-dir/rock/
-dir/rock/CACHEDIR.TAG
-dir/rock/file
-OPTION exclude-tag-under
-dir/
-dir/blues
-dir/folk/
-dir/jazz
-dir/rock/
-dir/rock/CACHEDIR.TAG
-dir/rock/file
-tar: dir/folk/: contains a cache directory tag tagfile; contents not dumped
-ARCHIVE
-dir/
-dir/blues
-dir/folk/
-dir/jazz
-dir/rock/
-dir/rock/CACHEDIR.TAG
-dir/rock/file
-OPTION exclude-tag-all
-dir/
-dir/blues
-dir/jazz
-dir/rock/
-dir/rock/CACHEDIR.TAG
-dir/rock/file
-tar: dir/folk/: contains a cache directory tag tagfile; directory not dumped
-ARCHIVE
-dir/
-dir/blues
-dir/jazz
-dir/rock/
-dir/rock/CACHEDIR.TAG
-dir/rock/file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/exclude.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Default transform scope
+test
+Transforming hard links
+test
+Not transforming hard links
+basedir/test
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/xform-h.at:39"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/xform-h.at:39:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
 
+mkdir basedir
+echo \"hello\" > basedir/test
+ln basedir/test basedir/test_link
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
 
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-  13 ) # 13. delete01.at:23: deleting a member after a big one
-    at_setup_line='delete01.at:23'
-    at_desc="deleting a member after a big one"
-    $at_quiet $ECHO_N " 13: deleting a member after a big one              $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "13. delete01.at:23: testing ..."
-      $at_traceon
+)"
+echo xform-h.at:39 >"$at_check_line_file"
 
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
 
 
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-  $at_traceoff
-echo "$at_srcdir/delete01.at:26:
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
-export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H v7\"
-export TAR_OPTIONS
-rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive)"
-echo delete01.at:26 >"$at_check_line_file"
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H v7"
-export TAR_OPTIONS
-rm -rf *
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H v7"
+TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete01.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-              $at_traceoff
-echo "$at_srcdir/delete01.at:26:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
-export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
-export TAR_OPTIONS
-rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive)"
-echo delete01.at:26 >"$at_check_line_file"
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
-export TAR_OPTIONS
-rm -rf *
-
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Default transform scope
+test
+Transforming hard links
+test
+Not transforming hard links
+basedir/test
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/xform-h.at:39"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/xform-h.at:39:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+mkdir basedir
+echo \"hello\" > basedir/test
+ln basedir/test basedir/test_link
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete01.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-              $at_traceoff
-echo "$at_srcdir/delete01.at:26:
-mkdir ustar
-(cd ustar
-TEST_TAR_FORMAT=ustar
-export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H ustar\"
-export TAR_OPTIONS
-rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive)"
-echo delete01.at:26 >"$at_check_line_file"
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+)"
+echo xform-h.at:39 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -5365,16 +5095,29 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
+
+
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -5383,35 +5126,45 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete01.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
 
-              $at_traceoff
-echo "$at_srcdir/delete01.at:26:
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Default transform scope
+test
+Transforming hard links
+test
+Not transforming hard links
+basedir/test
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/xform-h.at:39"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/xform-h.at:39:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -5420,20 +5173,31 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive)"
-echo delete01.at:26 >"$at_check_line_file"
+mkdir basedir
+echo \"hello\" > basedir/test
+ln basedir/test basedir/test_link
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+)"
+echo xform-h.at:39 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -5442,16 +5206,29 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
+
+
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -5460,35 +5237,45 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete01.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
 
-              $at_traceoff
-echo "$at_srcdir/delete01.at:26:
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Default transform scope
+test
+Transforming hard links
+test
+Not transforming hard links
+basedir/test
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/xform-h.at:39"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/xform-h.at:39:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -5497,20 +5284,31 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive)"
-echo delete01.at:26 >"$at_check_line_file"
+mkdir basedir
+echo \"hello\" > basedir/test
+ln basedir/test basedir/test_link
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+)"
+echo xform-h.at:39 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -5519,16 +5317,29 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
+
+
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
+
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -5537,287 +5348,157 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 50000 --file file1
-genfile -l 1024 --file file2
-tar cf archive file1 file2
-tar f archive --delete file2
-tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+mkdir basedir
+echo "hello" > basedir/test
+ln basedir/test basedir/test_link
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete01.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+echo "Default transform scope"
+tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+echo "Transforming hard links"
+tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
 
+echo "Not transforming hard links"
+tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link
+tar tvf archive | sed -n 's/.*test_link link to //p'
 
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Default transform scope
+test
+Transforming hard links
+test
+Not transforming hard links
+basedir/test
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/xform-h.at:39"
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  14 ) # 14. delete02.at:23: deleting a member from stdin archive
-    at_setup_line='delete02.at:23'
-    at_desc="deleting a member from stdin archive"
-    $at_quiet $ECHO_N " 14: deleting a member from stdin archive           $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "14. delete02.at:23: testing ..."
-      $at_traceon
 
 
 
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_12
+#AT_START_13
+# 13. exclude.at:23: exclude
+at_setup_line='exclude.at:23'
+at_desc="exclude"
+$at_quiet $as_echo_n " 13: $at_desc                                        "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "13. exclude.at:23: testing ..."
+  $at_traceon
 
 
-  $at_traceoff
-echo "$at_srcdir/delete02.at:26:
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
-export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H v7\"
-export TAR_OPTIONS
-rm -rf *
 
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2)"
-echo delete02.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
+  { $at_traceoff
+$as_echo "$at_srcdir/exclude.at:26:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H v7"
+TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :;
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H v7"
-export TAR_OPTIONS
-rm -rf *
 
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "1
-2
-3
-separator
-1
-3
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete02.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-              $at_traceoff
-echo "$at_srcdir/delete02.at:26:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
-export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
-export TAR_OPTIONS
-rm -rf *
-
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2)"
-echo delete02.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
-export TAR_OPTIONS
-rm -rf *
-
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
-export TAR_OPTIONS
-rm -rf *
-
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "1
-2
-3
-separator
-1
-3
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete02.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+mkdir dir
+echo blues > dir/blues
+echo jazz > dir/jazz
+mkdir dir/folk
+echo tagfile > dir/folk/tagfile
+echo sanjuan > dir/folk/sanjuan
+mkdir dir/rock
+echo \"Signature: 8a477f597d28d172789f06886806bc55\" > dir/rock/CACHEDIR.TAG
+echo \"test\" > dir/rock/file
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+for option in exclude-caches exclude-caches-under exclude-caches-all
+do
+  echo OPTION \$option
+  tar -cf archive.tar --\$option -v dir 2>err | sort
+  cat err
+  echo ARCHIVE
+  tar tf archive.tar | sort
+done
 
-$at_traceon
+for option in exclude-tag exclude-tag-under exclude-tag-all
+do
+  echo OPTION \$option
+  tar -cf archive.tar --\${option}=tagfile -v dir 2>err | sort
+  cat err
+  echo ARCHIVE
+  tar tf archive.tar | sort
+done
+)"
+echo exclude.at:26 >"$at_check_line_file"
 
-              $at_traceoff
-echo "$at_srcdir/delete02.at:26:
+if { echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H ustar\"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2)"
-echo delete02.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir ustar
-(cd ustar
-TEST_TAR_FORMAT=ustar
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H ustar"
-export TAR_OPTIONS
-rm -rf *
 
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+mkdir dir
+echo blues > dir/blues
+echo jazz > dir/jazz
+mkdir dir/folk
+echo tagfile > dir/folk/tagfile
+echo sanjuan > dir/folk/sanjuan
+mkdir dir/rock
+echo "Signature: 8a477f597d28d172789f06886806bc55" > dir/rock/CACHEDIR.TAG
+echo "test" > dir/rock/file
+
+for option in exclude-caches exclude-caches-under exclude-caches-all
+do
+  echo OPTION $option
+  tar -cf archive.tar --$option -v dir 2>err | sort
+  cat err
+  echo ARCHIVE
+  tar tf archive.tar | sort
+done
+
+for option in exclude-tag exclude-tag-under exclude-tag-all
+do
+  echo OPTION $option
+  tar -cf archive.tar --${option}=tagfile -v dir 2>err | sort
+  cat err
+  echo ARCHIVE
+  tar tf archive.tar | sort
+done
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -5826,572 +5507,1011 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "1
-2
-3
-separator
-1
-3
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete02.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-$at_traceon
 
-              $at_traceoff
-echo "$at_srcdir/delete02.at:26:
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
-export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H posix\"
-export TAR_OPTIONS
-rm -rf *
+mkdir dir
+echo blues > dir/blues
+echo jazz > dir/jazz
+mkdir dir/folk
+echo tagfile > dir/folk/tagfile
+echo sanjuan > dir/folk/sanjuan
+mkdir dir/rock
+echo "Signature: 8a477f597d28d172789f06886806bc55" > dir/rock/CACHEDIR.TAG
+echo "test" > dir/rock/file
 
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2)"
-echo delete02.at:26 >"$at_check_line_file"
+for option in exclude-caches exclude-caches-under exclude-caches-all
+do
+  echo OPTION $option
+  tar -cf archive.tar --$option -v dir 2>err | sort
+  cat err
+  echo ARCHIVE
+  tar tf archive.tar | sort
+done
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
+for option in exclude-tag exclude-tag-under exclude-tag-all
+do
+  echo OPTION $option
+  tar -cf archive.tar --${option}=tagfile -v dir 2>err | sort
+  cat err
+  echo ARCHIVE
+  tar tf archive.tar | sort
+done
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "OPTION exclude-caches
+dir/
+dir/blues
+dir/folk/
+dir/folk/sanjuan
+dir/folk/tagfile
+dir/jazz
+dir/rock/
+dir/rock/CACHEDIR.TAG
+tar: dir/rock/: contains a cache directory tag CACHEDIR.TAG; contents not dumped
+ARCHIVE
+dir/
+dir/blues
+dir/folk/
+dir/folk/sanjuan
+dir/folk/tagfile
+dir/jazz
+dir/rock/
+dir/rock/CACHEDIR.TAG
+OPTION exclude-caches-under
+dir/
+dir/blues
+dir/folk/
+dir/folk/sanjuan
+dir/folk/tagfile
+dir/jazz
+dir/rock/
+tar: dir/rock/: contains a cache directory tag CACHEDIR.TAG; contents not dumped
+ARCHIVE
+dir/
+dir/blues
+dir/folk/
+dir/folk/sanjuan
+dir/folk/tagfile
+dir/jazz
+dir/rock/
+OPTION exclude-caches-all
+dir/
+dir/blues
+dir/folk/
+dir/folk/sanjuan
+dir/folk/tagfile
+dir/jazz
+tar: dir/rock/: contains a cache directory tag CACHEDIR.TAG; directory not dumped
+ARCHIVE
+dir/
+dir/blues
+dir/folk/
+dir/folk/sanjuan
+dir/folk/tagfile
+dir/jazz
+OPTION exclude-tag
+dir/
+dir/blues
+dir/folk/
+dir/folk/tagfile
+dir/jazz
+dir/rock/
+dir/rock/CACHEDIR.TAG
+dir/rock/file
+tar: dir/folk/: contains a cache directory tag tagfile; contents not dumped
+ARCHIVE
+dir/
+dir/blues
+dir/folk/
+dir/folk/tagfile
+dir/jazz
+dir/rock/
+dir/rock/CACHEDIR.TAG
+dir/rock/file
+OPTION exclude-tag-under
+dir/
+dir/blues
+dir/folk/
+dir/jazz
+dir/rock/
+dir/rock/CACHEDIR.TAG
+dir/rock/file
+tar: dir/folk/: contains a cache directory tag tagfile; contents not dumped
+ARCHIVE
+dir/
+dir/blues
+dir/folk/
+dir/jazz
+dir/rock/
+dir/rock/CACHEDIR.TAG
+dir/rock/file
+OPTION exclude-tag-all
+dir/
+dir/blues
+dir/jazz
+dir/rock/
+dir/rock/CACHEDIR.TAG
+dir/rock/file
+tar: dir/folk/: contains a cache directory tag tagfile; directory not dumped
+ARCHIVE
+dir/
+dir/blues
+dir/jazz
+dir/rock/
+dir/rock/CACHEDIR.TAG
+dir/rock/file
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude.at:26"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
-export TAR_OPTIONS
-rm -rf *
-
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
-export TAR_OPTIONS
-rm -rf *
-
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "1
-2
-3
-separator
-1
-3
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete02.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_13
+#AT_START_14
+# 14. exclude01.at:17: exclude wildcards
+at_setup_line='exclude01.at:17'
+at_desc="exclude wildcards"
+$at_quiet $as_echo_n " 14: $at_desc                              "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "14. exclude01.at:17: testing ..."
+  $at_traceon
+
 
-              $at_traceoff
-echo "$at_srcdir/delete02.at:26:
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/exclude01.at:20:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H gnu\"
+TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2)"
-echo delete02.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\\*
+touch testdir/dir2/file2
+touch testdir/dir2/\\*
+touch testdir/dir3/file3
+touch testdir/dir3/\\*
+
+tar cf archive --exclude=testdir/dir1/\\* \\
+               --no-wildcards \\
+               --exclude=testdir/dir2/\\* \\
+               --wildcards \\
+               --exclude=testdir/dir3/\\* \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t \"testdir/dir1/*\" -f archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir/dir1
+tar t --no-wildcards \"testdir/dir1/*\" -f archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t --wildcards \"testdir/dir1/*\" -f archive | sort
+
+rm -rf testdir
+)"
+echo exclude01.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 3073 -p zeros --file 1
-cp 1 2
-cp 2 3
-tar cf archive 1 2 3
-tar tf archive
-cat archive | tar f - --delete 2 > archive2
-echo separator
-tar tf archive2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "1
-2
-3
-separator
-1
-3
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete02.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir1/
+testdir/dir2/
+testdir/dir2/file2
+testdir/dir3/
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+testdir/dir1/file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude01.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude01.at:20:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
 
-$at_traceon
 
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\\*
+touch testdir/dir2/file2
+touch testdir/dir2/\\*
+touch testdir/dir3/file3
+touch testdir/dir3/\\*
+
+tar cf archive --exclude=testdir/dir1/\\* \\
+               --no-wildcards \\
+               --exclude=testdir/dir2/\\* \\
+               --wildcards \\
+               --exclude=testdir/dir3/\\* \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t \"testdir/dir1/*\" -f archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir/dir1
+tar t --no-wildcards \"testdir/dir1/*\" -f archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t --wildcards \"testdir/dir1/*\" -f archive | sort
+
+rm -rf testdir
+)"
+echo exclude01.at:20 >"$at_check_line_file"
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
-  15 ) # 15. delete03.at:21: deleting members with long names
-    at_setup_line='delete03.at:21'
-    at_desc="deleting members with long names"
-    $at_quiet $ECHO_N " 15: deleting members with long names               $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "15. delete03.at:21: testing ..."
-      $at_traceon
 
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
 
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  $at_traceoff
-echo "$at_srcdir/delete03.at:26:
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir1/
+testdir/dir2/
+testdir/dir2/file2
+testdir/dir3/
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+testdir/dir1/file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude01.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude01.at:20:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H gnu\"
+TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
 
-prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
-rm -f \$prefix*
-for i in 1 2 3 4 5 6 7 8 9
-do touch \$prefix\$i
-done
-tar -cf archive ./\$prefix* &&
- tar --delete -f archive ./\${prefix}5 &&
- tar -tf archive
-)"
-echo delete03.at:26 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\\*
+touch testdir/dir2/file2
+touch testdir/dir2/\\*
+touch testdir/dir3/file3
+touch testdir/dir3/\\*
+
+tar cf archive --exclude=testdir/dir1/\\* \\
+               --no-wildcards \\
+               --exclude=testdir/dir2/\\* \\
+               --wildcards \\
+               --exclude=testdir/dir3/\\* \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t \"testdir/dir1/*\" -f archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir/dir1
+tar t --no-wildcards \"testdir/dir1/*\" -f archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t --wildcards \"testdir/dir1/*\" -f archive | sort
+
+rm -rf testdir
+)"
+echo exclude01.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
 
-prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
-rm -f $prefix*
-for i in 1 2 3 4 5 6 7 8 9
-do touch $prefix$i
-done
-tar -cf archive ./$prefix* &&
- tar --delete -f archive ./${prefix}5 &&
- tar -tf archive
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
 
-prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
-rm -f $prefix*
-for i in 1 2 3 4 5 6 7 8 9
-do touch $prefix$i
-done
-tar -cf archive ./$prefix* &&
- tar --delete -f archive ./${prefix}5 &&
- tar -tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX1
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX2
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX3
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX4
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX6
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX7
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX8
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX9
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
-$at_traceon
-
-              $at_traceoff
-echo "$at_srcdir/delete03.at:26:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir1/
+testdir/dir2/
+testdir/dir2/file2
+testdir/dir3/
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+testdir/dir1/file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude01.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude01.at:20:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
 
-prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
-rm -f \$prefix*
-for i in 1 2 3 4 5 6 7 8 9
-do touch \$prefix\$i
-done
-tar -cf archive ./\$prefix* &&
- tar --delete -f archive ./\${prefix}5 &&
- tar -tf archive
-)"
-echo delete03.at:26 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\\*
+touch testdir/dir2/file2
+touch testdir/dir2/\\*
+touch testdir/dir3/file3
+touch testdir/dir3/\\*
+
+tar cf archive --exclude=testdir/dir1/\\* \\
+               --no-wildcards \\
+               --exclude=testdir/dir2/\\* \\
+               --wildcards \\
+               --exclude=testdir/dir3/\\* \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t \"testdir/dir1/*\" -f archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir/dir1
+tar t --no-wildcards \"testdir/dir1/*\" -f archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t --wildcards \"testdir/dir1/*\" -f archive | sort
+
+rm -rf testdir
+)"
+echo exclude01.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
 
-prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
-rm -f $prefix*
-for i in 1 2 3 4 5 6 7 8 9
-do touch $prefix$i
-done
-tar -cf archive ./$prefix* &&
- tar --delete -f archive ./${prefix}5 &&
- tar -tf archive
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
 
-prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
-rm -f $prefix*
-for i in 1 2 3 4 5 6 7 8 9
-do touch $prefix$i
-done
-tar -cf archive ./$prefix* &&
- tar --delete -f archive ./${prefix}5 &&
- tar -tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX1
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX2
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX3
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX4
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX6
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX7
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX8
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX9
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
-$at_traceon
-
-              $at_traceoff
-echo "$at_srcdir/delete03.at:26:
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir1/
+testdir/dir2/
+testdir/dir2/file2
+testdir/dir3/
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+testdir/dir1/file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude01.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude01.at:20:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H posix\"
+TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
 
-prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
-rm -f \$prefix*
-for i in 1 2 3 4 5 6 7 8 9
-do touch \$prefix\$i
-done
-tar -cf archive ./\$prefix* &&
- tar --delete -f archive ./\${prefix}5 &&
- tar -tf archive
-)"
-echo delete03.at:26 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\\*
+touch testdir/dir2/file2
+touch testdir/dir2/\\*
+touch testdir/dir3/file3
+touch testdir/dir3/\\*
+
+tar cf archive --exclude=testdir/dir1/\\* \\
+               --no-wildcards \\
+               --exclude=testdir/dir2/\\* \\
+               --wildcards \\
+               --exclude=testdir/dir3/\\* \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t \"testdir/dir1/*\" -f archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir/dir1
+tar t --no-wildcards \"testdir/dir1/*\" -f archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t --wildcards \"testdir/dir1/*\" -f archive | sort
+
+rm -rf testdir
+)"
+echo exclude01.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
 
-prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
-rm -f $prefix*
-for i in 1 2 3 4 5 6 7 8 9
-do touch $prefix$i
-done
-tar -cf archive ./$prefix* &&
- tar --delete -f archive ./${prefix}5 &&
- tar -tf archive
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
 
-prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
-rm -f $prefix*
-for i in 1 2 3 4 5 6 7 8 9
-do touch $prefix$i
-done
-tar -cf archive ./$prefix* &&
- tar --delete -f archive ./${prefix}5 &&
- tar -tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX1
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX2
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX3
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX4
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX6
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX7
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX8
-./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX9
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude=testdir/dir1/\* \
+               --no-wildcards \
+               --exclude=testdir/dir2/\* \
+               --wildcards \
+               --exclude=testdir/dir3/\* \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir/dir1
+tar t --no-wildcards "testdir/dir1/*" -f archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards "testdir/dir1/*" -f archive | sort
+
+rm -rf testdir
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir1/
+testdir/dir2/
+testdir/dir2/file2
+testdir/dir3/
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+NEXT
+testdir/dir1/*
+testdir/dir1/file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude01.at:20"
 
-$at_traceon
-
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  16 ) # 16. delete04.at:23: deleting a large last member
-    at_setup_line='delete04.at:23'
-    at_desc="deleting a large last member"
-    $at_quiet $ECHO_N " 16: deleting a large last member                   $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_14
+#AT_START_15
+# 15. exclude02.at:17: exclude: anchoring
+at_setup_line='exclude02.at:17'
+at_desc="exclude: anchoring"
+$at_quiet $as_echo_n " 15: $at_desc                             "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "16. delete04.at:23: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "15. exclude02.at:17: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/delete04.at:26:
+  $at_traceoff
+$as_echo "$at_srcdir/exclude02.at:20:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -6400,29 +6520,50 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
-)"
-echo delete04.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 1\"
+tar cf archive --no-anchored \\
+               --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 2\"
+tar cf archive --anchored \\
+               --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 3\"
+tar cf archive testdir file1.txt
+tar t \"file1.txt\" -f archive | sort
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+echo \"SUB 4\"
+tar t --no-anchored \"file1.txt\" -f archive | sort
+
+echo \"SUB 5\"
+tar t --anchored \"file1.txt\" -f archive | sort
+
+rm -rf testdir file1.txt
+
+)"
+echo exclude02.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -6431,25 +6572,48 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
+
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
+
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
+
+rm -rf testdir file1.txt
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -6458,52 +6622,74 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-file2
-file3
-file4
-file5
-file6
-file7
-file8
-file9
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete04.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
 
-$at_traceon
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/delete04.at:26:
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
+
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
+
+rm -rf testdir file1.txt
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/file2
+SUB 1
+testdir/
+testdir/file2
+SUB 2
+testdir/
+testdir/file1.txt
+testdir/file2
+SUB 3
+file1.txt
+SUB 4
+file1.txt
+testdir/file1.txt
+SUB 5
+file1.txt
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude02.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude02.at:20:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -6512,29 +6698,50 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
-)"
-echo delete04.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 1\"
+tar cf archive --no-anchored \\
+               --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 2\"
+tar cf archive --anchored \\
+               --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 3\"
+tar cf archive testdir file1.txt
+tar t \"file1.txt\" -f archive | sort
+
+echo \"SUB 4\"
+tar t --no-anchored \"file1.txt\" -f archive | sort
+
+echo \"SUB 5\"
+tar t --anchored \"file1.txt\" -f archive | sort
+
+rm -rf testdir file1.txt
+
+)"
+echo exclude02.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -6543,25 +6750,48 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
+
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
+
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
+
+rm -rf testdir file1.txt
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -6570,52 +6800,74 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-file2
-file3
-file4
-file5
-file6
-file7
-file8
-file9
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete04.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
+
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
 
-$at_traceon
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/delete04.at:26:
+rm -rf testdir file1.txt
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/file2
+SUB 1
+testdir/
+testdir/file2
+SUB 2
+testdir/
+testdir/file1.txt
+testdir/file2
+SUB 3
+file1.txt
+SUB 4
+file1.txt
+testdir/file1.txt
+SUB 5
+file1.txt
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude02.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude02.at:20:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -6624,29 +6876,50 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
-)"
-echo delete04.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+tar cf archive --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 1\"
+tar cf archive --no-anchored \\
+               --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 2\"
+tar cf archive --anchored \\
+               --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 3\"
+tar cf archive testdir file1.txt
+tar t \"file1.txt\" -f archive | sort
+
+echo \"SUB 4\"
+tar t --no-anchored \"file1.txt\" -f archive | sort
+
+echo \"SUB 5\"
+tar t --anchored \"file1.txt\" -f archive | sort
+
+rm -rf testdir file1.txt
+
+)"
+echo exclude02.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -6655,25 +6928,48 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
+
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
+
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
+
+rm -rf testdir file1.txt
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -6682,52 +6978,74 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-file2
-file3
-file4
-file5
-file6
-file7
-file8
-file9
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete04.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
 
-$at_traceon
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/delete04.at:26:
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
+
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
+
+rm -rf testdir file1.txt
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/file2
+SUB 1
+testdir/
+testdir/file2
+SUB 2
+testdir/
+testdir/file1.txt
+testdir/file2
+SUB 3
+file1.txt
+SUB 4
+file1.txt
+testdir/file1.txt
+SUB 5
+file1.txt
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude02.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude02.at:20:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -6736,29 +7054,50 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
-)"
-echo delete04.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 1\"
+tar cf archive --no-anchored \\
+               --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+echo \"SUB 2\"
+tar cf archive --anchored \\
+               --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 3\"
+tar cf archive testdir file1.txt
+tar t \"file1.txt\" -f archive | sort
+
+echo \"SUB 4\"
+tar t --no-anchored \"file1.txt\" -f archive | sort
+
+echo \"SUB 5\"
+tar t --anchored \"file1.txt\" -f archive | sort
+
+rm -rf testdir file1.txt
+
+)"
+echo exclude02.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -6767,25 +7106,48 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
+
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
+
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
+
+rm -rf testdir file1.txt
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -6794,52 +7156,74 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-file2
-file3
-file4
-file5
-file6
-file7
-file8
-file9
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete04.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
 
-$at_traceon
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/delete04.at:26:
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
+
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
+
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
+
+rm -rf testdir file1.txt
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/file2
+SUB 1
+testdir/
+testdir/file2
+SUB 2
+testdir/
+testdir/file1.txt
+testdir/file2
+SUB 3
+file1.txt
+SUB 4
+file1.txt
+testdir/file1.txt
+SUB 5
+file1.txt
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude02.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude02.at:20:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -6848,29 +7232,50 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
-)"
-echo delete04.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 1\"
+tar cf archive --no-anchored \\
+               --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 2\"
+tar cf archive --anchored \\
+               --exclude=\"file1.txt\" \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 3\"
+tar cf archive testdir file1.txt
+tar t \"file1.txt\" -f archive | sort
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+echo \"SUB 4\"
+tar t --no-anchored \"file1.txt\" -f archive | sort
+
+echo \"SUB 5\"
+tar t --anchored \"file1.txt\" -f archive | sort
+
+rm -rf testdir file1.txt
+
+)"
+echo exclude02.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -6879,25 +7284,48 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
+
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
+
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
+
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
+
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
+
+rm -rf testdir file1.txt
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -6906,76 +7334,98 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l      3 -f file1
-genfile -l      5 -f file2
-genfile -l      3 -f file3
-genfile -l      6 -f file4
-genfile -l     24 -f file5
-genfile -l     13 -f file6
-genfile -l   1385 -f file7
-genfile -l     30 -f file8
-genfile -l     10 -f file9
-genfile -l 256000 -f file10
-tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
-tar f archive --delete file10
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-file2
-file3
-file4
-file5
-file6
-file7
-file8
-file9
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete04.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir
+mkdir -p testdir
+touch file1.txt
+touch testdir/file1.txt
+touch testdir/file2
 
-$at_traceon
+tar cf archive --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
 
+echo "SUB 1"
+tar cf archive --no-anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
 
+echo "SUB 2"
+tar cf archive --anchored \
+               --exclude="file1.txt" \
+               testdir
+tar tf archive | sort
 
+echo "SUB 3"
+tar cf archive testdir file1.txt
+tar t "file1.txt" -f archive | sort
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
+echo "SUB 4"
+tar t --no-anchored "file1.txt" -f archive | sort
 
-  17 ) # 17. delete05.at:27: deleting non-existing member
-    at_setup_line='delete05.at:27'
-    at_desc="deleting non-existing member"
-    $at_quiet $ECHO_N " 17: deleting non-existing member                   $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "17. delete05.at:27: testing ..."
-      $at_traceon
+echo "SUB 5"
+tar t --anchored "file1.txt" -f archive | sort
+
+rm -rf testdir file1.txt
 
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/file2
+SUB 1
+testdir/
+testdir/file2
+SUB 2
+testdir/
+testdir/file1.txt
+testdir/file2
+SUB 3
+file1.txt
+SUB 4
+file1.txt
+testdir/file1.txt
+SUB 5
+file1.txt
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude02.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
   $at_traceoff
-echo "$at_srcdir/delete05.at:30:
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_15
+#AT_START_16
+# 16. exclude03.at:17: exclude: wildcards match slash
+at_setup_line='exclude03.at:17'
+at_desc="exclude: wildcards match slash"
+$at_quiet $as_echo_n " 16: $at_desc                 "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "16. exclude03.at:17: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/exclude03.at:20:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -6984,24 +7434,46 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
-)"
-echo delete05.at:30 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\\*f\\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\\*
+touch testdir/dir2/file2
+touch testdir/dir2/\\*
+touch testdir/dir3/file3
+touch testdir/dir3/\\*
+
+tar cf archive --exclude='testdir*f*1' \\
+               --no-wildcards-match-slash \\
+               --exclude='testdir*f*2' \\
+               --wildcards-match-slash \\
+               --exclude='testdir*f*3' \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo \"NEXT\"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo \"NEXT\"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
+)"
+echo exclude03.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -7010,20 +7482,44 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -7032,42 +7528,70 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: tre: Not found in archive
-tar: Exiting with failure status due to previous errors
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "en
-to
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete05.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
 
-$at_traceon
+rm -rf testdir
 
-              $at_traceoff
-echo "$at_srcdir/delete05.at:30:
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir1/
+testdir/dir1/*
+testdir/dir2/
+testdir/dir2/*
+testdir/dir2/file2
+testdir/dir3/
+testdir/dir3/*
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+NEXT
+testdir/*f*1
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude03.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude03.at:20:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -7076,24 +7600,46 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
-)"
-echo delete05.at:30 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\\*f\\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\\*
+touch testdir/dir2/file2
+touch testdir/dir2/\\*
+touch testdir/dir3/file3
+touch testdir/dir3/\\*
+
+tar cf archive --exclude='testdir*f*1' \\
+               --no-wildcards-match-slash \\
+               --exclude='testdir*f*2' \\
+               --wildcards-match-slash \\
+               --exclude='testdir*f*3' \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo \"NEXT\"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo \"NEXT\"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
+)"
+echo exclude03.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -7102,20 +7648,44 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -7124,42 +7694,70 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: tre: Not found in archive
-tar: Exiting with failure status due to previous errors
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "en
-to
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete05.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
 
-$at_traceon
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/delete05.at:30:
+rm -rf testdir
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir1/
+testdir/dir1/*
+testdir/dir2/
+testdir/dir2/*
+testdir/dir2/file2
+testdir/dir3/
+testdir/dir3/*
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+NEXT
+testdir/*f*1
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude03.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude03.at:20:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -7168,24 +7766,46 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
-)"
-echo delete05.at:30 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\\*f\\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\\*
+touch testdir/dir2/file2
+touch testdir/dir2/\\*
+touch testdir/dir3/file3
+touch testdir/dir3/\\*
+
+tar cf archive --exclude='testdir*f*1' \\
+               --no-wildcards-match-slash \\
+               --exclude='testdir*f*2' \\
+               --wildcards-match-slash \\
+               --exclude='testdir*f*3' \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo \"NEXT\"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo \"NEXT\"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
+)"
+echo exclude03.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -7194,20 +7814,44 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -7216,42 +7860,70 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: tre: Not found in archive
-tar: Exiting with failure status due to previous errors
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "en
-to
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete05.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
 
-$at_traceon
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/delete05.at:30:
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir1/
+testdir/dir1/*
+testdir/dir2/
+testdir/dir2/*
+testdir/dir2/file2
+testdir/dir3/
+testdir/dir3/*
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+NEXT
+testdir/*f*1
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude03.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude03.at:20:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -7260,24 +7932,46 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
-)"
-echo delete05.at:30 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\\*f\\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\\*
+touch testdir/dir2/file2
+touch testdir/dir2/\\*
+touch testdir/dir3/file3
+touch testdir/dir3/\\*
+
+tar cf archive --exclude='testdir*f*1' \\
+               --no-wildcards-match-slash \\
+               --exclude='testdir*f*2' \\
+               --wildcards-match-slash \\
+               --exclude='testdir*f*3' \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo \"NEXT\"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo \"NEXT\"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
+)"
+echo exclude03.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -7286,20 +7980,44 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -7308,42 +8026,70 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: tre: Not found in archive
-tar: Exiting with failure status due to previous errors
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "en
-to
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete05.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
 
-$at_traceon
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/delete05.at:30:
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir1/
+testdir/dir1/*
+testdir/dir2/
+testdir/dir2/*
+testdir/dir2/file2
+testdir/dir3/
+testdir/dir3/*
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+NEXT
+testdir/*f*1
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude03.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude03.at:20:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -7352,24 +8098,46 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
-)"
-echo delete05.at:30 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\\*f\\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\\*
+touch testdir/dir2/file2
+touch testdir/dir2/\\*
+touch testdir/dir3/file3
+touch testdir/dir3/\\*
+
+tar cf archive --exclude='testdir*f*1' \\
+               --no-wildcards-match-slash \\
+               --exclude='testdir*f*2' \\
+               --wildcards-match-slash \\
+               --exclude='testdir*f*3' \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo \"NEXT\"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo \"NEXT\"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
+)"
+echo exclude03.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -7378,20 +8146,44 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
+
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -7400,66 +8192,94 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f en
-genfile -l 1024 -f to
 
-tar cf archive en to
-# Make sure we don't use bogus blocking factor.
-# GNU tar up to and including 1.14.91 produced an empty archive this way:
-tar --file archive --blocking-factor=20 --delete tre
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: tre: Not found in archive
-tar: Exiting with failure status due to previous errors
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "en
-to
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/delete05.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+rm -rf testdir
+mkdir -p testdir/dir1 testdir/dir2 testdir/dir3
+touch testdir/\*f\*1
+touch testdir/dir1/file1
+touch testdir/dir1/\*
+touch testdir/dir2/file2
+touch testdir/dir2/\*
+touch testdir/dir3/file3
+touch testdir/dir3/\*
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+tar cf archive --exclude='testdir*f*1' \
+               --no-wildcards-match-slash \
+               --exclude='testdir*f*2' \
+               --wildcards-match-slash \
+               --exclude='testdir*f*3' \
+               testdir
+tar tf archive | sort
 
-$at_traceon
+echo "NEXT"
+tar cf archive testdir
+tar t --wildcards 'testdir/*f*1' -f archive | sort
 
+echo "NEXT"
+tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+echo "NEXT"
+tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort
+
+rm -rf testdir
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir1/
+testdir/dir1/*
+testdir/dir2/
+testdir/dir2/*
+testdir/dir2/file2
+testdir/dir3/
+testdir/dir3/*
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+NEXT
+testdir/*f*1
+NEXT
+testdir/*f*1
+testdir/dir1/file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude03.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  18 ) # 18. extrac01.at:23: extract over an existing directory
-    at_setup_line='extrac01.at:23'
-    at_desc="extract over an existing directory"
-    $at_quiet $ECHO_N " 18: extract over an existing directory             $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_16
+#AT_START_17
+# 17. exclude04.at:17: exclude: case insensitive
+at_setup_line='exclude04.at:17'
+at_desc="exclude: case insensitive"
+$at_quiet $as_echo_n " 17: $at_desc                      "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "18. extrac01.at:23: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "17. exclude04.at:17: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/extrac01.at:26:
+  $at_traceoff
+$as_echo "$at_srcdir/exclude04.at:20:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -7468,38 +8288,98 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
-)"
-echo extrac01.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H v7"
-export TAR_OPTIONS
-rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \\
+               --exclude=file1 \\
+               --ignore-case \\
+               --exclude=file3 \\
+               --no-ignore-case \\
+               --exclude=FILE2 \\
+               --exclude=file4 \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 1\"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo \"SUB 2\"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo \"SUB 3\"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
+)"
+echo exclude04.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -7508,34 +8388,70 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac01.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
 
-$at_traceon
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/extrac01.at:26:
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir/
+testdir/dir/File1
+testdir/dir/File2
+testdir/dir/File4
+testdir/file2
+SUB 1
+testdir/dir/File2
+SUB 2
+testdir/dir/File2
+testdir/file2
+SUB 3
+testdir/dir/File2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude04.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude04.at:20:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -7544,20 +8460,49 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
-)"
-echo extrac01.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \\
+               --exclude=file1 \\
+               --ignore-case \\
+               --exclude=file3 \\
+               --no-ignore-case \\
+               --exclude=FILE2 \\
+               --exclude=file4 \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 1\"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo \"SUB 2\"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+echo \"SUB 3\"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
+)"
+echo exclude04.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -7566,16 +8511,47 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -7584,34 +8560,70 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac01.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
 
-$at_traceon
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/extrac01.at:26:
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir/
+testdir/dir/File1
+testdir/dir/File2
+testdir/dir/File4
+testdir/file2
+SUB 1
+testdir/dir/File2
+SUB 2
+testdir/dir/File2
+testdir/file2
+SUB 3
+testdir/dir/File2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude04.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude04.at:20:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -7620,20 +8632,49 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
-)"
-echo extrac01.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \\
+               --exclude=file1 \\
+               --ignore-case \\
+               --exclude=file3 \\
+               --no-ignore-case \\
+               --exclude=FILE2 \\
+               --exclude=file4 \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 1\"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo \"SUB 2\"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo \"SUB 3\"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
+)"
+echo exclude04.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -7642,16 +8683,47 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -7660,34 +8732,70 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac01.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
 
-$at_traceon
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/extrac01.at:26:
+rm -rf testdir
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir/
+testdir/dir/File1
+testdir/dir/File2
+testdir/dir/File4
+testdir/file2
+SUB 1
+testdir/dir/File2
+SUB 2
+testdir/dir/File2
+testdir/file2
+SUB 3
+testdir/dir/File2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude04.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude04.at:20:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -7696,20 +8804,49 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
-)"
-echo extrac01.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \\
+               --exclude=file1 \\
+               --ignore-case \\
+               --exclude=file3 \\
+               --no-ignore-case \\
+               --exclude=FILE2 \\
+               --exclude=file4 \\
+               testdir
+tar tf archive | sort
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+echo \"SUB 1\"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo \"SUB 2\"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo \"SUB 3\"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
+)"
+echo exclude04.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -7718,16 +8855,47 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -7736,34 +8904,70 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac01.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
 
-$at_traceon
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/extrac01.at:26:
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir/
+testdir/dir/File1
+testdir/dir/File2
+testdir/dir/File4
+testdir/file2
+SUB 1
+testdir/dir/File2
+SUB 2
+testdir/dir/File2
+testdir/file2
+SUB 3
+testdir/dir/File2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude04.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude04.at:20:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -7772,20 +8976,49 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
-)"
-echo extrac01.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \\
+               --exclude=file1 \\
+               --ignore-case \\
+               --exclude=file3 \\
+               --no-ignore-case \\
+               --exclude=FILE2 \\
+               --exclude=file4 \\
+               testdir
+tar tf archive | sort
+
+echo \"SUB 1\"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo \"SUB 2\"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo \"SUB 3\"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir
+
+)"
+echo exclude04.at:20 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -7794,16 +9027,47 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
+
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
+
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
+
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
+
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
+
+rm -rf testdir
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -7812,60 +9076,94 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar cf archive directory || exit 1
-tar xf archive || exit 1
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac01.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir
+mkdir -p testdir/dir
+touch testdir/file1
+touch testdir/file2
+touch testdir/file3
+touch testdir/file4
+touch testdir/dir/File1
+touch testdir/dir/File2
+touch testdir/dir/File3
+touch testdir/dir/File4
 
-$at_traceon
+tar cf archive --exclude=FILE2 \
+               --exclude=file1 \
+               --ignore-case \
+               --exclude=file3 \
+               --no-ignore-case \
+               --exclude=FILE2 \
+               --exclude=file4 \
+               testdir
+tar tf archive | sort
 
+echo "SUB 1"
+tar cf archive testdir
+tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort
 
+echo "SUB 2"
+tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort
 
+echo "SUB 3"
+tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
+rm -rf testdir
 
-  19 ) # 19. extrac02.at:23: extracting symlinks over an existing file
-    at_setup_line='extrac02.at:23'
-    at_desc="extracting symlinks over an existing file"
-    $at_quiet $ECHO_N " 19: extracting symlinks over an existing file      $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "19. extrac02.at:23: testing ..."
-      $at_traceon
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/dir/
+testdir/dir/File1
+testdir/dir/File2
+testdir/dir/File4
+testdir/file2
+SUB 1
+testdir/dir/File2
+SUB 2
+testdir/dir/File2
+testdir/file2
+SUB 3
+testdir/dir/File2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude04.at:20"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-# FIXME: Skip if symlinks are not supported on the system
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_17
+#AT_START_18
+# 18. exclude05.at:19: exclude: lots of excludes
+at_setup_line='exclude05.at:19'
+at_desc="exclude: lots of excludes"
+$at_quiet $as_echo_n " 18: $at_desc                      "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "18. exclude05.at:19: testing ..."
+  $at_traceon
 
 
 
-  $at_traceoff
-echo "$at_srcdir/extrac02.at:28:
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/exclude05.at:22:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -7874,22 +9172,37 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
-)"
-echo extrac02.at:28 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print \"testdir/file\" i; }}' < /dev/null | \\
+ while read name
+ do
+   genfile --file \$name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print \"testdir/file\" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive --exclude-from=exclfile \\
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
+)"
+echo exclude05.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -7898,18 +9211,35 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -7918,36 +9248,54 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
 
-$at_traceon
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/extrac02.at:28:
+rm -rf testdir exclfile
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+NEXT
+testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude05.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude05.at:22:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -7956,22 +9304,37 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
-)"
-echo extrac02.at:28 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print \"testdir/file\" i; }}' < /dev/null | \\
+ while read name
+ do
+   genfile --file \$name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print \"testdir/file\" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive --exclude-from=exclfile \\
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
+)"
+echo exclude05.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -7980,18 +9343,35 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -8000,36 +9380,54 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
 
-$at_traceon
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/extrac02.at:28:
+rm -rf testdir exclfile
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+NEXT
+testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude05.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude05.at:22:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -8038,22 +9436,37 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
-)"
-echo extrac02.at:28 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print \"testdir/file\" i; }}' < /dev/null | \\
+ while read name
+ do
+   genfile --file \$name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print \"testdir/file\" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive --exclude-from=exclfile \\
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
+)"
+echo exclude05.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -8062,18 +9475,35 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -8082,36 +9512,54 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
 
-$at_traceon
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/extrac02.at:28:
+rm -rf testdir exclfile
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+NEXT
+testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude05.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude05.at:22:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -8120,22 +9568,37 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
-)"
-echo extrac02.at:28 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print \"testdir/file\" i; }}' < /dev/null | \\
+ while read name
+ do
+   genfile --file \$name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print \"testdir/file\" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive --exclude-from=exclfile \\
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
+)"
+echo exclude05.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -8144,18 +9607,35 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -8164,36 +9644,54 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
 
-$at_traceon
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
 
-              $at_traceoff
-echo "$at_srcdir/extrac02.at:28:
+rm -rf testdir exclfile
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+NEXT
+testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude05.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/exclude05.at:22:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -8202,22 +9700,37 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
-)"
-echo extrac02.at:28 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print \"testdir/file\" i; }}' < /dev/null | \\
+ while read name
+ do
+   genfile --file \$name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print \"testdir/file\" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \\
+               testdir
+tar tf archive | sort
+
+echo \"NEXT\"
+tar cf archive --exclude-from=exclfile \\
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
+)"
+echo exclude05.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -8226,18 +9739,35 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
+
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
+
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
+
+rm -rf testdir exclfile
+
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -8246,60 +9776,78 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-touch file
-ln -s file link 2> /dev/null || ln file link
-tar cf archive link
-rm link
-touch link
-tar xf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+rm -rf testdir exclfile
+mkdir -p testdir
+awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \
+ while read name
+ do
+   genfile --file $name
+ done
 
-$at_traceon
+awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile
 
+tar cf archive --anchored --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
 
+echo "NEXT"
+tar cf archive --exclude-from=exclfile \
+               testdir
+tar tf archive | sort
 
+rm -rf testdir exclfile
+
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+NEXT
+testdir/
+testdir/file10
+testdir/file11
+testdir/file9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/exclude05.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  20 ) # 20. extrac03.at:23: extraction loops
-    at_setup_line='extrac03.at:23'
-    at_desc="extraction loops"
-    $at_quiet $ECHO_N " 20: extraction loops                               $ECHO_C"
-    at_xfail=no
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_18
+#AT_START_19
+# 19. delete01.at:23: deleting a member after a big one
+at_setup_line='delete01.at:23'
+at_desc="deleting a member after a big one"
+$at_quiet $as_echo_n " 19: $at_desc              "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "20. extrac03.at:23: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "19. delete01.at:23: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/extrac03.at:26:
+  $at_traceoff
+$as_echo "$at_srcdir/delete01.at:26:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -8308,19 +9856,16 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive)"
-echo extrac03.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive)"
+echo delete01.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -8329,15 +9874,14 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -8346,36 +9890,25 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/../directory/
-separator
-directory/../directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete01.at:26"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac03.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/delete01.at:26:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -8384,19 +9917,16 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive)"
-echo extrac03.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive)"
+echo delete01.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -8405,15 +9935,14 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -8422,36 +9951,25 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/../directory/
-separator
-directory/../directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete01.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac03.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/delete01.at:26:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -8460,19 +9978,16 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive)"
-echo extrac03.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive)"
+echo delete01.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -8481,15 +9996,14 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -8498,36 +10012,25 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/../directory/
-separator
-directory/../directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete01.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac03.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/delete01.at:26:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -8536,19 +10039,16 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive)"
-echo extrac03.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive)"
+echo delete01.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -8557,15 +10057,14 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -8574,36 +10073,25 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/../directory/
-separator
-directory/../directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete01.at:26"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-              $at_traceoff
-echo "$at_srcdir/extrac03.at:26:
+              { $at_traceoff
+$as_echo "$at_srcdir/delete01.at:26:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -8612,19 +10100,16 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive)"
-echo extrac03.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive)"
+echo delete01.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -8633,15 +10118,14 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -8650,60 +10134,49 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-tar -cPvf archive directory/../directory
-echo separator
-tar -xPvf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+genfile -l 50000 --file file1
+genfile -l 1024 --file file2
+tar cf archive file1 file2
+tar f archive --delete file2
+tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/../directory/
-separator
-directory/../directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete01.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  21 ) # 21. extrac04.at:23: extract + fnmatch
-    at_setup_line='extrac04.at:23'
-    at_desc="extract + fnmatch"
-    $at_quiet $ECHO_N " 21: extract + fnmatch                              $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_19
+#AT_START_20
+# 20. delete02.at:23: deleting a member from stdin archive
+at_setup_line='delete02.at:23'
+at_desc="deleting a member from stdin archive"
+$at_quiet $as_echo_n " 20: $at_desc           "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "21. extrac04.at:23: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "20. delete02.at:23: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/extrac04.at:26:
+  $at_traceoff
+$as_echo "$at_srcdir/delete02.at:26:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -8712,31 +10185,19 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2)"
+echo delete02.at:26 >"$at_check_line_file"
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \\
-  --exclude='./*1' \\
-  --exclude='d*/*1' \\
-  --exclude='d*/s*/*2' | sort
-)"
-echo extrac04.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -8745,27 +10206,17 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \
-  --exclude='./*1' \
-  --exclude='d*/*1' \
-  --exclude='d*/s*/*2' | sort
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -8774,48 +10225,33 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \
-  --exclude='./*1' \
-  --exclude='d*/*1' \
-  --exclude='d*/s*/*2' | sort
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-directory/file2
-directory/subdirectory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac04.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+2
+3
+separator
+1
+3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete02.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac04.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/delete02.at:26:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -8824,31 +10260,19 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2)"
+echo delete02.at:26 >"$at_check_line_file"
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \\
-  --exclude='./*1' \\
-  --exclude='d*/*1' \\
-  --exclude='d*/s*/*2' | sort
-)"
-echo extrac04.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -8857,27 +10281,17 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \
-  --exclude='./*1' \
-  --exclude='d*/*1' \
-  --exclude='d*/s*/*2' | sort
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -8886,48 +10300,33 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \
-  --exclude='./*1' \
-  --exclude='d*/*1' \
-  --exclude='d*/s*/*2' | sort
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-directory/file2
-directory/subdirectory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac04.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+2
+3
+separator
+1
+3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete02.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac04.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/delete02.at:26:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -8936,31 +10335,19 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2)"
+echo delete02.at:26 >"$at_check_line_file"
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \\
-  --exclude='./*1' \\
-  --exclude='d*/*1' \\
-  --exclude='d*/s*/*2' | sort
-)"
-echo extrac04.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -8969,27 +10356,17 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \
-  --exclude='./*1' \
-  --exclude='d*/*1' \
-  --exclude='d*/s*/*2' | sort
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -8998,48 +10375,33 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \
-  --exclude='./*1' \
-  --exclude='d*/*1' \
-  --exclude='d*/s*/*2' | sort
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-directory/file2
-directory/subdirectory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac04.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+2
+3
+separator
+1
+3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete02.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac04.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/delete02.at:26:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -9048,31 +10410,19 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2)"
+echo delete02.at:26 >"$at_check_line_file"
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \\
-  --exclude='./*1' \\
-  --exclude='d*/*1' \\
-  --exclude='d*/s*/*2' | sort
-)"
-echo extrac04.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -9081,27 +10431,17 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \
-  --exclude='./*1' \
-  --exclude='d*/*1' \
-  --exclude='d*/s*/*2' | sort
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -9110,48 +10450,33 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \
-  --exclude='./*1' \
-  --exclude='d*/*1' \
-  --exclude='d*/s*/*2' | sort
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-directory/file2
-directory/subdirectory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac04.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+2
+3
+separator
+1
+3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete02.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac04.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/delete02.at:26:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -9160,31 +10485,19 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2)"
+echo delete02.at:26 >"$at_check_line_file"
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \\
-  --exclude='./*1' \\
-  --exclude='d*/*1' \\
-  --exclude='d*/s*/*2' | sort
-)"
-echo extrac04.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -9193,27 +10506,17 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \
-  --exclude='./*1' \
-  --exclude='d*/*1' \
-  --exclude='d*/s*/*2' | sort
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -9222,138 +10525,269 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-touch file1
-mkdir directory
-mkdir directory/subdirectory
-touch directory/file1
-touch directory/file2
-touch directory/subdirectory/file1
-touch directory/subdirectory/file2
-tar -cf archive ./file1 directory
-tar -tf archive \
-  --exclude='./*1' \
-  --exclude='d*/*1' \
-  --exclude='d*/s*/*2' | sort
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+genfile -l 3073 -p zeros --file 1
+cp 1 2
+cp 2 3
+tar cf archive 1 2 3
+tar tf archive
+cat archive | tar f - --delete 2 > archive2
+echo separator
+tar tf archive2) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-directory/file2
-directory/subdirectory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac04.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "1
+2
+3
+separator
+1
+3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete02.at:26"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  22 ) # 22. extrac05.at:30: extracting selected members from pax
-    at_setup_line='extrac05.at:30'
-    at_desc="extracting selected members from pax"
-    $at_quiet $ECHO_N " 22: extracting selected members from pax           $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_20
+#AT_START_21
+# 21. delete03.at:21: deleting members with long names
+at_setup_line='delete03.at:21'
+at_desc="deleting members with long names"
+$at_quiet $as_echo_n " 21: $at_desc               "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "22. extrac05.at:30: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "21. delete03.at:21: testing ..."
+  $at_traceon
 
 
 
-cat >list <<'_ATEOF'
-jeden
-cztery
-_ATEOF
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/extrac05.at:38:
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+  $at_traceoff
+$as_echo "$at_srcdir/delete03.at:26:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H posix\"
+TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 118 --file jeden
-genfile --length 223 --file dwa
-genfile --length 517 --file trzy
-genfile --sparse --file sparsefile 0 ABCD 1M EFGH 2000K IJKL
-genfile --length 110 --file cztery
 
-tar cf archive jeden dwa trzy cztery || exit 1
+prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
+rm -f \$prefix*
+for i in 1 2 3 4 5 6 7 8 9
+do touch \$prefix\$i
+done
+tar -cf archive ./\$prefix* &&
+ tar --delete -f archive ./\${prefix}5 &&
+ tar -tf archive
+)"
+echo delete03.at:26 >"$at_check_line_file"
 
-mkdir dir
-cd dir
+if { echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
 
-tar xvfT ../archive ../../list || exit 1
 
-cd ..
+prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
+rm -f $prefix*
+for i in 1 2 3 4 5 6 7 8 9
+do touch $prefix$i
+done
+tar -cf archive ./$prefix* &&
+ tar --delete -f archive ./${prefix}5 &&
+ tar -tf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
+rm -f $prefix*
+for i in 1 2 3 4 5 6 7 8 9
+do touch $prefix$i
+done
+tar -cf archive ./$prefix* &&
+ tar --delete -f archive ./${prefix}5 &&
+ tar -tf archive
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX1
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX2
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX3
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX4
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX6
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX7
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX8
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete03.at:26"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/delete03.at:26:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
+rm -f \$prefix*
+for i in 1 2 3 4 5 6 7 8 9
+do touch \$prefix\$i
+done
+tar -cf archive ./\$prefix* &&
+ tar --delete -f archive ./\${prefix}5 &&
+ tar -tf archive
 )"
-echo extrac05.at:38 >"$at_check_line_file"
+echo delete03.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
+if { echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
+rm -f $prefix*
+for i in 1 2 3 4 5 6 7 8 9
+do touch $prefix$i
+done
+tar -cf archive ./$prefix* &&
+ tar --delete -f archive ./${prefix}5 &&
+ tar -tf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
+rm -f $prefix*
+for i in 1 2 3 4 5 6 7 8 9
+do touch $prefix$i
+done
+tar -cf archive ./$prefix* &&
+ tar --delete -f archive ./${prefix}5 &&
+ tar -tf archive
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX1
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX2
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX3
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX4
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX6
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX7
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX8
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete03.at:26"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+              { $at_traceoff
+$as_echo "$at_srcdir/delete03.at:26:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 118 --file jeden
-genfile --length 223 --file dwa
-genfile --length 517 --file trzy
-genfile --sparse --file sparsefile 0 ABCD 1M EFGH 2000K IJKL
-genfile --length 110 --file cztery
 
-tar cf archive jeden dwa trzy cztery || exit 1
+prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
+rm -f \$prefix*
+for i in 1 2 3 4 5 6 7 8 9
+do touch \$prefix\$i
+done
+tar -cf archive ./\$prefix* &&
+ tar --delete -f archive ./\${prefix}5 &&
+ tar -tf archive
+)"
+echo delete03.at:26 >"$at_check_line_file"
 
-mkdir dir
-cd dir
+if { echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
 
-tar xvfT ../archive ../../list || exit 1
 
-cd ..
+prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
+rm -f $prefix*
+for i in 1 2 3 4 5 6 7 8 9
+do touch $prefix$i
+done
+tar -cf archive ./$prefix* &&
+ tar --delete -f archive ./${prefix}5 &&
+ tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -9362,70 +10796,61 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 118 --file jeden
-genfile --length 223 --file dwa
-genfile --length 517 --file trzy
-genfile --sparse --file sparsefile 0 ABCD 1M EFGH 2000K IJKL
-genfile --length 110 --file cztery
-
-tar cf archive jeden dwa trzy cztery || exit 1
-
-mkdir dir
-cd dir
-
-tar xvfT ../archive ../../list || exit 1
 
-cd ..
+prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX
+rm -f $prefix*
+for i in 1 2 3 4 5 6 7 8 9
+do touch $prefix$i
+done
+tar -cf archive ./$prefix* &&
+ tar --delete -f archive ./${prefix}5 &&
+ tar -tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "jeden
-cztery
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac05.at:38: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX1
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX2
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX3
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX4
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX6
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX7
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX8
+./This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete03.at:26"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  23 ) # 23. extrac06.at:33: mode of extracted directories
-    at_setup_line='extrac06.at:33'
-    at_desc="mode of extracted directories"
-    $at_quiet $ECHO_N " 23: mode of extracted directories                  $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_21
+#AT_START_22
+# 22. delete04.at:23: deleting a large last member
+at_setup_line='delete04.at:23'
+at_desc="deleting a large last member"
+$at_quiet $as_echo_n " 22: $at_desc                   "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "23. extrac06.at:33: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "22. delete04.at:23: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/extrac06.at:36:
+  $at_traceoff
+$as_echo "$at_srcdir/delete04.at:26:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -9434,43 +10859,25 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS=\"\$TAR_OPTIONS --no-same-permissions\"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 )"
-echo extrac06.at:36 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo delete04.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -9479,102 +10886,67 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :;
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H v7"
-export TAR_OPTIONS
-rm -rf *
-
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "777
-755
-755
-755
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac06.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file2
+file3
+file4
+file5
+file6
+file7
+file8
+file9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete04.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac06.at:36:
+              $at_traceoff
+$as_echo "$at_srcdir/delete04.at:26:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -9583,43 +10955,25 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS=\"\$TAR_OPTIONS --no-same-permissions\"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 )"
-echo extrac06.at:36 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo delete04.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -9628,39 +10982,23 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -9669,61 +11007,42 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "777
-755
-755
-755
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac06.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file2
+file3
+file4
+file5
+file6
+file7
+file8
+file9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete04.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac06.at:36:
+              $at_traceoff
+$as_echo "$at_srcdir/delete04.at:26:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -9732,43 +11051,25 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
+)"
+echo delete04.at:26 >"$at_check_line_file"
 
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS=\"\$TAR_OPTIONS --no-same-permissions\"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
-)"
-echo extrac06.at:36 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -9777,39 +11078,23 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -9818,61 +11103,42 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "777
-755
-755
-755
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac06.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file2
+file3
+file4
+file5
+file6
+file7
+file8
+file9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete04.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac06.at:36:
+              $at_traceoff
+$as_echo "$at_srcdir/delete04.at:26:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -9881,43 +11147,25 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS=\"\$TAR_OPTIONS --no-same-permissions\"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 )"
-echo extrac06.at:36 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo delete04.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -9926,39 +11174,23 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -9967,61 +11199,42 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "777
-755
-755
-755
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac06.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file2
+file3
+file4
+file5
+file6
+file7
+file8
+file9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete04.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac06.at:36:
+              $at_traceoff
+$as_echo "$at_srcdir/delete04.at:26:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -10030,43 +11243,25 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS=\"\$TAR_OPTIONS --no-same-permissions\"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 )"
-echo extrac06.at:36 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo delete04.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -10075,39 +11270,23 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -10116,85 +11295,66 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-# Force umask
-umask 022
-
-# Make sure user's umask is honored, even if we are superuser
-TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
-
-# Create a directory
-mkdir directory
-chmod 777 directory
-genfile --stat=mode:777 directory
-
-# Archive it
-tar cf arc directory
-
-# Change its permissions ...
-chmod 755 directory
-genfile --stat=mode:777 directory
-
-# ... and attempt to restore it twice
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-tar xf arc directory
-genfile --stat=mode:777 directory
-
-# After both restores, the directory mode should be 755
+genfile -l      3 -f file1
+genfile -l      5 -f file2
+genfile -l      3 -f file3
+genfile -l      6 -f file4
+genfile -l     24 -f file5
+genfile -l     13 -f file6
+genfile -l   1385 -f file7
+genfile -l     30 -f file8
+genfile -l     10 -f file9
+genfile -l 256000 -f file10
+tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10
+tar f archive --delete file10
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "777
-755
-755
-755
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac06.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file2
+file3
+file4
+file5
+file6
+file7
+file8
+file9
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete04.at:26"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  24 ) # 24. extrac07.at:27: extracting symlinks to a read-only dir
-    at_setup_line='extrac07.at:27'
-    at_desc="extracting symlinks to a read-only dir"
-    $at_quiet $ECHO_N " 24: extracting symlinks to a read-only dir         $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_22
+#AT_START_23
+# 23. delete05.at:27: deleting non-existing member
+at_setup_line='delete05.at:27'
+at_desc="deleting non-existing member"
+$at_quiet $as_echo_n " 23: $at_desc                   "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "24. extrac07.at:27: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "23. delete05.at:27: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/extrac07.at:30:
+  $at_traceoff
+$as_echo "$at_srcdir/delete05.at:30:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -10203,32 +11363,20 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 )"
-echo extrac07.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo delete05.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -10237,28 +11385,18 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -10267,53 +11405,33 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Prepare the directory
-Create the archive
-Extract
-dir/
-dir/foo
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac07.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-else
-  ustar
-fi
+echo >>"$at_stderr"; $as_echo "tar: tre: Not found in archive
+tar: Exiting with failure status due to previous errors
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "en
+to
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete05.at:30"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac07.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/delete05.at:30:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -10322,32 +11440,20 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 )"
-echo extrac07.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo delete05.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -10356,28 +11462,18 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -10386,53 +11482,33 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Prepare the directory
-Create the archive
-Extract
-dir/
-dir/foo
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac07.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-else
-  ustar
-fi
+echo >>"$at_stderr"; $as_echo "tar: tre: Not found in archive
+tar: Exiting with failure status due to previous errors
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "en
+to
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete05.at:30"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac07.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/delete05.at:30:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -10441,32 +11517,20 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 )"
-echo extrac07.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo delete05.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -10475,28 +11539,18 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -10505,53 +11559,33 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Prepare the directory
-Create the archive
-Extract
-dir/
-dir/foo
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac07.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-else
-  ustar
-fi
+echo >>"$at_stderr"; $as_echo "tar: tre: Not found in archive
+tar: Exiting with failure status due to previous errors
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "en
+to
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete05.at:30"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/extrac07.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/delete05.at:30:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -10560,32 +11594,20 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 )"
-echo extrac07.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo delete05.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -10594,28 +11616,18 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -10624,53 +11636,33 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Prepare the directory
-Create the archive
-Extract
-dir/
-dir/foo
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac07.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+echo >>"$at_stderr"; $as_echo "tar: tre: Not found in archive
+tar: Exiting with failure status due to previous errors
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "en
+to
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete05.at:30"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-else
-  ustar
-fi
-
-$at_traceon
-
-              $at_traceoff
-echo "$at_srcdir/extrac07.at:30:
+              { $at_traceoff
+$as_echo "$at_srcdir/delete05.at:30:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -10679,32 +11671,20 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 )"
-echo extrac07.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo delete05.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -10713,28 +11693,18 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -10743,241 +11713,327 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-echo Prepare the directory
-mkdir dir
-genfile -f foo
-cd dir
-ln -s ../foo .
-cd ..
-chmod -w dir
-
-echo Create the archive
-tar cf archive dir || exit 1
-
-chmod +w dir
+genfile -l 1024 -f en
+genfile -l 1024 -f to
 
-echo Extract
-mkdir out
-tar -C out -xvf archive
+tar cf archive en to
+# Make sure we don't use bogus blocking factor.
+# GNU tar up to and including 1.14.91 produced an empty archive this way:
+tar --file archive --blocking-factor=20 --delete tre
+tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Prepare the directory
-Create the archive
-Extract
-dir/
-dir/foo
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/extrac07.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-else
-  ustar
-fi
-
-$at_traceon
-
+echo >>"$at_stderr"; $as_echo "tar: tre: Not found in archive
+tar: Exiting with failure status due to previous errors
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "en
+to
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/delete05.at:30"
 
- # Testing one format is enough
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  25 ) # 25. gzip.at:23: gzip
-    at_setup_line='gzip.at:23'
-    at_desc="gzip"
-    $at_quiet $ECHO_N " 25: gzip                                           $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "25. gzip.at:23: testing ..."
-      $at_traceon
 
 
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_23
+#AT_START_24
+# 24. extrac01.at:23: extract over an existing directory
+at_setup_line='extrac01.at:23'
+at_desc="extract over an existing directory"
+$at_quiet $as_echo_n " 24: $at_desc             "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "24. extrac01.at:23: testing ..."
+  $at_traceon
 
-unset TAR_OPTIONS
 
-$at_traceoff
-echo "$at_srcdir/gzip.at:28:
 
-cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
 
-tar xfvz /dev/null
-test \$? = 2 || exit 1
-"
-echo gzip.at:28 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+  { $at_traceoff
+$as_echo "$at_srcdir/extrac01.at:26:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H v7\"
+export TAR_OPTIONS
+rm -rf *
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+)"
+echo extrac01.at:26 >"$at_check_line_file"
 
-cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-tar xfvz /dev/null
-test $? = 2 || exit 1
- ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
-
-cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-tar xfvz /dev/null
-test $? = 2 || exit 1
- ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "
-gzip: stdin: unexpected end of file
-tar: Child returned status 1
-tar: Exiting with failure status due to previous errors
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/gzip.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac01.at:26"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac01.at:26:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
 
-$at_traceon
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+)"
+echo extrac01.at:26 >"$at_check_line_file"
 
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
-  26 ) # 26. incremental.at:23: incremental
-    at_setup_line='incremental.at:23'
-    at_desc="incremental"
-    $at_quiet $ECHO_N " 26: incremental                                    $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "26. incremental.at:23: testing ..."
-      $at_traceon
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac01.at:26"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac01.at:26:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
 
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+)"
+echo extrac01.at:26 >"$at_check_line_file"
 
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
-  $at_traceoff
-echo "$at_srcdir/incremental.at:26:
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H gnu\"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir structure
-echo x >structure/file
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac01.at:26"
 
-# On Nextstep (and perhaps other 4.3BSD systems),
-# a newly created file's ctime isn't updated
-# until the next sync or stat operation on the file.
-ls -l structure/file >/dev/null
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-# If the time of an initial backup and the creation time of a file contained
-# in that backup are the same, the file will be backed up again when an
-# incremental backup is done, because the incremental backup backs up
-# files created \`on or after' the initial backup time.  Without the sleep
-# command, behaviour of tar becomes variable, depending whether the system
-# clock ticked over to the next second between creating the file and
-# backing it up.
-sleep 1
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac01.at:26:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
 
-tar cf archive --listed=list structure
-tar cfv archive --listed=list structure
-echo separator
-# ReiserFS often offsets the timestamps of newly created files
-# 1 second to the past.  Try to compensate for it, until a better
-# solution is found.
-sleep 2
-echo y >structure/file
-tar cfv archive --listed=list structure
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
 )"
-echo incremental.at:26 >"$at_check_line_file"
+echo extrac01.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac01.at:26"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac01.at:26:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir structure
-echo x >structure/file
-
-# On Nextstep (and perhaps other 4.3BSD systems),
-# a newly created file's ctime isn't updated
-# until the next sync or stat operation on the file.
-ls -l structure/file >/dev/null
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
+)"
+echo extrac01.at:26 >"$at_check_line_file"
 
-# If the time of an initial backup and the creation time of a file contained
-# in that backup are the same, the file will be backed up again when an
-# incremental backup is done, because the incremental backup backs up
-# files created `on or after' the initial backup time.  Without the sleep
-# command, behaviour of tar becomes variable, depending whether the system
-# clock ticked over to the next second between creating the file and
-# backing it up.
-sleep 1
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
 
-tar cf archive --listed=list structure
-tar cfv archive --listed=list structure
-echo separator
-# ReiserFS often offsets the timestamps of newly created files
-# 1 second to the past.  Try to compensate for it, until a better
-# solution is found.
-sleep 2
-echo y >structure/file
-tar cfv archive --listed=list structure
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -10986,206 +12042,244 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir structure
-echo x >structure/file
-
-# On Nextstep (and perhaps other 4.3BSD systems),
-# a newly created file's ctime isn't updated
-# until the next sync or stat operation on the file.
-ls -l structure/file >/dev/null
-
-# If the time of an initial backup and the creation time of a file contained
-# in that backup are the same, the file will be backed up again when an
-# incremental backup is done, because the incremental backup backs up
-# files created `on or after' the initial backup time.  Without the sleep
-# command, behaviour of tar becomes variable, depending whether the system
-# clock ticked over to the next second between creating the file and
-# backing it up.
-sleep 1
-
-tar cf archive --listed=list structure
-tar cfv archive --listed=list structure
-echo separator
-# ReiserFS often offsets the timestamps of newly created files
-# 1 second to the past.  Try to compensate for it, until a better
-# solution is found.
-sleep 2
-echo y >structure/file
-tar cfv archive --listed=list structure
+mkdir directory
+touch directory/file
+tar cf archive directory || exit 1
+tar xf archive || exit 1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "structure/
-separator
-structure/
-structure/file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incremental.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac01.at:26"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
-              $at_traceoff
-echo "$at_srcdir/incremental.at:26:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
-export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
-export TAR_OPTIONS
-rm -rf *
 
-mkdir structure
-echo x >structure/file
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_24
+#AT_START_25
+# 25. extrac02.at:23: extracting symlinks over an existing file
+at_setup_line='extrac02.at:23'
+at_desc="extracting symlinks over an existing file"
+$at_quiet $as_echo_n " 25: $at_desc      "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "25. extrac02.at:23: testing ..."
+  $at_traceon
 
-# On Nextstep (and perhaps other 4.3BSD systems),
-# a newly created file's ctime isn't updated
-# until the next sync or stat operation on the file.
-ls -l structure/file >/dev/null
 
-# If the time of an initial backup and the creation time of a file contained
-# in that backup are the same, the file will be backed up again when an
-# incremental backup is done, because the incremental backup backs up
-# files created \`on or after' the initial backup time.  Without the sleep
-# command, behaviour of tar becomes variable, depending whether the system
-# clock ticked over to the next second between creating the file and
-# backing it up.
-sleep 1
 
-tar cf archive --listed=list structure
-tar cfv archive --listed=list structure
-echo separator
-# ReiserFS often offsets the timestamps of newly created files
-# 1 second to the past.  Try to compensate for it, until a better
-# solution is found.
-sleep 2
-echo y >structure/file
-tar cfv archive --listed=list structure
-)"
-echo incremental.at:26 >"$at_check_line_file"
+# FIXME: Skip if symlinks are not supported on the system
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+
+  { $at_traceoff
+$as_echo "$at_srcdir/extrac02.at:28:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir structure
-echo x >structure/file
-
-# On Nextstep (and perhaps other 4.3BSD systems),
-# a newly created file's ctime isn't updated
-# until the next sync or stat operation on the file.
-ls -l structure/file >/dev/null
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
+)"
+echo extrac02.at:28 >"$at_check_line_file"
 
-# If the time of an initial backup and the creation time of a file contained
-# in that backup are the same, the file will be backed up again when an
-# incremental backup is done, because the incremental backup backs up
-# files created `on or after' the initial backup time.  Without the sleep
-# command, behaviour of tar becomes variable, depending whether the system
-# clock ticked over to the next second between creating the file and
-# backing it up.
-sleep 1
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-tar cf archive --listed=list structure
-tar cfv archive --listed=list structure
-echo separator
-# ReiserFS often offsets the timestamps of newly created files
-# 1 second to the past.  Try to compensate for it, until a better
-# solution is found.
-sleep 2
-echo y >structure/file
-tar cfv archive --listed=list structure
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
+
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac02.at:28"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac02.at:28:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir structure
-echo x >structure/file
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
+)"
+echo extrac02.at:28 >"$at_check_line_file"
 
-# On Nextstep (and perhaps other 4.3BSD systems),
-# a newly created file's ctime isn't updated
-# until the next sync or stat operation on the file.
-ls -l structure/file >/dev/null
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
-# If the time of an initial backup and the creation time of a file contained
-# in that backup are the same, the file will be backed up again when an
-# incremental backup is done, because the incremental backup backs up
-# files created `on or after' the initial backup time.  Without the sleep
-# command, behaviour of tar becomes variable, depending whether the system
-# clock ticked over to the next second between creating the file and
-# backing it up.
-sleep 1
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
-tar cf archive --listed=list structure
-tar cfv archive --listed=list structure
-echo separator
-# ReiserFS often offsets the timestamps of newly created files
-# 1 second to the past.  Try to compensate for it, until a better
-# solution is found.
-sleep 2
-echo y >structure/file
-tar cfv archive --listed=list structure
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "structure/
-separator
-structure/
-structure/file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incremental.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac02.at:28"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac02.at:28:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
+
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
+)"
+echo extrac02.at:28 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
+
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
+
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac02.at:28"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/incremental.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/extrac02.at:28:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -11194,42 +12288,18 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir structure
-echo x >structure/file
-
-# On Nextstep (and perhaps other 4.3BSD systems),
-# a newly created file's ctime isn't updated
-# until the next sync or stat operation on the file.
-ls -l structure/file >/dev/null
-
-# If the time of an initial backup and the creation time of a file contained
-# in that backup are the same, the file will be backed up again when an
-# incremental backup is done, because the incremental backup backs up
-# files created \`on or after' the initial backup time.  Without the sleep
-# command, behaviour of tar becomes variable, depending whether the system
-# clock ticked over to the next second between creating the file and
-# backing it up.
-sleep 1
-
-tar cf archive --listed=list structure
-tar cfv archive --listed=list structure
-echo separator
-# ReiserFS often offsets the timestamps of newly created files
-# 1 second to the past.  Try to compensate for it, until a better
-# solution is found.
-sleep 2
-echo y >structure/file
-tar cfv archive --listed=list structure
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
 )"
-echo incremental.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo extrac02.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -11238,38 +12308,16 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir structure
-echo x >structure/file
-
-# On Nextstep (and perhaps other 4.3BSD systems),
-# a newly created file's ctime isn't updated
-# until the next sync or stat operation on the file.
-ls -l structure/file >/dev/null
-
-# If the time of an initial backup and the creation time of a file contained
-# in that backup are the same, the file will be backed up again when an
-# incremental backup is done, because the incremental backup backs up
-# files created `on or after' the initial backup time.  Without the sleep
-# command, behaviour of tar becomes variable, depending whether the system
-# clock ticked over to the next second between creating the file and
-# backing it up.
-sleep 1
-
-tar cf archive --listed=list structure
-tar cfv archive --listed=list structure
-echo separator
-# ReiserFS often offsets the timestamps of newly created files
-# 1 second to the past.  Try to compensate for it, until a better
-# solution is found.
-sleep 2
-echo y >structure/file
-tar cfv archive --listed=list structure
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -11278,84 +12326,25 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir structure
-echo x >structure/file
-
-# On Nextstep (and perhaps other 4.3BSD systems),
-# a newly created file's ctime isn't updated
-# until the next sync or stat operation on the file.
-ls -l structure/file >/dev/null
-
-# If the time of an initial backup and the creation time of a file contained
-# in that backup are the same, the file will be backed up again when an
-# incremental backup is done, because the incremental backup backs up
-# files created `on or after' the initial backup time.  Without the sleep
-# command, behaviour of tar becomes variable, depending whether the system
-# clock ticked over to the next second between creating the file and
-# backing it up.
-sleep 1
-
-tar cf archive --listed=list structure
-tar cfv archive --listed=list structure
-echo separator
-# ReiserFS often offsets the timestamps of newly created files
-# 1 second to the past.  Try to compensate for it, until a better
-# solution is found.
-sleep 2
-echo y >structure/file
-tar cfv archive --listed=list structure
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "structure/
-separator
-structure/
-structure/file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incremental.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac02.at:28"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  27 ) # 27. incr01.at:27: restore broken symlinks from incremental
-    at_setup_line='incr01.at:27'
-    at_desc="restore broken symlinks from incremental"
-    $at_quiet $ECHO_N " 27: restore broken symlinks from incremental       $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "27. incr01.at:27: testing ..."
-      $at_traceon
-
-
-
-
-
-  $at_traceoff
-echo "$at_srcdir/incr01.at:30:
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac02.at:28:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -11364,28 +12353,18 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-\$as_ln_s foo directory/bar
-
-tar -cf archive.0 -g db directory
-rm directory/bar
-tar -cf archive.1 -g db directory
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
+)"
+echo extrac02.at:28 >"$at_check_line_file"
 
-mv directory orig
-
-tar xvfg archive.0 /dev/null
-echo separator
-tar xvfg archive.1 /dev/null
-)"
-echo incr01.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -11394,24 +12373,16 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-$as_ln_s foo directory/bar
-
-tar -cf archive.0 -g db directory
-rm directory/bar
-tar -cf archive.1 -g db directory
-
-mv directory orig
-
-tar xvfg archive.0 /dev/null
-echo separator
-tar xvfg archive.1 /dev/null
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -11420,47 +12391,109 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-$as_ln_s foo directory/bar
+touch file
+ln -s file link 2> /dev/null || ln file link
+tar cf archive link
+rm link
+touch link
+tar xf archive
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac02.at:28"
 
-tar -cf archive.0 -g db directory
-rm directory/bar
-tar -cf archive.1 -g db directory
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-mv directory orig
 
-tar xvfg archive.0 /dev/null
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_25
+#AT_START_26
+# 26. extrac03.at:23: extraction loops
+at_setup_line='extrac03.at:23'
+at_desc="extraction loops"
+$at_quiet $as_echo_n " 26: $at_desc                               "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "26. extrac03.at:23: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/extrac03.at:26:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H v7\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+tar -cPvf archive directory/../directory
 echo separator
-tar xvfg archive.1 /dev/null
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+tar -xPvf archive)"
+echo extrac03.at:26 >"$at_check_line_file"
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-directory/bar
-separator
-directory/
-tar: Deleting \`directory/bar'
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr01.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
+mkdir directory
+tar -cPvf archive directory/../directory
+echo separator
+tar -xPvf archive) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-  echo 1 > "$at_status_file"
-  exit 1
+mkdir directory
+tar -cPvf archive directory/../directory
+echo separator
+tar -xPvf archive) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/../directory/
+separator
+directory/../directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac03.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/incr01.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/extrac03.at:26:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -11470,27 +12503,14 @@ export TAR_OPTIONS
 rm -rf *
 
 mkdir directory
-\$as_ln_s foo directory/bar
-
-tar -cf archive.0 -g db directory
-rm directory/bar
-tar -cf archive.1 -g db directory
-
-mv directory orig
-
-tar xvfg archive.0 /dev/null
+tar -cPvf archive directory/../directory
 echo separator
-tar xvfg archive.1 /dev/null
-)"
-echo incr01.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+tar -xPvf archive)"
+echo extrac03.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -11500,23 +12520,12 @@ export TAR_OPTIONS
 rm -rf *
 
 mkdir directory
-$as_ln_s foo directory/bar
-
-tar -cf archive.0 -g db directory
-rm directory/bar
-tar -cf archive.1 -g db directory
-
-mv directory orig
-
-tar xvfg archive.0 /dev/null
+tar -cPvf archive directory/../directory
 echo separator
-tar xvfg archive.1 /dev/null
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+tar -xPvf archive) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -11526,46 +12535,85 @@ export TAR_OPTIONS
 rm -rf *
 
 mkdir directory
-$as_ln_s foo directory/bar
+tar -cPvf archive directory/../directory
+echo separator
+tar -xPvf archive) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/../directory/
+separator
+directory/../directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac03.at:26"
 
-tar -cf archive.0 -g db directory
-rm directory/bar
-tar -cf archive.1 -g db directory
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-mv directory orig
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac03.at:26:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
 
-tar xvfg archive.0 /dev/null
+mkdir directory
+tar -cPvf archive directory/../directory
 echo separator
-tar xvfg archive.1 /dev/null
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+tar -xPvf archive)"
+echo extrac03.at:26 >"$at_check_line_file"
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-directory/bar
-separator
-directory/
-tar: Deleting \`directory/bar'
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr01.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
+mkdir directory
+tar -cPvf archive directory/../directory
+echo separator
+tar -xPvf archive) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
-  echo 1 > "$at_status_file"
-  exit 1
+mkdir directory
+tar -cPvf archive directory/../directory
+echo separator
+tar -xPvf archive) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/../directory/
+separator
+directory/../directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac03.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/incr01.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/extrac03.at:26:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -11575,27 +12623,14 @@ export TAR_OPTIONS
 rm -rf *
 
 mkdir directory
-\$as_ln_s foo directory/bar
-
-tar -cf archive.0 -g db directory
-rm directory/bar
-tar -cf archive.1 -g db directory
-
-mv directory orig
-
-tar xvfg archive.0 /dev/null
+tar -cPvf archive directory/../directory
 echo separator
-tar xvfg archive.1 /dev/null
-)"
-echo incr01.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+tar -xPvf archive)"
+echo extrac03.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -11605,23 +12640,12 @@ export TAR_OPTIONS
 rm -rf *
 
 mkdir directory
-$as_ln_s foo directory/bar
-
-tar -cf archive.0 -g db directory
-rm directory/bar
-tar -cf archive.1 -g db directory
-
-mv directory orig
-
-tar xvfg archive.0 /dev/null
+tar -cPvf archive directory/../directory
 echo separator
-tar xvfg archive.1 /dev/null
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+tar -xPvf archive) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -11631,70 +12655,25 @@ export TAR_OPTIONS
 rm -rf *
 
 mkdir directory
-$as_ln_s foo directory/bar
-
-tar -cf archive.0 -g db directory
-rm directory/bar
-tar -cf archive.1 -g db directory
-
-mv directory orig
-
-tar xvfg archive.0 /dev/null
+tar -cPvf archive directory/../directory
 echo separator
-tar xvfg archive.1 /dev/null
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+tar -xPvf archive) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-directory/bar
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/../directory/
 separator
-directory/
-tar: Deleting \`directory/bar'
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr01.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+directory/../directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac03.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-
-
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  28 ) # 28. incr02.at:32: restoring timestamps from incremental
-    at_setup_line='incr02.at:32'
-    at_desc="restoring timestamps from incremental"
-    $at_quiet $ECHO_N " 28: restoring timestamps from incremental          $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "28. incr02.at:32: testing ..."
-      $at_traceon
-
-
-
-
-
-  $at_traceoff
-echo "$at_srcdir/incr02.at:35:
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac03.at:26:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -11703,51 +12682,15 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-# Create directory structure
-mkdir dir
-mkdir dir/subdir1
-mkdir dir/subdir2
-genfile --length 10 --file dir/subdir1/file
-
-# Save mtime for later comparison
-genfile --stat=mtime dir/subdir1 > ts
-
-# Create an archive. Using incremental mode makes sure the
-# archive will have a directory-first member ordering,
-# i.e.:
-# dir/
-# dir/subdir1/
-# dir/subdir2/
-# dir/subdir1/foofile
-#
-# When restoring from this directory structure, \`dir/subdir2/' used to
-# trigger apply_nonancestor_delayed_set_stat() which restored stats for
-# \`subdir1' prior to restoring \`dir/subdir1/foofile'. Then, restoring the
-# latter clobbered the directory timestamp.
-
-tar -cf archive -g db dir
-
-# Move away the directory
-mv dir orig
-
-# Wait enough time for timestamps to differ in case of failure.
-sleep 5
-
-# Restore the directory
-tar -xf archive dir
-
-# Check the timestamp
-genfile --stat=mtime dir/subdir1 | diff ts -
-)"
-echo incr02.at:35 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a `...` command substitution)'
-fi
+mkdir directory
+tar -cPvf archive directory/../directory
+echo separator
+tar -xPvf archive)"
+echo extrac03.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -11756,47 +12699,13 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-# Create directory structure
-mkdir dir
-mkdir dir/subdir1
-mkdir dir/subdir2
-genfile --length 10 --file dir/subdir1/file
-
-# Save mtime for later comparison
-genfile --stat=mtime dir/subdir1 > ts
-
-# Create an archive. Using incremental mode makes sure the
-# archive will have a directory-first member ordering,
-# i.e.:
-# dir/
-# dir/subdir1/
-# dir/subdir2/
-# dir/subdir1/foofile
-#
-# When restoring from this directory structure, `dir/subdir2/' used to
-# trigger apply_nonancestor_delayed_set_stat() which restored stats for
-# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
-# latter clobbered the directory timestamp.
-
-tar -cf archive -g db dir
-
-# Move away the directory
-mv dir orig
-
-# Wait enough time for timestamps to differ in case of failure.
-sleep 5
-
-# Restore the directory
-tar -xf archive dir
-
-# Check the timestamp
-genfile --stat=mtime dir/subdir1 | diff ts -
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+mkdir directory
+tar -cPvf archive directory/../directory
+echo separator
+tar -xPvf archive) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -11805,167 +12714,202 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-# Create directory structure
-mkdir dir
-mkdir dir/subdir1
-mkdir dir/subdir2
-genfile --length 10 --file dir/subdir1/file
-
-# Save mtime for later comparison
-genfile --stat=mtime dir/subdir1 > ts
-
-# Create an archive. Using incremental mode makes sure the
-# archive will have a directory-first member ordering,
-# i.e.:
-# dir/
-# dir/subdir1/
-# dir/subdir2/
-# dir/subdir1/foofile
-#
-# When restoring from this directory structure, `dir/subdir2/' used to
-# trigger apply_nonancestor_delayed_set_stat() which restored stats for
-# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
-# latter clobbered the directory timestamp.
+mkdir directory
+tar -cPvf archive directory/../directory
+echo separator
+tar -xPvf archive) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/../directory/
+separator
+directory/../directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac03.at:26"
 
-tar -cf archive -g db dir
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-# Move away the directory
-mv dir orig
 
-# Wait enough time for timestamps to differ in case of failure.
-sleep 5
 
-# Restore the directory
-tar -xf archive dir
 
-# Check the timestamp
-genfile --stat=mtime dir/subdir1 | diff ts -
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_26
+#AT_START_27
+# 27. extrac04.at:23: extract + fnmatch
+at_setup_line='extrac04.at:23'
+at_desc="extract + fnmatch"
+$at_quiet $as_echo_n " 27: $at_desc                              "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "27. extrac04.at:23: testing ..."
+  $at_traceon
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr02.at:35: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
-              $at_traceoff
-echo "$at_srcdir/incr02.at:35:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+  { $at_traceoff
+$as_echo "$at_srcdir/extrac04.at:26:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-# Create directory structure
-mkdir dir
-mkdir dir/subdir1
-mkdir dir/subdir2
-genfile --length 10 --file dir/subdir1/file
 
-# Save mtime for later comparison
-genfile --stat=mtime dir/subdir1 > ts
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-# Create an archive. Using incremental mode makes sure the
-# archive will have a directory-first member ordering,
-# i.e.:
-# dir/
-# dir/subdir1/
-# dir/subdir2/
-# dir/subdir1/foofile
-#
-# When restoring from this directory structure, \`dir/subdir2/' used to
-# trigger apply_nonancestor_delayed_set_stat() which restored stats for
-# \`subdir1' prior to restoring \`dir/subdir1/foofile'. Then, restoring the
-# latter clobbered the directory timestamp.
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \\
+  --exclude='./*1' \\
+  --exclude='d*/*1' \\
+  --exclude='d*/s*/*2' | sort
+)"
+echo extrac04.at:26 >"$at_check_line_file"
 
-tar -cf archive -g db dir
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-# Move away the directory
-mv dir orig
 
-# Wait enough time for timestamps to differ in case of failure.
-sleep 5
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-# Restore the directory
-tar -xf archive dir
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \
+  --exclude='./*1' \
+  --exclude='d*/*1' \
+  --exclude='d*/s*/*2' | sort
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-# Check the timestamp
-genfile --stat=mtime dir/subdir1 | diff ts -
-)"
-echo incr02.at:35 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \
+  --exclude='./*1' \
+  --exclude='d*/*1' \
+  --exclude='d*/s*/*2' | sort
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+directory/file2
+directory/subdirectory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac04.at:26"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac04.at:26:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-# Create directory structure
-mkdir dir
-mkdir dir/subdir1
-mkdir dir/subdir2
-genfile --length 10 --file dir/subdir1/file
 
-# Save mtime for later comparison
-genfile --stat=mtime dir/subdir1 > ts
-
-# Create an archive. Using incremental mode makes sure the
-# archive will have a directory-first member ordering,
-# i.e.:
-# dir/
-# dir/subdir1/
-# dir/subdir2/
-# dir/subdir1/foofile
-#
-# When restoring from this directory structure, `dir/subdir2/' used to
-# trigger apply_nonancestor_delayed_set_stat() which restored stats for
-# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
-# latter clobbered the directory timestamp.
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-tar -cf archive -g db dir
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \\
+  --exclude='./*1' \\
+  --exclude='d*/*1' \\
+  --exclude='d*/s*/*2' | sort
+)"
+echo extrac04.at:26 >"$at_check_line_file"
 
-# Move away the directory
-mv dir orig
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
-# Wait enough time for timestamps to differ in case of failure.
-sleep 5
 
-# Restore the directory
-tar -xf archive dir
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-# Check the timestamp
-genfile --stat=mtime dir/subdir1 | diff ts -
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \
+  --exclude='./*1' \
+  --exclude='d*/*1' \
+  --exclude='d*/s*/*2' | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -11974,65 +12918,134 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-# Create directory structure
-mkdir dir
-mkdir dir/subdir1
-mkdir dir/subdir2
-genfile --length 10 --file dir/subdir1/file
 
-# Save mtime for later comparison
-genfile --stat=mtime dir/subdir1 > ts
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-# Create an archive. Using incremental mode makes sure the
-# archive will have a directory-first member ordering,
-# i.e.:
-# dir/
-# dir/subdir1/
-# dir/subdir2/
-# dir/subdir1/foofile
-#
-# When restoring from this directory structure, `dir/subdir2/' used to
-# trigger apply_nonancestor_delayed_set_stat() which restored stats for
-# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
-# latter clobbered the directory timestamp.
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \
+  --exclude='./*1' \
+  --exclude='d*/*1' \
+  --exclude='d*/s*/*2' | sort
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+directory/file2
+directory/subdirectory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac04.at:26"
 
-tar -cf archive -g db dir
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-# Move away the directory
-mv dir orig
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac04.at:26:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
 
-# Wait enough time for timestamps to differ in case of failure.
-sleep 5
 
-# Restore the directory
-tar -xf archive dir
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-# Check the timestamp
-genfile --stat=mtime dir/subdir1 | diff ts -
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \\
+  --exclude='./*1' \\
+  --exclude='d*/*1' \\
+  --exclude='d*/s*/*2' | sort
+)"
+echo extrac04.at:26 >"$at_check_line_file"
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr02.at:35: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
 
-  echo 1 > "$at_status_file"
-  exit 1
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \
+  --exclude='./*1' \
+  --exclude='d*/*1' \
+  --exclude='d*/s*/*2' | sort
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \
+  --exclude='./*1' \
+  --exclude='d*/*1' \
+  --exclude='d*/s*/*2' | sort
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+directory/file2
+directory/subdirectory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac04.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/incr02.at:35:
+              $at_traceoff
+$as_echo "$at_srcdir/extrac04.at:26:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -12041,51 +13054,27 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-# Create directory structure
-mkdir dir
-mkdir dir/subdir1
-mkdir dir/subdir2
-genfile --length 10 --file dir/subdir1/file
-
-# Save mtime for later comparison
-genfile --stat=mtime dir/subdir1 > ts
-
-# Create an archive. Using incremental mode makes sure the
-# archive will have a directory-first member ordering,
-# i.e.:
-# dir/
-# dir/subdir1/
-# dir/subdir2/
-# dir/subdir1/foofile
-#
-# When restoring from this directory structure, \`dir/subdir2/' used to
-# trigger apply_nonancestor_delayed_set_stat() which restored stats for
-# \`subdir1' prior to restoring \`dir/subdir1/foofile'. Then, restoring the
-# latter clobbered the directory timestamp.
-
-tar -cf archive -g db dir
-
-# Move away the directory
-mv dir orig
-
-# Wait enough time for timestamps to differ in case of failure.
-sleep 5
 
-# Restore the directory
-tar -xf archive dir
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-# Check the timestamp
-genfile --stat=mtime dir/subdir1 | diff ts -
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \\
+  --exclude='./*1' \\
+  --exclude='d*/*1' \\
+  --exclude='d*/s*/*2' | sort
 )"
-echo incr02.at:35 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a `...` command substitution)'
-fi
+echo extrac04.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -12094,47 +13083,25 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-# Create directory structure
-mkdir dir
-mkdir dir/subdir1
-mkdir dir/subdir2
-genfile --length 10 --file dir/subdir1/file
 
-# Save mtime for later comparison
-genfile --stat=mtime dir/subdir1 > ts
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-# Create an archive. Using incremental mode makes sure the
-# archive will have a directory-first member ordering,
-# i.e.:
-# dir/
-# dir/subdir1/
-# dir/subdir2/
-# dir/subdir1/foofile
-#
-# When restoring from this directory structure, `dir/subdir2/' used to
-# trigger apply_nonancestor_delayed_set_stat() which restored stats for
-# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
-# latter clobbered the directory timestamp.
-
-tar -cf archive -g db dir
-
-# Move away the directory
-mv dir orig
-
-# Wait enough time for timestamps to differ in case of failure.
-sleep 5
-
-# Restore the directory
-tar -xf archive dir
-
-# Check the timestamp
-genfile --stat=mtime dir/subdir1 | diff ts -
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \
+  --exclude='./*1' \
+  --exclude='d*/*1' \
+  --exclude='d*/s*/*2' | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -12143,89 +13110,38 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-# Create directory structure
-mkdir dir
-mkdir dir/subdir1
-mkdir dir/subdir2
-genfile --length 10 --file dir/subdir1/file
-
-# Save mtime for later comparison
-genfile --stat=mtime dir/subdir1 > ts
-
-# Create an archive. Using incremental mode makes sure the
-# archive will have a directory-first member ordering,
-# i.e.:
-# dir/
-# dir/subdir1/
-# dir/subdir2/
-# dir/subdir1/foofile
-#
-# When restoring from this directory structure, `dir/subdir2/' used to
-# trigger apply_nonancestor_delayed_set_stat() which restored stats for
-# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
-# latter clobbered the directory timestamp.
-
-tar -cf archive -g db dir
-
-# Move away the directory
-mv dir orig
 
-# Wait enough time for timestamps to differ in case of failure.
-sleep 5
-
-# Restore the directory
-tar -xf archive dir
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-# Check the timestamp
-genfile --stat=mtime dir/subdir1 | diff ts -
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \
+  --exclude='./*1' \
+  --exclude='d*/*1' \
+  --exclude='d*/s*/*2' | sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr02.at:35: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  29 ) # 29. listed01.at:26: --listed for individual files
-    at_setup_line='listed01.at:26'
-    at_desc="--listed for individual files"
-    $at_quiet $ECHO_N " 29: --listed for individual files                  $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "29. listed01.at:26: testing ..."
-      $at_traceon
-
-
-
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+directory/file2
+directory/subdirectory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac04.at:26"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  $at_traceoff
-echo "$at_srcdir/listed01.at:29:
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac04.at:26:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -12234,40 +13150,27 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-# Let the things settle
-sleep 1
-
-tar --create \\
-    --file=archive.1 \\
-    --listed-incremental=listing \\
-    directory/file*
-
-tar tf archive.1 || exit 1
-
-sleep 2
-
-genfile --length 10240 --pattern zeros --file directory/file2
-
-echo \"separator\"
 
-tar --create \\
-    --file=archive.2 \\
-    --listed-incremental=listing \\
-    directory/file* || exit 1
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-tar tf archive.2 || exit 1
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \\
+  --exclude='./*1' \\
+  --exclude='d*/*1' \\
+  --exclude='d*/s*/*2' | sort
 )"
-echo listed01.at:29 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo extrac04.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -12276,36 +13179,25 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-# Let the things settle
-sleep 1
-
-tar --create \
-    --file=archive.1 \
-    --listed-incremental=listing \
-    directory/file*
-
-tar tf archive.1 || exit 1
-
-sleep 2
-
-genfile --length 10240 --pattern zeros --file directory/file2
-
-echo "separator"
 
-tar --create \
-    --file=archive.2 \
-    --listed-incremental=listing \
-    directory/file* || exit 1
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-tar tf archive.2 || exit 1
+touch file1
+mkdir directory
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \
+  --exclude='./*1' \
+  --exclude='d*/*1' \
+  --exclude='d*/s*/*2' | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -12314,820 +13206,716 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+touch file1
 mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-# Let the things settle
-sleep 1
+mkdir directory/subdirectory
+touch directory/file1
+touch directory/file2
+touch directory/subdirectory/file1
+touch directory/subdirectory/file2
+tar -cf archive ./file1 directory
+tar -tf archive \
+  --exclude='./*1' \
+  --exclude='d*/*1' \
+  --exclude='d*/s*/*2' | sort
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+directory/file2
+directory/subdirectory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac04.at:26"
 
-tar --create \
-    --file=archive.1 \
-    --listed-incremental=listing \
-    directory/file*
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-tar tf archive.1 || exit 1
 
-sleep 2
 
-genfile --length 10240 --pattern zeros --file directory/file2
 
-echo "separator"
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_27
+#AT_START_28
+# 28. extrac05.at:30: extracting selected members from pax
+at_setup_line='extrac05.at:30'
+at_desc="extracting selected members from pax"
+$at_quiet $as_echo_n " 28: $at_desc           "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "28. extrac05.at:30: testing ..."
+  $at_traceon
 
-tar --create \
-    --file=archive.2 \
-    --listed-incremental=listing \
-    directory/file* || exit 1
 
-tar tf archive.2 || exit 1
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/file1
-separator
-directory/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/listed01.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+cat >list <<'_ATEOF'
+jeden
+cztery
+_ATEOF
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
-              $at_traceoff
-echo "$at_srcdir/listed01.at:29:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+  { $at_traceoff
+$as_echo "$at_srcdir/extrac05.at:38:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-# Let the things settle
-sleep 1
-
-tar --create \\
-    --file=archive.1 \\
-    --listed-incremental=listing \\
-    directory/file*
+genfile --sparse --file sparsefile 0 ABCD 1M EFGH 2000K IJKL || exit 77
+genfile --length 118 --file jeden
+genfile --length 223 --file dwa
+genfile --length 517 --file trzy
+genfile --length 110 --file cztery
 
-tar tf archive.1 || exit 1
+tar cf archive jeden dwa trzy cztery || exit 1
 
-sleep 2
+mkdir dir
+cd dir
 
-genfile --length 10240 --pattern zeros --file directory/file2
+tar xvfT ../archive ../../list || exit 1
 
-echo \"separator\"
+cd ..
+)"
+echo extrac05.at:38 >"$at_check_line_file"
 
-tar --create \\
-    --file=archive.2 \\
-    --listed-incremental=listing \\
-    directory/file* || exit 1
-
-tar tf archive.2 || exit 1
-)"
-echo listed01.at:29 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-# Let the things settle
-sleep 1
-
-tar --create \
-    --file=archive.1 \
-    --listed-incremental=listing \
-    directory/file*
-
-tar tf archive.1 || exit 1
-
-sleep 2
+genfile --sparse --file sparsefile 0 ABCD 1M EFGH 2000K IJKL || exit 77
+genfile --length 118 --file jeden
+genfile --length 223 --file dwa
+genfile --length 517 --file trzy
+genfile --length 110 --file cztery
 
-genfile --length 10240 --pattern zeros --file directory/file2
+tar cf archive jeden dwa trzy cztery || exit 1
 
-echo "separator"
+mkdir dir
+cd dir
 
-tar --create \
-    --file=archive.2 \
-    --listed-incremental=listing \
-    directory/file* || exit 1
+tar xvfT ../archive ../../list || exit 1
 
-tar tf archive.2 || exit 1
+cd ..
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-# Let the things settle
-sleep 1
-
-tar --create \
-    --file=archive.1 \
-    --listed-incremental=listing \
-    directory/file*
-
-tar tf archive.1 || exit 1
-
-sleep 2
+genfile --sparse --file sparsefile 0 ABCD 1M EFGH 2000K IJKL || exit 77
+genfile --length 118 --file jeden
+genfile --length 223 --file dwa
+genfile --length 517 --file trzy
+genfile --length 110 --file cztery
 
-genfile --length 10240 --pattern zeros --file directory/file2
+tar cf archive jeden dwa trzy cztery || exit 1
 
-echo "separator"
+mkdir dir
+cd dir
 
-tar --create \
-    --file=archive.2 \
-    --listed-incremental=listing \
-    directory/file* || exit 1
+tar xvfT ../archive ../../list || exit 1
 
-tar tf archive.2 || exit 1
+cd ..
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/file1
-separator
-directory/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/listed01.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "jeden
+cztery
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac05.at:38"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  30 ) # 30. listed02.at:28: working --listed
-    at_setup_line='listed02.at:28'
-    at_desc="working --listed"
-    $at_quiet $ECHO_N " 30: working --listed                               $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_28
+#AT_START_29
+# 29. extrac06.at:33: mode of extracted directories
+at_setup_line='extrac06.at:33'
+at_desc="mode of extracted directories"
+$at_quiet $as_echo_n " 29: $at_desc                  "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "30. listed02.at:28: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "29. extrac06.at:33: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/listed02.at:31:
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+  $at_traceoff
+$as_echo "$at_srcdir/extrac06.at:36:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H gnu\"
+TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+# Force umask
+umask 022
 
-echo Create directories
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS=\"\$TAR_OPTIONS --no-same-permissions\"
 
-mkdir tart
-sleep 1
-mkdir tart/c0
-sleep 1
-mkdir tart/c1
-sleep 1
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
-do
-  echo File \$file > \$file
-  sleep 1
-done
+# Archive it
+tar cf arc directory
 
-sleep 1
-echo Creating main archive
-tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-# The above prints two lines to stderr announcing the new directories c0 and c1.
-# Ensure that they appear in this script's stderr in sorted order.
-sort err 1>&2; rm -f err
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-sleep 1
-echo Modifying filesystem
-rm tart/a1
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-mv tart/b1 tart/b2
-mv tart/c1 tart/c2
-touch tart/c2/ca3
+# After both restores, the directory mode should be 755
+)"
+echo extrac06.at:36 >"$at_check_line_file"
 
-echo Directory contents
-find tart -print | sort 2>/dev/null
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-sleep 1
-echo Creating incremental archive
-cp -p tart.incr1 tart.incr2
-tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
 
-sleep 1
+# Force umask
+umask 022
 
-rm -rf tart/*
-echo Extracting main archive
-tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
-echo Extracting incremental archive
-# This command should produce three messages about deletion
-# of the existing files, that may appear in any order. Piping
-# to sort makes sure we don't depend on any particular ordering.
-tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
 
-echo Final files:
-find tart -print | sort 2>/dev/null
-)"
-echo listed02.at:31 >"$at_check_line_file"
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+# Archive it
+tar cf arc directory
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
+
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
+
+tar xf arc directory
+genfile --stat=mode:777 directory
+
+# After both restores, the directory mode should be 755
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+# Force umask
+umask 022
 
-echo Create directories
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
 
-mkdir tart
-sleep 1
-mkdir tart/c0
-sleep 1
-mkdir tart/c1
-sleep 1
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
-do
-  echo File $file > $file
-  sleep 1
-done
+# Archive it
+tar cf arc directory
 
-sleep 1
-echo Creating main archive
-tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-# The above prints two lines to stderr announcing the new directories c0 and c1.
-# Ensure that they appear in this script's stderr in sorted order.
-sort err 1>&2; rm -f err
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-sleep 1
-echo Modifying filesystem
-rm tart/a1
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-mv tart/b1 tart/b2
-mv tart/c1 tart/c2
-touch tart/c2/ca3
-
-echo Directory contents
-find tart -print | sort 2>/dev/null
-
-sleep 1
-echo Creating incremental archive
-cp -p tart.incr1 tart.incr2
-tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
-
-sleep 1
+# After both restores, the directory mode should be 755
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "777
+755
+755
+755
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac06.at:36"
 
-rm -rf tart/*
-echo Extracting main archive
-tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
-echo Extracting incremental archive
-# This command should produce three messages about deletion
-# of the existing files, that may appear in any order. Piping
-# to sort makes sure we don't depend on any particular ordering.
-tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-echo Final files:
-find tart -print | sort 2>/dev/null
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac06.at:36:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+# Force umask
+umask 022
 
-echo Create directories
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS=\"\$TAR_OPTIONS --no-same-permissions\"
 
-mkdir tart
-sleep 1
-mkdir tart/c0
-sleep 1
-mkdir tart/c1
-sleep 1
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
-do
-  echo File $file > $file
-  sleep 1
-done
+# Archive it
+tar cf arc directory
 
-sleep 1
-echo Creating main archive
-tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-# The above prints two lines to stderr announcing the new directories c0 and c1.
-# Ensure that they appear in this script's stderr in sorted order.
-sort err 1>&2; rm -f err
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-sleep 1
-echo Modifying filesystem
-rm tart/a1
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-mv tart/b1 tart/b2
-mv tart/c1 tart/c2
-touch tart/c2/ca3
+# After both restores, the directory mode should be 755
+)"
+echo extrac06.at:36 >"$at_check_line_file"
 
-echo Directory contents
-find tart -print | sort 2>/dev/null
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
-sleep 1
-echo Creating incremental archive
-cp -p tart.incr1 tart.incr2
-tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
 
-sleep 1
+# Force umask
+umask 022
 
-rm -rf tart/*
-echo Extracting main archive
-tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
-echo Extracting incremental archive
-# This command should produce three messages about deletion
-# of the existing files, that may appear in any order. Piping
-# to sort makes sure we don't depend on any particular ordering.
-tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
 
-echo Final files:
-find tart -print | sort 2>/dev/null
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: tart/c0: Directory is new
-tar: tart/c1: Directory is new
-tar: tart/c2: Directory has been renamed from \`tart/c1'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Create directories
-Creating main archive
-tart/
-tart/c0/
-tart/c1/
-tart/a1
-tart/b1
-tart/c0/cq1
-tart/c0/cq2
-tart/c1/ca1
-tart/c1/ca2
-Modifying filesystem
-Directory contents
-tart
-tart/b2
-tart/c0
-tart/c0/cq1
-tart/c0/cq2
-tart/c2
-tart/c2/ca1
-tart/c2/ca2
-tart/c2/ca3
-Creating incremental archive
-tart/
-tart/c0/
-tart/c2/
-tart/b2
-tart/c2/ca3
-Extracting main archive
-tart/
-tart/c0/
-tart/c1/
-tart/a1
-tart/b1
-tart/c0/cq1
-tart/c0/cq2
-tart/c1/ca1
-tart/c1/ca2
-Extracting incremental archive
-tar: Deleting \`tart/a1'
-tar: Deleting \`tart/b1'
-tart/
-tart/b2
-tart/c0/
-tart/c2/
-tart/c2/ca3
-Final files:
-tart
-tart/b2
-tart/c0
-tart/c0/cq1
-tart/c0/cq2
-tart/c2
-tart/c2/ca1
-tart/c2/ca2
-tart/c2/ca3
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/listed02.at:31: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# Archive it
+tar cf arc directory
 
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-$at_traceon
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-              $at_traceoff
-echo "$at_srcdir/listed02.at:31:
+# After both restores, the directory mode should be 755
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-echo Create directories
+# Force umask
+umask 022
 
-mkdir tart
-sleep 1
-mkdir tart/c0
-sleep 1
-mkdir tart/c1
-sleep 1
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
 
-for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
-do
-  echo File \$file > \$file
-  sleep 1
-done
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-sleep 1
-echo Creating main archive
-tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+# Archive it
+tar cf arc directory
 
-# The above prints two lines to stderr announcing the new directories c0 and c1.
-# Ensure that they appear in this script's stderr in sorted order.
-sort err 1>&2; rm -f err
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-sleep 1
-echo Modifying filesystem
-rm tart/a1
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-mv tart/b1 tart/b2
-mv tart/c1 tart/c2
-touch tart/c2/ca3
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-echo Directory contents
-find tart -print | sort 2>/dev/null
+# After both restores, the directory mode should be 755
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "777
+755
+755
+755
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac06.at:36"
 
-sleep 1
-echo Creating incremental archive
-cp -p tart.incr1 tart.incr2
-tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-sleep 1
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac06.at:36:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
 
-rm -rf tart/*
-echo Extracting main archive
-tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
-echo Extracting incremental archive
-# This command should produce three messages about deletion
-# of the existing files, that may appear in any order. Piping
-# to sort makes sure we don't depend on any particular ordering.
-tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
 
-echo Final files:
-find tart -print | sort 2>/dev/null
-)"
-echo listed02.at:31 >"$at_check_line_file"
+# Force umask
+umask 022
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS=\"\$TAR_OPTIONS --no-same-permissions\"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
+
+# Archive it
+tar cf arc directory
+
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
+
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
+
+tar xf arc directory
+genfile --stat=mode:777 directory
+
+# After both restores, the directory mode should be 755
+)"
+echo extrac06.at:36 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+# Force umask
+umask 022
 
-echo Create directories
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
 
-mkdir tart
-sleep 1
-mkdir tart/c0
-sleep 1
-mkdir tart/c1
-sleep 1
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
-do
-  echo File $file > $file
-  sleep 1
-done
+# Archive it
+tar cf arc directory
 
-sleep 1
-echo Creating main archive
-tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-# The above prints two lines to stderr announcing the new directories c0 and c1.
-# Ensure that they appear in this script's stderr in sorted order.
-sort err 1>&2; rm -f err
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-sleep 1
-echo Modifying filesystem
-rm tart/a1
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-mv tart/b1 tart/b2
-mv tart/c1 tart/c2
-touch tart/c2/ca3
+# After both restores, the directory mode should be 755
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
-echo Directory contents
-find tart -print | sort 2>/dev/null
 
-sleep 1
-echo Creating incremental archive
-cp -p tart.incr1 tart.incr2
-tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
+# Force umask
+umask 022
 
-sleep 1
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
 
-rm -rf tart/*
-echo Extracting main archive
-tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
-echo Extracting incremental archive
-# This command should produce three messages about deletion
-# of the existing files, that may appear in any order. Piping
-# to sort makes sure we don't depend on any particular ordering.
-tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-echo Final files:
-find tart -print | sort 2>/dev/null
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+# Archive it
+tar cf arc directory
+
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
+
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
+
+tar xf arc directory
+genfile --stat=mode:777 directory
+
+# After both restores, the directory mode should be 755
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "777
+755
+755
+755
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac06.at:36"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac06.at:36:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+# Force umask
+umask 022
 
-echo Create directories
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS=\"\$TAR_OPTIONS --no-same-permissions\"
 
-mkdir tart
-sleep 1
-mkdir tart/c0
-sleep 1
-mkdir tart/c1
-sleep 1
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
-do
-  echo File $file > $file
-  sleep 1
-done
+# Archive it
+tar cf arc directory
 
-sleep 1
-echo Creating main archive
-tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-# The above prints two lines to stderr announcing the new directories c0 and c1.
-# Ensure that they appear in this script's stderr in sorted order.
-sort err 1>&2; rm -f err
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-sleep 1
-echo Modifying filesystem
-rm tart/a1
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-mv tart/b1 tart/b2
-mv tart/c1 tart/c2
-touch tart/c2/ca3
+# After both restores, the directory mode should be 755
+)"
+echo extrac06.at:36 >"$at_check_line_file"
 
-echo Directory contents
-find tart -print | sort 2>/dev/null
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
 
-sleep 1
-echo Creating incremental archive
-cp -p tart.incr1 tart.incr2
-tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
 
-sleep 1
+# Force umask
+umask 022
 
-rm -rf tart/*
-echo Extracting main archive
-tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
-echo Extracting incremental archive
-# This command should produce three messages about deletion
-# of the existing files, that may appear in any order. Piping
-# to sort makes sure we don't depend on any particular ordering.
-tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
 
-echo Final files:
-find tart -print | sort 2>/dev/null
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: tart/c0: Directory is new
-tar: tart/c1: Directory is new
-tar: tart/c2: Directory has been renamed from \`tart/c1'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Create directories
-Creating main archive
-tart/
-tart/c0/
-tart/c1/
-tart/a1
-tart/b1
-tart/c0/cq1
-tart/c0/cq2
-tart/c1/ca1
-tart/c1/ca2
-Modifying filesystem
-Directory contents
-tart
-tart/b2
-tart/c0
-tart/c0/cq1
-tart/c0/cq2
-tart/c2
-tart/c2/ca1
-tart/c2/ca2
-tart/c2/ca3
-Creating incremental archive
-tart/
-tart/c0/
-tart/c2/
-tart/b2
-tart/c2/ca3
-Extracting main archive
-tart/
-tart/c0/
-tart/c1/
-tart/a1
-tart/b1
-tart/c0/cq1
-tart/c0/cq2
-tart/c1/ca1
-tart/c1/ca2
-Extracting incremental archive
-tar: Deleting \`tart/a1'
-tar: Deleting \`tart/b1'
-tart/
-tart/b2
-tart/c0/
-tart/c2/
-tart/c2/ca3
-Final files:
-tart
-tart/b2
-tart/c0
-tart/c0/cq1
-tart/c0/cq2
-tart/c2
-tart/c2/ca1
-tart/c2/ca2
-tart/c2/ca3
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/listed02.at:31: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+# Archive it
+tar cf arc directory
 
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-$at_traceon
+tar xf arc directory
+genfile --stat=mode:777 directory
 
+# After both restores, the directory mode should be 755
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
 
 
+# Force umask
+umask 022
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
 
-  31 ) # 31. incr03.at:28: renamed files in incrementals
-    at_setup_line='incr03.at:28'
-    at_desc="renamed files in incrementals"
-    $at_quiet $ECHO_N " 31: renamed files in incrementals                  $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "31. incr03.at:28: testing ..."
-      $at_traceon
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
+
+# Archive it
+tar cf arc directory
+
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
+tar xf arc directory
+genfile --stat=mode:777 directory
 
+# After both restores, the directory mode should be 755
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "777
+755
+755
+755
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac06.at:36"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  $at_traceoff
-echo "$at_srcdir/incr03.at:31:
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac06.at:36:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -13137,43 +13925,38 @@ export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-mkdir directory
-genfile --file=directory/x
-genfile --file=directory/y
+# Force umask
+umask 022
 
-sleep 1
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS=\"\$TAR_OPTIONS --no-same-permissions\"
 
-tar -cf archive.1 -g db directory
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-mv directory/x directory/z
-tar -cf archive.2 -g db directory
+# Archive it
+tar cf arc directory
 
-mv directory orig
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-echo Listing of archive.1
-tar -tf archive.1 | sort
-echo Listing of archive.2
-tar -tf archive.2 | sort
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-echo Directory after first restore
-tar -xf archive.1 -g db
-find directory | sort
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-echo Directory after second restore
-tar -xf archive.2 -g db
-find directory | sort
+# After both restores, the directory mode should be 755
 )"
-echo incr03.at:31 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo extrac06.at:36 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -13183,39 +13966,36 @@ export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-mkdir directory
-genfile --file=directory/x
-genfile --file=directory/y
+# Force umask
+umask 022
 
-sleep 1
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
 
-tar -cf archive.1 -g db directory
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-mv directory/x directory/z
-tar -cf archive.2 -g db directory
+# Archive it
+tar cf arc directory
 
-mv directory orig
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-echo Listing of archive.1
-tar -tf archive.1 | sort
-echo Listing of archive.2
-tar -tf archive.2 | sort
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-echo Directory after first restore
-tar -xf archive.1 -g db
-find directory | sort
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-echo Directory after second restore
-tar -xf archive.2 -g db
-find directory | sort
+# After both restores, the directory mode should be 755
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -13225,160 +14005,238 @@ export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-mkdir directory
-genfile --file=directory/x
-genfile --file=directory/y
+# Force umask
+umask 022
 
-sleep 1
+# Make sure user's umask is honored, even if we are superuser
+TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions"
 
-tar -cf archive.1 -g db directory
+# Create a directory
+mkdir directory
+chmod 777 directory
+genfile --stat=mode:777 directory
 
-mv directory/x directory/z
-tar -cf archive.2 -g db directory
+# Archive it
+tar cf arc directory
 
-mv directory orig
+# Change its permissions ...
+chmod 755 directory
+genfile --stat=mode:777 directory
 
-echo Listing of archive.1
-tar -tf archive.1 | sort
-echo Listing of archive.2
-tar -tf archive.2 | sort
+# ... and attempt to restore it twice
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-echo Directory after first restore
-tar -xf archive.1 -g db
-find directory | sort
+tar xf arc directory
+genfile --stat=mode:777 directory
 
-echo Directory after second restore
-tar -xf archive.2 -g db
-find directory | sort
+# After both restores, the directory mode should be 755
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Listing of archive.1
-directory/
-directory/x
-directory/y
-Listing of archive.2
-directory/
-directory/z
-Directory after first restore
-directory
-directory/x
-directory/y
-Directory after second restore
-directory
-directory/y
-directory/z
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr03.at:31: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "777
+755
+755
+755
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac06.at:36"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
-              $at_traceoff
-echo "$at_srcdir/incr03.at:31:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
-export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_29
+#AT_START_30
+# 30. extrac07.at:27: extracting symlinks to a read-only dir
+at_setup_line='extrac07.at:27'
+at_desc="extracting symlinks to a read-only dir"
+$at_quiet $as_echo_n " 30: $at_desc         "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "30. extrac07.at:27: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/extrac07.at:30:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo Create the archive
+tar cf archive dir || exit 1
 
-mkdir directory
-genfile --file=directory/x
-genfile --file=directory/y
+chmod +w dir
 
-sleep 1
+echo Extract
+mkdir out
+tar -C out -xvf archive
+)"
+echo extrac07.at:30 >"$at_check_line_file"
 
-tar -cf archive.1 -g db directory
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-mv directory/x directory/z
-tar -cf archive.2 -g db directory
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-mv directory orig
+echo Create the archive
+tar cf archive dir || exit 1
 
-echo Listing of archive.1
-tar -tf archive.1 | sort
-echo Listing of archive.2
-tar -tf archive.2 | sort
+chmod +w dir
 
-echo Directory after first restore
-tar -xf archive.1 -g db
-find directory | sort
+echo Extract
+mkdir out
+tar -C out -xvf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-echo Directory after second restore
-tar -xf archive.2 -g db
-find directory | sort
-)"
-echo incr03.at:31 >"$at_check_line_file"
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
+echo Create the archive
+tar cf archive dir || exit 1
+
+chmod +w dir
+
+echo Extract
+mkdir out
+tar -C out -xvf archive
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Prepare the directory
+Create the archive
+Extract
+dir/
+dir/foo
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac07.at:30"
+if $at_failed; then
+  :
+else
+  ustar
 fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac07.at:30:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-mkdir directory
-genfile --file=directory/x
-genfile --file=directory/y
+echo Create the archive
+tar cf archive dir || exit 1
 
-sleep 1
+chmod +w dir
 
-tar -cf archive.1 -g db directory
+echo Extract
+mkdir out
+tar -C out -xvf archive
+)"
+echo extrac07.at:30 >"$at_check_line_file"
 
-mv directory/x directory/z
-tar -cf archive.2 -g db directory
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
-mv directory orig
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-echo Listing of archive.1
-tar -tf archive.1 | sort
-echo Listing of archive.2
-tar -tf archive.2 | sort
+echo Create the archive
+tar cf archive dir || exit 1
 
-echo Directory after first restore
-tar -xf archive.1 -g db
-find directory | sort
+chmod +w dir
 
-echo Directory after second restore
-tar -xf archive.2 -g db
-find directory | sort
+echo Extract
+mkdir out
+tar -C out -xvf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -13387,161 +14245,210 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-mkdir directory
-genfile --file=directory/x
-genfile --file=directory/y
-
-sleep 1
-
-tar -cf archive.1 -g db directory
-
-mv directory/x directory/z
-tar -cf archive.2 -g db directory
-
-mv directory orig
-
-echo Listing of archive.1
-tar -tf archive.1 | sort
-echo Listing of archive.2
-tar -tf archive.2 | sort
+echo Create the archive
+tar cf archive dir || exit 1
 
-echo Directory after first restore
-tar -xf archive.1 -g db
-find directory | sort
+chmod +w dir
 
-echo Directory after second restore
-tar -xf archive.2 -g db
-find directory | sort
+echo Extract
+mkdir out
+tar -C out -xvf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Listing of archive.1
-directory/
-directory/x
-directory/y
-Listing of archive.2
-directory/
-directory/z
-Directory after first restore
-directory
-directory/x
-directory/y
-Directory after second restore
-directory
-directory/y
-directory/z
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr03.at:31: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Prepare the directory
+Create the archive
+Extract
+dir/
+dir/foo
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac07.at:30"
 if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
+  :
+else
+  ustar
 fi
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/incr03.at:31:
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+              $at_traceoff
+$as_echo "$at_srcdir/extrac07.at:30:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H posix\"
+TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-mkdir directory
-genfile --file=directory/x
-genfile --file=directory/y
+echo Create the archive
+tar cf archive dir || exit 1
 
-sleep 1
+chmod +w dir
 
-tar -cf archive.1 -g db directory
+echo Extract
+mkdir out
+tar -C out -xvf archive
+)"
+echo extrac07.at:30 >"$at_check_line_file"
 
-mv directory/x directory/z
-tar -cf archive.2 -g db directory
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
-mv directory orig
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-echo Listing of archive.1
-tar -tf archive.1 | sort
-echo Listing of archive.2
-tar -tf archive.2 | sort
+echo Create the archive
+tar cf archive dir || exit 1
 
-echo Directory after first restore
-tar -xf archive.1 -g db
-find directory | sort
+chmod +w dir
 
-echo Directory after second restore
-tar -xf archive.2 -g db
-find directory | sort
-)"
-echo incr03.at:31 >"$at_check_line_file"
+echo Extract
+mkdir out
+tar -C out -xvf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
+
+echo Create the archive
+tar cf archive dir || exit 1
+
+chmod +w dir
+
+echo Extract
+mkdir out
+tar -C out -xvf archive
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Prepare the directory
+Create the archive
+Extract
+dir/
+dir/foo
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac07.at:30"
+if $at_failed; then
+  :
+else
+  ustar
 fi
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac07.at:30:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-mkdir directory
-genfile --file=directory/x
-genfile --file=directory/y
+echo Create the archive
+tar cf archive dir || exit 1
 
-sleep 1
+chmod +w dir
 
-tar -cf archive.1 -g db directory
+echo Extract
+mkdir out
+tar -C out -xvf archive
+)"
+echo extrac07.at:30 >"$at_check_line_file"
 
-mv directory/x directory/z
-tar -cf archive.2 -g db directory
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
 
-mv directory orig
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-echo Listing of archive.1
-tar -tf archive.1 | sort
-echo Listing of archive.2
-tar -tf archive.2 | sort
+echo Create the archive
+tar cf archive dir || exit 1
 
-echo Directory after first restore
-tar -xf archive.1 -g db
-find directory | sort
+chmod +w dir
 
-echo Directory after second restore
-tar -xf archive.2 -g db
-find directory | sort
+echo Extract
+mkdir out
+tar -C out -xvf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -13550,99 +14457,46 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-mkdir directory
-genfile --file=directory/x
-genfile --file=directory/y
-
-sleep 1
-
-tar -cf archive.1 -g db directory
-
-mv directory/x directory/z
-tar -cf archive.2 -g db directory
-
-mv directory orig
-
-echo Listing of archive.1
-tar -tf archive.1 | sort
-echo Listing of archive.2
-tar -tf archive.2 | sort
+echo Create the archive
+tar cf archive dir || exit 1
 
-echo Directory after first restore
-tar -xf archive.1 -g db
-find directory | sort
+chmod +w dir
 
-echo Directory after second restore
-tar -xf archive.2 -g db
-find directory | sort
+echo Extract
+mkdir out
+tar -C out -xvf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Listing of archive.1
-directory/
-directory/x
-directory/y
-Listing of archive.2
-directory/
-directory/z
-Directory after first restore
-directory
-directory/x
-directory/y
-Directory after second restore
-directory
-directory/y
-directory/z
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr03.at:31: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Prepare the directory
+Create the archive
+Extract
+dir/
+dir/foo
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac07.at:30"
 if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
+  :
+else
+  ustar
 fi
 
-$at_traceon
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  32 ) # 32. incr04.at:29: proper icontents initialization
-    at_setup_line='incr04.at:29'
-    at_desc="proper icontents initialization"
-    $at_quiet $ECHO_N " 32: proper icontents initialization                $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "32. incr04.at:29: testing ..."
-      $at_traceon
-
-
-
-
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-
-
-  $at_traceoff
-echo "$at_srcdir/incr04.at:34:
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac07.at:30:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -13651,30 +14505,28 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-install-sh -d a/b >/dev/null  || exit 77
-awk 'BEGIN {
-  for (i=1;i<=142;i++)
-    printf(\"a/b/one_31_chars_long_file_name_%03d\\n\", i);
-  }' < /dev/null | genfile --files-from -
+echo Create the archive
+tar cf archive dir || exit 1
 
-sleep 1
+chmod +w dir
 
-echo \"Initial dump\"
-tar cvf a0.tar -g a.sna a
-mv a/b a/c
-echo \"Incremental dump\"
-tar cvf a1.tar -g a.sna a
+echo Extract
+mkdir out
+tar -C out -xvf archive
 )"
-echo incr04.at:34 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo extrac07.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -13683,26 +14535,26 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-install-sh -d a/b >/dev/null  || exit 77
-awk 'BEGIN {
-  for (i=1;i<=142;i++)
-    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
-  }' < /dev/null | genfile --files-from -
+echo Create the archive
+tar cf archive dir || exit 1
 
-sleep 1
+chmod +w dir
 
-echo "Initial dump"
-tar cvf a0.tar -g a.sna a
-mv a/b a/c
-echo "Incremental dump"
-tar cvf a1.tar -g a.sna a
+echo Extract
+mkdir out
+tar -C out -xvf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -13711,254 +14563,187 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
+echo Prepare the directory
+mkdir dir
+genfile -f foo
+cd dir
+ln -s ../foo .
+cd ..
+chmod -w dir
 
-install-sh -d a/b >/dev/null  || exit 77
-awk 'BEGIN {
-  for (i=1;i<=142;i++)
-    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
-  }' < /dev/null | genfile --files-from -
+echo Create the archive
+tar cf archive dir || exit 1
 
-sleep 1
+chmod +w dir
 
-echo "Initial dump"
-tar cvf a0.tar -g a.sna a
-mv a/b a/c
-echo "Incremental dump"
-tar cvf a1.tar -g a.sna a
+echo Extract
+mkdir out
+tar -C out -xvf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: a/b: Directory is new
-tar: a/c: Directory has been renamed from \`a/b'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Initial dump
-a/
-a/b/
-a/b/one_31_chars_long_file_name_001
-a/b/one_31_chars_long_file_name_002
-a/b/one_31_chars_long_file_name_003
-a/b/one_31_chars_long_file_name_004
-a/b/one_31_chars_long_file_name_005
-a/b/one_31_chars_long_file_name_006
-a/b/one_31_chars_long_file_name_007
-a/b/one_31_chars_long_file_name_008
-a/b/one_31_chars_long_file_name_009
-a/b/one_31_chars_long_file_name_010
-a/b/one_31_chars_long_file_name_011
-a/b/one_31_chars_long_file_name_012
-a/b/one_31_chars_long_file_name_013
-a/b/one_31_chars_long_file_name_014
-a/b/one_31_chars_long_file_name_015
-a/b/one_31_chars_long_file_name_016
-a/b/one_31_chars_long_file_name_017
-a/b/one_31_chars_long_file_name_018
-a/b/one_31_chars_long_file_name_019
-a/b/one_31_chars_long_file_name_020
-a/b/one_31_chars_long_file_name_021
-a/b/one_31_chars_long_file_name_022
-a/b/one_31_chars_long_file_name_023
-a/b/one_31_chars_long_file_name_024
-a/b/one_31_chars_long_file_name_025
-a/b/one_31_chars_long_file_name_026
-a/b/one_31_chars_long_file_name_027
-a/b/one_31_chars_long_file_name_028
-a/b/one_31_chars_long_file_name_029
-a/b/one_31_chars_long_file_name_030
-a/b/one_31_chars_long_file_name_031
-a/b/one_31_chars_long_file_name_032
-a/b/one_31_chars_long_file_name_033
-a/b/one_31_chars_long_file_name_034
-a/b/one_31_chars_long_file_name_035
-a/b/one_31_chars_long_file_name_036
-a/b/one_31_chars_long_file_name_037
-a/b/one_31_chars_long_file_name_038
-a/b/one_31_chars_long_file_name_039
-a/b/one_31_chars_long_file_name_040
-a/b/one_31_chars_long_file_name_041
-a/b/one_31_chars_long_file_name_042
-a/b/one_31_chars_long_file_name_043
-a/b/one_31_chars_long_file_name_044
-a/b/one_31_chars_long_file_name_045
-a/b/one_31_chars_long_file_name_046
-a/b/one_31_chars_long_file_name_047
-a/b/one_31_chars_long_file_name_048
-a/b/one_31_chars_long_file_name_049
-a/b/one_31_chars_long_file_name_050
-a/b/one_31_chars_long_file_name_051
-a/b/one_31_chars_long_file_name_052
-a/b/one_31_chars_long_file_name_053
-a/b/one_31_chars_long_file_name_054
-a/b/one_31_chars_long_file_name_055
-a/b/one_31_chars_long_file_name_056
-a/b/one_31_chars_long_file_name_057
-a/b/one_31_chars_long_file_name_058
-a/b/one_31_chars_long_file_name_059
-a/b/one_31_chars_long_file_name_060
-a/b/one_31_chars_long_file_name_061
-a/b/one_31_chars_long_file_name_062
-a/b/one_31_chars_long_file_name_063
-a/b/one_31_chars_long_file_name_064
-a/b/one_31_chars_long_file_name_065
-a/b/one_31_chars_long_file_name_066
-a/b/one_31_chars_long_file_name_067
-a/b/one_31_chars_long_file_name_068
-a/b/one_31_chars_long_file_name_069
-a/b/one_31_chars_long_file_name_070
-a/b/one_31_chars_long_file_name_071
-a/b/one_31_chars_long_file_name_072
-a/b/one_31_chars_long_file_name_073
-a/b/one_31_chars_long_file_name_074
-a/b/one_31_chars_long_file_name_075
-a/b/one_31_chars_long_file_name_076
-a/b/one_31_chars_long_file_name_077
-a/b/one_31_chars_long_file_name_078
-a/b/one_31_chars_long_file_name_079
-a/b/one_31_chars_long_file_name_080
-a/b/one_31_chars_long_file_name_081
-a/b/one_31_chars_long_file_name_082
-a/b/one_31_chars_long_file_name_083
-a/b/one_31_chars_long_file_name_084
-a/b/one_31_chars_long_file_name_085
-a/b/one_31_chars_long_file_name_086
-a/b/one_31_chars_long_file_name_087
-a/b/one_31_chars_long_file_name_088
-a/b/one_31_chars_long_file_name_089
-a/b/one_31_chars_long_file_name_090
-a/b/one_31_chars_long_file_name_091
-a/b/one_31_chars_long_file_name_092
-a/b/one_31_chars_long_file_name_093
-a/b/one_31_chars_long_file_name_094
-a/b/one_31_chars_long_file_name_095
-a/b/one_31_chars_long_file_name_096
-a/b/one_31_chars_long_file_name_097
-a/b/one_31_chars_long_file_name_098
-a/b/one_31_chars_long_file_name_099
-a/b/one_31_chars_long_file_name_100
-a/b/one_31_chars_long_file_name_101
-a/b/one_31_chars_long_file_name_102
-a/b/one_31_chars_long_file_name_103
-a/b/one_31_chars_long_file_name_104
-a/b/one_31_chars_long_file_name_105
-a/b/one_31_chars_long_file_name_106
-a/b/one_31_chars_long_file_name_107
-a/b/one_31_chars_long_file_name_108
-a/b/one_31_chars_long_file_name_109
-a/b/one_31_chars_long_file_name_110
-a/b/one_31_chars_long_file_name_111
-a/b/one_31_chars_long_file_name_112
-a/b/one_31_chars_long_file_name_113
-a/b/one_31_chars_long_file_name_114
-a/b/one_31_chars_long_file_name_115
-a/b/one_31_chars_long_file_name_116
-a/b/one_31_chars_long_file_name_117
-a/b/one_31_chars_long_file_name_118
-a/b/one_31_chars_long_file_name_119
-a/b/one_31_chars_long_file_name_120
-a/b/one_31_chars_long_file_name_121
-a/b/one_31_chars_long_file_name_122
-a/b/one_31_chars_long_file_name_123
-a/b/one_31_chars_long_file_name_124
-a/b/one_31_chars_long_file_name_125
-a/b/one_31_chars_long_file_name_126
-a/b/one_31_chars_long_file_name_127
-a/b/one_31_chars_long_file_name_128
-a/b/one_31_chars_long_file_name_129
-a/b/one_31_chars_long_file_name_130
-a/b/one_31_chars_long_file_name_131
-a/b/one_31_chars_long_file_name_132
-a/b/one_31_chars_long_file_name_133
-a/b/one_31_chars_long_file_name_134
-a/b/one_31_chars_long_file_name_135
-a/b/one_31_chars_long_file_name_136
-a/b/one_31_chars_long_file_name_137
-a/b/one_31_chars_long_file_name_138
-a/b/one_31_chars_long_file_name_139
-a/b/one_31_chars_long_file_name_140
-a/b/one_31_chars_long_file_name_141
-a/b/one_31_chars_long_file_name_142
-Incremental dump
-a/
-a/c/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr04.at:34: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Prepare the directory
+Create the archive
+Extract
+dir/
+dir/foo
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac07.at:30"
 if $at_failed; then
+  :
+else
+  ustar
+fi
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+ # Testing one format is enough
 
-              $at_traceoff
-echo "$at_srcdir/incr04.at:34:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_30
+#AT_START_31
+# 31. extrac08.at:33: restoring mode on existing directory
+at_setup_line='extrac08.at:33'
+at_desc="restoring mode on existing directory"
+$at_quiet $as_echo_n " 31: $at_desc           "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "31. extrac08.at:33: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/extrac08.at:36:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+)"
+echo extrac08.at:36 >"$at_check_line_file"
 
-install-sh -d a/b >/dev/null  || exit 77
-awk 'BEGIN {
-  for (i=1;i<=142;i++)
-    printf(\"a/b/one_31_chars_long_file_name_%03d\\n\", i);
-  }' < /dev/null | genfile --files-from -
-
-sleep 1
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-echo \"Initial dump\"
-tar cvf a0.tar -g a.sna a
-mv a/b a/c
-echo \"Incremental dump\"
-tar cvf a1.tar -g a.sna a
-)"
-echo incr04.at:34 >"$at_check_line_file"
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dir/
+dir/file
+755
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac08.at:36"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac08.at:36:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+)"
+echo extrac08.at:36 >"$at_check_line_file"
 
-install-sh -d a/b >/dev/null  || exit 77
-awk 'BEGIN {
-  for (i=1;i<=142;i++)
-    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
-  }' < /dev/null | genfile --files-from -
-
-sleep 1
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
-echo "Initial dump"
-tar cvf a0.tar -g a.sna a
-mv a/b a/c
-echo "Incremental dump"
-tar cvf a1.tar -g a.sna a
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -13967,194 +14752,106 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dir/
+dir/file
+755
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac08.at:36"
 
-install-sh -d a/b >/dev/null  || exit 77
-awk 'BEGIN {
-  for (i=1;i<=142;i++)
-    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
-  }' < /dev/null | genfile --files-from -
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-sleep 1
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac08.at:36:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
 
-echo "Initial dump"
-tar cvf a0.tar -g a.sna a
-mv a/b a/c
-echo "Incremental dump"
-tar cvf a1.tar -g a.sna a
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+)"
+echo extrac08.at:36 >"$at_check_line_file"
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: a/b: Directory is new
-tar: a/c: Directory has been renamed from \`a/b'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Initial dump
-a/
-a/b/
-a/b/one_31_chars_long_file_name_001
-a/b/one_31_chars_long_file_name_002
-a/b/one_31_chars_long_file_name_003
-a/b/one_31_chars_long_file_name_004
-a/b/one_31_chars_long_file_name_005
-a/b/one_31_chars_long_file_name_006
-a/b/one_31_chars_long_file_name_007
-a/b/one_31_chars_long_file_name_008
-a/b/one_31_chars_long_file_name_009
-a/b/one_31_chars_long_file_name_010
-a/b/one_31_chars_long_file_name_011
-a/b/one_31_chars_long_file_name_012
-a/b/one_31_chars_long_file_name_013
-a/b/one_31_chars_long_file_name_014
-a/b/one_31_chars_long_file_name_015
-a/b/one_31_chars_long_file_name_016
-a/b/one_31_chars_long_file_name_017
-a/b/one_31_chars_long_file_name_018
-a/b/one_31_chars_long_file_name_019
-a/b/one_31_chars_long_file_name_020
-a/b/one_31_chars_long_file_name_021
-a/b/one_31_chars_long_file_name_022
-a/b/one_31_chars_long_file_name_023
-a/b/one_31_chars_long_file_name_024
-a/b/one_31_chars_long_file_name_025
-a/b/one_31_chars_long_file_name_026
-a/b/one_31_chars_long_file_name_027
-a/b/one_31_chars_long_file_name_028
-a/b/one_31_chars_long_file_name_029
-a/b/one_31_chars_long_file_name_030
-a/b/one_31_chars_long_file_name_031
-a/b/one_31_chars_long_file_name_032
-a/b/one_31_chars_long_file_name_033
-a/b/one_31_chars_long_file_name_034
-a/b/one_31_chars_long_file_name_035
-a/b/one_31_chars_long_file_name_036
-a/b/one_31_chars_long_file_name_037
-a/b/one_31_chars_long_file_name_038
-a/b/one_31_chars_long_file_name_039
-a/b/one_31_chars_long_file_name_040
-a/b/one_31_chars_long_file_name_041
-a/b/one_31_chars_long_file_name_042
-a/b/one_31_chars_long_file_name_043
-a/b/one_31_chars_long_file_name_044
-a/b/one_31_chars_long_file_name_045
-a/b/one_31_chars_long_file_name_046
-a/b/one_31_chars_long_file_name_047
-a/b/one_31_chars_long_file_name_048
-a/b/one_31_chars_long_file_name_049
-a/b/one_31_chars_long_file_name_050
-a/b/one_31_chars_long_file_name_051
-a/b/one_31_chars_long_file_name_052
-a/b/one_31_chars_long_file_name_053
-a/b/one_31_chars_long_file_name_054
-a/b/one_31_chars_long_file_name_055
-a/b/one_31_chars_long_file_name_056
-a/b/one_31_chars_long_file_name_057
-a/b/one_31_chars_long_file_name_058
-a/b/one_31_chars_long_file_name_059
-a/b/one_31_chars_long_file_name_060
-a/b/one_31_chars_long_file_name_061
-a/b/one_31_chars_long_file_name_062
-a/b/one_31_chars_long_file_name_063
-a/b/one_31_chars_long_file_name_064
-a/b/one_31_chars_long_file_name_065
-a/b/one_31_chars_long_file_name_066
-a/b/one_31_chars_long_file_name_067
-a/b/one_31_chars_long_file_name_068
-a/b/one_31_chars_long_file_name_069
-a/b/one_31_chars_long_file_name_070
-a/b/one_31_chars_long_file_name_071
-a/b/one_31_chars_long_file_name_072
-a/b/one_31_chars_long_file_name_073
-a/b/one_31_chars_long_file_name_074
-a/b/one_31_chars_long_file_name_075
-a/b/one_31_chars_long_file_name_076
-a/b/one_31_chars_long_file_name_077
-a/b/one_31_chars_long_file_name_078
-a/b/one_31_chars_long_file_name_079
-a/b/one_31_chars_long_file_name_080
-a/b/one_31_chars_long_file_name_081
-a/b/one_31_chars_long_file_name_082
-a/b/one_31_chars_long_file_name_083
-a/b/one_31_chars_long_file_name_084
-a/b/one_31_chars_long_file_name_085
-a/b/one_31_chars_long_file_name_086
-a/b/one_31_chars_long_file_name_087
-a/b/one_31_chars_long_file_name_088
-a/b/one_31_chars_long_file_name_089
-a/b/one_31_chars_long_file_name_090
-a/b/one_31_chars_long_file_name_091
-a/b/one_31_chars_long_file_name_092
-a/b/one_31_chars_long_file_name_093
-a/b/one_31_chars_long_file_name_094
-a/b/one_31_chars_long_file_name_095
-a/b/one_31_chars_long_file_name_096
-a/b/one_31_chars_long_file_name_097
-a/b/one_31_chars_long_file_name_098
-a/b/one_31_chars_long_file_name_099
-a/b/one_31_chars_long_file_name_100
-a/b/one_31_chars_long_file_name_101
-a/b/one_31_chars_long_file_name_102
-a/b/one_31_chars_long_file_name_103
-a/b/one_31_chars_long_file_name_104
-a/b/one_31_chars_long_file_name_105
-a/b/one_31_chars_long_file_name_106
-a/b/one_31_chars_long_file_name_107
-a/b/one_31_chars_long_file_name_108
-a/b/one_31_chars_long_file_name_109
-a/b/one_31_chars_long_file_name_110
-a/b/one_31_chars_long_file_name_111
-a/b/one_31_chars_long_file_name_112
-a/b/one_31_chars_long_file_name_113
-a/b/one_31_chars_long_file_name_114
-a/b/one_31_chars_long_file_name_115
-a/b/one_31_chars_long_file_name_116
-a/b/one_31_chars_long_file_name_117
-a/b/one_31_chars_long_file_name_118
-a/b/one_31_chars_long_file_name_119
-a/b/one_31_chars_long_file_name_120
-a/b/one_31_chars_long_file_name_121
-a/b/one_31_chars_long_file_name_122
-a/b/one_31_chars_long_file_name_123
-a/b/one_31_chars_long_file_name_124
-a/b/one_31_chars_long_file_name_125
-a/b/one_31_chars_long_file_name_126
-a/b/one_31_chars_long_file_name_127
-a/b/one_31_chars_long_file_name_128
-a/b/one_31_chars_long_file_name_129
-a/b/one_31_chars_long_file_name_130
-a/b/one_31_chars_long_file_name_131
-a/b/one_31_chars_long_file_name_132
-a/b/one_31_chars_long_file_name_133
-a/b/one_31_chars_long_file_name_134
-a/b/one_31_chars_long_file_name_135
-a/b/one_31_chars_long_file_name_136
-a/b/one_31_chars_long_file_name_137
-a/b/one_31_chars_long_file_name_138
-a/b/one_31_chars_long_file_name_139
-a/b/one_31_chars_long_file_name_140
-a/b/one_31_chars_long_file_name_141
-a/b/one_31_chars_long_file_name_142
-Incremental dump
-a/
-a/c/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr04.at:34: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
-  echo 1 > "$at_status_file"
-  exit 1
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dir/
+dir/file
+755
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac08.at:36"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/incr04.at:34:
+              $at_traceoff
+$as_echo "$at_srcdir/extrac08.at:36:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -14163,30 +14860,40 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-
-install-sh -d a/b >/dev/null  || exit 77
-awk 'BEGIN {
-  for (i=1;i<=142;i++)
-    printf(\"a/b/one_31_chars_long_file_name_%03d\\n\", i);
-  }' < /dev/null | genfile --files-from -
-
-sleep 1
-
-echo \"Initial dump\"
-tar cvf a0.tar -g a.sna a
-mv a/b a/c
-echo \"Incremental dump\"
-tar cvf a1.tar -g a.sna a
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
 )"
-echo incr04.at:34 >"$at_check_line_file"
+echo extrac08.at:36 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -14195,26 +14902,6399 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dir/
+dir/file
+755
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac08.at:36"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/extrac08.at:36:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+)"
+echo extrac08.at:36 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+umask 000
+mkdir dir
+chmod 755 dir
+echo bla > dir/file
+tar cf test.tar dir
+chmod 700 dir
+tar xfv test.tar
+genfile --stat=mode.777 dir
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dir/
+dir/file
+755
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/extrac08.at:36"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_31
+#AT_START_32
+# 32. label01.at:19: single-volume label
+at_setup_line='label01.at:19'
+at_desc="single-volume label"
+$at_quiet $as_echo_n " 32: $at_desc                            "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "32. label01.at:19: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/label01.at:22:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+genfile --file foo
+genfile --file bar
+tar -cf archive --label=Test foo bar
+tar tf archive
+)"
+echo label01.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+genfile --file foo
+genfile --file bar
+tar -cf archive --label=Test foo bar
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+genfile --file foo
+genfile --file bar
+tar -cf archive --label=Test foo bar
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Test
+foo
+bar
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/label01.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/label01.at:22:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+genfile --file foo
+genfile --file bar
+tar -cf archive --label=Test foo bar
+tar tf archive
+)"
+echo label01.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+genfile --file foo
+genfile --file bar
+tar -cf archive --label=Test foo bar
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+genfile --file foo
+genfile --file bar
+tar -cf archive --label=Test foo bar
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Test
+foo
+bar
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/label01.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/label01.at:22:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+genfile --file foo
+genfile --file bar
+tar -cf archive --label=Test foo bar
+tar tf archive
+)"
+echo label01.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+genfile --file foo
+genfile --file bar
+tar -cf archive --label=Test foo bar
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+genfile --file foo
+genfile --file bar
+tar -cf archive --label=Test foo bar
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Test
+foo
+bar
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/label01.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_32
+#AT_START_33
+# 33. label02.at:19: multi-volume label
+at_setup_line='label02.at:19'
+at_desc="multi-volume label"
+$at_quiet $as_echo_n " 33: $at_desc                             "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "33. label02.at:19: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/label02.at:22:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+exec <&-
+genfile --length 0 --file foo
+genfile --length 12288 --file bar
+genfile --length 12288 --file baz
+tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz
+tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar
+)"
+echo label02.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+exec <&-
+genfile --length 0 --file foo
+genfile --length 12288 --file bar
+genfile --length 12288 --file baz
+tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz
+tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+exec <&-
+genfile --length 0 --file foo
+genfile --length 12288 --file bar
+genfile --length 12288 --file baz
+tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz
+tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Test Volume 1
+foo
+bar
+baz
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/label02.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/label02.at:22:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+exec <&-
+genfile --length 0 --file foo
+genfile --length 12288 --file bar
+genfile --length 12288 --file baz
+tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz
+tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar
+)"
+echo label02.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+exec <&-
+genfile --length 0 --file foo
+genfile --length 12288 --file bar
+genfile --length 12288 --file baz
+tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz
+tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+exec <&-
+genfile --length 0 --file foo
+genfile --length 12288 --file bar
+genfile --length 12288 --file baz
+tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz
+tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Test Volume 1
+foo
+bar
+baz
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/label02.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/label02.at:22:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+exec <&-
+genfile --length 0 --file foo
+genfile --length 12288 --file bar
+genfile --length 12288 --file baz
+tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz
+tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar
+)"
+echo label02.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+exec <&-
+genfile --length 0 --file foo
+genfile --length 12288 --file bar
+genfile --length 12288 --file baz
+tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz
+tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+exec <&-
+genfile --length 0 --file foo
+genfile --length 12288 --file bar
+genfile --length 12288 --file baz
+tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz
+tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Test Volume 1
+foo
+bar
+baz
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/label02.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_33
+#AT_START_34
+# 34. backup01.at:33: extracting existing dir with --backup
+at_setup_line='backup01.at:33'
+at_desc="extracting existing dir with --backup"
+$at_quiet $as_echo_n " 34: $at_desc          "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "34. backup01.at:33: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/backup01.at:36:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H v7\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+)"
+echo backup01.at:36 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dir1/
+dir1/file1
+Renaming \`dir1/file1' to \`dir1/file1~'
+dir2/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/backup01.at:36"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/backup01.at:36:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+)"
+echo backup01.at:36 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dir1/
+dir1/file1
+Renaming \`dir1/file1' to \`dir1/file1~'
+dir2/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/backup01.at:36"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/backup01.at:36:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+)"
+echo backup01.at:36 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dir1/
+dir1/file1
+Renaming \`dir1/file1' to \`dir1/file1~'
+dir2/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/backup01.at:36"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/backup01.at:36:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+)"
+echo backup01.at:36 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dir1/
+dir1/file1
+Renaming \`dir1/file1' to \`dir1/file1~'
+dir2/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/backup01.at:36"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/backup01.at:36:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+)"
+echo backup01.at:36 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir1 dir2
+echo bla > dir1/file1
+tar cf test.tar dir1 dir2
+tar xfv test.tar --backup
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "dir1/
+dir1/file1
+Renaming \`dir1/file1' to \`dir1/file1~'
+dir2/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/backup01.at:36"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_34
+#AT_START_35
+# 35. gzip.at:23: gzip
+at_setup_line='gzip.at:23'
+at_desc="gzip"
+$at_quiet $as_echo_n " 35: $at_desc                                           "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "35. gzip.at:23: testing ..."
+  $at_traceon
+
+
+
+unset TAR_OPTIONS
+
+{ $at_traceoff
+$as_echo "$at_srcdir/gzip.at:28:
+
+cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+
+tar xfvz /dev/null
+"
+echo gzip.at:28 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+
+cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+
+tar xfvz /dev/null
+ ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+
+cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+
+tar xfvz /dev/null
+ ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "
+gzip: stdin: unexpected end of file
+tar: Child returned status 1
+tar: Error is not recoverable: exiting now
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 2 $at_status "$at_srcdir/gzip.at:28"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_35
+#AT_START_36
+# 36. incremental.at:23: incremental
+at_setup_line='incremental.at:23'
+at_desc="incremental"
+$at_quiet $as_echo_n " 36: $at_desc                                    "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "36. incremental.at:23: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/incremental.at:26:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir structure
+echo x >structure/file
+
+# On Nextstep (and perhaps other 4.3BSD systems),
+# a newly created file's ctime isn't updated
+# until the next sync or stat operation on the file.
+ls -l structure/file >/dev/null
+
+# If the time of an initial backup and the creation time of a file contained
+# in that backup are the same, the file will be backed up again when an
+# incremental backup is done, because the incremental backup backs up
+# files created \`on or after' the initial backup time.  Without the sleep
+# command, behaviour of tar becomes variable, depending whether the system
+# clock ticked over to the next second between creating the file and
+# backing it up.
+sleep 1
+
+tar cf archive --listed=list structure
+tar cfv archive --listed=list structure
+echo separator
+# ReiserFS often offsets the timestamps of newly created files
+# 1 second to the past.  Try to compensate for it, until a better
+# solution is found.
+sleep 2
+echo y >structure/file
+tar cfv archive --listed=list structure
+)"
+echo incremental.at:26 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir structure
+echo x >structure/file
+
+# On Nextstep (and perhaps other 4.3BSD systems),
+# a newly created file's ctime isn't updated
+# until the next sync or stat operation on the file.
+ls -l structure/file >/dev/null
+
+# If the time of an initial backup and the creation time of a file contained
+# in that backup are the same, the file will be backed up again when an
+# incremental backup is done, because the incremental backup backs up
+# files created `on or after' the initial backup time.  Without the sleep
+# command, behaviour of tar becomes variable, depending whether the system
+# clock ticked over to the next second between creating the file and
+# backing it up.
+sleep 1
+
+tar cf archive --listed=list structure
+tar cfv archive --listed=list structure
+echo separator
+# ReiserFS often offsets the timestamps of newly created files
+# 1 second to the past.  Try to compensate for it, until a better
+# solution is found.
+sleep 2
+echo y >structure/file
+tar cfv archive --listed=list structure
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir structure
+echo x >structure/file
+
+# On Nextstep (and perhaps other 4.3BSD systems),
+# a newly created file's ctime isn't updated
+# until the next sync or stat operation on the file.
+ls -l structure/file >/dev/null
+
+# If the time of an initial backup and the creation time of a file contained
+# in that backup are the same, the file will be backed up again when an
+# incremental backup is done, because the incremental backup backs up
+# files created `on or after' the initial backup time.  Without the sleep
+# command, behaviour of tar becomes variable, depending whether the system
+# clock ticked over to the next second between creating the file and
+# backing it up.
+sleep 1
+
+tar cf archive --listed=list structure
+tar cfv archive --listed=list structure
+echo separator
+# ReiserFS often offsets the timestamps of newly created files
+# 1 second to the past.  Try to compensate for it, until a better
+# solution is found.
+sleep 2
+echo y >structure/file
+tar cfv archive --listed=list structure
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "structure/
+separator
+structure/
+structure/file
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incremental.at:26"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incremental.at:26:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir structure
+echo x >structure/file
+
+# On Nextstep (and perhaps other 4.3BSD systems),
+# a newly created file's ctime isn't updated
+# until the next sync or stat operation on the file.
+ls -l structure/file >/dev/null
+
+# If the time of an initial backup and the creation time of a file contained
+# in that backup are the same, the file will be backed up again when an
+# incremental backup is done, because the incremental backup backs up
+# files created \`on or after' the initial backup time.  Without the sleep
+# command, behaviour of tar becomes variable, depending whether the system
+# clock ticked over to the next second between creating the file and
+# backing it up.
+sleep 1
+
+tar cf archive --listed=list structure
+tar cfv archive --listed=list structure
+echo separator
+# ReiserFS often offsets the timestamps of newly created files
+# 1 second to the past.  Try to compensate for it, until a better
+# solution is found.
+sleep 2
+echo y >structure/file
+tar cfv archive --listed=list structure
+)"
+echo incremental.at:26 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir structure
+echo x >structure/file
+
+# On Nextstep (and perhaps other 4.3BSD systems),
+# a newly created file's ctime isn't updated
+# until the next sync or stat operation on the file.
+ls -l structure/file >/dev/null
+
+# If the time of an initial backup and the creation time of a file contained
+# in that backup are the same, the file will be backed up again when an
+# incremental backup is done, because the incremental backup backs up
+# files created `on or after' the initial backup time.  Without the sleep
+# command, behaviour of tar becomes variable, depending whether the system
+# clock ticked over to the next second between creating the file and
+# backing it up.
+sleep 1
+
+tar cf archive --listed=list structure
+tar cfv archive --listed=list structure
+echo separator
+# ReiserFS often offsets the timestamps of newly created files
+# 1 second to the past.  Try to compensate for it, until a better
+# solution is found.
+sleep 2
+echo y >structure/file
+tar cfv archive --listed=list structure
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir structure
+echo x >structure/file
+
+# On Nextstep (and perhaps other 4.3BSD systems),
+# a newly created file's ctime isn't updated
+# until the next sync or stat operation on the file.
+ls -l structure/file >/dev/null
+
+# If the time of an initial backup and the creation time of a file contained
+# in that backup are the same, the file will be backed up again when an
+# incremental backup is done, because the incremental backup backs up
+# files created `on or after' the initial backup time.  Without the sleep
+# command, behaviour of tar becomes variable, depending whether the system
+# clock ticked over to the next second between creating the file and
+# backing it up.
+sleep 1
+
+tar cf archive --listed=list structure
+tar cfv archive --listed=list structure
+echo separator
+# ReiserFS often offsets the timestamps of newly created files
+# 1 second to the past.  Try to compensate for it, until a better
+# solution is found.
+sleep 2
+echo y >structure/file
+tar cfv archive --listed=list structure
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "structure/
+separator
+structure/
+structure/file
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incremental.at:26"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incremental.at:26:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir structure
+echo x >structure/file
+
+# On Nextstep (and perhaps other 4.3BSD systems),
+# a newly created file's ctime isn't updated
+# until the next sync or stat operation on the file.
+ls -l structure/file >/dev/null
+
+# If the time of an initial backup and the creation time of a file contained
+# in that backup are the same, the file will be backed up again when an
+# incremental backup is done, because the incremental backup backs up
+# files created \`on or after' the initial backup time.  Without the sleep
+# command, behaviour of tar becomes variable, depending whether the system
+# clock ticked over to the next second between creating the file and
+# backing it up.
+sleep 1
+
+tar cf archive --listed=list structure
+tar cfv archive --listed=list structure
+echo separator
+# ReiserFS often offsets the timestamps of newly created files
+# 1 second to the past.  Try to compensate for it, until a better
+# solution is found.
+sleep 2
+echo y >structure/file
+tar cfv archive --listed=list structure
+)"
+echo incremental.at:26 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir structure
+echo x >structure/file
+
+# On Nextstep (and perhaps other 4.3BSD systems),
+# a newly created file's ctime isn't updated
+# until the next sync or stat operation on the file.
+ls -l structure/file >/dev/null
+
+# If the time of an initial backup and the creation time of a file contained
+# in that backup are the same, the file will be backed up again when an
+# incremental backup is done, because the incremental backup backs up
+# files created `on or after' the initial backup time.  Without the sleep
+# command, behaviour of tar becomes variable, depending whether the system
+# clock ticked over to the next second between creating the file and
+# backing it up.
+sleep 1
+
+tar cf archive --listed=list structure
+tar cfv archive --listed=list structure
+echo separator
+# ReiserFS often offsets the timestamps of newly created files
+# 1 second to the past.  Try to compensate for it, until a better
+# solution is found.
+sleep 2
+echo y >structure/file
+tar cfv archive --listed=list structure
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir structure
+echo x >structure/file
+
+# On Nextstep (and perhaps other 4.3BSD systems),
+# a newly created file's ctime isn't updated
+# until the next sync or stat operation on the file.
+ls -l structure/file >/dev/null
+
+# If the time of an initial backup and the creation time of a file contained
+# in that backup are the same, the file will be backed up again when an
+# incremental backup is done, because the incremental backup backs up
+# files created `on or after' the initial backup time.  Without the sleep
+# command, behaviour of tar becomes variable, depending whether the system
+# clock ticked over to the next second between creating the file and
+# backing it up.
+sleep 1
+
+tar cf archive --listed=list structure
+tar cfv archive --listed=list structure
+echo separator
+# ReiserFS often offsets the timestamps of newly created files
+# 1 second to the past.  Try to compensate for it, until a better
+# solution is found.
+sleep 2
+echo y >structure/file
+tar cfv archive --listed=list structure
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "structure/
+separator
+structure/
+structure/file
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incremental.at:26"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_36
+#AT_START_37
+# 37. incr01.at:27: restore broken symlinks from incremental
+at_setup_line='incr01.at:27'
+at_desc="restore broken symlinks from incremental"
+$at_quiet $as_echo_n " 37: $at_desc       "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "37. incr01.at:27: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/incr01.at:30:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+\$as_ln_s foo directory/bar
+
+tar -cf archive.0 -g db directory
+rm directory/bar
+tar -cf archive.1 -g db directory
+
+mv directory orig
+
+tar xvfg archive.0 /dev/null
+echo separator
+tar xvfg archive.1 /dev/null
+)"
+echo incr01.at:30 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+$as_ln_s foo directory/bar
+
+tar -cf archive.0 -g db directory
+rm directory/bar
+tar -cf archive.1 -g db directory
+
+mv directory orig
+
+tar xvfg archive.0 /dev/null
+echo separator
+tar xvfg archive.1 /dev/null
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+$as_ln_s foo directory/bar
+
+tar -cf archive.0 -g db directory
+rm directory/bar
+tar -cf archive.1 -g db directory
+
+mv directory orig
+
+tar xvfg archive.0 /dev/null
+echo separator
+tar xvfg archive.1 /dev/null
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+directory/bar
+separator
+directory/
+tar: Deleting \`directory/bar'
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr01.at:30"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr01.at:30:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+\$as_ln_s foo directory/bar
+
+tar -cf archive.0 -g db directory
+rm directory/bar
+tar -cf archive.1 -g db directory
+
+mv directory orig
+
+tar xvfg archive.0 /dev/null
+echo separator
+tar xvfg archive.1 /dev/null
+)"
+echo incr01.at:30 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+$as_ln_s foo directory/bar
+
+tar -cf archive.0 -g db directory
+rm directory/bar
+tar -cf archive.1 -g db directory
+
+mv directory orig
+
+tar xvfg archive.0 /dev/null
+echo separator
+tar xvfg archive.1 /dev/null
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+$as_ln_s foo directory/bar
+
+tar -cf archive.0 -g db directory
+rm directory/bar
+tar -cf archive.1 -g db directory
+
+mv directory orig
+
+tar xvfg archive.0 /dev/null
+echo separator
+tar xvfg archive.1 /dev/null
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+directory/bar
+separator
+directory/
+tar: Deleting \`directory/bar'
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr01.at:30"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr01.at:30:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+\$as_ln_s foo directory/bar
+
+tar -cf archive.0 -g db directory
+rm directory/bar
+tar -cf archive.1 -g db directory
+
+mv directory orig
+
+tar xvfg archive.0 /dev/null
+echo separator
+tar xvfg archive.1 /dev/null
+)"
+echo incr01.at:30 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+$as_ln_s foo directory/bar
+
+tar -cf archive.0 -g db directory
+rm directory/bar
+tar -cf archive.1 -g db directory
+
+mv directory orig
+
+tar xvfg archive.0 /dev/null
+echo separator
+tar xvfg archive.1 /dev/null
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+$as_ln_s foo directory/bar
+
+tar -cf archive.0 -g db directory
+rm directory/bar
+tar -cf archive.1 -g db directory
+
+mv directory orig
+
+tar xvfg archive.0 /dev/null
+echo separator
+tar xvfg archive.1 /dev/null
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+directory/bar
+separator
+directory/
+tar: Deleting \`directory/bar'
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr01.at:30"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_37
+#AT_START_38
+# 38. incr02.at:32: restoring timestamps from incremental
+at_setup_line='incr02.at:32'
+at_desc="restoring timestamps from incremental"
+$at_quiet $as_echo_n " 38: $at_desc          "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "38. incr02.at:32: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/incr02.at:35:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+# Create directory structure
+mkdir dir
+mkdir dir/subdir1
+mkdir dir/subdir2
+genfile --length 10 --file dir/subdir1/file
+
+# Save mtime for later comparison
+genfile --stat=mtime dir/subdir1 > ts
+
+# Create an archive. Using incremental mode makes sure the
+# archive will have a directory-first member ordering,
+# i.e.:
+# dir/
+# dir/subdir1/
+# dir/subdir2/
+# dir/subdir1/foofile
+#
+# When restoring from this directory structure, \`dir/subdir2/' used to
+# trigger apply_nonancestor_delayed_set_stat() which restored stats for
+# \`subdir1' prior to restoring \`dir/subdir1/foofile'. Then, restoring the
+# latter clobbered the directory timestamp.
+
+tar -cf archive -g db dir
+
+# Move away the directory
+mv dir orig
+
+# Wait enough time for timestamps to differ in case of failure.
+sleep 5
+
+# Restore the directory
+tar -xf archive dir
+
+# Check the timestamp
+genfile --stat=mtime dir/subdir1 | diff ts -
+)"
+echo incr02.at:35 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+# Create directory structure
+mkdir dir
+mkdir dir/subdir1
+mkdir dir/subdir2
+genfile --length 10 --file dir/subdir1/file
+
+# Save mtime for later comparison
+genfile --stat=mtime dir/subdir1 > ts
+
+# Create an archive. Using incremental mode makes sure the
+# archive will have a directory-first member ordering,
+# i.e.:
+# dir/
+# dir/subdir1/
+# dir/subdir2/
+# dir/subdir1/foofile
+#
+# When restoring from this directory structure, `dir/subdir2/' used to
+# trigger apply_nonancestor_delayed_set_stat() which restored stats for
+# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
+# latter clobbered the directory timestamp.
+
+tar -cf archive -g db dir
+
+# Move away the directory
+mv dir orig
+
+# Wait enough time for timestamps to differ in case of failure.
+sleep 5
+
+# Restore the directory
+tar -xf archive dir
+
+# Check the timestamp
+genfile --stat=mtime dir/subdir1 | diff ts -
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+# Create directory structure
+mkdir dir
+mkdir dir/subdir1
+mkdir dir/subdir2
+genfile --length 10 --file dir/subdir1/file
+
+# Save mtime for later comparison
+genfile --stat=mtime dir/subdir1 > ts
+
+# Create an archive. Using incremental mode makes sure the
+# archive will have a directory-first member ordering,
+# i.e.:
+# dir/
+# dir/subdir1/
+# dir/subdir2/
+# dir/subdir1/foofile
+#
+# When restoring from this directory structure, `dir/subdir2/' used to
+# trigger apply_nonancestor_delayed_set_stat() which restored stats for
+# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
+# latter clobbered the directory timestamp.
+
+tar -cf archive -g db dir
+
+# Move away the directory
+mv dir orig
+
+# Wait enough time for timestamps to differ in case of failure.
+sleep 5
+
+# Restore the directory
+tar -xf archive dir
+
+# Check the timestamp
+genfile --stat=mtime dir/subdir1 | diff ts -
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr02.at:35"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr02.at:35:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+# Create directory structure
+mkdir dir
+mkdir dir/subdir1
+mkdir dir/subdir2
+genfile --length 10 --file dir/subdir1/file
+
+# Save mtime for later comparison
+genfile --stat=mtime dir/subdir1 > ts
+
+# Create an archive. Using incremental mode makes sure the
+# archive will have a directory-first member ordering,
+# i.e.:
+# dir/
+# dir/subdir1/
+# dir/subdir2/
+# dir/subdir1/foofile
+#
+# When restoring from this directory structure, \`dir/subdir2/' used to
+# trigger apply_nonancestor_delayed_set_stat() which restored stats for
+# \`subdir1' prior to restoring \`dir/subdir1/foofile'. Then, restoring the
+# latter clobbered the directory timestamp.
+
+tar -cf archive -g db dir
+
+# Move away the directory
+mv dir orig
+
+# Wait enough time for timestamps to differ in case of failure.
+sleep 5
+
+# Restore the directory
+tar -xf archive dir
+
+# Check the timestamp
+genfile --stat=mtime dir/subdir1 | diff ts -
+)"
+echo incr02.at:35 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+# Create directory structure
+mkdir dir
+mkdir dir/subdir1
+mkdir dir/subdir2
+genfile --length 10 --file dir/subdir1/file
+
+# Save mtime for later comparison
+genfile --stat=mtime dir/subdir1 > ts
+
+# Create an archive. Using incremental mode makes sure the
+# archive will have a directory-first member ordering,
+# i.e.:
+# dir/
+# dir/subdir1/
+# dir/subdir2/
+# dir/subdir1/foofile
+#
+# When restoring from this directory structure, `dir/subdir2/' used to
+# trigger apply_nonancestor_delayed_set_stat() which restored stats for
+# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
+# latter clobbered the directory timestamp.
+
+tar -cf archive -g db dir
+
+# Move away the directory
+mv dir orig
+
+# Wait enough time for timestamps to differ in case of failure.
+sleep 5
+
+# Restore the directory
+tar -xf archive dir
+
+# Check the timestamp
+genfile --stat=mtime dir/subdir1 | diff ts -
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+# Create directory structure
+mkdir dir
+mkdir dir/subdir1
+mkdir dir/subdir2
+genfile --length 10 --file dir/subdir1/file
+
+# Save mtime for later comparison
+genfile --stat=mtime dir/subdir1 > ts
+
+# Create an archive. Using incremental mode makes sure the
+# archive will have a directory-first member ordering,
+# i.e.:
+# dir/
+# dir/subdir1/
+# dir/subdir2/
+# dir/subdir1/foofile
+#
+# When restoring from this directory structure, `dir/subdir2/' used to
+# trigger apply_nonancestor_delayed_set_stat() which restored stats for
+# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
+# latter clobbered the directory timestamp.
+
+tar -cf archive -g db dir
+
+# Move away the directory
+mv dir orig
+
+# Wait enough time for timestamps to differ in case of failure.
+sleep 5
+
+# Restore the directory
+tar -xf archive dir
+
+# Check the timestamp
+genfile --stat=mtime dir/subdir1 | diff ts -
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr02.at:35"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr02.at:35:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+# Create directory structure
+mkdir dir
+mkdir dir/subdir1
+mkdir dir/subdir2
+genfile --length 10 --file dir/subdir1/file
+
+# Save mtime for later comparison
+genfile --stat=mtime dir/subdir1 > ts
+
+# Create an archive. Using incremental mode makes sure the
+# archive will have a directory-first member ordering,
+# i.e.:
+# dir/
+# dir/subdir1/
+# dir/subdir2/
+# dir/subdir1/foofile
+#
+# When restoring from this directory structure, \`dir/subdir2/' used to
+# trigger apply_nonancestor_delayed_set_stat() which restored stats for
+# \`subdir1' prior to restoring \`dir/subdir1/foofile'. Then, restoring the
+# latter clobbered the directory timestamp.
+
+tar -cf archive -g db dir
+
+# Move away the directory
+mv dir orig
+
+# Wait enough time for timestamps to differ in case of failure.
+sleep 5
+
+# Restore the directory
+tar -xf archive dir
+
+# Check the timestamp
+genfile --stat=mtime dir/subdir1 | diff ts -
+)"
+echo incr02.at:35 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+# Create directory structure
+mkdir dir
+mkdir dir/subdir1
+mkdir dir/subdir2
+genfile --length 10 --file dir/subdir1/file
+
+# Save mtime for later comparison
+genfile --stat=mtime dir/subdir1 > ts
+
+# Create an archive. Using incremental mode makes sure the
+# archive will have a directory-first member ordering,
+# i.e.:
+# dir/
+# dir/subdir1/
+# dir/subdir2/
+# dir/subdir1/foofile
+#
+# When restoring from this directory structure, `dir/subdir2/' used to
+# trigger apply_nonancestor_delayed_set_stat() which restored stats for
+# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
+# latter clobbered the directory timestamp.
+
+tar -cf archive -g db dir
+
+# Move away the directory
+mv dir orig
+
+# Wait enough time for timestamps to differ in case of failure.
+sleep 5
+
+# Restore the directory
+tar -xf archive dir
+
+# Check the timestamp
+genfile --stat=mtime dir/subdir1 | diff ts -
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+# Create directory structure
+mkdir dir
+mkdir dir/subdir1
+mkdir dir/subdir2
+genfile --length 10 --file dir/subdir1/file
+
+# Save mtime for later comparison
+genfile --stat=mtime dir/subdir1 > ts
+
+# Create an archive. Using incremental mode makes sure the
+# archive will have a directory-first member ordering,
+# i.e.:
+# dir/
+# dir/subdir1/
+# dir/subdir2/
+# dir/subdir1/foofile
+#
+# When restoring from this directory structure, `dir/subdir2/' used to
+# trigger apply_nonancestor_delayed_set_stat() which restored stats for
+# `subdir1' prior to restoring `dir/subdir1/foofile'. Then, restoring the
+# latter clobbered the directory timestamp.
+
+tar -cf archive -g db dir
+
+# Move away the directory
+mv dir orig
+
+# Wait enough time for timestamps to differ in case of failure.
+sleep 5
+
+# Restore the directory
+tar -xf archive dir
+
+# Check the timestamp
+genfile --stat=mtime dir/subdir1 | diff ts -
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr02.at:35"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_38
+#AT_START_39
+# 39. listed01.at:26: --listed for individual files
+at_setup_line='listed01.at:26'
+at_desc="--listed for individual files"
+$at_quiet $as_echo_n " 39: $at_desc                  "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "39. listed01.at:26: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/listed01.at:29:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+# Let the things settle
+sleep 1
+
+tar --create \\
+    --file=archive.1 \\
+    --listed-incremental=listing \\
+    directory/file*
+
+tar tf archive.1 || exit 1
+
+sleep 2
+
+genfile --length 10240 --pattern zeros --file directory/file2
+
+echo \"separator\"
+cp listing listing.old
+tar --create \\
+    --file=archive.2 \\
+    --listed-incremental=listing \\
+    directory/file* || exit 1
+
+tar tf archive.2 || exit 1
+)"
+echo listed01.at:29 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+# Let the things settle
+sleep 1
+
+tar --create \
+    --file=archive.1 \
+    --listed-incremental=listing \
+    directory/file*
+
+tar tf archive.1 || exit 1
+
+sleep 2
+
+genfile --length 10240 --pattern zeros --file directory/file2
+
+echo "separator"
+cp listing listing.old
+tar --create \
+    --file=archive.2 \
+    --listed-incremental=listing \
+    directory/file* || exit 1
+
+tar tf archive.2 || exit 1
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+# Let the things settle
+sleep 1
+
+tar --create \
+    --file=archive.1 \
+    --listed-incremental=listing \
+    directory/file*
+
+tar tf archive.1 || exit 1
+
+sleep 2
+
+genfile --length 10240 --pattern zeros --file directory/file2
+
+echo "separator"
+cp listing listing.old
+tar --create \
+    --file=archive.2 \
+    --listed-incremental=listing \
+    directory/file* || exit 1
+
+tar tf archive.2 || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/file1
+separator
+directory/file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/listed01.at:29"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/listed01.at:29:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+# Let the things settle
+sleep 1
+
+tar --create \\
+    --file=archive.1 \\
+    --listed-incremental=listing \\
+    directory/file*
+
+tar tf archive.1 || exit 1
+
+sleep 2
+
+genfile --length 10240 --pattern zeros --file directory/file2
+
+echo \"separator\"
+cp listing listing.old
+tar --create \\
+    --file=archive.2 \\
+    --listed-incremental=listing \\
+    directory/file* || exit 1
+
+tar tf archive.2 || exit 1
+)"
+echo listed01.at:29 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+# Let the things settle
+sleep 1
+
+tar --create \
+    --file=archive.1 \
+    --listed-incremental=listing \
+    directory/file*
+
+tar tf archive.1 || exit 1
+
+sleep 2
+
+genfile --length 10240 --pattern zeros --file directory/file2
+
+echo "separator"
+cp listing listing.old
+tar --create \
+    --file=archive.2 \
+    --listed-incremental=listing \
+    directory/file* || exit 1
+
+tar tf archive.2 || exit 1
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+# Let the things settle
+sleep 1
+
+tar --create \
+    --file=archive.1 \
+    --listed-incremental=listing \
+    directory/file*
+
+tar tf archive.1 || exit 1
+
+sleep 2
+
+genfile --length 10240 --pattern zeros --file directory/file2
+
+echo "separator"
+cp listing listing.old
+tar --create \
+    --file=archive.2 \
+    --listed-incremental=listing \
+    directory/file* || exit 1
+
+tar tf archive.2 || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/file1
+separator
+directory/file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/listed01.at:29"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_39
+#AT_START_40
+# 40. listed02.at:28: working --listed
+at_setup_line='listed02.at:28'
+at_desc="working --listed"
+$at_quiet $as_echo_n " 40: $at_desc                               "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "40. listed02.at:28: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/listed02.at:31:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+echo Create directories
+
+mkdir tart
+sleep 1
+mkdir tart/c0
+sleep 1
+mkdir tart/c1
+sleep 1
+
+for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
+do
+  echo File \$file > \$file
+  sleep 1
+done
+
+sleep 1
+echo Creating main archive
+echo >&2 \"Creating main archive\"
+tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+
+# The above prints two lines to stderr announcing the new directories c0 and c1.
+# Ensure that they appear in this script's stderr in sorted order.
+sort err 1>&2; rm -f err
+
+sleep 1
+echo Modifying filesystem
+rm tart/a1
+
+mv tart/b1 tart/b2
+mv tart/c1 tart/c2
+touch tart/c2/ca3
+
+echo Directory contents
+find tart -print | sort 2>/dev/null
+
+sleep 1
+echo Creating incremental archive
+echo >&2 \"Creating incremental archive\"
+cp -p tart.incr1 tart.incr2
+tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
+
+sleep 1
+
+rm -rf tart/*
+echo Extracting main archive
+echo >&2 \"Extracting main archive\"
+tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
+echo Extracting incremental archive
+# This command should produce three messages about deletion
+# of the existing files, that may appear in any order. Piping
+# to sort makes sure we don't depend on any particular ordering.
+tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+
+echo Final files:
+find tart -print | sort 2>/dev/null
+)"
+echo listed02.at:31 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+echo Create directories
+
+mkdir tart
+sleep 1
+mkdir tart/c0
+sleep 1
+mkdir tart/c1
+sleep 1
+
+for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
+do
+  echo File $file > $file
+  sleep 1
+done
+
+sleep 1
+echo Creating main archive
+echo >&2 "Creating main archive"
+tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+
+# The above prints two lines to stderr announcing the new directories c0 and c1.
+# Ensure that they appear in this script's stderr in sorted order.
+sort err 1>&2; rm -f err
+
+sleep 1
+echo Modifying filesystem
+rm tart/a1
+
+mv tart/b1 tart/b2
+mv tart/c1 tart/c2
+touch tart/c2/ca3
+
+echo Directory contents
+find tart -print | sort 2>/dev/null
+
+sleep 1
+echo Creating incremental archive
+echo >&2 "Creating incremental archive"
+cp -p tart.incr1 tart.incr2
+tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
+
+sleep 1
+
+rm -rf tart/*
+echo Extracting main archive
+echo >&2 "Extracting main archive"
+tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
+echo Extracting incremental archive
+# This command should produce three messages about deletion
+# of the existing files, that may appear in any order. Piping
+# to sort makes sure we don't depend on any particular ordering.
+tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+
+echo Final files:
+find tart -print | sort 2>/dev/null
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+echo Create directories
+
+mkdir tart
+sleep 1
+mkdir tart/c0
+sleep 1
+mkdir tart/c1
+sleep 1
+
+for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
+do
+  echo File $file > $file
+  sleep 1
+done
+
+sleep 1
+echo Creating main archive
+echo >&2 "Creating main archive"
+tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+
+# The above prints two lines to stderr announcing the new directories c0 and c1.
+# Ensure that they appear in this script's stderr in sorted order.
+sort err 1>&2; rm -f err
+
+sleep 1
+echo Modifying filesystem
+rm tart/a1
+
+mv tart/b1 tart/b2
+mv tart/c1 tart/c2
+touch tart/c2/ca3
+
+echo Directory contents
+find tart -print | sort 2>/dev/null
+
+sleep 1
+echo Creating incremental archive
+echo >&2 "Creating incremental archive"
+cp -p tart.incr1 tart.incr2
+tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
+
+sleep 1
+
+rm -rf tart/*
+echo Extracting main archive
+echo >&2 "Extracting main archive"
+tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
+echo Extracting incremental archive
+# This command should produce three messages about deletion
+# of the existing files, that may appear in any order. Piping
+# to sort makes sure we don't depend on any particular ordering.
+tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+
+echo Final files:
+find tart -print | sort 2>/dev/null
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "Creating main archive
+tar: tart/c0: Directory is new
+tar: tart/c1: Directory is new
+tar: tart: Directory is new
+Creating incremental archive
+tar: tart/c2: Directory has been renamed from \`tart/c1'
+Extracting main archive
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Create directories
+Creating main archive
+tart/
+tart/c0/
+tart/c1/
+tart/a1
+tart/b1
+tart/c0/cq1
+tart/c0/cq2
+tart/c1/ca1
+tart/c1/ca2
+Modifying filesystem
+Directory contents
+tart
+tart/b2
+tart/c0
+tart/c0/cq1
+tart/c0/cq2
+tart/c2
+tart/c2/ca1
+tart/c2/ca2
+tart/c2/ca3
+Creating incremental archive
+tart/
+tart/c0/
+tart/c2/
+tart/b2
+tart/c2/ca3
+Extracting main archive
+tart/
+tart/c0/
+tart/c1/
+tart/a1
+tart/b1
+tart/c0/cq1
+tart/c0/cq2
+tart/c1/ca1
+tart/c1/ca2
+Extracting incremental archive
+tar: Deleting \`tart/a1'
+tar: Deleting \`tart/b1'
+tart/
+tart/b2
+tart/c0/
+tart/c2/
+tart/c2/ca3
+Final files:
+tart
+tart/b2
+tart/c0
+tart/c0/cq1
+tart/c0/cq2
+tart/c2
+tart/c2/ca1
+tart/c2/ca2
+tart/c2/ca3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/listed02.at:31"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/listed02.at:31:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+echo Create directories
+
+mkdir tart
+sleep 1
+mkdir tart/c0
+sleep 1
+mkdir tart/c1
+sleep 1
+
+for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
+do
+  echo File \$file > \$file
+  sleep 1
+done
+
+sleep 1
+echo Creating main archive
+echo >&2 \"Creating main archive\"
+tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+
+# The above prints two lines to stderr announcing the new directories c0 and c1.
+# Ensure that they appear in this script's stderr in sorted order.
+sort err 1>&2; rm -f err
+
+sleep 1
+echo Modifying filesystem
+rm tart/a1
+
+mv tart/b1 tart/b2
+mv tart/c1 tart/c2
+touch tart/c2/ca3
+
+echo Directory contents
+find tart -print | sort 2>/dev/null
+
+sleep 1
+echo Creating incremental archive
+echo >&2 \"Creating incremental archive\"
+cp -p tart.incr1 tart.incr2
+tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
+
+sleep 1
+
+rm -rf tart/*
+echo Extracting main archive
+echo >&2 \"Extracting main archive\"
+tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
+echo Extracting incremental archive
+# This command should produce three messages about deletion
+# of the existing files, that may appear in any order. Piping
+# to sort makes sure we don't depend on any particular ordering.
+tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+
+echo Final files:
+find tart -print | sort 2>/dev/null
+)"
+echo listed02.at:31 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+echo Create directories
+
+mkdir tart
+sleep 1
+mkdir tart/c0
+sleep 1
+mkdir tart/c1
+sleep 1
+
+for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
+do
+  echo File $file > $file
+  sleep 1
+done
+
+sleep 1
+echo Creating main archive
+echo >&2 "Creating main archive"
+tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+
+# The above prints two lines to stderr announcing the new directories c0 and c1.
+# Ensure that they appear in this script's stderr in sorted order.
+sort err 1>&2; rm -f err
+
+sleep 1
+echo Modifying filesystem
+rm tart/a1
+
+mv tart/b1 tart/b2
+mv tart/c1 tart/c2
+touch tart/c2/ca3
+
+echo Directory contents
+find tart -print | sort 2>/dev/null
+
+sleep 1
+echo Creating incremental archive
+echo >&2 "Creating incremental archive"
+cp -p tart.incr1 tart.incr2
+tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
+
+sleep 1
+
+rm -rf tart/*
+echo Extracting main archive
+echo >&2 "Extracting main archive"
+tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
+echo Extracting incremental archive
+# This command should produce three messages about deletion
+# of the existing files, that may appear in any order. Piping
+# to sort makes sure we don't depend on any particular ordering.
+tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+
+echo Final files:
+find tart -print | sort 2>/dev/null
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+echo Create directories
+
+mkdir tart
+sleep 1
+mkdir tart/c0
+sleep 1
+mkdir tart/c1
+sleep 1
+
+for file in tart/a1 tart/b1 tart/c0/cq1 tart/c0/cq2 tart/c1/ca1 tart/c1/ca2
+do
+  echo File $file > $file
+  sleep 1
+done
+
+sleep 1
+echo Creating main archive
+echo >&2 "Creating main archive"
+tar -c -v --listed-incremental=tart.incr1 -f archive.1 tart 2> err || exit 1
+
+# The above prints two lines to stderr announcing the new directories c0 and c1.
+# Ensure that they appear in this script's stderr in sorted order.
+sort err 1>&2; rm -f err
+
+sleep 1
+echo Modifying filesystem
+rm tart/a1
+
+mv tart/b1 tart/b2
+mv tart/c1 tart/c2
+touch tart/c2/ca3
+
+echo Directory contents
+find tart -print | sort 2>/dev/null
+
+sleep 1
+echo Creating incremental archive
+echo >&2 "Creating incremental archive"
+cp -p tart.incr1 tart.incr2
+tar -c -v --listed-incremental=tart.incr2 -f archive.2 tart || exit 1
+
+sleep 1
+
+rm -rf tart/*
+echo Extracting main archive
+echo >&2 "Extracting main archive"
+tar -x -v --listed-incremental=tart.incr1 -f archive.1 || exit 1
+echo Extracting incremental archive
+# This command should produce three messages about deletion
+# of the existing files, that may appear in any order. Piping
+# to sort makes sure we don't depend on any particular ordering.
+tar -x -v --listed-incremental=tart.incr2 -f archive.2 | sort 2>/dev/null
+
+echo Final files:
+find tart -print | sort 2>/dev/null
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "Creating main archive
+tar: tart/c0: Directory is new
+tar: tart/c1: Directory is new
+tar: tart: Directory is new
+Creating incremental archive
+tar: tart/c2: Directory has been renamed from \`tart/c1'
+Extracting main archive
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Create directories
+Creating main archive
+tart/
+tart/c0/
+tart/c1/
+tart/a1
+tart/b1
+tart/c0/cq1
+tart/c0/cq2
+tart/c1/ca1
+tart/c1/ca2
+Modifying filesystem
+Directory contents
+tart
+tart/b2
+tart/c0
+tart/c0/cq1
+tart/c0/cq2
+tart/c2
+tart/c2/ca1
+tart/c2/ca2
+tart/c2/ca3
+Creating incremental archive
+tart/
+tart/c0/
+tart/c2/
+tart/b2
+tart/c2/ca3
+Extracting main archive
+tart/
+tart/c0/
+tart/c1/
+tart/a1
+tart/b1
+tart/c0/cq1
+tart/c0/cq2
+tart/c1/ca1
+tart/c1/ca2
+Extracting incremental archive
+tar: Deleting \`tart/a1'
+tar: Deleting \`tart/b1'
+tart/
+tart/b2
+tart/c0/
+tart/c2/
+tart/c2/ca3
+Final files:
+tart
+tart/b2
+tart/c0
+tart/c0/cq1
+tart/c0/cq2
+tart/c2
+tart/c2/ca1
+tart/c2/ca2
+tart/c2/ca3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/listed02.at:31"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_40
+#AT_START_41
+# 41. incr03.at:28: renamed files in incrementals
+at_setup_line='incr03.at:28'
+at_desc="renamed files in incrementals"
+$at_quiet $as_echo_n " 41: $at_desc                  "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "41. incr03.at:28: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/incr03.at:31:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --file=directory/x
+genfile --file=directory/y
+
+sleep 1
+
+tar -cf archive.1 -g db directory
+
+mv directory/x directory/z
+cp db db.old
+tar -cf archive.2 -g db directory
+
+mv directory orig
+
+echo Listing of archive.1
+tar -tf archive.1 | sort
+echo Listing of archive.2
+tar -tf archive.2 | sort
+
+echo Directory after first restore
+tar -xf archive.1 -g db
+find directory | sort
+
+echo Directory after second restore
+tar -xf archive.2 -g db
+find directory | sort
+)"
+echo incr03.at:31 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --file=directory/x
+genfile --file=directory/y
+
+sleep 1
+
+tar -cf archive.1 -g db directory
+
+mv directory/x directory/z
+cp db db.old
+tar -cf archive.2 -g db directory
+
+mv directory orig
+
+echo Listing of archive.1
+tar -tf archive.1 | sort
+echo Listing of archive.2
+tar -tf archive.2 | sort
+
+echo Directory after first restore
+tar -xf archive.1 -g db
+find directory | sort
+
+echo Directory after second restore
+tar -xf archive.2 -g db
+find directory | sort
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --file=directory/x
+genfile --file=directory/y
+
+sleep 1
+
+tar -cf archive.1 -g db directory
+
+mv directory/x directory/z
+cp db db.old
+tar -cf archive.2 -g db directory
+
+mv directory orig
+
+echo Listing of archive.1
+tar -tf archive.1 | sort
+echo Listing of archive.2
+tar -tf archive.2 | sort
+
+echo Directory after first restore
+tar -xf archive.1 -g db
+find directory | sort
+
+echo Directory after second restore
+tar -xf archive.2 -g db
+find directory | sort
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Listing of archive.1
+directory/
+directory/x
+directory/y
+Listing of archive.2
+directory/
+directory/z
+Directory after first restore
+directory
+directory/x
+directory/y
+Directory after second restore
+directory
+directory/y
+directory/z
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr03.at:31"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr03.at:31:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --file=directory/x
+genfile --file=directory/y
+
+sleep 1
+
+tar -cf archive.1 -g db directory
+
+mv directory/x directory/z
+cp db db.old
+tar -cf archive.2 -g db directory
+
+mv directory orig
+
+echo Listing of archive.1
+tar -tf archive.1 | sort
+echo Listing of archive.2
+tar -tf archive.2 | sort
+
+echo Directory after first restore
+tar -xf archive.1 -g db
+find directory | sort
+
+echo Directory after second restore
+tar -xf archive.2 -g db
+find directory | sort
+)"
+echo incr03.at:31 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --file=directory/x
+genfile --file=directory/y
+
+sleep 1
+
+tar -cf archive.1 -g db directory
+
+mv directory/x directory/z
+cp db db.old
+tar -cf archive.2 -g db directory
+
+mv directory orig
+
+echo Listing of archive.1
+tar -tf archive.1 | sort
+echo Listing of archive.2
+tar -tf archive.2 | sort
+
+echo Directory after first restore
+tar -xf archive.1 -g db
+find directory | sort
+
+echo Directory after second restore
+tar -xf archive.2 -g db
+find directory | sort
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --file=directory/x
+genfile --file=directory/y
+
+sleep 1
+
+tar -cf archive.1 -g db directory
+
+mv directory/x directory/z
+cp db db.old
+tar -cf archive.2 -g db directory
+
+mv directory orig
+
+echo Listing of archive.1
+tar -tf archive.1 | sort
+echo Listing of archive.2
+tar -tf archive.2 | sort
+
+echo Directory after first restore
+tar -xf archive.1 -g db
+find directory | sort
+
+echo Directory after second restore
+tar -xf archive.2 -g db
+find directory | sort
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Listing of archive.1
+directory/
+directory/x
+directory/y
+Listing of archive.2
+directory/
+directory/z
+Directory after first restore
+directory
+directory/x
+directory/y
+Directory after second restore
+directory
+directory/y
+directory/z
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr03.at:31"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr03.at:31:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --file=directory/x
+genfile --file=directory/y
+
+sleep 1
+
+tar -cf archive.1 -g db directory
+
+mv directory/x directory/z
+cp db db.old
+tar -cf archive.2 -g db directory
+
+mv directory orig
+
+echo Listing of archive.1
+tar -tf archive.1 | sort
+echo Listing of archive.2
+tar -tf archive.2 | sort
+
+echo Directory after first restore
+tar -xf archive.1 -g db
+find directory | sort
+
+echo Directory after second restore
+tar -xf archive.2 -g db
+find directory | sort
+)"
+echo incr03.at:31 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --file=directory/x
+genfile --file=directory/y
+
+sleep 1
+
+tar -cf archive.1 -g db directory
+
+mv directory/x directory/z
+cp db db.old
+tar -cf archive.2 -g db directory
+
+mv directory orig
+
+echo Listing of archive.1
+tar -tf archive.1 | sort
+echo Listing of archive.2
+tar -tf archive.2 | sort
+
+echo Directory after first restore
+tar -xf archive.1 -g db
+find directory | sort
+
+echo Directory after second restore
+tar -xf archive.2 -g db
+find directory | sort
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --file=directory/x
+genfile --file=directory/y
+
+sleep 1
+
+tar -cf archive.1 -g db directory
+
+mv directory/x directory/z
+cp db db.old
+tar -cf archive.2 -g db directory
+
+mv directory orig
+
+echo Listing of archive.1
+tar -tf archive.1 | sort
+echo Listing of archive.2
+tar -tf archive.2 | sort
+
+echo Directory after first restore
+tar -xf archive.1 -g db
+find directory | sort
+
+echo Directory after second restore
+tar -xf archive.2 -g db
+find directory | sort
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Listing of archive.1
+directory/
+directory/x
+directory/y
+Listing of archive.2
+directory/
+directory/z
+Directory after first restore
+directory
+directory/x
+directory/y
+Directory after second restore
+directory
+directory/y
+directory/z
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr03.at:31"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_41
+#AT_START_42
+# 42. incr04.at:29: proper icontents initialization
+at_setup_line='incr04.at:29'
+at_desc="proper icontents initialization"
+$at_quiet $as_echo_n " 42: $at_desc                "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "42. incr04.at:29: testing ..."
+  $at_traceon
+
+
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/incr04.at:34:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+install-sh -d a/b >/dev/null  || exit 77
+awk 'BEGIN {
+  for (i=1;i<=142;i++)
+    printf(\"a/b/one_31_chars_long_file_name_%03d\\n\", i);
+  }' < /dev/null | genfile --files-from -
+
+sleep 1
+
+echo \"Initial dump\"
+tar cvf a0.tar -g a.sna a
+mv a/b a/c
+echo \"Incremental dump\"
+tar cvf a1.tar -g a.sna a
+)"
+echo incr04.at:34 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+install-sh -d a/b >/dev/null  || exit 77
+awk 'BEGIN {
+  for (i=1;i<=142;i++)
+    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
+  }' < /dev/null | genfile --files-from -
+
+sleep 1
+
+echo "Initial dump"
+tar cvf a0.tar -g a.sna a
+mv a/b a/c
+echo "Incremental dump"
+tar cvf a1.tar -g a.sna a
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+install-sh -d a/b >/dev/null  || exit 77
+awk 'BEGIN {
+  for (i=1;i<=142;i++)
+    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
+  }' < /dev/null | genfile --files-from -
+
+sleep 1
+
+echo "Initial dump"
+tar cvf a0.tar -g a.sna a
+mv a/b a/c
+echo "Incremental dump"
+tar cvf a1.tar -g a.sna a
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: a: Directory is new
+tar: a/b: Directory is new
+tar: a/c: Directory has been renamed from \`a/b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Initial dump
+a/
+a/b/
+a/b/one_31_chars_long_file_name_001
+a/b/one_31_chars_long_file_name_002
+a/b/one_31_chars_long_file_name_003
+a/b/one_31_chars_long_file_name_004
+a/b/one_31_chars_long_file_name_005
+a/b/one_31_chars_long_file_name_006
+a/b/one_31_chars_long_file_name_007
+a/b/one_31_chars_long_file_name_008
+a/b/one_31_chars_long_file_name_009
+a/b/one_31_chars_long_file_name_010
+a/b/one_31_chars_long_file_name_011
+a/b/one_31_chars_long_file_name_012
+a/b/one_31_chars_long_file_name_013
+a/b/one_31_chars_long_file_name_014
+a/b/one_31_chars_long_file_name_015
+a/b/one_31_chars_long_file_name_016
+a/b/one_31_chars_long_file_name_017
+a/b/one_31_chars_long_file_name_018
+a/b/one_31_chars_long_file_name_019
+a/b/one_31_chars_long_file_name_020
+a/b/one_31_chars_long_file_name_021
+a/b/one_31_chars_long_file_name_022
+a/b/one_31_chars_long_file_name_023
+a/b/one_31_chars_long_file_name_024
+a/b/one_31_chars_long_file_name_025
+a/b/one_31_chars_long_file_name_026
+a/b/one_31_chars_long_file_name_027
+a/b/one_31_chars_long_file_name_028
+a/b/one_31_chars_long_file_name_029
+a/b/one_31_chars_long_file_name_030
+a/b/one_31_chars_long_file_name_031
+a/b/one_31_chars_long_file_name_032
+a/b/one_31_chars_long_file_name_033
+a/b/one_31_chars_long_file_name_034
+a/b/one_31_chars_long_file_name_035
+a/b/one_31_chars_long_file_name_036
+a/b/one_31_chars_long_file_name_037
+a/b/one_31_chars_long_file_name_038
+a/b/one_31_chars_long_file_name_039
+a/b/one_31_chars_long_file_name_040
+a/b/one_31_chars_long_file_name_041
+a/b/one_31_chars_long_file_name_042
+a/b/one_31_chars_long_file_name_043
+a/b/one_31_chars_long_file_name_044
+a/b/one_31_chars_long_file_name_045
+a/b/one_31_chars_long_file_name_046
+a/b/one_31_chars_long_file_name_047
+a/b/one_31_chars_long_file_name_048
+a/b/one_31_chars_long_file_name_049
+a/b/one_31_chars_long_file_name_050
+a/b/one_31_chars_long_file_name_051
+a/b/one_31_chars_long_file_name_052
+a/b/one_31_chars_long_file_name_053
+a/b/one_31_chars_long_file_name_054
+a/b/one_31_chars_long_file_name_055
+a/b/one_31_chars_long_file_name_056
+a/b/one_31_chars_long_file_name_057
+a/b/one_31_chars_long_file_name_058
+a/b/one_31_chars_long_file_name_059
+a/b/one_31_chars_long_file_name_060
+a/b/one_31_chars_long_file_name_061
+a/b/one_31_chars_long_file_name_062
+a/b/one_31_chars_long_file_name_063
+a/b/one_31_chars_long_file_name_064
+a/b/one_31_chars_long_file_name_065
+a/b/one_31_chars_long_file_name_066
+a/b/one_31_chars_long_file_name_067
+a/b/one_31_chars_long_file_name_068
+a/b/one_31_chars_long_file_name_069
+a/b/one_31_chars_long_file_name_070
+a/b/one_31_chars_long_file_name_071
+a/b/one_31_chars_long_file_name_072
+a/b/one_31_chars_long_file_name_073
+a/b/one_31_chars_long_file_name_074
+a/b/one_31_chars_long_file_name_075
+a/b/one_31_chars_long_file_name_076
+a/b/one_31_chars_long_file_name_077
+a/b/one_31_chars_long_file_name_078
+a/b/one_31_chars_long_file_name_079
+a/b/one_31_chars_long_file_name_080
+a/b/one_31_chars_long_file_name_081
+a/b/one_31_chars_long_file_name_082
+a/b/one_31_chars_long_file_name_083
+a/b/one_31_chars_long_file_name_084
+a/b/one_31_chars_long_file_name_085
+a/b/one_31_chars_long_file_name_086
+a/b/one_31_chars_long_file_name_087
+a/b/one_31_chars_long_file_name_088
+a/b/one_31_chars_long_file_name_089
+a/b/one_31_chars_long_file_name_090
+a/b/one_31_chars_long_file_name_091
+a/b/one_31_chars_long_file_name_092
+a/b/one_31_chars_long_file_name_093
+a/b/one_31_chars_long_file_name_094
+a/b/one_31_chars_long_file_name_095
+a/b/one_31_chars_long_file_name_096
+a/b/one_31_chars_long_file_name_097
+a/b/one_31_chars_long_file_name_098
+a/b/one_31_chars_long_file_name_099
+a/b/one_31_chars_long_file_name_100
+a/b/one_31_chars_long_file_name_101
+a/b/one_31_chars_long_file_name_102
+a/b/one_31_chars_long_file_name_103
+a/b/one_31_chars_long_file_name_104
+a/b/one_31_chars_long_file_name_105
+a/b/one_31_chars_long_file_name_106
+a/b/one_31_chars_long_file_name_107
+a/b/one_31_chars_long_file_name_108
+a/b/one_31_chars_long_file_name_109
+a/b/one_31_chars_long_file_name_110
+a/b/one_31_chars_long_file_name_111
+a/b/one_31_chars_long_file_name_112
+a/b/one_31_chars_long_file_name_113
+a/b/one_31_chars_long_file_name_114
+a/b/one_31_chars_long_file_name_115
+a/b/one_31_chars_long_file_name_116
+a/b/one_31_chars_long_file_name_117
+a/b/one_31_chars_long_file_name_118
+a/b/one_31_chars_long_file_name_119
+a/b/one_31_chars_long_file_name_120
+a/b/one_31_chars_long_file_name_121
+a/b/one_31_chars_long_file_name_122
+a/b/one_31_chars_long_file_name_123
+a/b/one_31_chars_long_file_name_124
+a/b/one_31_chars_long_file_name_125
+a/b/one_31_chars_long_file_name_126
+a/b/one_31_chars_long_file_name_127
+a/b/one_31_chars_long_file_name_128
+a/b/one_31_chars_long_file_name_129
+a/b/one_31_chars_long_file_name_130
+a/b/one_31_chars_long_file_name_131
+a/b/one_31_chars_long_file_name_132
+a/b/one_31_chars_long_file_name_133
+a/b/one_31_chars_long_file_name_134
+a/b/one_31_chars_long_file_name_135
+a/b/one_31_chars_long_file_name_136
+a/b/one_31_chars_long_file_name_137
+a/b/one_31_chars_long_file_name_138
+a/b/one_31_chars_long_file_name_139
+a/b/one_31_chars_long_file_name_140
+a/b/one_31_chars_long_file_name_141
+a/b/one_31_chars_long_file_name_142
+Incremental dump
+a/
+a/c/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr04.at:34"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr04.at:34:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+install-sh -d a/b >/dev/null  || exit 77
+awk 'BEGIN {
+  for (i=1;i<=142;i++)
+    printf(\"a/b/one_31_chars_long_file_name_%03d\\n\", i);
+  }' < /dev/null | genfile --files-from -
+
+sleep 1
+
+echo \"Initial dump\"
+tar cvf a0.tar -g a.sna a
+mv a/b a/c
+echo \"Incremental dump\"
+tar cvf a1.tar -g a.sna a
+)"
+echo incr04.at:34 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+install-sh -d a/b >/dev/null  || exit 77
+awk 'BEGIN {
+  for (i=1;i<=142;i++)
+    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
+  }' < /dev/null | genfile --files-from -
+
+sleep 1
+
+echo "Initial dump"
+tar cvf a0.tar -g a.sna a
+mv a/b a/c
+echo "Incremental dump"
+tar cvf a1.tar -g a.sna a
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+install-sh -d a/b >/dev/null  || exit 77
+awk 'BEGIN {
+  for (i=1;i<=142;i++)
+    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
+  }' < /dev/null | genfile --files-from -
+
+sleep 1
+
+echo "Initial dump"
+tar cvf a0.tar -g a.sna a
+mv a/b a/c
+echo "Incremental dump"
+tar cvf a1.tar -g a.sna a
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: a: Directory is new
+tar: a/b: Directory is new
+tar: a/c: Directory has been renamed from \`a/b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Initial dump
+a/
+a/b/
+a/b/one_31_chars_long_file_name_001
+a/b/one_31_chars_long_file_name_002
+a/b/one_31_chars_long_file_name_003
+a/b/one_31_chars_long_file_name_004
+a/b/one_31_chars_long_file_name_005
+a/b/one_31_chars_long_file_name_006
+a/b/one_31_chars_long_file_name_007
+a/b/one_31_chars_long_file_name_008
+a/b/one_31_chars_long_file_name_009
+a/b/one_31_chars_long_file_name_010
+a/b/one_31_chars_long_file_name_011
+a/b/one_31_chars_long_file_name_012
+a/b/one_31_chars_long_file_name_013
+a/b/one_31_chars_long_file_name_014
+a/b/one_31_chars_long_file_name_015
+a/b/one_31_chars_long_file_name_016
+a/b/one_31_chars_long_file_name_017
+a/b/one_31_chars_long_file_name_018
+a/b/one_31_chars_long_file_name_019
+a/b/one_31_chars_long_file_name_020
+a/b/one_31_chars_long_file_name_021
+a/b/one_31_chars_long_file_name_022
+a/b/one_31_chars_long_file_name_023
+a/b/one_31_chars_long_file_name_024
+a/b/one_31_chars_long_file_name_025
+a/b/one_31_chars_long_file_name_026
+a/b/one_31_chars_long_file_name_027
+a/b/one_31_chars_long_file_name_028
+a/b/one_31_chars_long_file_name_029
+a/b/one_31_chars_long_file_name_030
+a/b/one_31_chars_long_file_name_031
+a/b/one_31_chars_long_file_name_032
+a/b/one_31_chars_long_file_name_033
+a/b/one_31_chars_long_file_name_034
+a/b/one_31_chars_long_file_name_035
+a/b/one_31_chars_long_file_name_036
+a/b/one_31_chars_long_file_name_037
+a/b/one_31_chars_long_file_name_038
+a/b/one_31_chars_long_file_name_039
+a/b/one_31_chars_long_file_name_040
+a/b/one_31_chars_long_file_name_041
+a/b/one_31_chars_long_file_name_042
+a/b/one_31_chars_long_file_name_043
+a/b/one_31_chars_long_file_name_044
+a/b/one_31_chars_long_file_name_045
+a/b/one_31_chars_long_file_name_046
+a/b/one_31_chars_long_file_name_047
+a/b/one_31_chars_long_file_name_048
+a/b/one_31_chars_long_file_name_049
+a/b/one_31_chars_long_file_name_050
+a/b/one_31_chars_long_file_name_051
+a/b/one_31_chars_long_file_name_052
+a/b/one_31_chars_long_file_name_053
+a/b/one_31_chars_long_file_name_054
+a/b/one_31_chars_long_file_name_055
+a/b/one_31_chars_long_file_name_056
+a/b/one_31_chars_long_file_name_057
+a/b/one_31_chars_long_file_name_058
+a/b/one_31_chars_long_file_name_059
+a/b/one_31_chars_long_file_name_060
+a/b/one_31_chars_long_file_name_061
+a/b/one_31_chars_long_file_name_062
+a/b/one_31_chars_long_file_name_063
+a/b/one_31_chars_long_file_name_064
+a/b/one_31_chars_long_file_name_065
+a/b/one_31_chars_long_file_name_066
+a/b/one_31_chars_long_file_name_067
+a/b/one_31_chars_long_file_name_068
+a/b/one_31_chars_long_file_name_069
+a/b/one_31_chars_long_file_name_070
+a/b/one_31_chars_long_file_name_071
+a/b/one_31_chars_long_file_name_072
+a/b/one_31_chars_long_file_name_073
+a/b/one_31_chars_long_file_name_074
+a/b/one_31_chars_long_file_name_075
+a/b/one_31_chars_long_file_name_076
+a/b/one_31_chars_long_file_name_077
+a/b/one_31_chars_long_file_name_078
+a/b/one_31_chars_long_file_name_079
+a/b/one_31_chars_long_file_name_080
+a/b/one_31_chars_long_file_name_081
+a/b/one_31_chars_long_file_name_082
+a/b/one_31_chars_long_file_name_083
+a/b/one_31_chars_long_file_name_084
+a/b/one_31_chars_long_file_name_085
+a/b/one_31_chars_long_file_name_086
+a/b/one_31_chars_long_file_name_087
+a/b/one_31_chars_long_file_name_088
+a/b/one_31_chars_long_file_name_089
+a/b/one_31_chars_long_file_name_090
+a/b/one_31_chars_long_file_name_091
+a/b/one_31_chars_long_file_name_092
+a/b/one_31_chars_long_file_name_093
+a/b/one_31_chars_long_file_name_094
+a/b/one_31_chars_long_file_name_095
+a/b/one_31_chars_long_file_name_096
+a/b/one_31_chars_long_file_name_097
+a/b/one_31_chars_long_file_name_098
+a/b/one_31_chars_long_file_name_099
+a/b/one_31_chars_long_file_name_100
+a/b/one_31_chars_long_file_name_101
+a/b/one_31_chars_long_file_name_102
+a/b/one_31_chars_long_file_name_103
+a/b/one_31_chars_long_file_name_104
+a/b/one_31_chars_long_file_name_105
+a/b/one_31_chars_long_file_name_106
+a/b/one_31_chars_long_file_name_107
+a/b/one_31_chars_long_file_name_108
+a/b/one_31_chars_long_file_name_109
+a/b/one_31_chars_long_file_name_110
+a/b/one_31_chars_long_file_name_111
+a/b/one_31_chars_long_file_name_112
+a/b/one_31_chars_long_file_name_113
+a/b/one_31_chars_long_file_name_114
+a/b/one_31_chars_long_file_name_115
+a/b/one_31_chars_long_file_name_116
+a/b/one_31_chars_long_file_name_117
+a/b/one_31_chars_long_file_name_118
+a/b/one_31_chars_long_file_name_119
+a/b/one_31_chars_long_file_name_120
+a/b/one_31_chars_long_file_name_121
+a/b/one_31_chars_long_file_name_122
+a/b/one_31_chars_long_file_name_123
+a/b/one_31_chars_long_file_name_124
+a/b/one_31_chars_long_file_name_125
+a/b/one_31_chars_long_file_name_126
+a/b/one_31_chars_long_file_name_127
+a/b/one_31_chars_long_file_name_128
+a/b/one_31_chars_long_file_name_129
+a/b/one_31_chars_long_file_name_130
+a/b/one_31_chars_long_file_name_131
+a/b/one_31_chars_long_file_name_132
+a/b/one_31_chars_long_file_name_133
+a/b/one_31_chars_long_file_name_134
+a/b/one_31_chars_long_file_name_135
+a/b/one_31_chars_long_file_name_136
+a/b/one_31_chars_long_file_name_137
+a/b/one_31_chars_long_file_name_138
+a/b/one_31_chars_long_file_name_139
+a/b/one_31_chars_long_file_name_140
+a/b/one_31_chars_long_file_name_141
+a/b/one_31_chars_long_file_name_142
+Incremental dump
+a/
+a/c/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr04.at:34"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr04.at:34:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+
+install-sh -d a/b >/dev/null  || exit 77
+awk 'BEGIN {
+  for (i=1;i<=142;i++)
+    printf(\"a/b/one_31_chars_long_file_name_%03d\\n\", i);
+  }' < /dev/null | genfile --files-from -
+
+sleep 1
+
+echo \"Initial dump\"
+tar cvf a0.tar -g a.sna a
+mv a/b a/c
+echo \"Incremental dump\"
+tar cvf a1.tar -g a.sna a
+)"
+echo incr04.at:34 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+
+install-sh -d a/b >/dev/null  || exit 77
+awk 'BEGIN {
+  for (i=1;i<=142;i++)
+    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
+  }' < /dev/null | genfile --files-from -
+
+sleep 1
+
+echo "Initial dump"
+tar cvf a0.tar -g a.sna a
+mv a/b a/c
+echo "Incremental dump"
+tar cvf a1.tar -g a.sna a
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+
+install-sh -d a/b >/dev/null  || exit 77
+awk 'BEGIN {
+  for (i=1;i<=142;i++)
+    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
+  }' < /dev/null | genfile --files-from -
+
+sleep 1
+
+echo "Initial dump"
+tar cvf a0.tar -g a.sna a
+mv a/b a/c
+echo "Incremental dump"
+tar cvf a1.tar -g a.sna a
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: a: Directory is new
+tar: a/b: Directory is new
+tar: a/c: Directory has been renamed from \`a/b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Initial dump
+a/
+a/b/
+a/b/one_31_chars_long_file_name_001
+a/b/one_31_chars_long_file_name_002
+a/b/one_31_chars_long_file_name_003
+a/b/one_31_chars_long_file_name_004
+a/b/one_31_chars_long_file_name_005
+a/b/one_31_chars_long_file_name_006
+a/b/one_31_chars_long_file_name_007
+a/b/one_31_chars_long_file_name_008
+a/b/one_31_chars_long_file_name_009
+a/b/one_31_chars_long_file_name_010
+a/b/one_31_chars_long_file_name_011
+a/b/one_31_chars_long_file_name_012
+a/b/one_31_chars_long_file_name_013
+a/b/one_31_chars_long_file_name_014
+a/b/one_31_chars_long_file_name_015
+a/b/one_31_chars_long_file_name_016
+a/b/one_31_chars_long_file_name_017
+a/b/one_31_chars_long_file_name_018
+a/b/one_31_chars_long_file_name_019
+a/b/one_31_chars_long_file_name_020
+a/b/one_31_chars_long_file_name_021
+a/b/one_31_chars_long_file_name_022
+a/b/one_31_chars_long_file_name_023
+a/b/one_31_chars_long_file_name_024
+a/b/one_31_chars_long_file_name_025
+a/b/one_31_chars_long_file_name_026
+a/b/one_31_chars_long_file_name_027
+a/b/one_31_chars_long_file_name_028
+a/b/one_31_chars_long_file_name_029
+a/b/one_31_chars_long_file_name_030
+a/b/one_31_chars_long_file_name_031
+a/b/one_31_chars_long_file_name_032
+a/b/one_31_chars_long_file_name_033
+a/b/one_31_chars_long_file_name_034
+a/b/one_31_chars_long_file_name_035
+a/b/one_31_chars_long_file_name_036
+a/b/one_31_chars_long_file_name_037
+a/b/one_31_chars_long_file_name_038
+a/b/one_31_chars_long_file_name_039
+a/b/one_31_chars_long_file_name_040
+a/b/one_31_chars_long_file_name_041
+a/b/one_31_chars_long_file_name_042
+a/b/one_31_chars_long_file_name_043
+a/b/one_31_chars_long_file_name_044
+a/b/one_31_chars_long_file_name_045
+a/b/one_31_chars_long_file_name_046
+a/b/one_31_chars_long_file_name_047
+a/b/one_31_chars_long_file_name_048
+a/b/one_31_chars_long_file_name_049
+a/b/one_31_chars_long_file_name_050
+a/b/one_31_chars_long_file_name_051
+a/b/one_31_chars_long_file_name_052
+a/b/one_31_chars_long_file_name_053
+a/b/one_31_chars_long_file_name_054
+a/b/one_31_chars_long_file_name_055
+a/b/one_31_chars_long_file_name_056
+a/b/one_31_chars_long_file_name_057
+a/b/one_31_chars_long_file_name_058
+a/b/one_31_chars_long_file_name_059
+a/b/one_31_chars_long_file_name_060
+a/b/one_31_chars_long_file_name_061
+a/b/one_31_chars_long_file_name_062
+a/b/one_31_chars_long_file_name_063
+a/b/one_31_chars_long_file_name_064
+a/b/one_31_chars_long_file_name_065
+a/b/one_31_chars_long_file_name_066
+a/b/one_31_chars_long_file_name_067
+a/b/one_31_chars_long_file_name_068
+a/b/one_31_chars_long_file_name_069
+a/b/one_31_chars_long_file_name_070
+a/b/one_31_chars_long_file_name_071
+a/b/one_31_chars_long_file_name_072
+a/b/one_31_chars_long_file_name_073
+a/b/one_31_chars_long_file_name_074
+a/b/one_31_chars_long_file_name_075
+a/b/one_31_chars_long_file_name_076
+a/b/one_31_chars_long_file_name_077
+a/b/one_31_chars_long_file_name_078
+a/b/one_31_chars_long_file_name_079
+a/b/one_31_chars_long_file_name_080
+a/b/one_31_chars_long_file_name_081
+a/b/one_31_chars_long_file_name_082
+a/b/one_31_chars_long_file_name_083
+a/b/one_31_chars_long_file_name_084
+a/b/one_31_chars_long_file_name_085
+a/b/one_31_chars_long_file_name_086
+a/b/one_31_chars_long_file_name_087
+a/b/one_31_chars_long_file_name_088
+a/b/one_31_chars_long_file_name_089
+a/b/one_31_chars_long_file_name_090
+a/b/one_31_chars_long_file_name_091
+a/b/one_31_chars_long_file_name_092
+a/b/one_31_chars_long_file_name_093
+a/b/one_31_chars_long_file_name_094
+a/b/one_31_chars_long_file_name_095
+a/b/one_31_chars_long_file_name_096
+a/b/one_31_chars_long_file_name_097
+a/b/one_31_chars_long_file_name_098
+a/b/one_31_chars_long_file_name_099
+a/b/one_31_chars_long_file_name_100
+a/b/one_31_chars_long_file_name_101
+a/b/one_31_chars_long_file_name_102
+a/b/one_31_chars_long_file_name_103
+a/b/one_31_chars_long_file_name_104
+a/b/one_31_chars_long_file_name_105
+a/b/one_31_chars_long_file_name_106
+a/b/one_31_chars_long_file_name_107
+a/b/one_31_chars_long_file_name_108
+a/b/one_31_chars_long_file_name_109
+a/b/one_31_chars_long_file_name_110
+a/b/one_31_chars_long_file_name_111
+a/b/one_31_chars_long_file_name_112
+a/b/one_31_chars_long_file_name_113
+a/b/one_31_chars_long_file_name_114
+a/b/one_31_chars_long_file_name_115
+a/b/one_31_chars_long_file_name_116
+a/b/one_31_chars_long_file_name_117
+a/b/one_31_chars_long_file_name_118
+a/b/one_31_chars_long_file_name_119
+a/b/one_31_chars_long_file_name_120
+a/b/one_31_chars_long_file_name_121
+a/b/one_31_chars_long_file_name_122
+a/b/one_31_chars_long_file_name_123
+a/b/one_31_chars_long_file_name_124
+a/b/one_31_chars_long_file_name_125
+a/b/one_31_chars_long_file_name_126
+a/b/one_31_chars_long_file_name_127
+a/b/one_31_chars_long_file_name_128
+a/b/one_31_chars_long_file_name_129
+a/b/one_31_chars_long_file_name_130
+a/b/one_31_chars_long_file_name_131
+a/b/one_31_chars_long_file_name_132
+a/b/one_31_chars_long_file_name_133
+a/b/one_31_chars_long_file_name_134
+a/b/one_31_chars_long_file_name_135
+a/b/one_31_chars_long_file_name_136
+a/b/one_31_chars_long_file_name_137
+a/b/one_31_chars_long_file_name_138
+a/b/one_31_chars_long_file_name_139
+a/b/one_31_chars_long_file_name_140
+a/b/one_31_chars_long_file_name_141
+a/b/one_31_chars_long_file_name_142
+Incremental dump
+a/
+a/c/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr04.at:34"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_42
+#AT_START_43
+# 43. incr05.at:19: incremental dumps with -C
+at_setup_line='incr05.at:19'
+at_desc="incremental dumps with -C"
+$at_quiet $as_echo_n " 43: $at_desc                      "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "43. incr05.at:19: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/incr05.at:22:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+echo Level 0
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+
+genfile --file dir/file3
+echo Level 1
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+)"
+echo incr05.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+echo Level 0
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+
+genfile --file dir/file3
+echo Level 1
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+echo Level 0
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+
+genfile --file dir/file3
+echo Level 1
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Level 0
+./
+./sub/
+./file1
+./sub/file2
+Level 1
+./
+./sub/
+./file3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr05.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr05.at:22:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+echo Level 0
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+
+genfile --file dir/file3
+echo Level 1
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+)"
+echo incr05.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+echo Level 0
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+
+genfile --file dir/file3
+echo Level 1
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+echo Level 0
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+
+genfile --file dir/file3
+echo Level 1
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Level 0
+./
+./sub/
+./file1
+./sub/file2
+Level 1
+./
+./sub/
+./file3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr05.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr05.at:22:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+echo Level 0
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+
+genfile --file dir/file3
+echo Level 1
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+)"
+echo incr05.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+echo Level 0
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+
+genfile --file dir/file3
+echo Level 1
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+echo Level 0
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+
+genfile --file dir/file3
+echo Level 1
+tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir .
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Level 0
+./
+./sub/
+./file1
+./sub/file2
+Level 1
+./
+./sub/
+./file3
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr05.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_43
+#AT_START_44
+# 44. incr06.at:19: incremental dumps of nested directories
+at_setup_line='incr06.at:19'
+at_desc="incremental dumps of nested directories"
+$at_quiet $as_echo_n " 44: $at_desc        "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "44. incr06.at:19: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/incr06.at:22:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+mkdir dir/sub/a
+mkdir dir/sub/b
+genfile --file dir/file1
+genfile --file dir/sub/file2
+genfile --file dir/sub/a/file3
+
+echo Level 0 . sub
+tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 0 sub .
+tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+
+mkdir dir/c
+genfile --file dir/sub/b/file4
+
+echo Level 1 . sub
+tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 1 sub .
+tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+)"
+echo incr06.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+mkdir dir/sub/a
+mkdir dir/sub/b
+genfile --file dir/file1
+genfile --file dir/sub/file2
+genfile --file dir/sub/a/file3
+
+echo Level 0 . sub
+tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 0 sub .
+tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+
+mkdir dir/c
+genfile --file dir/sub/b/file4
+
+echo Level 1 . sub
+tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 1 sub .
+tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+mkdir dir/sub/a
+mkdir dir/sub/b
+genfile --file dir/file1
+genfile --file dir/sub/file2
+genfile --file dir/sub/a/file3
+
+echo Level 0 . sub
+tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 0 sub .
+tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+
+mkdir dir/c
+genfile --file dir/sub/b/file4
+
+echo Level 1 . sub
+tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 1 sub .
+tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Level 0 . sub
+./
+sub/
+sub/a/
+sub/b/
+./file1
+sub/file2
+sub/a/file3
+Level 0 sub .
+./
+sub/
+sub/a/
+sub/b/
+./file1
+sub/file2
+sub/a/file3
+Level 1 . sub
+./
+./c/
+sub/
+sub/a/
+sub/b/
+sub/b/file4
+Level 1 sub .
+./
+./c/
+sub/
+sub/a/
+sub/b/
+sub/b/file4
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr06.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr06.at:22:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+mkdir dir/sub/a
+mkdir dir/sub/b
+genfile --file dir/file1
+genfile --file dir/sub/file2
+genfile --file dir/sub/a/file3
+
+echo Level 0 . sub
+tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 0 sub .
+tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+
+mkdir dir/c
+genfile --file dir/sub/b/file4
+
+echo Level 1 . sub
+tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 1 sub .
+tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+)"
+echo incr06.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+mkdir dir/sub/a
+mkdir dir/sub/b
+genfile --file dir/file1
+genfile --file dir/sub/file2
+genfile --file dir/sub/a/file3
+
+echo Level 0 . sub
+tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 0 sub .
+tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+
+mkdir dir/c
+genfile --file dir/sub/b/file4
+
+echo Level 1 . sub
+tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 1 sub .
+tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+mkdir dir/sub/a
+mkdir dir/sub/b
+genfile --file dir/file1
+genfile --file dir/sub/file2
+genfile --file dir/sub/a/file3
+
+echo Level 0 . sub
+tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 0 sub .
+tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+
+mkdir dir/c
+genfile --file dir/sub/b/file4
+
+echo Level 1 . sub
+tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 1 sub .
+tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Level 0 . sub
+./
+sub/
+sub/a/
+sub/b/
+./file1
+sub/file2
+sub/a/file3
+Level 0 sub .
+./
+sub/
+sub/a/
+sub/b/
+./file1
+sub/file2
+sub/a/file3
+Level 1 . sub
+./
+./c/
+sub/
+sub/a/
+sub/b/
+sub/b/file4
+Level 1 sub .
+./
+./c/
+sub/
+sub/a/
+sub/b/
+sub/b/file4
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr06.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/incr06.at:22:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+mkdir dir/sub/a
+mkdir dir/sub/b
+genfile --file dir/file1
+genfile --file dir/sub/file2
+genfile --file dir/sub/a/file3
+
+echo Level 0 . sub
+tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 0 sub .
+tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+
+mkdir dir/c
+genfile --file dir/sub/b/file4
+
+echo Level 1 . sub
+tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 1 sub .
+tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+)"
+echo incr06.at:22 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+mkdir dir/sub/a
+mkdir dir/sub/b
+genfile --file dir/file1
+genfile --file dir/sub/file2
+genfile --file dir/sub/a/file3
+
+echo Level 0 . sub
+tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 0 sub .
+tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+
+mkdir dir/c
+genfile --file dir/sub/b/file4
+
+echo Level 1 . sub
+tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 1 sub .
+tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+mkdir dir/sub/a
+mkdir dir/sub/b
+genfile --file dir/file1
+genfile --file dir/sub/file2
+genfile --file dir/sub/a/file3
+
+echo Level 0 . sub
+tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 0 sub .
+tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+
+mkdir dir/c
+genfile --file dir/sub/b/file4
+
+echo Level 1 . sub
+tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub
+echo Level 1 sub .
+tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub .
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Level 0 . sub
+./
+sub/
+sub/a/
+sub/b/
+./file1
+sub/file2
+sub/a/file3
+Level 0 sub .
+./
+sub/
+sub/a/
+sub/b/
+./file1
+sub/file2
+sub/a/file3
+Level 1 . sub
+./
+./c/
+sub/
+sub/a/
+sub/b/
+sub/b/file4
+Level 1 sub .
+./
+./c/
+sub/
+sub/a/
+sub/b/
+sub/b/file4
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/incr06.at:22"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_44
+#AT_START_45
+# 45. filerem01.at:34: file removed as we read it (ca. 22 seconds)
+at_setup_line='filerem01.at:34'
+at_desc="file removed as we read it (ca. 22 seconds)"
+$at_quiet $as_echo_n " 45: $at_desc    "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "45. filerem01.at:34: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/filerem01.at:37:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+genfile --run --checkpoint=3 --unlink dir/file1 -- \\
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \\
+       --checkpoint-action='echo' -c -f archive.tar \\
+       --listed-incremental db -v dir >/dev/null
+)"
+echo filerem01.at:37 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+genfile --run --checkpoint=3 --unlink dir/file1 -- \
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+       --checkpoint-action='echo' -c -f archive.tar \
+       --listed-incremental db -v dir >/dev/null
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+genfile --run --checkpoint=3 --unlink dir/file1 -- \
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+       --checkpoint-action='echo' -c -f archive.tar \
+       --listed-incremental db -v dir >/dev/null
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: dir: Directory is new
+tar: dir/sub: Directory is new
+tar: dir/file1: File removed before we read it
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_func_check_status 1 $at_status "$at_srcdir/filerem01.at:37"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/filerem01.at:37:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+genfile --run --checkpoint=3 --unlink dir/file1 -- \\
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \\
+       --checkpoint-action='echo' -c -f archive.tar \\
+       --listed-incremental db -v dir >/dev/null
+)"
+echo filerem01.at:37 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+genfile --run --checkpoint=3 --unlink dir/file1 -- \
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+       --checkpoint-action='echo' -c -f archive.tar \
+       --listed-incremental db -v dir >/dev/null
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+
+genfile --run --checkpoint=3 --unlink dir/file1 -- \
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+       --checkpoint-action='echo' -c -f archive.tar \
+       --listed-incremental db -v dir >/dev/null
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: dir: Directory is new
+tar: dir/sub: Directory is new
+tar: dir/file1: File removed before we read it
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_func_check_status 1 $at_status "$at_srcdir/filerem01.at:37"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+# Timing information:
+#
+# For -Hgnu the above command line takes about 8 seconds to execute and
+# produces:
+#
+# tar: dir: Directory is new
+# tar: dir/sub: Directory is new
+# dir/
+# tar: Write checkpoint 1
+# tar: Write checkpoint 2
+# dir/sub/
+# tar: Write checkpoint 3
+# tar: Write checkpoint 4
+# dir/file1
+# tar: Write checkpoint 5
+# dir/sub/file2
+# tar: Write checkpoint 6
+# tar: Write checkpoint 7
+# tar: Write checkpoint 8
+#
+# For -Hposix the above command line takes about 14 seconds to execute and
+# produces:
+#
+# ./tar: dir: Directory is new
+# ./tar: dir/sub: Directory is new
+# dir/
+# ./tar: Write checkpoint 1
+# ./tar: Write checkpoint 2
+# ./tar: Write checkpoint 3
+# dir/sub/
+# ./tar: Write checkpoint 4
+# ./tar: Write checkpoint 5
+# ./tar: Write checkpoint 6
+# dir/file1
+# ./tar: Write checkpoint 7
+# ./tar: Write checkpoint 8
+# ./tar: Write checkpoint 9
+# dir/sub/file2
+# ./tar: Write checkpoint 10
+# ./tar: Write checkpoint 11
+# ./tar: Write checkpoint 12
+# ./tar: Write checkpoint 13
+# ./tar: Write checkpoint 14
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_45
+#AT_START_46
+# 46. filerem02.at:24: toplevel file removed (ca. 24 seconds)
+at_setup_line='filerem02.at:24'
+at_desc="toplevel file removed (ca. 24 seconds)"
+$at_quiet $as_echo_n " 46: $at_desc         "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "46. filerem02.at:24: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/filerem02.at:27:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+mkdir dir2
+genfile --file dir2/file1
+
+genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \\
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \\
+       --checkpoint-action='echo' -c -f archive.tar \\
+       --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null
+)"
+echo filerem02.at:27 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+mkdir dir2
+genfile --file dir2/file1
+
+genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+       --checkpoint-action='echo' -c -f archive.tar \
+       --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+mkdir dir2
+genfile --file dir2/file1
+
+genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+       --checkpoint-action='echo' -c -f archive.tar \
+       --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: dir2: Cannot stat: No such file or directory
+tar: dir2/file1: File removed before we read it
+tar: Exiting with failure status due to previous errors
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_func_check_status 2 $at_status "$at_srcdir/filerem02.at:27"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/filerem02.at:27:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+mkdir dir2
+genfile --file dir2/file1
+
+genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \\
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \\
+       --checkpoint-action='echo' -c -f archive.tar \\
+       --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null
+)"
+echo filerem02.at:27 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+mkdir dir2
+genfile --file dir2/file1
+
+genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+       --checkpoint-action='echo' -c -f archive.tar \
+       --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir dir
+mkdir dir/sub
+genfile --file dir/file1
+genfile --file dir/sub/file2
+mkdir dir2
+genfile --file dir2/file1
+
+genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \
+       tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+       --checkpoint-action='echo' -c -f archive.tar \
+       --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: dir2: Cannot stat: No such file or directory
+tar: dir2/file1: File removed before we read it
+tar: Exiting with failure status due to previous errors
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo stdout:; cat "$at_stdout"
+at_func_check_status 2 $at_status "$at_srcdir/filerem02.at:27"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+# Timing information: see filerem01.at
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_46
+#AT_START_47
+# 47. rename01.at:24: renamed dirs in incrementals
+at_setup_line='rename01.at:24'
+at_desc="renamed dirs in incrementals"
+$at_quiet $as_echo_n " 47: $at_desc                   "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "47. rename01.at:24: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/rename01.at:27:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file
+
+echo \"Creating base archive\"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar foo/baz
+
+echo \"Creating incremental archive\"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null
+
+echo \"Begin directory listing 1\"
+find foo | sort
+echo \"End directory listing 1\"
+
+tar xfg arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+)"
+echo rename01.at:27 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar foo/baz
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
+
+tar xfg arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar foo/baz
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
+
+tar xfg arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: foo: Directory is new
+tar: foo/bar: Directory is new
+tar: foo/baz: Directory has been renamed from \`foo/bar'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating base archive
+foo/
+foo/bar/
+foo/file1
+foo/file2
+foo/bar/file
+Creating incremental archive
+foo/
+foo/baz/
+Begin directory listing 1
+foo
+foo/bar
+foo/bar/file
+foo/file1
+foo/file2
+End directory listing 1
+Begin directory listing 2
+foo
+foo/baz
+foo/baz/file
+foo/file1
+foo/file2
+End directory listing 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename01.at:27"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/rename01.at:27:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file
+
+echo \"Creating base archive\"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar foo/baz
+
+echo \"Creating incremental archive\"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null
+
+echo \"Begin directory listing 1\"
+find foo | sort
+echo \"End directory listing 1\"
+
+tar xfg arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+)"
+echo rename01.at:27 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar foo/baz
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
+
+tar xfg arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar foo/baz
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
+
+tar xfg arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: foo: Directory is new
+tar: foo/bar: Directory is new
+tar: foo/baz: Directory has been renamed from \`foo/bar'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating base archive
+foo/
+foo/bar/
+foo/file1
+foo/file2
+foo/bar/file
+Creating incremental archive
+foo/
+foo/baz/
+Begin directory listing 1
+foo
+foo/bar
+foo/bar/file
+foo/file1
+foo/file2
+End directory listing 1
+Begin directory listing 2
+foo
+foo/baz
+foo/baz/file
+foo/file1
+foo/file2
+End directory listing 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename01.at:27"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/rename01.at:27:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file
+
+echo \"Creating base archive\"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar foo/baz
+
+echo \"Creating incremental archive\"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null
+
+echo \"Begin directory listing 1\"
+find foo | sort
+echo \"End directory listing 1\"
+
+tar xfg arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+)"
+echo rename01.at:27 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar foo/baz
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
+
+tar xfg arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar foo/baz
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
+
+tar xfg arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: foo: Directory is new
+tar: foo/bar: Directory is new
+tar: foo/baz: Directory has been renamed from \`foo/bar'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating base archive
+foo/
+foo/bar/
+foo/file1
+foo/file2
+foo/bar/file
+Creating incremental archive
+foo/
+foo/baz/
+Begin directory listing 1
+foo
+foo/bar
+foo/bar/file
+foo/file1
+foo/file2
+End directory listing 1
+Begin directory listing 2
+foo
+foo/baz
+foo/baz/file
+foo/file1
+foo/file2
+End directory listing 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename01.at:27"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_47
+#AT_START_48
+# 48. rename02.at:24: move between hierarchies
+at_setup_line='rename02.at:24'
+at_desc="move between hierarchies"
+$at_quiet $as_echo_n " 48: $at_desc                       "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "48. rename02.at:24: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/rename02.at:27:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file.r
+mkdir foo/bar/baz
+genfile --file foo/bar/baz/file.z
+
+sleep 1
+
+echo \"Creating base archive\"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar/baz foo
+
+echo \"Creating incremental archive\"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null 2>tmperr
+sort tmperr >&2
+
+echo \"Begin directory listing 1\"
+find foo | sort
+echo \"End directory listing 1\"
+
+tar xfgv arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+)"
+echo rename02.at:27 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file.r
+mkdir foo/bar/baz
+genfile --file foo/bar/baz/file.z
+
+sleep 1
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar/baz foo
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null 2>tmperr
+sort tmperr >&2
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
+
+tar xfgv arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file.r
+mkdir foo/bar/baz
+genfile --file foo/bar/baz/file.z
+
+sleep 1
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar/baz foo
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null 2>tmperr
+sort tmperr >&2
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
+
+tar xfgv arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: foo: Directory is new
+tar: foo/bar: Directory is new
+tar: foo/bar/baz: Directory is new
+tar: foo/baz: Directory has been renamed from \`foo/bar/baz'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating base archive
+foo/
+foo/bar/
+foo/bar/baz/
+foo/file1
+foo/file2
+foo/bar/file.r
+foo/bar/baz/file.z
+Creating incremental archive
+foo/
+foo/bar/
+foo/baz/
+Begin directory listing 1
+foo
+foo/bar
+foo/bar/baz
+foo/bar/baz/file.z
+foo/bar/file.r
+foo/file1
+foo/file2
+End directory listing 1
+foo/
+foo/bar/
+foo/baz/
+Begin directory listing 2
+foo
+foo/bar
+foo/bar/file.r
+foo/baz
+foo/baz/file.z
+foo/file1
+foo/file2
+End directory listing 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename02.at:27"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/rename02.at:27:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file.r
+mkdir foo/bar/baz
+genfile --file foo/bar/baz/file.z
+
+sleep 1
+
+echo \"Creating base archive\"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar/baz foo
+
+echo \"Creating incremental archive\"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null 2>tmperr
+sort tmperr >&2
+
+echo \"Begin directory listing 1\"
+find foo | sort
+echo \"End directory listing 1\"
+
+tar xfgv arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+)"
+echo rename02.at:27 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file.r
+mkdir foo/bar/baz
+genfile --file foo/bar/baz/file.z
+
+sleep 1
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar/baz foo
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null 2>tmperr
+sort tmperr >&2
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
+
+tar xfgv arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file.r
+mkdir foo/bar/baz
+genfile --file foo/bar/baz/file.z
+
+sleep 1
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar/baz foo
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null 2>tmperr
+sort tmperr >&2
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
+
+tar xfgv arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: foo: Directory is new
+tar: foo/bar: Directory is new
+tar: foo/bar/baz: Directory is new
+tar: foo/baz: Directory has been renamed from \`foo/bar/baz'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating base archive
+foo/
+foo/bar/
+foo/bar/baz/
+foo/file1
+foo/file2
+foo/bar/file.r
+foo/bar/baz/file.z
+Creating incremental archive
+foo/
+foo/bar/
+foo/baz/
+Begin directory listing 1
+foo
+foo/bar
+foo/bar/baz
+foo/bar/baz/file.z
+foo/bar/file.r
+foo/file1
+foo/file2
+End directory listing 1
+foo/
+foo/bar/
+foo/baz/
+Begin directory listing 2
+foo
+foo/bar
+foo/bar/file.r
+foo/baz
+foo/baz/file.z
+foo/file1
+foo/file2
+End directory listing 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename02.at:27"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/rename02.at:27:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file.r
+mkdir foo/bar/baz
+genfile --file foo/bar/baz/file.z
+
+sleep 1
+
+echo \"Creating base archive\"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar/baz foo
+
+echo \"Creating incremental archive\"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
+
+tar xfg arch.1 /dev/null 2>tmperr
+sort tmperr >&2
+
+echo \"Begin directory listing 1\"
+find foo | sort
+echo \"End directory listing 1\"
+
+tar xfgv arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+)"
+echo rename02.at:27 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file.r
+mkdir foo/bar/baz
+genfile --file foo/bar/baz/file.z
+
+sleep 1
+
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
+
+mv foo/bar/baz foo
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
+
+mv foo old
 
-install-sh -d a/b >/dev/null  || exit 77
-awk 'BEGIN {
-  for (i=1;i<=142;i++)
-    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
-  }' < /dev/null | genfile --files-from -
+tar xfg arch.1 /dev/null 2>tmperr
+sort tmperr >&2
 
-sleep 1
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
 
-echo "Initial dump"
-tar cvf a0.tar -g a.sna a
-mv a/b a/c
-echo "Incremental dump"
-tar cvf a1.tar -g a.sna a
+tar xfgv arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -14224,217 +21304,115 @@ export TAR_OPTIONS
 rm -rf *
 
 
-install-sh -d a/b >/dev/null  || exit 77
-awk 'BEGIN {
-  for (i=1;i<=142;i++)
-    printf("a/b/one_31_chars_long_file_name_%03d\n", i);
-  }' < /dev/null | genfile --files-from -
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir foo
+genfile --file foo/file1
+genfile --file foo/file2
+mkdir foo/bar
+genfile --file foo/bar/file.r
+mkdir foo/bar/baz
+genfile --file foo/bar/baz/file.z
 
 sleep 1
 
-echo "Initial dump"
-tar cvf a0.tar -g a.sna a
-mv a/b a/c
-echo "Incremental dump"
-tar cvf a1.tar -g a.sna a
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+echo "Creating base archive"
+tar -g incr -cf arch.1 -v foo
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: a/b: Directory is new
-tar: a/c: Directory has been renamed from \`a/b'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Initial dump
-a/
-a/b/
-a/b/one_31_chars_long_file_name_001
-a/b/one_31_chars_long_file_name_002
-a/b/one_31_chars_long_file_name_003
-a/b/one_31_chars_long_file_name_004
-a/b/one_31_chars_long_file_name_005
-a/b/one_31_chars_long_file_name_006
-a/b/one_31_chars_long_file_name_007
-a/b/one_31_chars_long_file_name_008
-a/b/one_31_chars_long_file_name_009
-a/b/one_31_chars_long_file_name_010
-a/b/one_31_chars_long_file_name_011
-a/b/one_31_chars_long_file_name_012
-a/b/one_31_chars_long_file_name_013
-a/b/one_31_chars_long_file_name_014
-a/b/one_31_chars_long_file_name_015
-a/b/one_31_chars_long_file_name_016
-a/b/one_31_chars_long_file_name_017
-a/b/one_31_chars_long_file_name_018
-a/b/one_31_chars_long_file_name_019
-a/b/one_31_chars_long_file_name_020
-a/b/one_31_chars_long_file_name_021
-a/b/one_31_chars_long_file_name_022
-a/b/one_31_chars_long_file_name_023
-a/b/one_31_chars_long_file_name_024
-a/b/one_31_chars_long_file_name_025
-a/b/one_31_chars_long_file_name_026
-a/b/one_31_chars_long_file_name_027
-a/b/one_31_chars_long_file_name_028
-a/b/one_31_chars_long_file_name_029
-a/b/one_31_chars_long_file_name_030
-a/b/one_31_chars_long_file_name_031
-a/b/one_31_chars_long_file_name_032
-a/b/one_31_chars_long_file_name_033
-a/b/one_31_chars_long_file_name_034
-a/b/one_31_chars_long_file_name_035
-a/b/one_31_chars_long_file_name_036
-a/b/one_31_chars_long_file_name_037
-a/b/one_31_chars_long_file_name_038
-a/b/one_31_chars_long_file_name_039
-a/b/one_31_chars_long_file_name_040
-a/b/one_31_chars_long_file_name_041
-a/b/one_31_chars_long_file_name_042
-a/b/one_31_chars_long_file_name_043
-a/b/one_31_chars_long_file_name_044
-a/b/one_31_chars_long_file_name_045
-a/b/one_31_chars_long_file_name_046
-a/b/one_31_chars_long_file_name_047
-a/b/one_31_chars_long_file_name_048
-a/b/one_31_chars_long_file_name_049
-a/b/one_31_chars_long_file_name_050
-a/b/one_31_chars_long_file_name_051
-a/b/one_31_chars_long_file_name_052
-a/b/one_31_chars_long_file_name_053
-a/b/one_31_chars_long_file_name_054
-a/b/one_31_chars_long_file_name_055
-a/b/one_31_chars_long_file_name_056
-a/b/one_31_chars_long_file_name_057
-a/b/one_31_chars_long_file_name_058
-a/b/one_31_chars_long_file_name_059
-a/b/one_31_chars_long_file_name_060
-a/b/one_31_chars_long_file_name_061
-a/b/one_31_chars_long_file_name_062
-a/b/one_31_chars_long_file_name_063
-a/b/one_31_chars_long_file_name_064
-a/b/one_31_chars_long_file_name_065
-a/b/one_31_chars_long_file_name_066
-a/b/one_31_chars_long_file_name_067
-a/b/one_31_chars_long_file_name_068
-a/b/one_31_chars_long_file_name_069
-a/b/one_31_chars_long_file_name_070
-a/b/one_31_chars_long_file_name_071
-a/b/one_31_chars_long_file_name_072
-a/b/one_31_chars_long_file_name_073
-a/b/one_31_chars_long_file_name_074
-a/b/one_31_chars_long_file_name_075
-a/b/one_31_chars_long_file_name_076
-a/b/one_31_chars_long_file_name_077
-a/b/one_31_chars_long_file_name_078
-a/b/one_31_chars_long_file_name_079
-a/b/one_31_chars_long_file_name_080
-a/b/one_31_chars_long_file_name_081
-a/b/one_31_chars_long_file_name_082
-a/b/one_31_chars_long_file_name_083
-a/b/one_31_chars_long_file_name_084
-a/b/one_31_chars_long_file_name_085
-a/b/one_31_chars_long_file_name_086
-a/b/one_31_chars_long_file_name_087
-a/b/one_31_chars_long_file_name_088
-a/b/one_31_chars_long_file_name_089
-a/b/one_31_chars_long_file_name_090
-a/b/one_31_chars_long_file_name_091
-a/b/one_31_chars_long_file_name_092
-a/b/one_31_chars_long_file_name_093
-a/b/one_31_chars_long_file_name_094
-a/b/one_31_chars_long_file_name_095
-a/b/one_31_chars_long_file_name_096
-a/b/one_31_chars_long_file_name_097
-a/b/one_31_chars_long_file_name_098
-a/b/one_31_chars_long_file_name_099
-a/b/one_31_chars_long_file_name_100
-a/b/one_31_chars_long_file_name_101
-a/b/one_31_chars_long_file_name_102
-a/b/one_31_chars_long_file_name_103
-a/b/one_31_chars_long_file_name_104
-a/b/one_31_chars_long_file_name_105
-a/b/one_31_chars_long_file_name_106
-a/b/one_31_chars_long_file_name_107
-a/b/one_31_chars_long_file_name_108
-a/b/one_31_chars_long_file_name_109
-a/b/one_31_chars_long_file_name_110
-a/b/one_31_chars_long_file_name_111
-a/b/one_31_chars_long_file_name_112
-a/b/one_31_chars_long_file_name_113
-a/b/one_31_chars_long_file_name_114
-a/b/one_31_chars_long_file_name_115
-a/b/one_31_chars_long_file_name_116
-a/b/one_31_chars_long_file_name_117
-a/b/one_31_chars_long_file_name_118
-a/b/one_31_chars_long_file_name_119
-a/b/one_31_chars_long_file_name_120
-a/b/one_31_chars_long_file_name_121
-a/b/one_31_chars_long_file_name_122
-a/b/one_31_chars_long_file_name_123
-a/b/one_31_chars_long_file_name_124
-a/b/one_31_chars_long_file_name_125
-a/b/one_31_chars_long_file_name_126
-a/b/one_31_chars_long_file_name_127
-a/b/one_31_chars_long_file_name_128
-a/b/one_31_chars_long_file_name_129
-a/b/one_31_chars_long_file_name_130
-a/b/one_31_chars_long_file_name_131
-a/b/one_31_chars_long_file_name_132
-a/b/one_31_chars_long_file_name_133
-a/b/one_31_chars_long_file_name_134
-a/b/one_31_chars_long_file_name_135
-a/b/one_31_chars_long_file_name_136
-a/b/one_31_chars_long_file_name_137
-a/b/one_31_chars_long_file_name_138
-a/b/one_31_chars_long_file_name_139
-a/b/one_31_chars_long_file_name_140
-a/b/one_31_chars_long_file_name_141
-a/b/one_31_chars_long_file_name_142
-Incremental dump
-a/
-a/c/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/incr04.at:34: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+mv foo/bar/baz foo
+
+echo "Creating incremental archive"
+tar -g incr -cf arch.2 -v foo
 
+mv foo old
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+tar xfg arch.1 /dev/null 2>tmperr
+sort tmperr >&2
+
+echo "Begin directory listing 1"
+find foo | sort
+echo "End directory listing 1"
 
-$at_traceon
+tar xfgv arch.2 /dev/null
+echo Begin directory listing 2
+find foo | sort
+echo End directory listing 2
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar: foo: Directory is new
+tar: foo/bar: Directory is new
+tar: foo/bar/baz: Directory is new
+tar: foo/baz: Directory has been renamed from \`foo/bar/baz'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating base archive
+foo/
+foo/bar/
+foo/bar/baz/
+foo/file1
+foo/file2
+foo/bar/file.r
+foo/bar/baz/file.z
+Creating incremental archive
+foo/
+foo/bar/
+foo/baz/
+Begin directory listing 1
+foo
+foo/bar
+foo/bar/baz
+foo/bar/baz/file.z
+foo/bar/file.r
+foo/file1
+foo/file2
+End directory listing 1
+foo/
+foo/bar/
+foo/baz/
+Begin directory listing 2
+foo
+foo/bar
+foo/bar/file.r
+foo/baz
+foo/baz/file.z
+foo/file1
+foo/file2
+End directory listing 2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename02.at:27"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  33 ) # 33. rename01.at:24: renamed dirs in incrementals
-    at_setup_line='rename01.at:24'
-    at_desc="renamed dirs in incrementals"
-    $at_quiet $ECHO_N " 33: renamed dirs in incrementals                   $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_48
+#AT_START_49
+# 49. rename03.at:23: cyclic renames
+at_setup_line='rename03.at:23'
+at_desc="cyclic renames"
+$at_quiet $as_echo_n " 49: $at_desc                                 "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "33. rename01.at:24: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "49. rename03.at:23: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/rename01.at:27:
+  $at_traceoff
+$as_echo "$at_srcdir/rename03.at:26:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -14450,18 +21428,34 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir foo
 genfile --file foo/file1
 genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file
 
-echo \"Creating base archive\"
-tar -g incr -cf arch.1 -v foo
+mkdir foo/a
+genfile --file foo/a/filea
 
-mv foo/bar foo/baz
+mkdir foo/b
+genfile --file foo/b/fileb
 
-echo \"Creating incremental archive\"
-tar -g incr -cf arch.2 -v foo
+mkdir foo/c
+genfile --file foo/c/filec
 
-mv foo old
+sleep 1
+
+echo \"First dump\"
+echo \"First dump\">&2
+tar -g incr -cf arch.1 -v foo 2>tmperr
+sort tmperr >&2
+
+# Shuffle directories:
+(cd foo
+mv a \$\$
+mv c a
+mv b c
+mv \$\$ b)
+
+echo \"Second dump\"
+echo \"Second dump\" >&2
+tar -g incr -cf arch.2 -v foo 2>tmperr
+sort tmperr >&2
 
 tar xfg arch.1 /dev/null
 
@@ -14469,20 +21463,16 @@ echo \"Begin directory listing 1\"
 find foo | sort
 echo \"End directory listing 1\"
 
-tar xfg arch.2 /dev/null
+tar xfgv arch.2 /dev/null
 echo Begin directory listing 2
 find foo | sort
 echo End directory listing 2
 )"
-echo rename01.at:27 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo rename03.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -14498,18 +21488,34 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir foo
 genfile --file foo/file1
 genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file
 
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+mkdir foo/a
+genfile --file foo/a/filea
 
-mv foo/bar foo/baz
+mkdir foo/b
+genfile --file foo/b/fileb
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+mkdir foo/c
+genfile --file foo/c/filec
 
-mv foo old
+sleep 1
+
+echo "First dump"
+echo "First dump">&2
+tar -g incr -cf arch.1 -v foo 2>tmperr
+sort tmperr >&2
+
+# Shuffle directories:
+(cd foo
+mv a $$
+mv c a
+mv b c
+mv $$ b)
+
+echo "Second dump"
+echo "Second dump" >&2
+tar -g incr -cf arch.2 -v foo 2>tmperr
+sort tmperr >&2
 
 tar xfg arch.1 /dev/null
 
@@ -14517,16 +21523,14 @@ echo "Begin directory listing 1"
 find foo | sort
 echo "End directory listing 1"
 
-tar xfg arch.2 /dev/null
+tar xfgv arch.2 /dev/null
 echo Begin directory listing 2
 find foo | sort
 echo End directory listing 2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -14542,18 +21546,34 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir foo
 genfile --file foo/file1
 genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file
 
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+mkdir foo/a
+genfile --file foo/a/filea
 
-mv foo/bar foo/baz
+mkdir foo/b
+genfile --file foo/b/fileb
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+mkdir foo/c
+genfile --file foo/c/filec
 
-mv foo old
+sleep 1
+
+echo "First dump"
+echo "First dump">&2
+tar -g incr -cf arch.1 -v foo 2>tmperr
+sort tmperr >&2
+
+# Shuffle directories:
+(cd foo
+mv a $$
+mv c a
+mv b c
+mv $$ b)
+
+echo "Second dump"
+echo "Second dump" >&2
+tar -g incr -cf arch.2 -v foo 2>tmperr
+sort tmperr >&2
 
 tar xfg arch.1 /dev/null
 
@@ -14561,59 +21581,75 @@ echo "Begin directory listing 1"
 find foo | sort
 echo "End directory listing 1"
 
-tar xfg arch.2 /dev/null
+tar xfgv arch.2 /dev/null
 echo Begin directory listing 2
 find foo | sort
 echo End directory listing 2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo/bar: Directory is new
-tar: foo/baz: Directory has been renamed from \`foo/bar'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating base archive
+echo >>"$at_stderr"; $as_echo "First dump
+tar: foo/a: Directory is new
+tar: foo/b: Directory is new
+tar: foo/c: Directory is new
+tar: foo: Directory is new
+Second dump
+tar: foo/a: Directory has been renamed from \`foo/c'
+tar: foo/b: Directory has been renamed from \`foo/a'
+tar: foo/c: Directory has been renamed from \`foo/b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "First dump
 foo/
-foo/bar/
+foo/a/
+foo/b/
+foo/c/
 foo/file1
 foo/file2
-foo/bar/file
-Creating incremental archive
+foo/a/filea
+foo/b/fileb
+foo/c/filec
+Second dump
 foo/
-foo/baz/
+foo/a/
+foo/b/
+foo/c/
 Begin directory listing 1
 foo
-foo/bar
-foo/bar/file
+foo/a
+foo/a/filea
+foo/b
+foo/b/fileb
+foo/c
+foo/c/filec
 foo/file1
 foo/file2
 End directory listing 1
+foo/
+foo/a/
+foo/b/
+foo/c/
 Begin directory listing 2
 foo
-foo/baz
-foo/baz/file
+foo/a
+foo/a/filec
+foo/b
+foo/b/filea
+foo/c
+foo/c/fileb
 foo/file1
 foo/file2
 End directory listing 2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename01.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename03.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/rename01.at:27:
+              $at_traceoff
+$as_echo "$at_srcdir/rename03.at:26:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -14629,18 +21665,34 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir foo
 genfile --file foo/file1
 genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file
 
-echo \"Creating base archive\"
-tar -g incr -cf arch.1 -v foo
+mkdir foo/a
+genfile --file foo/a/filea
 
-mv foo/bar foo/baz
+mkdir foo/b
+genfile --file foo/b/fileb
 
-echo \"Creating incremental archive\"
-tar -g incr -cf arch.2 -v foo
+mkdir foo/c
+genfile --file foo/c/filec
 
-mv foo old
+sleep 1
+
+echo \"First dump\"
+echo \"First dump\">&2
+tar -g incr -cf arch.1 -v foo 2>tmperr
+sort tmperr >&2
+
+# Shuffle directories:
+(cd foo
+mv a \$\$
+mv c a
+mv b c
+mv \$\$ b)
+
+echo \"Second dump\"
+echo \"Second dump\" >&2
+tar -g incr -cf arch.2 -v foo 2>tmperr
+sort tmperr >&2
 
 tar xfg arch.1 /dev/null
 
@@ -14648,20 +21700,16 @@ echo \"Begin directory listing 1\"
 find foo | sort
 echo \"End directory listing 1\"
 
-tar xfg arch.2 /dev/null
+tar xfgv arch.2 /dev/null
 echo Begin directory listing 2
 find foo | sort
 echo End directory listing 2
 )"
-echo rename01.at:27 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo rename03.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -14677,18 +21725,34 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir foo
 genfile --file foo/file1
 genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file
 
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+mkdir foo/a
+genfile --file foo/a/filea
 
-mv foo/bar foo/baz
+mkdir foo/b
+genfile --file foo/b/fileb
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+mkdir foo/c
+genfile --file foo/c/filec
 
-mv foo old
+sleep 1
+
+echo "First dump"
+echo "First dump">&2
+tar -g incr -cf arch.1 -v foo 2>tmperr
+sort tmperr >&2
+
+# Shuffle directories:
+(cd foo
+mv a $$
+mv c a
+mv b c
+mv $$ b)
+
+echo "Second dump"
+echo "Second dump" >&2
+tar -g incr -cf arch.2 -v foo 2>tmperr
+sort tmperr >&2
 
 tar xfg arch.1 /dev/null
 
@@ -14696,16 +21760,14 @@ echo "Begin directory listing 1"
 find foo | sort
 echo "End directory listing 1"
 
-tar xfg arch.2 /dev/null
+tar xfgv arch.2 /dev/null
 echo Begin directory listing 2
 find foo | sort
 echo End directory listing 2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -14721,18 +21783,34 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir foo
 genfile --file foo/file1
 genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file
 
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+mkdir foo/a
+genfile --file foo/a/filea
 
-mv foo/bar foo/baz
+mkdir foo/b
+genfile --file foo/b/fileb
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+mkdir foo/c
+genfile --file foo/c/filec
+
+sleep 1
+
+echo "First dump"
+echo "First dump">&2
+tar -g incr -cf arch.1 -v foo 2>tmperr
+sort tmperr >&2
+
+# Shuffle directories:
+(cd foo
+mv a $$
+mv c a
+mv b c
+mv $$ b)
 
-mv foo old
+echo "Second dump"
+echo "Second dump" >&2
+tar -g incr -cf arch.2 -v foo 2>tmperr
+sort tmperr >&2
 
 tar xfg arch.1 /dev/null
 
@@ -14740,59 +21818,75 @@ echo "Begin directory listing 1"
 find foo | sort
 echo "End directory listing 1"
 
-tar xfg arch.2 /dev/null
+tar xfgv arch.2 /dev/null
 echo Begin directory listing 2
 find foo | sort
 echo End directory listing 2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo/bar: Directory is new
-tar: foo/baz: Directory has been renamed from \`foo/bar'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating base archive
+echo >>"$at_stderr"; $as_echo "First dump
+tar: foo/a: Directory is new
+tar: foo/b: Directory is new
+tar: foo/c: Directory is new
+tar: foo: Directory is new
+Second dump
+tar: foo/a: Directory has been renamed from \`foo/c'
+tar: foo/b: Directory has been renamed from \`foo/a'
+tar: foo/c: Directory has been renamed from \`foo/b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "First dump
 foo/
-foo/bar/
+foo/a/
+foo/b/
+foo/c/
 foo/file1
 foo/file2
-foo/bar/file
-Creating incremental archive
+foo/a/filea
+foo/b/fileb
+foo/c/filec
+Second dump
 foo/
-foo/baz/
+foo/a/
+foo/b/
+foo/c/
 Begin directory listing 1
 foo
-foo/bar
-foo/bar/file
+foo/a
+foo/a/filea
+foo/b
+foo/b/fileb
+foo/c
+foo/c/filec
 foo/file1
 foo/file2
 End directory listing 1
+foo/
+foo/a/
+foo/b/
+foo/c/
 Begin directory listing 2
 foo
-foo/baz
-foo/baz/file
+foo/a
+foo/a/filec
+foo/b
+foo/b/filea
+foo/c
+foo/c/fileb
 foo/file1
 foo/file2
 End directory listing 2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename01.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename03.at:26"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/rename01.at:27:
+              $at_traceoff
+$as_echo "$at_srcdir/rename03.at:26:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -14808,18 +21902,34 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir foo
 genfile --file foo/file1
 genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file
 
-echo \"Creating base archive\"
-tar -g incr -cf arch.1 -v foo
+mkdir foo/a
+genfile --file foo/a/filea
 
-mv foo/bar foo/baz
+mkdir foo/b
+genfile --file foo/b/fileb
 
-echo \"Creating incremental archive\"
-tar -g incr -cf arch.2 -v foo
+mkdir foo/c
+genfile --file foo/c/filec
 
-mv foo old
+sleep 1
+
+echo \"First dump\"
+echo \"First dump\">&2
+tar -g incr -cf arch.1 -v foo 2>tmperr
+sort tmperr >&2
+
+# Shuffle directories:
+(cd foo
+mv a \$\$
+mv c a
+mv b c
+mv \$\$ b)
+
+echo \"Second dump\"
+echo \"Second dump\" >&2
+tar -g incr -cf arch.2 -v foo 2>tmperr
+sort tmperr >&2
 
 tar xfg arch.1 /dev/null
 
@@ -14827,20 +21937,16 @@ echo \"Begin directory listing 1\"
 find foo | sort
 echo \"End directory listing 1\"
 
-tar xfg arch.2 /dev/null
+tar xfgv arch.2 /dev/null
 echo Begin directory listing 2
 find foo | sort
 echo End directory listing 2
 )"
-echo rename01.at:27 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo rename03.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -14856,18 +21962,34 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir foo
 genfile --file foo/file1
 genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file
 
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+mkdir foo/a
+genfile --file foo/a/filea
 
-mv foo/bar foo/baz
+mkdir foo/b
+genfile --file foo/b/fileb
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+mkdir foo/c
+genfile --file foo/c/filec
 
-mv foo old
+sleep 1
+
+echo "First dump"
+echo "First dump">&2
+tar -g incr -cf arch.1 -v foo 2>tmperr
+sort tmperr >&2
+
+# Shuffle directories:
+(cd foo
+mv a $$
+mv c a
+mv b c
+mv $$ b)
+
+echo "Second dump"
+echo "Second dump" >&2
+tar -g incr -cf arch.2 -v foo 2>tmperr
+sort tmperr >&2
 
 tar xfg arch.1 /dev/null
 
@@ -14875,16 +21997,14 @@ echo "Begin directory listing 1"
 find foo | sort
 echo "End directory listing 1"
 
-tar xfg arch.2 /dev/null
+tar xfgv arch.2 /dev/null
 echo Begin directory listing 2
 find foo | sort
 echo End directory listing 2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -14900,18 +22020,34 @@ test -z "`sort < /dev/null 2>&1`" || exit 77
 mkdir foo
 genfile --file foo/file1
 genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file
 
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+mkdir foo/a
+genfile --file foo/a/filea
 
-mv foo/bar foo/baz
+mkdir foo/b
+genfile --file foo/b/fileb
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+mkdir foo/c
+genfile --file foo/c/filec
 
-mv foo old
+sleep 1
+
+echo "First dump"
+echo "First dump">&2
+tar -g incr -cf arch.1 -v foo 2>tmperr
+sort tmperr >&2
+
+# Shuffle directories:
+(cd foo
+mv a $$
+mv c a
+mv b c
+mv $$ b)
+
+echo "Second dump"
+echo "Second dump" >&2
+tar -g incr -cf arch.2 -v foo 2>tmperr
+sort tmperr >&2
 
 tar xfg arch.1 /dev/null
 
@@ -14919,83 +22055,99 @@ echo "Begin directory listing 1"
 find foo | sort
 echo "End directory listing 1"
 
-tar xfg arch.2 /dev/null
+tar xfgv arch.2 /dev/null
 echo Begin directory listing 2
 find foo | sort
 echo End directory listing 2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo/bar: Directory is new
-tar: foo/baz: Directory has been renamed from \`foo/bar'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating base archive
+echo >>"$at_stderr"; $as_echo "First dump
+tar: foo/a: Directory is new
+tar: foo/b: Directory is new
+tar: foo/c: Directory is new
+tar: foo: Directory is new
+Second dump
+tar: foo/a: Directory has been renamed from \`foo/c'
+tar: foo/b: Directory has been renamed from \`foo/a'
+tar: foo/c: Directory has been renamed from \`foo/b'
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "First dump
 foo/
-foo/bar/
+foo/a/
+foo/b/
+foo/c/
 foo/file1
 foo/file2
-foo/bar/file
-Creating incremental archive
+foo/a/filea
+foo/b/fileb
+foo/c/filec
+Second dump
 foo/
-foo/baz/
+foo/a/
+foo/b/
+foo/c/
 Begin directory listing 1
 foo
-foo/bar
-foo/bar/file
+foo/a
+foo/a/filea
+foo/b
+foo/b/fileb
+foo/c
+foo/c/filec
 foo/file1
 foo/file2
 End directory listing 1
+foo/
+foo/a/
+foo/b/
+foo/c/
 Begin directory listing 2
 foo
-foo/baz
-foo/baz/file
+foo/a
+foo/a/filec
+foo/b
+foo/b/filea
+foo/c
+foo/c/fileb
 foo/file1
 foo/file2
 End directory listing 2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename01.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename03.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  34 ) # 34. rename02.at:24: move between hierarchies
-    at_setup_line='rename02.at:24'
-    at_desc="move between hierarchies"
-    $at_quiet $ECHO_N " 34: move between hierarchies                       $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_49
+#AT_START_50
+# 50. rename04.at:27: renamed directory containing subdirectories
+at_setup_line='rename04.at:27'
+at_desc="renamed directory containing subdirectories"
+$at_quiet $as_echo_n " 50: $at_desc    "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "34. rename02.at:24: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "50. rename04.at:27: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/rename02.at:27:
+  $at_traceoff
+$as_echo "$at_srcdir/rename04.at:30:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -15007,47 +22159,37 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file.r
-mkdir foo/bar/baz
-genfile --file foo/bar/baz/file.z
-
-sleep 1
-
-echo \"Creating base archive\"
-tar -g incr -cf arch.1 -v foo
 
-mv foo/bar/baz foo
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-echo \"Creating incremental archive\"
-tar -g incr -cf arch.2 -v foo
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-mv foo old
+decho Renaming
+mv directory dir
 
-tar xfg arch.1 /dev/null 2>tmperr
-sort tmperr >&2
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-echo \"Begin directory listing 1\"
-find foo | sort
-echo \"End directory listing 1\"
+mv dir orig
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
-)"
-echo rename02.at:27 >"$at_check_line_file"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
+)"
+echo rename04.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -15059,43 +22201,35 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file.r
-mkdir foo/bar/baz
-genfile --file foo/bar/baz/file.z
-
-sleep 1
 
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-mv foo/bar/baz foo
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+decho Renaming
+mv directory dir
 
-mv foo old
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null 2>tmperr
-sort tmperr >&2
+mv dir orig
 
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -15107,97 +22241,63 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file.r
-mkdir foo/bar/baz
-genfile --file foo/bar/baz/file.z
-
-sleep 1
 
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-mv foo/bar/baz foo
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+decho Renaming
+mv directory dir
 
-mv foo old
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null 2>tmperr
-sort tmperr >&2
+mv dir orig
 
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo/bar: Directory is new
-tar: foo/bar/baz: Directory is new
-tar: foo/baz: Directory has been renamed from \`foo/bar/baz'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating base archive
-foo/
-foo/bar/
-foo/bar/baz/
-foo/file1
-foo/file2
-foo/bar/file.r
-foo/bar/baz/file.z
+echo >>"$at_stderr"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
 Creating incremental archive
-foo/
-foo/bar/
-foo/baz/
-Begin directory listing 1
-foo
-foo/bar
-foo/bar/baz
-foo/bar/baz/file.z
-foo/bar/file.r
-foo/file1
-foo/file2
-End directory listing 1
-foo/
-foo/bar/
-foo/baz/
-Begin directory listing 2
-foo
-foo/bar
-foo/bar/file.r
-foo/baz
-foo/baz/file.z
-foo/file1
-foo/file2
-End directory listing 2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename02.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+First restore
+Second restore
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
+Creating incremental archive
+First restore
+directory
+directory/file
+directory/subdir
+Second restore
+dir
+dir/subdir
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename04.at:30"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/rename02.at:27:
+              $at_traceoff
+$as_echo "$at_srcdir/rename04.at:30:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -15209,47 +22309,37 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file.r
-mkdir foo/bar/baz
-genfile --file foo/bar/baz/file.z
-
-sleep 1
 
-echo \"Creating base archive\"
-tar -g incr -cf arch.1 -v foo
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-mv foo/bar/baz foo
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-echo \"Creating incremental archive\"
-tar -g incr -cf arch.2 -v foo
+decho Renaming
+mv directory dir
 
-mv foo old
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null 2>tmperr
-sort tmperr >&2
+mv dir orig
 
-echo \"Begin directory listing 1\"
-find foo | sort
-echo \"End directory listing 1\"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 )"
-echo rename02.at:27 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo rename04.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -15261,43 +22351,35 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file.r
-mkdir foo/bar/baz
-genfile --file foo/bar/baz/file.z
-
-sleep 1
 
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-mv foo/bar/baz foo
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+decho Renaming
+mv directory dir
 
-mv foo old
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null 2>tmperr
-sort tmperr >&2
+mv dir orig
 
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -15307,99 +22389,65 @@ export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file.r
-mkdir foo/bar/baz
-genfile --file foo/bar/baz/file.z
-
-sleep 1
-
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mv foo/bar/baz foo
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-mv foo old
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-tar xfg arch.1 /dev/null 2>tmperr
-sort tmperr >&2
+decho Renaming
+mv directory dir
 
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+mv dir orig
+
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
+
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo/bar: Directory is new
-tar: foo/bar/baz: Directory is new
-tar: foo/baz: Directory has been renamed from \`foo/bar/baz'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating base archive
-foo/
-foo/bar/
-foo/bar/baz/
-foo/file1
-foo/file2
-foo/bar/file.r
-foo/bar/baz/file.z
+echo >>"$at_stderr"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
 Creating incremental archive
-foo/
-foo/bar/
-foo/baz/
-Begin directory listing 1
-foo
-foo/bar
-foo/bar/baz
-foo/bar/baz/file.z
-foo/bar/file.r
-foo/file1
-foo/file2
-End directory listing 1
-foo/
-foo/bar/
-foo/baz/
-Begin directory listing 2
-foo
-foo/bar
-foo/bar/file.r
-foo/baz
-foo/baz/file.z
-foo/file1
-foo/file2
-End directory listing 2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename02.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+First restore
+Second restore
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
+Creating incremental archive
+First restore
+directory
+directory/file
+directory/subdir
+Second restore
+dir
+dir/subdir
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename04.at:30"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/rename02.at:27:
+              $at_traceoff
+$as_echo "$at_srcdir/rename04.at:30:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -15411,47 +22459,37 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file.r
-mkdir foo/bar/baz
-genfile --file foo/bar/baz/file.z
-
-sleep 1
 
-echo \"Creating base archive\"
-tar -g incr -cf arch.1 -v foo
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-mv foo/bar/baz foo
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-echo \"Creating incremental archive\"
-tar -g incr -cf arch.2 -v foo
+decho Renaming
+mv directory dir
 
-mv foo old
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null 2>tmperr
-sort tmperr >&2
+mv dir orig
 
-echo \"Begin directory listing 1\"
-find foo | sort
-echo \"End directory listing 1\"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 )"
-echo rename02.at:27 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo rename04.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -15463,43 +22501,35 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file.r
-mkdir foo/bar/baz
-genfile --file foo/bar/baz/file.z
-
-sleep 1
 
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-mv foo/bar/baz foo
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
+decho Renaming
+mv directory dir
 
-mv foo old
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null 2>tmperr
-sort tmperr >&2
+mv dir orig
 
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -15511,121 +22541,87 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-mkdir foo/bar
-genfile --file foo/bar/file.r
-mkdir foo/bar/baz
-genfile --file foo/bar/baz/file.z
-
-sleep 1
-
-echo "Creating base archive"
-tar -g incr -cf arch.1 -v foo
-
-mv foo/bar/baz foo
-
-echo "Creating incremental archive"
-tar -g incr -cf arch.2 -v foo
-
-mv foo old
-
-tar xfg arch.1 /dev/null 2>tmperr
-sort tmperr >&2
-
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: foo/bar: Directory is new
-tar: foo/bar/baz: Directory is new
-tar: foo/baz: Directory has been renamed from \`foo/bar/baz'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating base archive
-foo/
-foo/bar/
-foo/bar/baz/
-foo/file1
-foo/file2
-foo/bar/file.r
-foo/bar/baz/file.z
-Creating incremental archive
-foo/
-foo/bar/
-foo/baz/
-Begin directory listing 1
-foo
-foo/bar
-foo/bar/baz
-foo/bar/baz/file.z
-foo/bar/file.r
-foo/file1
-foo/file2
-End directory listing 1
-foo/
-foo/bar/
-foo/baz/
-Begin directory listing 2
-foo
-foo/bar
-foo/bar/file.r
-foo/baz
-foo/baz/file.z
-foo/file1
-foo/file2
-End directory listing 2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename02.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
+decho Renaming
+mv directory dir
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
+
+mv dir orig
+
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-$at_traceon
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
+Creating incremental archive
+First restore
+Second restore
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
+Creating incremental archive
+First restore
+directory
+directory/file
+directory/subdir
+Second restore
+dir
+dir/subdir
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename04.at:30"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  35 ) # 35. rename03.at:23: cyclic renames
-    at_setup_line='rename03.at:23'
-    at_desc="cyclic renames"
-    $at_quiet $ECHO_N " 35: cyclic renames                                 $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_50
+#AT_START_51
+# 51. rename05.at:24: renamed subdirectories
+at_setup_line='rename05.at:24'
+at_desc="renamed subdirectories"
+$at_quiet $as_echo_n " 51: $at_desc                         "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "35. rename03.at:23: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "51. rename05.at:24: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/rename03.at:26:
+  $at_traceoff
+$as_echo "$at_srcdir/rename05.at:27:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -15638,58 +22634,37 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-
-mkdir foo/a
-genfile --file foo/a/filea
-
-mkdir foo/b
-genfile --file foo/b/fileb
-
-mkdir foo/c
-genfile --file foo/c/filec
-
-sleep 1
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-echo \"First dump\"
-echo \"First dump\">&2
-tar -g incr -cf arch.1 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-# Shuffle directories:
-(cd foo
-mv a \$\$
-mv c a
-mv b c
-mv \$\$ b)
+decho Renaming
+mv directory/subdir directory/subdir.0
+mv directory dir
 
-echo \"Second dump\"
-echo \"Second dump\" >&2
-tar -g incr -cf arch.2 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null
+mv dir orig
 
-echo \"Begin directory listing 1\"
-find foo | sort
-echo \"End directory listing 1\"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 )"
-echo rename03.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo rename05.at:27 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -15702,54 +22677,35 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-
-mkdir foo/a
-genfile --file foo/a/filea
-
-mkdir foo/b
-genfile --file foo/b/fileb
-
-mkdir foo/c
-genfile --file foo/c/filec
-
-sleep 1
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-echo "First dump"
-echo "First dump">&2
-tar -g incr -cf arch.1 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-# Shuffle directories:
-(cd foo
-mv a $$
-mv c a
-mv b c
-mv $$ b)
+decho Renaming
+mv directory/subdir directory/subdir.0
+mv directory dir
 
-echo "Second dump"
-echo "Second dump" >&2
-tar -g incr -cf arch.2 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null
+mv dir orig
 
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -15762,121 +22718,63 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-
-mkdir foo/a
-genfile --file foo/a/filea
-
-mkdir foo/b
-genfile --file foo/b/fileb
-
-mkdir foo/c
-genfile --file foo/c/filec
-
-sleep 1
-
-echo "First dump"
-echo "First dump">&2
-tar -g incr -cf arch.1 -v foo 2>tmperr
-sort tmperr >&2
-
-# Shuffle directories:
-(cd foo
-mv a $$
-mv c a
-mv b c
-mv $$ b)
-
-echo "Second dump"
-echo "Second dump" >&2
-tar -g incr -cf arch.2 -v foo 2>tmperr
-sort tmperr >&2
-
-tar xfg arch.1 /dev/null
-
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
-
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-echo >>"$at_stderr"; echo "First dump
-tar: foo/a: Directory is new
-tar: foo/b: Directory is new
-tar: foo/c: Directory is new
-Second dump
-tar: foo/a: Directory has been renamed from \`foo/c'
-tar: foo/b: Directory has been renamed from \`foo/a'
-tar: foo/c: Directory has been renamed from \`foo/b'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "First dump
-foo/
-foo/a/
-foo/b/
-foo/c/
-foo/file1
-foo/file2
-foo/a/filea
-foo/b/fileb
-foo/c/filec
-Second dump
-foo/
-foo/a/
-foo/b/
-foo/c/
-Begin directory listing 1
-foo
-foo/a
-foo/a/filea
-foo/b
-foo/b/fileb
-foo/c
-foo/c/filec
-foo/file1
-foo/file2
-End directory listing 1
-foo/
-foo/a/
-foo/b/
-foo/c/
-Begin directory listing 2
-foo
-foo/a
-foo/a/filec
-foo/b
-foo/b/filea
-foo/c
-foo/c/fileb
-foo/file1
-foo/file2
-End directory listing 2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-  echo 1 > "$at_status_file"
-  exit 1
+decho Renaming
+mv directory/subdir directory/subdir.0
+mv directory dir
+
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
+
+mv dir orig
+
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
+
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
+Creating incremental archive
+First restore
+Second restore
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
+Creating incremental archive
+First restore
+directory
+directory/file
+directory/subdir
+Second restore
+dir
+dir/subdir.0
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename05.at:27"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/rename03.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/rename05.at:27:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -15889,58 +22787,37 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-
-mkdir foo/a
-genfile --file foo/a/filea
-
-mkdir foo/b
-genfile --file foo/b/fileb
-
-mkdir foo/c
-genfile --file foo/c/filec
-
-sleep 1
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-echo \"First dump\"
-echo \"First dump\">&2
-tar -g incr -cf arch.1 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-# Shuffle directories:
-(cd foo
-mv a \$\$
-mv c a
-mv b c
-mv \$\$ b)
+decho Renaming
+mv directory/subdir directory/subdir.0
+mv directory dir
 
-echo \"Second dump\"
-echo \"Second dump\" >&2
-tar -g incr -cf arch.2 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null
+mv dir orig
 
-echo \"Begin directory listing 1\"
-find foo | sort
-echo \"End directory listing 1\"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 )"
-echo rename03.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo rename05.at:27 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -15953,54 +22830,35 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-
-mkdir foo/a
-genfile --file foo/a/filea
-
-mkdir foo/b
-genfile --file foo/b/fileb
-
-mkdir foo/c
-genfile --file foo/c/filec
-
-sleep 1
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-echo "First dump"
-echo "First dump">&2
-tar -g incr -cf arch.1 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-# Shuffle directories:
-(cd foo
-mv a $$
-mv c a
-mv b c
-mv $$ b)
+decho Renaming
+mv directory/subdir directory/subdir.0
+mv directory dir
 
-echo "Second dump"
-echo "Second dump" >&2
-tar -g incr -cf arch.2 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null
+mv dir orig
 
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -16013,121 +22871,63 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-
-mkdir foo/a
-genfile --file foo/a/filea
-
-mkdir foo/b
-genfile --file foo/b/fileb
-
-mkdir foo/c
-genfile --file foo/c/filec
-
-sleep 1
-
-echo "First dump"
-echo "First dump">&2
-tar -g incr -cf arch.1 -v foo 2>tmperr
-sort tmperr >&2
-
-# Shuffle directories:
-(cd foo
-mv a $$
-mv c a
-mv b c
-mv $$ b)
-
-echo "Second dump"
-echo "Second dump" >&2
-tar -g incr -cf arch.2 -v foo 2>tmperr
-sort tmperr >&2
-
-tar xfg arch.1 /dev/null
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+decho Renaming
+mv directory/subdir directory/subdir.0
+mv directory dir
 
-at_failed=false
-echo >>"$at_stderr"; echo "First dump
-tar: foo/a: Directory is new
-tar: foo/b: Directory is new
-tar: foo/c: Directory is new
-Second dump
-tar: foo/a: Directory has been renamed from \`foo/c'
-tar: foo/b: Directory has been renamed from \`foo/a'
-tar: foo/c: Directory has been renamed from \`foo/b'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "First dump
-foo/
-foo/a/
-foo/b/
-foo/c/
-foo/file1
-foo/file2
-foo/a/filea
-foo/b/fileb
-foo/c/filec
-Second dump
-foo/
-foo/a/
-foo/b/
-foo/c/
-Begin directory listing 1
-foo
-foo/a
-foo/a/filea
-foo/b
-foo/b/fileb
-foo/c
-foo/c/filec
-foo/file1
-foo/file2
-End directory listing 1
-foo/
-foo/a/
-foo/b/
-foo/c/
-Begin directory listing 2
-foo
-foo/a
-foo/a/filec
-foo/b
-foo/b/filea
-foo/c
-foo/c/fileb
-foo/file1
-foo/file2
-End directory listing 2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
+mv dir orig
 
-  echo 1 > "$at_status_file"
-  exit 1
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
+
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
+Creating incremental archive
+First restore
+Second restore
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
+Creating incremental archive
+First restore
+directory
+directory/file
+directory/subdir
+Second restore
+dir
+dir/subdir.0
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename05.at:27"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/rename03.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/rename05.at:27:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -16140,58 +22940,37 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-
-mkdir foo/a
-genfile --file foo/a/filea
-
-mkdir foo/b
-genfile --file foo/b/fileb
-
-mkdir foo/c
-genfile --file foo/c/filec
-
-sleep 1
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-echo \"First dump\"
-echo \"First dump\">&2
-tar -g incr -cf arch.1 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-# Shuffle directories:
-(cd foo
-mv a \$\$
-mv c a
-mv b c
-mv \$\$ b)
+decho Renaming
+mv directory/subdir directory/subdir.0
+mv directory dir
 
-echo \"Second dump\"
-echo \"Second dump\" >&2
-tar -g incr -cf arch.2 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null
+mv dir orig
 
-echo \"Begin directory listing 1\"
-find foo | sort
-echo \"End directory listing 1\"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 )"
-echo rename03.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo rename05.at:27 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -16204,54 +22983,35 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-
-mkdir foo/a
-genfile --file foo/a/filea
-
-mkdir foo/b
-genfile --file foo/b/fileb
-
-mkdir foo/c
-genfile --file foo/c/filec
-
-sleep 1
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-echo "First dump"
-echo "First dump">&2
-tar -g incr -cf arch.1 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-# Shuffle directories:
-(cd foo
-mv a $$
-mv c a
-mv b c
-mv $$ b)
+decho Renaming
+mv directory/subdir directory/subdir.0
+mv directory dir
 
-echo "Second dump"
-echo "Second dump" >&2
-tar -g incr -cf arch.2 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null
+mv dir orig
 
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -16264,145 +23024,87 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-mkdir foo
-genfile --file foo/file1
-genfile --file foo/file2
-
-mkdir foo/a
-genfile --file foo/a/filea
-
-mkdir foo/b
-genfile --file foo/b/fileb
-
-mkdir foo/c
-genfile --file foo/c/filec
-
-sleep 1
+decho Creating directory structure
+mkdir directory
+mkdir directory/subdir
+genfile --file=directory/file
 
-echo "First dump"
-echo "First dump">&2
-tar -g incr -cf arch.1 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating initial archive
+tar -cf archive.1 -g db.1 directory
 
-# Shuffle directories:
-(cd foo
-mv a $$
-mv c a
-mv b c
-mv $$ b)
+decho Renaming
+mv directory/subdir directory/subdir.0
+mv directory dir
 
-echo "Second dump"
-echo "Second dump" >&2
-tar -g incr -cf arch.2 -v foo 2>tmperr
-sort tmperr >&2
+decho Creating incremental archive
+cp db.1 db.2
+tar -cf archive.2 -g db.2 dir
 
-tar xfg arch.1 /dev/null
+mv dir orig
 
-echo "Begin directory listing 1"
-find foo | sort
-echo "End directory listing 1"
+decho First restore
+tar -xf archive.1 -g db.1
+find directory | sort
 
-tar xfgv arch.2 /dev/null
-echo Begin directory listing 2
-find foo | sort
-echo End directory listing 2
+decho Second restore
+tar -xf archive.2 -g db.2
+find dir | sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-echo >>"$at_stderr"; echo "First dump
-tar: foo/a: Directory is new
-tar: foo/b: Directory is new
-tar: foo/c: Directory is new
-Second dump
-tar: foo/a: Directory has been renamed from \`foo/c'
-tar: foo/b: Directory has been renamed from \`foo/a'
-tar: foo/c: Directory has been renamed from \`foo/b'
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "First dump
-foo/
-foo/a/
-foo/b/
-foo/c/
-foo/file1
-foo/file2
-foo/a/filea
-foo/b/fileb
-foo/c/filec
-Second dump
-foo/
-foo/a/
-foo/b/
-foo/c/
-Begin directory listing 1
-foo
-foo/a
-foo/a/filea
-foo/b
-foo/b/fileb
-foo/c
-foo/c/filec
-foo/file1
-foo/file2
-End directory listing 1
-foo/
-foo/a/
-foo/b/
-foo/c/
-Begin directory listing 2
-foo
-foo/a
-foo/a/filec
-foo/b
-foo/b/filea
-foo/c
-foo/c/fileb
-foo/file1
-foo/file2
-End directory listing 2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename03.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
 fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
+Creating incremental archive
+First restore
+Second restore
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating directory structure
+Creating initial archive
+Renaming
+Creating incremental archive
+First restore
+directory
+directory/file
+directory/subdir
+Second restore
+dir
+dir/subdir.0
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/rename05.at:27"
 
-$at_traceon
-
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  36 ) # 36. rename04.at:27: renamed directory containing subdirectories
-    at_setup_line='rename04.at:27'
-    at_desc="renamed directory containing subdirectories"
-    $at_quiet $ECHO_N " 36: renamed directory containing subdirectories    $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_51
+#AT_START_52
+# 52. chtype.at:27: changed file types in incrementals
+at_setup_line='chtype.at:27'
+at_desc="changed file types in incrementals"
+$at_quiet $as_echo_n " 52: $at_desc             "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "36. rename04.at:27: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "52. chtype.at:27: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/rename04.at:30:
+  $at_traceoff
+$as_echo "$at_srcdir/chtype.at:30:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -16415,40 +23117,38 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-decho Creating directory structure
-mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
+install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
+mkdir directory/a
+genfile --file directory/a/a
 
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
+echo First backup
+tar --create --file=archive.1 --listed-incremental=db.1 directory
 
-decho Renaming
-mv directory dir
+sleep 2
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+# Remove directory b and create a file with this name.
+# Previous versions were not able to restore over this file.
+rm -r directory/b
+genfile --file directory/b
+genfile --file directory/a/b
 
-mv dir orig
+echo Second backup
+tar --create --file=archive.2 --listed-incremental=db.2 directory
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+# Delete a
+rm -r directory
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo Restore archive.1
+tar -xf archive.1 --listed-incremental=/dev/null
+echo Restore archive.2
+tar -xf archive.2 --listed-incremental=/dev/null
+find directory | sort
 )"
-echo rename04.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo chtype.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -16461,36 +23161,36 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-decho Creating directory structure
-mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
+install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
+mkdir directory/a
+genfile --file directory/a/a
 
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
+echo First backup
+tar --create --file=archive.1 --listed-incremental=db.1 directory
 
-decho Renaming
-mv directory dir
+sleep 2
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+# Remove directory b and create a file with this name.
+# Previous versions were not able to restore over this file.
+rm -r directory/b
+genfile --file directory/b
+genfile --file directory/a/b
 
-mv dir orig
+echo Second backup
+tar --create --file=archive.2 --listed-incremental=db.2 directory
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+# Delete a
+rm -r directory
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo Restore archive.1
+tar -xf archive.1 --listed-incremental=/dev/null
+echo Restore archive.2
+tar -xf archive.2 --listed-incremental=/dev/null
+find directory | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -16503,76 +23203,207 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-decho Creating directory structure
-mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
+install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
+mkdir directory/a
+genfile --file directory/a/a
 
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
+echo First backup
+tar --create --file=archive.1 --listed-incremental=db.1 directory
 
-decho Renaming
-mv directory dir
+sleep 2
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+# Remove directory b and create a file with this name.
+# Previous versions were not able to restore over this file.
+rm -r directory/b
+genfile --file directory/b
+genfile --file directory/a/b
+
+echo Second backup
+tar --create --file=archive.2 --listed-incremental=db.2 directory
+
+# Delete a
+rm -r directory
+
+echo Restore archive.1
+tar -xf archive.1 --listed-incremental=/dev/null
+echo Restore archive.2
+tar -xf archive.2 --listed-incremental=/dev/null
+find directory | sort
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "First backup
+Second backup
+Restore archive.1
+Restore archive.2
+directory
+directory/a
+directory/a/a
+directory/a/b
+directory/b
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/chtype.at:30"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/chtype.at:30:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
+mkdir directory/a
+genfile --file directory/a/a
+
+echo First backup
+tar --create --file=archive.1 --listed-incremental=db.1 directory
+
+sleep 2
+
+# Remove directory b and create a file with this name.
+# Previous versions were not able to restore over this file.
+rm -r directory/b
+genfile --file directory/b
+genfile --file directory/a/b
+
+echo Second backup
+tar --create --file=archive.2 --listed-incremental=db.2 directory
+
+# Delete a
+rm -r directory
+
+echo Restore archive.1
+tar -xf archive.1 --listed-incremental=/dev/null
+echo Restore archive.2
+tar -xf archive.2 --listed-incremental=/dev/null
+find directory | sort
+)"
+echo chtype.at:30 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
+mkdir directory/a
+genfile --file directory/a/a
+
+echo First backup
+tar --create --file=archive.1 --listed-incremental=db.1 directory
+
+sleep 2
+
+# Remove directory b and create a file with this name.
+# Previous versions were not able to restore over this file.
+rm -r directory/b
+genfile --file directory/b
+genfile --file directory/a/b
+
+echo Second backup
+tar --create --file=archive.2 --listed-incremental=db.2 directory
+
+# Delete a
+rm -r directory
+
+echo Restore archive.1
+tar -xf archive.1 --listed-incremental=/dev/null
+echo Restore archive.2
+tar -xf archive.2 --listed-incremental=/dev/null
+find directory | sort
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
+mkdir directory/a
+genfile --file directory/a/a
+
+echo First backup
+tar --create --file=archive.1 --listed-incremental=db.1 directory
+
+sleep 2
+
+# Remove directory b and create a file with this name.
+# Previous versions were not able to restore over this file.
+rm -r directory/b
+genfile --file directory/b
+genfile --file directory/a/b
 
-mv dir orig
+echo Second backup
+tar --create --file=archive.2 --listed-incremental=db.2 directory
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+# Delete a
+rm -r directory
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo Restore archive.1
+tar -xf archive.1 --listed-incremental=/dev/null
+echo Restore archive.2
+tar -xf archive.2 --listed-incremental=/dev/null
+find directory | sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
-Second restore
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "First backup
+Second backup
+Restore archive.1
+Restore archive.2
 directory
-directory/file
-directory/subdir
-Second restore
-dir
-dir/subdir
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename04.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+directory/a
+directory/a/a
+directory/a/b
+directory/b
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/chtype.at:30"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/rename04.at:30:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+              $at_traceoff
+$as_echo "$at_srcdir/chtype.at:30:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
@@ -16580,45 +23411,43 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-decho Creating directory structure
-mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
+install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
+mkdir directory/a
+genfile --file directory/a/a
 
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
+echo First backup
+tar --create --file=archive.1 --listed-incremental=db.1 directory
 
-decho Renaming
-mv directory dir
+sleep 2
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+# Remove directory b and create a file with this name.
+# Previous versions were not able to restore over this file.
+rm -r directory/b
+genfile --file directory/b
+genfile --file directory/a/b
 
-mv dir orig
+echo Second backup
+tar --create --file=archive.2 --listed-incremental=db.2 directory
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+# Delete a
+rm -r directory
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo Restore archive.1
+tar -xf archive.1 --listed-incremental=/dev/null
+echo Restore archive.2
+tar -xf archive.2 --listed-incremental=/dev/null
+find directory | sort
 )"
-echo rename04.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo chtype.at:30 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
@@ -16626,41 +23455,41 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-decho Creating directory structure
-mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
+install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
+mkdir directory/a
+genfile --file directory/a/a
 
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
+echo First backup
+tar --create --file=archive.1 --listed-incremental=db.1 directory
 
-decho Renaming
-mv directory dir
+sleep 2
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+# Remove directory b and create a file with this name.
+# Previous versions were not able to restore over this file.
+rm -r directory/b
+genfile --file directory/b
+genfile --file directory/a/b
 
-mv dir orig
+echo Second backup
+tar --create --file=archive.2 --listed-incremental=db.2 directory
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+# Delete a
+rm -r directory
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo Restore archive.1
+tar -xf archive.1 --listed-incremental=/dev/null
+echo Restore archive.2
+tar -xf archive.2 --listed-incremental=/dev/null
+find directory | sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
@@ -16668,1114 +23497,1272 @@ rm -rf *
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-decho Creating directory structure
-mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
+install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
+mkdir directory/a
+genfile --file directory/a/a
 
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
+echo First backup
+tar --create --file=archive.1 --listed-incremental=db.1 directory
 
-decho Renaming
-mv directory dir
+sleep 2
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+# Remove directory b and create a file with this name.
+# Previous versions were not able to restore over this file.
+rm -r directory/b
+genfile --file directory/b
+genfile --file directory/a/b
 
-mv dir orig
+echo Second backup
+tar --create --file=archive.2 --listed-incremental=db.2 directory
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+# Delete a
+rm -r directory
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo Restore archive.1
+tar -xf archive.1 --listed-incremental=/dev/null
+echo Restore archive.2
+tar -xf archive.2 --listed-incremental=/dev/null
+find directory | sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
-Second restore
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "First backup
+Second backup
+Restore archive.1
+Restore archive.2
 directory
-directory/file
-directory/subdir
-Second restore
-dir
-dir/subdir
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename04.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+directory/a
+directory/a/a
+directory/a/b
+directory/b
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/chtype.at:30"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_52
+#AT_START_53
+# 53. ignfail.at:23: ignfail
+at_setup_line='ignfail.at:23'
+at_desc="ignfail"
+$at_quiet $as_echo_n " 53: $at_desc                                        "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "53. ignfail.at:23: testing ..."
+  $at_traceon
+
+
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+  { $at_traceoff
+$as_echo "$at_srcdir/ignfail.at:26:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H v7\"
+export TAR_OPTIONS
+rm -rf *
+
+# The test is meaningless for super-user.
+
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
+
+
+touch file
+mkdir directory
+touch directory/file
+
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=\$?
+chmod 600 file
+test \$status = 2 || exit 1
+
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=\$?
+chmod 600 file
+test \$status = 0 || exit 1
+
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=\$?
+chmod 700 directory
+test \$status = 2 || exit 1
+
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=\$?
+chmod 700 directory
+test \$status = 0
+)"
+echo ignfail.at:26 >"$at_check_line_file"
 
-              $at_traceoff
-echo "$at_srcdir/rename04.at:30:
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H posix\"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
-
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
-
-decho Renaming
-mv directory dir
-
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
-
-mv dir orig
+touch directory/file
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=$?
+chmod 600 file
+test $status = 2 || exit 1
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
-)"
-echo rename04.at:30 >"$at_check_line_file"
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=$?
+chmod 600 file
+test $status = 0 || exit 1
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=$?
+chmod 700 directory
+test $status = 2 || exit 1
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=$?
+chmod 700 directory
+test $status = 0
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
+touch directory/file
 
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=$?
+chmod 600 file
+test $status = 2 || exit 1
 
-decho Renaming
-mv directory dir
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=$?
+chmod 600 file
+test $status = 0 || exit 1
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=$?
+chmod 700 directory
+test $status = 2 || exit 1
 
-mv dir orig
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=$?
+chmod 700 directory
+test $status = 0
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "-----
+tar: file: Cannot open: Permission denied
+tar: Exiting with failure status due to previous errors
+-----
+tar: file: Warning: Cannot open: Permission denied
+-----
+tar: directory: Cannot open: Permission denied
+tar: Exiting with failure status due to previous errors
+-----
+tar: directory: Warning: Cannot open: Permission denied
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/ignfail.at:26"
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
-) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+              { $at_traceoff
+$as_echo "$at_srcdir/ignfail.at:26:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
+touch directory/file
 
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=\$?
+chmod 600 file
+test \$status = 2 || exit 1
 
-decho Renaming
-mv directory dir
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=\$?
+chmod 600 file
+test \$status = 0 || exit 1
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=\$?
+chmod 700 directory
+test \$status = 2 || exit 1
 
-mv dir orig
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=\$?
+chmod 700 directory
+test \$status = 0
+)"
+echo ignfail.at:26 >"$at_check_line_file"
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+# The test is meaningless for super-user.
 
-at_failed=false
-echo >>"$at_stderr"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
-Second restore
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
-directory
-directory/file
-directory/subdir
-Second restore
-dir
-dir/subdir
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename04.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+touch file
+mkdir directory
+touch directory/file
+
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=$?
+chmod 600 file
+test $status = 2 || exit 1
+
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=$?
+chmod 600 file
+test $status = 0 || exit 1
 
-$at_traceon
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=$?
+chmod 700 directory
+test $status = 2 || exit 1
+
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=$?
+chmod 700 directory
+test $status = 0
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
+# The test is meaningless for super-user.
 
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
+touch file
+mkdir directory
+touch directory/file
 
-  37 ) # 37. rename05.at:24: renamed subdirectories
-    at_setup_line='rename05.at:24'
-    at_desc="renamed subdirectories"
-    $at_quiet $ECHO_N " 37: renamed subdirectories                         $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "37. rename05.at:24: testing ..."
-      $at_traceon
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=$?
+chmod 600 file
+test $status = 2 || exit 1
 
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=$?
+chmod 600 file
+test $status = 0 || exit 1
 
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=$?
+chmod 700 directory
+test $status = 2 || exit 1
 
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=$?
+chmod 700 directory
+test $status = 0
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "-----
+tar: file: Cannot open: Permission denied
+tar: Exiting with failure status due to previous errors
+-----
+tar: file: Warning: Cannot open: Permission denied
+-----
+tar: directory: Cannot open: Permission denied
+tar: Exiting with failure status due to previous errors
+-----
+tar: directory: Warning: Cannot open: Permission denied
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/ignfail.at:26"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  $at_traceoff
-echo "$at_srcdir/rename05.at:27:
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+              { $at_traceoff
+$as_echo "$at_srcdir/ignfail.at:26:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H gnu\"
+TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
-
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
-
-decho Renaming
-mv directory/subdir directory/subdir.0
-mv directory dir
+touch directory/file
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=\$?
+chmod 600 file
+test \$status = 2 || exit 1
 
-mv dir orig
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=\$?
+chmod 600 file
+test \$status = 0 || exit 1
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=\$?
+chmod 700 directory
+test \$status = 2 || exit 1
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=\$?
+chmod 700 directory
+test \$status = 0
 )"
-echo rename05.at:27 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo ignfail.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
-
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
-
-decho Renaming
-mv directory/subdir directory/subdir.0
-mv directory dir
+touch directory/file
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=$?
+chmod 600 file
+test $status = 2 || exit 1
 
-mv dir orig
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=$?
+chmod 600 file
+test $status = 0 || exit 1
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=$?
+chmod 700 directory
+test $status = 2 || exit 1
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=$?
+chmod 700 directory
+test $status = 0
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
-
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
-
-decho Renaming
-mv directory/subdir directory/subdir.0
-mv directory dir
+touch directory/file
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=$?
+chmod 600 file
+test $status = 2 || exit 1
 
-mv dir orig
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=$?
+chmod 600 file
+test $status = 0 || exit 1
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=$?
+chmod 700 directory
+test $status = 2 || exit 1
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=$?
+chmod 700 directory
+test $status = 0
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
-Second restore
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
-directory
-directory/file
-directory/subdir
-Second restore
-dir
-dir/subdir.0
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename05.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo >>"$at_stderr"; $as_echo "-----
+tar: file: Cannot open: Permission denied
+tar: Exiting with failure status due to previous errors
+-----
+tar: file: Warning: Cannot open: Permission denied
+-----
+tar: directory: Cannot open: Permission denied
+tar: Exiting with failure status due to previous errors
+-----
+tar: directory: Warning: Cannot open: Permission denied
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/ignfail.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/rename05.at:27:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+              $at_traceoff
+$as_echo "$at_srcdir/ignfail.at:26:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
-
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
-
-decho Renaming
-mv directory/subdir directory/subdir.0
-mv directory dir
+touch directory/file
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=\$?
+chmod 600 file
+test \$status = 2 || exit 1
 
-mv dir orig
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=\$?
+chmod 600 file
+test \$status = 0 || exit 1
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=\$?
+chmod 700 directory
+test \$status = 2 || exit 1
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=\$?
+chmod 700 directory
+test \$status = 0
 )"
-echo rename05.at:27 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo ignfail.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
-
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
-
-decho Renaming
-mv directory/subdir directory/subdir.0
-mv directory dir
+touch directory/file
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=$?
+chmod 600 file
+test $status = 2 || exit 1
 
-mv dir orig
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=$?
+chmod 600 file
+test $status = 0 || exit 1
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=$?
+chmod 700 directory
+test $status = 2 || exit 1
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=$?
+chmod 700 directory
+test $status = 0
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
-
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
-
-decho Renaming
-mv directory/subdir directory/subdir.0
-mv directory dir
-
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
-
-mv dir orig
-
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
-
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+touch directory/file
 
-at_failed=false
-echo >>"$at_stderr"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
-Second restore
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
-directory
-directory/file
-directory/subdir
-Second restore
-dir
-dir/subdir.0
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename05.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=$?
+chmod 600 file
+test $status = 2 || exit 1
 
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=$?
+chmod 600 file
+test $status = 0 || exit 1
 
-  echo 1 > "$at_status_file"
-  exit 1
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=$?
+chmod 700 directory
+test $status = 2 || exit 1
+
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=$?
+chmod 700 directory
+test $status = 0
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "-----
+tar: file: Cannot open: Permission denied
+tar: Exiting with failure status due to previous errors
+-----
+tar: file: Warning: Cannot open: Permission denied
+-----
+tar: directory: Cannot open: Permission denied
+tar: Exiting with failure status due to previous errors
+-----
+tar: directory: Warning: Cannot open: Permission denied
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/ignfail.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/rename05.at:27:
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+              $at_traceoff
+$as_echo "$at_srcdir/ignfail.at:26:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H posix\"
+TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
-
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
-
-decho Renaming
-mv directory/subdir directory/subdir.0
-mv directory dir
+touch directory/file
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=\$?
+chmod 600 file
+test \$status = 2 || exit 1
 
-mv dir orig
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=\$?
+chmod 600 file
+test \$status = 0 || exit 1
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=\$?
+chmod 700 directory
+test \$status = 2 || exit 1
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=\$?
+chmod 700 directory
+test \$status = 0
 )"
-echo rename05.at:27 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo ignfail.at:26 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
-
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
-
-decho Renaming
-mv directory/subdir directory/subdir.0
-mv directory dir
+touch directory/file
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=$?
+chmod 600 file
+test $status = 2 || exit 1
 
-mv dir orig
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=$?
+chmod 600 file
+test $status = 0 || exit 1
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=$?
+chmod 700 directory
+test $status = 2 || exit 1
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=$?
+chmod 700 directory
+test $status = 0
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
+# The test is meaningless for super-user.
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo "test" > $$
+chmod 0 $$
+cat $$ > /dev/null 2>&1
+result=$?
+rm -f $$
+test $result -eq 0 && exit 77
 
 
-decho Creating directory structure
+touch file
 mkdir directory
-mkdir directory/subdir
-genfile --file=directory/file
-
-decho Creating initial archive
-tar -cf archive.1 -g db.1 directory
-
-decho Renaming
-mv directory/subdir directory/subdir.0
-mv directory dir
+touch directory/file
 
-decho Creating incremental archive
-cp db.1 db.2
-tar -cf archive.2 -g db.2 dir
+echo 1>&2 -----
+chmod 000 file
+tar cf archive file
+status=$?
+chmod 600 file
+test $status = 2 || exit 1
 
-mv dir orig
+echo 1>&2 -----
+chmod 000 file
+tar cf archive --ignore-failed-read file || exit 1
+status=$?
+chmod 600 file
+test $status = 0 || exit 1
 
-decho First restore
-tar -xf archive.1 -g db.1
-find directory | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive directory
+status=$?
+chmod 700 directory
+test $status = 2 || exit 1
 
-decho Second restore
-tar -xf archive.2 -g db.2
-find dir | sort
+echo 1>&2 -----
+chmod 000 directory
+tar cf archive --ignore-failed-read directory || exit 1
+status=$?
+chmod 700 directory
+test $status = 0
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
-Second restore
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating directory structure
-Creating initial archive
-Renaming
-Creating incremental archive
-First restore
-directory
-directory/file
-directory/subdir
-Second restore
-dir
-dir/subdir.0
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/rename05.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+echo >>"$at_stderr"; $as_echo "-----
+tar: file: Cannot open: Permission denied
+tar: Exiting with failure status due to previous errors
+-----
+tar: file: Warning: Cannot open: Permission denied
+-----
+tar: directory: Cannot open: Permission denied
+tar: Exiting with failure status due to previous errors
+-----
+tar: directory: Warning: Cannot open: Permission denied
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/ignfail.at:26"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  38 ) # 38. chtype.at:27: changed file types in incrementals
-    at_setup_line='chtype.at:27'
-    at_desc="changed file types in incrementals"
-    $at_quiet $ECHO_N " 38: changed file types in incrementals             $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_53
+#AT_START_54
+# 54. link01.at:33: link count gt 2
+at_setup_line='link01.at:33'
+at_desc="link count gt 2"
+$at_quiet $as_echo_n " 54: $at_desc                                "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "38. chtype.at:27: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "54. link01.at:33: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/chtype.at:30:
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+  $at_traceoff
+$as_echo "$at_srcdir/link01.at:36:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H gnu\"
+TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
-install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
-mkdir directory/a
-genfile --file directory/a/a
-
-echo First backup
-tar --create --file=archive.1 --listed-incremental=db.1 directory
-
-sleep 2
-
-# Remove directory b and create a file with this name.
-# Previous versions were not able to restore over this file.
-rm -r directory/b
-genfile --file directory/b
-genfile --file directory/a/b
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
 
-echo Second backup
-tar --create --file=archive.2 --listed-incremental=db.2 directory
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-# Delete a
 rm -r directory
+tar xf archive
 
-echo Restore archive.1
-tar -xf archive.1 --listed-incremental=/dev/null
-echo Restore archive.2
-tar -xf archive.2 --listed-incremental=/dev/null
-find directory | sort
+ls directory/test1
 )"
-echo chtype.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo link01.at:36 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
-install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
-mkdir directory/a
-genfile --file directory/a/a
-
-echo First backup
-tar --create --file=archive.1 --listed-incremental=db.1 directory
-
-sleep 2
-
-# Remove directory b and create a file with this name.
-# Previous versions were not able to restore over this file.
-rm -r directory/b
-genfile --file directory/b
-genfile --file directory/a/b
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
 
-echo Second backup
-tar --create --file=archive.2 --listed-incremental=db.2 directory
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-# Delete a
 rm -r directory
+tar xf archive
 
-echo Restore archive.1
-tar -xf archive.1 --listed-incremental=/dev/null
-echo Restore archive.2
-tar -xf archive.2 --listed-incremental=/dev/null
-find directory | sort
+ls directory/test1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
 
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
-mkdir directory/a
-genfile --file directory/a/a
+rm -r directory
+tar xf archive
 
-echo First backup
-tar --create --file=archive.1 --listed-incremental=db.1 directory
+ls directory/test1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "test.txt
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link01.at:36"
 
-sleep 2
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-# Remove directory b and create a file with this name.
-# Previous versions were not able to restore over this file.
-rm -r directory/b
-genfile --file directory/b
-genfile --file directory/a/b
+              { $at_traceoff
+$as_echo "$at_srcdir/link01.at:36:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
 
-echo Second backup
-tar --create --file=archive.2 --listed-incremental=db.2 directory
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
+
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
+
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-# Delete a
 rm -r directory
+tar xf archive
 
-echo Restore archive.1
-tar -xf archive.1 --listed-incremental=/dev/null
-echo Restore archive.2
-tar -xf archive.2 --listed-incremental=/dev/null
-find directory | sort
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+ls directory/test1
+)"
+echo link01.at:36 >"$at_check_line_file"
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "First backup
-Second backup
-Restore archive.1
-Restore archive.2
-directory
-directory/a
-directory/a/a
-directory/a/b
-directory/b
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/chtype.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
+
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-$at_traceon
+rm -r directory
+tar xf archive
 
-              $at_traceoff
-echo "$at_srcdir/chtype.at:30:
+ls directory/test1
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
 
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
-mkdir directory/a
-genfile --file directory/a/a
+rm -r directory
+tar xf archive
 
-echo First backup
-tar --create --file=archive.1 --listed-incremental=db.1 directory
+ls directory/test1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "test.txt
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link01.at:36"
 
-sleep 2
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-# Remove directory b and create a file with this name.
-# Previous versions were not able to restore over this file.
-rm -r directory/b
-genfile --file directory/b
-genfile --file directory/a/b
+              { $at_traceoff
+$as_echo "$at_srcdir/link01.at:36:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
 
-echo Second backup
-tar --create --file=archive.2 --listed-incremental=db.2 directory
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
+
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
+
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-# Delete a
 rm -r directory
+tar xf archive
 
-echo Restore archive.1
-tar -xf archive.1 --listed-incremental=/dev/null
-echo Restore archive.2
-tar -xf archive.2 --listed-incremental=/dev/null
-find directory | sort
+ls directory/test1
 )"
-echo chtype.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo link01.at:36 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
-install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
-mkdir directory/a
-genfile --file directory/a/a
-
-echo First backup
-tar --create --file=archive.1 --listed-incremental=db.1 directory
-
-sleep 2
-
-# Remove directory b and create a file with this name.
-# Previous versions were not able to restore over this file.
-rm -r directory/b
-genfile --file directory/b
-genfile --file directory/a/b
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
 
-echo Second backup
-tar --create --file=archive.2 --listed-incremental=db.2 directory
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-# Delete a
 rm -r directory
+tar xf archive
 
-echo Restore archive.1
-tar -xf archive.1 --listed-incremental=/dev/null
-echo Restore archive.2
-tar -xf archive.2 --listed-incremental=/dev/null
-find directory | sort
+ls directory/test1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
-install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
-mkdir directory/a
-genfile --file directory/a/a
-
-echo First backup
-tar --create --file=archive.1 --listed-incremental=db.1 directory
-
-sleep 2
-
-# Remove directory b and create a file with this name.
-# Previous versions were not able to restore over this file.
-rm -r directory/b
-genfile --file directory/b
-genfile --file directory/a/b
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
 
-echo Second backup
-tar --create --file=archive.2 --listed-incremental=db.2 directory
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-# Delete a
 rm -r directory
+tar xf archive
 
-echo Restore archive.1
-tar -xf archive.1 --listed-incremental=/dev/null
-echo Restore archive.2
-tar -xf archive.2 --listed-incremental=/dev/null
-find directory | sort
+ls directory/test1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "First backup
-Second backup
-Restore archive.1
-Restore archive.2
-directory
-directory/a
-directory/a/a
-directory/a/b
-directory/b
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/chtype.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "test.txt
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link01.at:36"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/chtype.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/link01.at:36:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -17784,46 +24771,25 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
-install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
-mkdir directory/a
-genfile --file directory/a/a
-
-echo First backup
-tar --create --file=archive.1 --listed-incremental=db.1 directory
-
-sleep 2
-
-# Remove directory b and create a file with this name.
-# Previous versions were not able to restore over this file.
-rm -r directory/b
-genfile --file directory/b
-genfile --file directory/a/b
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
 
-echo Second backup
-tar --create --file=archive.2 --listed-incremental=db.2 directory
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-# Delete a
 rm -r directory
+tar xf archive
 
-echo Restore archive.1
-tar -xf archive.1 --listed-incremental=/dev/null
-echo Restore archive.2
-tar -xf archive.2 --listed-incremental=/dev/null
-find directory | sort
+ls directory/test1
 )"
-echo chtype.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo link01.at:36 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -17832,42 +24798,23 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
-install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
-mkdir directory/a
-genfile --file directory/a/a
-
-echo First backup
-tar --create --file=archive.1 --listed-incremental=db.1 directory
-
-sleep 2
-
-# Remove directory b and create a file with this name.
-# Previous versions were not able to restore over this file.
-rm -r directory/b
-genfile --file directory/b
-genfile --file directory/a/b
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
 
-echo Second backup
-tar --create --file=archive.2 --listed-incremental=db.2 directory
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-# Delete a
 rm -r directory
+tar xf archive
 
-echo Restore archive.1
-tar -xf archive.1 --listed-incremental=/dev/null
-echo Restore archive.2
-tar -xf archive.2 --listed-incremental=/dev/null
-find directory | sort
+ls directory/test1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -17876,93 +24823,146 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
 
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77
-mkdir directory/a
-genfile --file directory/a/a
+rm -r directory
+tar xf archive
 
-echo First backup
-tar --create --file=archive.1 --listed-incremental=db.1 directory
+ls directory/test1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "test.txt
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link01.at:36"
 
-sleep 2
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-# Remove directory b and create a file with this name.
-# Previous versions were not able to restore over this file.
-rm -r directory/b
-genfile --file directory/b
-genfile --file directory/a/b
+              { $at_traceoff
+$as_echo "$at_srcdir/link01.at:36:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
 
-echo Second backup
-tar --create --file=archive.2 --listed-incremental=db.2 directory
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
+
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
+
+tar cf archive directory/test1/test.txt directory/test1/test.txt
 
-# Delete a
 rm -r directory
+tar xf archive
 
-echo Restore archive.1
-tar -xf archive.1 --listed-incremental=/dev/null
-echo Restore archive.2
-tar -xf archive.2 --listed-incremental=/dev/null
-find directory | sort
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+ls directory/test1
+)"
+echo link01.at:36 >"$at_check_line_file"
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "First backup
-Second backup
-Restore archive.1
-Restore archive.2
-directory
-directory/a
-directory/a/a
-directory/a/b
-directory/b
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/chtype.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
+
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
+
+tar cf archive directory/test1/test.txt directory/test1/test.txt
+
+rm -r directory
+tar xf archive
+
+ls directory/test1
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
 
+mkdir directory
+mkdir directory/test1
+mkdir directory/test2
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo TEST > directory/test1/test.txt
+ln directory/test1/test.txt directory/test2/test.txt || exit 77
+
+tar cf archive directory/test1/test.txt directory/test1/test.txt
+
+rm -r directory
+tar xf archive
 
-$at_traceon
+ls directory/test1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "test.txt
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link01.at:36"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  39 ) # 39. ignfail.at:23: ignfail
-    at_setup_line='ignfail.at:23'
-    at_desc="ignfail"
-    $at_quiet $ECHO_N " 39: ignfail                                        $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_54
+#AT_START_55
+# 55. link02.at:32: preserve hard links with --remove-files
+at_setup_line='link02.at:32'
+at_desc="preserve hard links with --remove-files"
+$at_quiet $as_echo_n " 55: $at_desc        "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "39. ignfail.at:23: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "55. link02.at:32: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/ignfail.at:26:
+  $at_traceoff
+$as_echo "$at_srcdir/link02.at:35:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -17971,57 +24971,18 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=\$?
-chmod 600 file
-test \$status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=\$?
-chmod 600 file
-test \$status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=\$?
-chmod 700 directory
-test \$status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=\$?
-chmod 700 directory
-test \$status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 )"
-echo ignfail.at:26 >"$at_check_line_file"
+echo link02.at:35 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -18030,53 +24991,16 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=$?
-chmod 600 file
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=$?
-chmod 600 file
-test $status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=$?
-chmod 700 directory
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=$?
-chmod 700 directory
-test $status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -18085,81 +25009,29 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=$?
-chmod 600 file
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=$?
-chmod 600 file
-test $status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=$?
-chmod 700 directory
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=$?
-chmod 700 directory
-test $status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "-----
-tar: file: Cannot open: Permission denied
-tar: Exiting with failure status due to previous errors
------
-tar: file: Warning: Cannot open: Permission denied
------
-tar: directory: Cannot open: Permission denied
-tar: Exiting with failure status due to previous errors
------
-tar: directory: Warning: Cannot open: Permission denied
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/ignfail.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file1
+file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link02.at:35"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/ignfail.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/link02.at:35:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -18168,57 +25040,18 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=\$?
-chmod 600 file
-test \$status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=\$?
-chmod 600 file
-test \$status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=\$?
-chmod 700 directory
-test \$status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=\$?
-chmod 700 directory
-test \$status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 )"
-echo ignfail.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo link02.at:35 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -18226,54 +25059,17 @@ export TEST_TAR_FORMAT
 TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
-
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=$?
-chmod 600 file
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=$?
-chmod 600 file
-test $status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=$?
-chmod 700 directory
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=$?
-chmod 700 directory
-test $status = 0
+
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -18282,81 +25078,29 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=$?
-chmod 600 file
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=$?
-chmod 600 file
-test $status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=$?
-chmod 700 directory
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=$?
-chmod 700 directory
-test $status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "-----
-tar: file: Cannot open: Permission denied
-tar: Exiting with failure status due to previous errors
------
-tar: file: Warning: Cannot open: Permission denied
------
-tar: directory: Cannot open: Permission denied
-tar: Exiting with failure status due to previous errors
------
-tar: directory: Warning: Cannot open: Permission denied
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/ignfail.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file1
+file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link02.at:35"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/ignfail.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/link02.at:35:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -18365,57 +25109,18 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=\$?
-chmod 600 file
-test \$status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=\$?
-chmod 600 file
-test \$status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=\$?
-chmod 700 directory
-test \$status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=\$?
-chmod 700 directory
-test \$status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 )"
-echo ignfail.at:26 >"$at_check_line_file"
+echo link02.at:35 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -18424,53 +25129,16 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=$?
-chmod 600 file
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=$?
-chmod 600 file
-test $status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=$?
-chmod 700 directory
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=$?
-chmod 700 directory
-test $status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -18479,81 +25147,29 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=$?
-chmod 600 file
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=$?
-chmod 600 file
-test $status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=$?
-chmod 700 directory
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=$?
-chmod 700 directory
-test $status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "-----
-tar: file: Cannot open: Permission denied
-tar: Exiting with failure status due to previous errors
------
-tar: file: Warning: Cannot open: Permission denied
------
-tar: directory: Cannot open: Permission denied
-tar: Exiting with failure status due to previous errors
------
-tar: directory: Warning: Cannot open: Permission denied
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/ignfail.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file1
+file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link02.at:35"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/ignfail.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/link02.at:35:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -18562,57 +25178,18 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=\$?
-chmod 600 file
-test \$status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=\$?
-chmod 600 file
-test \$status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=\$?
-chmod 700 directory
-test \$status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=\$?
-chmod 700 directory
-test \$status = 0
-)"
-echo ignfail.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
+)"
+echo link02.at:35 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -18621,53 +25198,16 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=$?
-chmod 600 file
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=$?
-chmod 600 file
-test $status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=$?
-chmod 700 directory
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=$?
-chmod 700 directory
-test $status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -18676,81 +25216,29 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=$?
-chmod 600 file
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=$?
-chmod 600 file
-test $status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=$?
-chmod 700 directory
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=$?
-chmod 700 directory
-test $status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "-----
-tar: file: Cannot open: Permission denied
-tar: Exiting with failure status due to previous errors
------
-tar: file: Warning: Cannot open: Permission denied
------
-tar: directory: Cannot open: Permission denied
-tar: Exiting with failure status due to previous errors
------
-tar: directory: Warning: Cannot open: Permission denied
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/ignfail.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file1
+file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link02.at:35"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/ignfail.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/link02.at:35:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -18759,57 +25247,18 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=\$?
-chmod 600 file
-test \$status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=\$?
-chmod 600 file
-test \$status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=\$?
-chmod 700 directory
-test \$status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=\$?
-chmod 700 directory
-test \$status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 )"
-echo ignfail.at:26 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo link02.at:35 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -18818,160 +25267,73 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=$?
-chmod 600 file
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=$?
-chmod 600 file
-test $status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=$?
-chmod 700 directory
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=$?
-chmod 700 directory
-test $status = 0
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
-export TAR_OPTIONS
-rm -rf *
-
-# The test is meaningless for super-user.
-
-echo "test" > $$
-chmod 0 $$
-cat $$ > /dev/null 2>&1
-result=$?
-rm -f $$
-test $result -eq 0 && exit 77
-
-
-touch file
-mkdir directory
-touch directory/file
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive file
-status=$?
-chmod 600 file
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 file
-tar cf archive --ignore-failed-read file || exit 1
-status=$?
-chmod 600 file
-test $status = 0 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive directory
-status=$?
-chmod 700 directory
-test $status = 2 || exit 1
-
-echo 1>&2 -----
-chmod 000 directory
-tar cf archive --ignore-failed-read directory || exit 1
-status=$?
-chmod 700 directory
-test $status = 0
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-echo >>"$at_stderr"; echo "-----
-tar: file: Cannot open: Permission denied
-tar: Exiting with failure status due to previous errors
------
-tar: file: Warning: Cannot open: Permission denied
------
-tar: directory: Cannot open: Permission denied
-tar: Exiting with failure status due to previous errors
------
-tar: directory: Warning: Cannot open: Permission denied
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/ignfail.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
 
-  echo 1 > "$at_status_file"
-  exit 1
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
+tar -c -f archive --remove-files file1 file2 file3 file4
+tar tfv archive | sed -n 's/.*file[2-4] link to //p'
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file1
+file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link02.at:35"
 
-$at_traceon
-
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  40 ) # 40. link01.at:33: link count gt 2
-    at_setup_line='link01.at:33'
-    at_desc="link count gt 2"
-    $at_quiet $ECHO_N " 40: link count gt 2                                $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_55
+#AT_START_56
+# 56. link03.at:24: working -l with --remove-files
+at_setup_line='link03.at:24'
+at_desc="working -l with --remove-files"
+$at_quiet $as_echo_n " 56: $at_desc                 "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "40. link01.at:33: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "56. link03.at:24: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/link01.at:36:
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/link03.at:34:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -18980,29 +25342,30 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 )"
-echo link01.at:36 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo link03.at:34 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -19011,25 +25374,28 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -19038,44 +25404,45 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "test.txt
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/link01.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo >>"$at_stderr"; $as_echo "tar: Missing links to \`file1'.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "archive.1
+archive.2
+testing archive.2
+file1
+file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link03.at:34"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/link01.at:36:
+              $at_traceoff
+$as_echo "$at_srcdir/link03.at:34:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -19084,29 +25451,30 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 )"
-echo link01.at:36 >"$at_check_line_file"
+echo link03.at:34 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -19115,25 +25483,28 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -19142,44 +25513,45 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "test.txt
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/link01.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo >>"$at_stderr"; $as_echo "tar: Missing links to \`file1'.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "archive.1
+archive.2
+testing archive.2
+file1
+file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link03.at:34"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/link01.at:36:
+              $at_traceoff
+$as_echo "$at_srcdir/link03.at:34:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -19188,29 +25560,30 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 )"
-echo link01.at:36 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo link03.at:34 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -19219,25 +25592,28 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -19246,44 +25622,45 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "test.txt
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/link01.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo >>"$at_stderr"; $as_echo "tar: Missing links to \`file1'.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "archive.1
+archive.2
+testing archive.2
+file1
+file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link03.at:34"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/link01.at:36:
+              $at_traceoff
+$as_echo "$at_srcdir/link03.at:34:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -19292,29 +25669,30 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 )"
-echo link01.at:36 >"$at_check_line_file"
+echo link03.at:34 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -19323,25 +25701,28 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -19350,44 +25731,45 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "test.txt
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/link01.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo >>"$at_stderr"; $as_echo "tar: Missing links to \`file1'.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "archive.1
+archive.2
+testing archive.2
+file1
+file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link03.at:34"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/link01.at:36:
+              $at_traceoff
+$as_echo "$at_srcdir/link03.at:34:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -19396,29 +25778,30 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 )"
-echo link01.at:36 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo link03.at:34 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -19427,25 +25810,28 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -19454,61 +25840,62 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-mkdir directory/test1
-mkdir directory/test2
 
-echo TEST > directory/test1/test.txt
-ln directory/test1/test.txt directory/test2/test.txt || exit 77
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-tar cf archive directory/test1/test.txt directory/test1/test.txt
+echo archive.1
+tar -c -f archive.1 -l --remove-files file1 file2 file3 file4
 
-rm -r directory
-tar xf archive
+genfile -l 64 -f file1
+link file1 file2
+link file2 file3
+link file3 file4
 
-ls directory/test1
+echo archive.2
+tar -c -f archive.2 -l --remove-files file1 file2 file3
+echo testing archive.2
+tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p'
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "test.txt
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/link01.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+echo >>"$at_stderr"; $as_echo "tar: Missing links to \`file1'.
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "archive.1
+archive.2
+testing archive.2
+file1
+file1
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/link03.at:34"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  41 ) # 41. longv7.at:24: long names in V7 archives
-    at_setup_line='longv7.at:24'
-    at_desc="long names in V7 archives"
-    $at_quiet $ECHO_N " 41: long names in V7 archives                      $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_56
+#AT_START_57
+# 57. longv7.at:24: long names in V7 archives
+at_setup_line='longv7.at:24'
+at_desc="long names in V7 archives"
+$at_quiet $as_echo_n " 57: $at_desc                      "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "41. longv7.at:24: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "57. longv7.at:24: testing ..."
+  $at_traceon
 
 
 
@@ -19517,8 +25904,8 @@ $at_traceon
 
 
 
-  $at_traceoff
-echo "$at_srcdir/longv7.at:30:
+  $at_traceoff
+$as_echo "$at_srcdir/longv7.at:30:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -19536,13 +25923,9 @@ tar tf archive
 )"
 echo longv7.at:30 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -19558,11 +25941,9 @@ tar cf archive this_is_a_very_long_name_for_a_directory_which_causes_problems
 echo separator
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -19578,50 +25959,41 @@ tar cf archive this_is_a_very_long_name_for_a_directory_which_causes_problems
 echo separator
 tar tf archive
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: this_is_a_very_long_name_for_a_directory_which_causes_problems/this_is_a_very_long_file_name_which_raises_issues.c: file name is too long (max 99); not dumped
+echo >>"$at_stderr"; $as_echo "tar: this_is_a_very_long_name_for_a_directory_which_causes_problems/this_is_a_very_long_file_name_which_raises_issues.c: file name is too long (max 99); not dumped
 tar: Exiting with failure status due to previous errors
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
 this_is_a_very_long_name_for_a_directory_which_causes_problems/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/longv7.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/longv7.at:30"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  42 ) # 42. long01.at:28: long file names divisible by block size
-    at_setup_line='long01.at:28'
-    at_desc="long file names divisible by block size"
-    $at_quiet $ECHO_N " 42: long file names divisible by block size        $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_57
+#AT_START_58
+# 58. long01.at:28: long file names divisible by block size
+at_setup_line='long01.at:28'
+at_desc="long file names divisible by block size"
+$at_quiet $as_echo_n " 58: $at_desc        "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "42. long01.at:28: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "58. long01.at:28: testing ..."
+  $at_traceon
 
 
 
@@ -19631,8 +26003,8 @@ $at_traceon
 
 
 
-  $at_traceoff
-echo "$at_srcdir/long01.at:36:
+  $at_traceoff
+$as_echo "$at_srcdir/long01.at:36:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -19647,15 +26019,11 @@ echo test > endfile
 
 tar cf archive 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde endfile
 tar tf archive)"
-echo long01.at:36 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo long01.at:36 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -19670,11 +26038,9 @@ echo test > endfile
 
 tar cf archive 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde endfile
 tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -19689,31 +26055,21 @@ echo test > endfile
 
 tar cf archive 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde endfile
 tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde
 endfile
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/long01.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/long01.at:36"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/long01.at:36:
+              $at_traceoff
+$as_echo "$at_srcdir/long01.at:36:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -19730,13 +26086,9 @@ tar cf archive 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0
 tar tf archive)"
 echo long01.at:36 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -19751,11 +26103,9 @@ echo test > endfile
 
 tar cf archive 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde endfile
 tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -19770,48 +26120,38 @@ echo test > endfile
 
 tar cf archive 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde endfile
 tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde
 endfile
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/long01.at:36: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/long01.at:36"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  43 ) # 43. lustar01.at:21: ustar: unsplittable file name
-    at_setup_line='lustar01.at:21'
-    at_desc="ustar: unsplittable file name"
-    $at_quiet $ECHO_N " 43: ustar: unsplittable file name                  $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_58
+#AT_START_59
+# 59. lustar01.at:21: ustar: unsplittable file name
+at_setup_line='lustar01.at:21'
+at_desc="ustar: unsplittable file name"
+$at_quiet $as_echo_n " 59: $at_desc                  "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "43. lustar01.at:21: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "59. lustar01.at:21: testing ..."
+  $at_traceon
 
 
 
@@ -19819,8 +26159,8 @@ $at_traceon
 
 
 
-  $at_traceoff
-echo "$at_srcdir/lustar01.at:27:
+  $at_traceoff
+$as_echo "$at_srcdir/lustar01.at:27:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -19834,13 +26174,9 @@ tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation_o
 )"
 echo lustar01.at:27 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -19852,11 +26188,9 @@ rm -rf *
 genfile --file=this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_between_name_and_prefix || exit 77
 tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_between_name_and_prefix
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -19868,48 +26202,38 @@ rm -rf *
 genfile --file=this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_between_name_and_prefix || exit 77
 tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_between_name_and_prefix
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_between_name_and_prefix: file name is too long (cannot be split); not dumped
+echo >>"$at_stderr"; $as_echo "tar: this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_between_name_and_prefix: file name is too long (cannot be split); not dumped
 tar: Exiting with failure status due to previous errors
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   2) ;;
-   *) echo "$at_srcdir/lustar01.at:27: exit code was $at_status, expected 2"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 2 $at_status "$at_srcdir/lustar01.at:27"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  44 ) # 44. lustar02.at:21: ustar: unsplittable path name
-    at_setup_line='lustar02.at:21'
-    at_desc="ustar: unsplittable path name"
-    $at_quiet $ECHO_N " 44: ustar: unsplittable path name                  $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_59
+#AT_START_60
+# 60. lustar02.at:21: ustar: unsplittable path name
+at_setup_line='lustar02.at:21'
+at_desc="ustar: unsplittable path name"
+$at_quiet $as_echo_n " 60: $at_desc                  "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "44. lustar02.at:21: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "60. lustar02.at:21: testing ..."
+  $at_traceon
 
 
 
@@ -19921,8 +26245,8 @@ $at_traceon
 
 
 
-  $at_traceoff
-echo "$at_srcdir/lustar02.at:32:
+  $at_traceoff
+$as_echo "$at_srcdir/lustar02.at:32:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -19937,13 +26261,9 @@ tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation_o
 )"
 echo lustar02.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -19956,11 +26276,9 @@ rm -rf *
 install-sh -d this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be >/dev/null && genfile --file this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be/tween_name_and_prefix || exit 77
 tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -19973,48 +26291,38 @@ rm -rf *
 install-sh -d this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be >/dev/null && genfile --file this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be/tween_name_and_prefix || exit 77
 tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be/: file name is too long (cannot be split); not dumped
+echo >>"$at_stderr"; $as_echo "tar: this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be/: file name is too long (cannot be split); not dumped
 tar: Exiting with failure status due to previous errors
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   2) ;;
-   *) echo "$at_srcdir/lustar02.at:32: exit code was $at_status, expected 2"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 2 $at_status "$at_srcdir/lustar02.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  45 ) # 45. lustar03.at:21: ustar: splitting long names
-    at_setup_line='lustar03.at:21'
-    at_desc="ustar: splitting long names"
-    $at_quiet $ECHO_N " 45: ustar: splitting long names                    $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_60
+#AT_START_61
+# 61. lustar03.at:21: ustar: splitting long names
+at_setup_line='lustar03.at:21'
+at_desc="ustar: splitting long names"
+$at_quiet $as_echo_n " 61: $at_desc                    "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "45. lustar03.at:21: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "61. lustar03.at:21: testing ..."
+  $at_traceon
 
 
 
@@ -20024,8 +26332,8 @@ $at_traceon
 
 
 
-  $at_traceoff
-echo "$at_srcdir/lustar03.at:29:
+  $at_traceoff
+$as_echo "$at_srcdir/lustar03.at:29:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -20042,13 +26350,9 @@ echo \"List archive\"
 tar tf archive)"
 echo lustar03.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -20063,11 +26367,9 @@ echo "Create archive"
 tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation/of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be
 echo "List archive"
 tar tf archive) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -20082,50 +26384,40 @@ echo "Create archive"
 tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation/of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be
 echo "List archive"
 tar tf archive) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Create archive
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Create archive
 List archive
 this_is_a_very_long_name_for_a_file_designed_to_test_generation/of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be/
 this_is_a_very_long_name_for_a_file_designed_to_test_generation/of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be/file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/lustar03.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/lustar03.at:29"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  46 ) # 46. multiv01.at:23: multivolume dumps from pipes
-    at_setup_line='multiv01.at:23'
-    at_desc="multivolume dumps from pipes"
-    $at_quiet $ECHO_N " 46: multivolume dumps from pipes                   $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_61
+#AT_START_62
+# 62. multiv01.at:23: multivolume dumps from pipes
+at_setup_line='multiv01.at:23'
+at_desc="multivolume dumps from pipes"
+$at_quiet $as_echo_n " 62: $at_desc                   "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "46. multiv01.at:23: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "62. multiv01.at:23: testing ..."
+  $at_traceon
 
 
 
@@ -20135,8 +26427,8 @@ $at_traceon
 
 
 
-  $at_traceoff
-echo "$at_srcdir/multiv01.at:30:
+  $at_traceoff
+$as_echo "$at_srcdir/multiv01.at:30:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -20163,7 +26455,6 @@ else
 fi
 
 tar -c --multi-volume --tape-length=\$TAPE_LENGTH \\
-  --listed-incremental=t.snar \\
   -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1
 
 mkdir extract-dir-pipe
@@ -20177,13 +26468,9 @@ cmp file2 extract-dir-pipe/file2
 )"
 echo multiv01.at:30 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -20210,7 +26497,6 @@ else
 fi
 
 tar -c --multi-volume --tape-length=$TAPE_LENGTH \
-  --listed-incremental=t.snar \
   -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1
 
 mkdir extract-dir-pipe
@@ -20222,11 +26508,9 @@ PATH=$PATH ${TRUSS} tar -f t1-pipe.tar -f - \
 cmp file1 extract-dir-pipe/file1
 cmp file2 extract-dir-pipe/file2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -20253,7 +26537,6 @@ else
 fi
 
 tar -c --multi-volume --tape-length=$TAPE_LENGTH \
-  --listed-incremental=t.snar \
   -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1
 
 mkdir extract-dir-pipe
@@ -20265,29 +26548,18 @@ PATH=$PATH ${TRUSS} tar -f t1-pipe.tar -f - \
 cmp file1 extract-dir-pipe/file1
 cmp file2 extract-dir-pipe/file2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv01.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv01.at:30"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/multiv01.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/multiv01.at:30:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -20314,7 +26586,6 @@ else
 fi
 
 tar -c --multi-volume --tape-length=\$TAPE_LENGTH \\
-  --listed-incremental=t.snar \\
   -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1
 
 mkdir extract-dir-pipe
@@ -20328,13 +26599,9 @@ cmp file2 extract-dir-pipe/file2
 )"
 echo multiv01.at:30 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -20361,7 +26628,6 @@ else
 fi
 
 tar -c --multi-volume --tape-length=$TAPE_LENGTH \
-  --listed-incremental=t.snar \
   -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1
 
 mkdir extract-dir-pipe
@@ -20373,11 +26639,9 @@ PATH=$PATH ${TRUSS} tar -f t1-pipe.tar -f - \
 cmp file1 extract-dir-pipe/file1
 cmp file2 extract-dir-pipe/file2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -20404,7 +26668,6 @@ else
 fi
 
 tar -c --multi-volume --tape-length=$TAPE_LENGTH \
-  --listed-incremental=t.snar \
   -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1
 
 mkdir extract-dir-pipe
@@ -20416,29 +26679,18 @@ PATH=$PATH ${TRUSS} tar -f t1-pipe.tar -f - \
 cmp file1 extract-dir-pipe/file1
 cmp file2 extract-dir-pipe/file2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv01.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv01.at:30"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/multiv01.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/multiv01.at:30:
 mkdir pax
 (cd pax
 TEST_TAR_FORMAT=pax
@@ -20465,7 +26717,6 @@ else
 fi
 
 tar -c --multi-volume --tape-length=\$TAPE_LENGTH \\
-  --listed-incremental=t.snar \\
   -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1
 
 mkdir extract-dir-pipe
@@ -20479,13 +26730,9 @@ cmp file2 extract-dir-pipe/file2
 )"
 echo multiv01.at:30 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains a ${...} parameter expansion)'
+   false; }; then
+  ( $at_traceon;
 mkdir pax
 (cd pax
 TEST_TAR_FORMAT=pax
@@ -20512,7 +26759,6 @@ else
 fi
 
 tar -c --multi-volume --tape-length=$TAPE_LENGTH \
-  --listed-incremental=t.snar \
   -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1
 
 mkdir extract-dir-pipe
@@ -20524,11 +26770,9 @@ PATH=$PATH ${TRUSS} tar -f t1-pipe.tar -f - \
 cmp file1 extract-dir-pipe/file1
 cmp file2 extract-dir-pipe/file2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir pax
 (cd pax
 TEST_TAR_FORMAT=pax
@@ -20555,7 +26799,6 @@ else
 fi
 
 tar -c --multi-volume --tape-length=$TAPE_LENGTH \
-  --listed-incremental=t.snar \
   -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1
 
 mkdir extract-dir-pipe
@@ -20567,53 +26810,42 @@ PATH=$PATH ${TRUSS} tar -f t1-pipe.tar -f - \
 cmp file1 extract-dir-pipe/file1
 cmp file2 extract-dir-pipe/file2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv01.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv01.at:30"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  47 ) # 47. multiv02.at:28: skipping a straddling member
-    at_setup_line='multiv02.at:28'
-    at_desc="skipping a straddling member"
-    $at_quiet $ECHO_N " 47: skipping a straddling member                   $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_62
+#AT_START_63
+# 63. multiv02.at:28: skipping a straddling member
+at_setup_line='multiv02.at:28'
+at_desc="skipping a straddling member"
+$at_quiet $as_echo_n " 63: $at_desc                   "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "47. multiv02.at:28: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "63. multiv02.at:28: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/multiv02.at:31:
+  $at_traceoff
+$as_echo "$at_srcdir/multiv02.at:31:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -20635,13 +26867,9 @@ tar -v -x -f A.tar -f B.tar -f C.tar -M en || exit 1
 )"
 echo multiv02.at:31 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -20661,11 +26889,9 @@ tar -c -f A.tar -f B.tar -f C.tar -M -L 30 en to tre fire || exit 1
 echo separator
 tar -v -x -f A.tar -f B.tar -f C.tar -M en || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -20685,31 +26911,21 @@ tar -c -f A.tar -f B.tar -f C.tar -M -L 30 en to tre fire || exit 1
 echo separator
 tar -v -x -f A.tar -f B.tar -f C.tar -M en || exit 1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
 en
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv02.at:31: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv02.at:31"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/multiv02.at:31:
+              $at_traceoff
+$as_echo "$at_srcdir/multiv02.at:31:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -20731,13 +26947,9 @@ tar -v -x -f A.tar -f B.tar -f C.tar -M en || exit 1
 )"
 echo multiv02.at:31 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -20757,11 +26969,9 @@ tar -c -f A.tar -f B.tar -f C.tar -M -L 30 en to tre fire || exit 1
 echo separator
 tar -v -x -f A.tar -f B.tar -f C.tar -M en || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -20781,31 +26991,21 @@ tar -c -f A.tar -f B.tar -f C.tar -M -L 30 en to tre fire || exit 1
 echo separator
 tar -v -x -f A.tar -f B.tar -f C.tar -M en || exit 1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
 en
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv02.at:31: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv02.at:31"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/multiv02.at:31:
+              $at_traceoff
+$as_echo "$at_srcdir/multiv02.at:31:
 mkdir pax
 (cd pax
 TEST_TAR_FORMAT=pax
@@ -20827,13 +27027,9 @@ tar -v -x -f A.tar -f B.tar -f C.tar -M en || exit 1
 )"
 echo multiv02.at:31 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir pax
 (cd pax
 TEST_TAR_FORMAT=pax
@@ -20853,11 +27049,9 @@ tar -c -f A.tar -f B.tar -f C.tar -M -L 30 en to tre fire || exit 1
 echo separator
 tar -v -x -f A.tar -f B.tar -f C.tar -M en || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir pax
 (cd pax
 TEST_TAR_FORMAT=pax
@@ -20877,55 +27071,45 @@ tar -c -f A.tar -f B.tar -f C.tar -M -L 30 en to tre fire || exit 1
 echo separator
 tar -v -x -f A.tar -f B.tar -f C.tar -M en || exit 1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
 en
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv02.at:31: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv02.at:31"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  48 ) # 48. multiv03.at:30: MV archive & long filenames
-    at_setup_line='multiv03.at:30'
-    at_desc="MV archive & long filenames"
-    $at_quiet $ECHO_N " 48: MV archive & long filenames                    $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_63
+#AT_START_64
+# 64. multiv03.at:30: MV archive & long filenames
+at_setup_line='multiv03.at:30'
+at_desc="MV archive & long filenames"
+$at_quiet $as_echo_n " 64: $at_desc                    "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "48. multiv03.at:30: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "64. multiv03.at:30: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/multiv03.at:33:
+  $at_traceoff
+$as_echo "$at_srcdir/multiv03.at:33:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -20967,13 +27151,9 @@ cmp \$BFILE bfile
 )"
 echo multiv03.at:33 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a `...` command substitution)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -21013,11 +27193,9 @@ mv $BFILE bfile
 tar -M -x -f arch.1 -f arch.2 || exit 1
 cmp $BFILE bfile
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -21057,29 +27235,18 @@ mv $BFILE bfile
 tar -M -x -f arch.1 -f arch.2 || exit 1
 cmp $BFILE bfile
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
 $at_diff experr "$at_stderr" || at_failed=:
 $at_diff expout "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv03.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+at_func_check_status 0 $at_status "$at_srcdir/multiv03.at:33"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/multiv03.at:33:
+              $at_traceoff
+$as_echo "$at_srcdir/multiv03.at:33:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -21121,13 +27288,9 @@ cmp \$BFILE bfile
 )"
 echo multiv03.at:33 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a `...` command substitution)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -21167,11 +27330,9 @@ mv $BFILE bfile
 tar -M -x -f arch.1 -f arch.2 || exit 1
 cmp $BFILE bfile
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -21211,53 +27372,42 @@ mv $BFILE bfile
 tar -M -x -f arch.1 -f arch.2 || exit 1
 cmp $BFILE bfile
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
 $at_diff experr "$at_stderr" || at_failed=:
 $at_diff expout "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv03.at:33: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_check_status 0 $at_status "$at_srcdir/multiv03.at:33"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  49 ) # 49. multiv04.at:36: split directory members in a MV archive
-    at_setup_line='multiv04.at:36'
-    at_desc="split directory members in a MV archive"
-    $at_quiet $ECHO_N " 49: split directory members in a MV archive        $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_64
+#AT_START_65
+# 65. multiv04.at:36: split directory members in a MV archive
+at_setup_line='multiv04.at:36'
+at_desc="split directory members in a MV archive"
+$at_quiet $as_echo_n " 65: $at_desc        "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "49. multiv04.at:36: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "65. multiv04.at:36: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/multiv04.at:39:
+  $at_traceoff
+$as_echo "$at_srcdir/multiv04.at:39:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -21285,13 +27435,9 @@ echo separator
 tar -MRt -f arc.1 -f arc.2)"
 echo multiv04.at:39 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -21317,11 +27463,9 @@ tar --listed-incremental=list -c --record-size 1024 -L 16 -f arc.1 -f arc.2 -v d
 echo separator
 
 tar -MRt -f arc.1 -f arc.2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -21347,33 +27491,23 @@ tar --listed-incremental=list -c --record-size 1024 -L 16 -f arc.1 -f arc.2 -v d
 echo separator
 
 tar -MRt -f arc.1 -f arc.2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
 separator
 block 0: directory/
 block 35: ** Block of NULs **
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv04.at:39: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv04.at:39"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/multiv04.at:39:
+              $at_traceoff
+$as_echo "$at_srcdir/multiv04.at:39:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -21401,13 +27535,9 @@ echo separator
 tar -MRt -f arc.1 -f arc.2)"
 echo multiv04.at:39 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -21433,11 +27563,9 @@ tar --listed-incremental=list -c --record-size 1024 -L 16 -f arc.1 -f arc.2 -v d
 echo separator
 
 tar -MRt -f arc.1 -f arc.2) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -21463,58 +27591,48 @@ tar --listed-incremental=list -c --record-size 1024 -L 16 -f arc.1 -f arc.2 -v d
 echo separator
 
 tar -MRt -f arc.1 -f arc.2) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
 separator
 block 0: directory/
 block 35: ** Block of NULs **
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv04.at:39: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv04.at:39"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
 
 
 
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  50 ) # 50. multiv05.at:26: Restoring after an out of sync volume
-    at_setup_line='multiv05.at:26'
-    at_desc="Restoring after an out of sync volume"
-    $at_quiet $ECHO_N " 50: Restoring after an out of sync volume          $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_65
+#AT_START_66
+# 66. multiv05.at:26: Restoring after an out of sync volume
+at_setup_line='multiv05.at:26'
+at_desc="Restoring after an out of sync volume"
+$at_quiet $as_echo_n " 66: $at_desc          "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "50. multiv05.at:26: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "66. multiv05.at:26: testing ..."
+  $at_traceon
 
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/multiv05.at:30:
+  $at_traceoff
+$as_echo "$at_srcdir/multiv05.at:30:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -21554,13 +27672,9 @@ echo Diffing szesc
 )"
 echo multiv05.at:30 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -21598,11 +27712,9 @@ echo Diffing piec
 echo Diffing szesc
    cmp bak/szesc szesc || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -21640,13 +27752,13 @@ echo Diffing piec
 echo Diffing szesc
    cmp bak/szesc szesc || exit 1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: \`trzy' is not continued on this volume
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating archive
+echo >>"$at_stderr"; $as_echo "tar: \`trzy' is not continued on this volume
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating archive
 separator
 jeden
 dwa
@@ -21660,53 +27772,118 @@ Diffing trzy
 Diffing cztery
 Diffing piec
 Diffing szesc
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv05.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv05.at:30"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
 
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_66
+#AT_START_67
+# 67. multiv06.at:27: Multivolumes with L=record_size
+at_setup_line='multiv06.at:27'
+at_desc="Multivolumes with L=record_size"
+$at_quiet $as_echo_n " 67: $at_desc                "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "67. multiv06.at:27: testing ..."
+  $at_traceon
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  51 ) # 51. multiv06.at:27: Multivolumes with L=record_size
-    at_setup_line='multiv06.at:27'
-    at_desc="Multivolumes with L=record_size"
-    $at_quiet $ECHO_N " 51: Multivolumes with L=record_size                $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "51. multiv06.at:27: testing ..."
-      $at_traceon
 
 
+  { $at_traceoff
+$as_echo "$at_srcdir/multiv06.at:30:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
 
+exec <&-
+decho Creating file
+genfile --length 20139 --file file
+decho Creating archive
+tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file
+decho Testing archive
+tar -t -M -farc.1 -farc.2 -farc.3)"
+echo multiv06.at:30 >"$at_check_line_file"
 
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
 
-  $at_traceoff
-echo "$at_srcdir/multiv06.at:30:
+exec <&-
+decho Creating file
+genfile --length 20139 --file file
+decho Creating archive
+tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file
+decho Testing archive
+tar -t -M -farc.1 -farc.2 -farc.3) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H gnu\"
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+exec <&-
+decho Creating file
+genfile --length 20139 --file file
+decho Creating archive
+tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file
+decho Testing archive
+tar -t -M -farc.1 -farc.2 -farc.3) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "Creating file
+Creating archive
+Testing archive
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating file
+Creating archive
+Testing archive
+file
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv06.at:30"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/multiv06.at:30:
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H pax\"
 export TAR_OPTIONS
 rm -rf *
 
@@ -21719,18 +27896,14 @@ decho Testing archive
 tar -t -M -farc.1 -farc.2 -farc.3)"
 echo multiv06.at:30 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H pax"
 export TAR_OPTIONS
 rm -rf *
 
@@ -21741,16 +27914,14 @@ decho Creating archive
 tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file
 decho Testing archive
 tar -t -M -farc.1 -farc.2 -farc.3) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+  ( :;
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H pax"
 export TAR_OPTIONS
 rm -rf *
 
@@ -21761,220 +27932,514 @@ decho Creating archive
 tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file
 decho Testing archive
 tar -t -M -farc.1 -farc.2 -farc.3) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "Creating file
+echo >>"$at_stderr"; $as_echo "Creating file
 Creating archive
 Testing archive
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating file
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Creating file
 Creating archive
 Testing archive
 file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv06.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv06.at:30"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_67
+#AT_START_68
+# 68. multiv07.at:26: volumes split at an extended header
+at_setup_line='multiv07.at:26'
+at_desc="volumes split at an extended header"
+$at_quiet $as_echo_n " 68: $at_desc            "
+at_xfail=no
+      test -f \$XFAILFILE && at_xfail=yes
+      test -f $XFAILFILE && at_xfail=yes
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "68. multiv07.at:26: testing ..."
+  $at_traceon
+
+
+
+{ $at_traceoff
+$as_echo "$at_srcdir/multiv07.at:29:
+
+
+test -z "$TEST_DATA_DIR" && exit 77
+tarball_prereq xsplit-1.tar 0e008c84c517e48fbf23ca6a7033cde6 $TEST_DATA_DIR $TEST_DATA_URL || exit 77
+
+test -z "$TEST_DATA_DIR" && exit 77
+tarball_prereq xsplit-2.tar 03150b9852d285458f43734e9e0b9a45 $TEST_DATA_DIR $TEST_DATA_URL || exit 77
+
+cd \$TEST_DATA_DIR
+tar -t -M -fxsplit-1.tar -fxsplit-2.tar
+"
+echo multiv07.at:29 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+
+
+test -z "$TEST_DATA_DIR" && exit 77
+tarball_prereq xsplit-1.tar 0e008c84c517e48fbf23ca6a7033cde6 $TEST_DATA_DIR $TEST_DATA_URL || exit 77
+
+test -z "$TEST_DATA_DIR" && exit 77
+tarball_prereq xsplit-2.tar 03150b9852d285458f43734e9e0b9a45 $TEST_DATA_DIR $TEST_DATA_URL || exit 77
+
+cd $TEST_DATA_DIR
+tar -t -M -fxsplit-1.tar -fxsplit-2.tar
+ ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+
+
+test -z "$TEST_DATA_DIR" && exit 77
+tarball_prereq xsplit-1.tar 0e008c84c517e48fbf23ca6a7033cde6 $TEST_DATA_DIR $TEST_DATA_URL || exit 77
+
+test -z "$TEST_DATA_DIR" && exit 77
+tarball_prereq xsplit-2.tar 03150b9852d285458f43734e9e0b9a45 $TEST_DATA_DIR $TEST_DATA_URL || exit 77
+
+cd $TEST_DATA_DIR
+tar -t -M -fxsplit-1.tar -fxsplit-2.tar
+ ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Archive volumes split at an extended header Volume 1
+foo
+bar
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multiv07.at:29"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_68
+#AT_START_69
+# 69. old.at:23: old archives
+at_setup_line='old.at:23'
+at_desc="old archives"
+$at_quiet $as_echo_n " 69: $at_desc                                   "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "69. old.at:23: testing ..."
+  $at_traceon
+
+
+
+unset TAR_OPTIONS
+{ $at_traceoff
+$as_echo "$at_srcdir/old.at:27:
+mkdir directory
+tar cfvo archive directory || exit 1
+tar tf archive
+"
+echo old.at:27 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir directory
+tar cfvo archive directory || exit 1
+tar tf archive
+ ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir directory
+tar cfvo archive directory || exit 1
+tar tf archive
+ ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/old.at:27"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_69
+#AT_START_70
+# 70. recurse.at:21: recurse
+at_setup_line='recurse.at:21'
+at_desc="recurse"
+$at_quiet $as_echo_n " 70: $at_desc                                        "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "70. recurse.at:21: testing ..."
+  $at_traceon
 
 
-  echo 1 > "$at_status_file"
-  exit 1
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/recurse.at:24:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H v7\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+)"
+echo recurse.at:24 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/recurse.at:24"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/recurse.at:24:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H oldgnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+)"
+echo recurse.at:24 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H oldgnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/recurse.at:24"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/recurse.at:24:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+)"
+echo recurse.at:24 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/recurse.at:24"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/multiv06.at:30:
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
+              $at_traceoff
+$as_echo "$at_srcdir/recurse.at:24:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H pax\"
+TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-decho Creating file
-genfile --length 20139 --file file
-decho Creating archive
-tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file
-decho Testing archive
-tar -t -M -farc.1 -farc.2 -farc.3)"
-echo multiv06.at:30 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+)"
+echo recurse.at:24 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H pax"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-decho Creating file
-genfile --length 20139 --file file
-decho Creating archive
-tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file
-decho Testing archive
-tar -t -M -farc.1 -farc.2 -farc.3) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H pax"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-decho Creating file
-genfile --length 20139 --file file
-decho Creating archive
-tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file
-decho Testing archive
-tar -t -M -farc.1 -farc.2 -farc.3) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+mkdir directory
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
+tar tf archive
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "Creating file
-Creating archive
-Testing archive
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Creating file
-Creating archive
-Testing archive
-file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multiv06.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  52 ) # 52. old.at:23: old archives
-    at_setup_line='old.at:23'
-    at_desc="old archives"
-    $at_quiet $ECHO_N " 52: old archives                                   $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "52. old.at:23: testing ..."
-      $at_traceon
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/recurse.at:24"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
+              { $at_traceoff
+$as_echo "$at_srcdir/recurse.at:24:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
 
-unset TAR_OPTIONS
-$at_traceoff
-echo "$at_srcdir/old.at:27:
 mkdir directory
-tar cfvo archive directory || exit 1
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
 tar tf archive
-"
-echo old.at:27 >"$at_check_line_file"
+)"
+echo recurse.at:24 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
 mkdir directory
-tar cfvo archive directory || exit 1
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
 tar tf archive
- ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
 mkdir directory
-tar cfvo archive directory || exit 1
+touch directory/file
+tar --create --file archive --no-recursion directory || exit 1
 tar tf archive
- ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/old.at:27: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "directory/
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/recurse.at:24"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-$at_traceon
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  53 ) # 53. recurse.at:21: recurse
-    at_setup_line='recurse.at:21'
-    at_desc="recurse"
-    $at_quiet $ECHO_N " 53: recurse                                        $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_70
+#AT_START_71
+# 71. same-order01.at:26: working -C with --same-order
+at_setup_line='same-order01.at:26'
+at_desc="working -C with --same-order"
+$at_quiet $as_echo_n " 71: $at_desc                   "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "53. recurse.at:21: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "71. same-order01.at:26: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/recurse.at:24:
+  $at_traceoff
+$as_echo "$at_srcdir/same-order01.at:29:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -21983,20 +28448,24 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
 mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
-)"
-echo recurse.at:24 >"$at_check_line_file"
+tar -xf archive --same-order -C directory || exit 1
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+ls directory|sort
+)"
+echo same-order01.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -22005,16 +28474,22 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
 mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
+tar -xf archive --same-order -C directory || exit 1
+
+ls directory|sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -22023,35 +28498,34 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/recurse.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
+mkdir directory
+tar -xf archive --same-order -C directory || exit 1
+
+ls directory|sort
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/same-order01.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/recurse.at:24:
+              $at_traceoff
+$as_echo "$at_srcdir/same-order01.at:29:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -22060,20 +28534,24 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
 mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
-)"
-echo recurse.at:24 >"$at_check_line_file"
+tar -xf archive --same-order -C directory || exit 1
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+ls directory|sort
+)"
+echo same-order01.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -22082,16 +28560,22 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
 mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
+tar -xf archive --same-order -C directory || exit 1
+
+ls directory|sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -22100,35 +28584,34 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/recurse.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
 
+mkdir directory
+tar -xf archive --same-order -C directory || exit 1
 
-  echo 1 > "$at_status_file"
-  exit 1
+ls directory|sort
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/same-order01.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/recurse.at:24:
+              $at_traceoff
+$as_echo "$at_srcdir/same-order01.at:29:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -22137,20 +28620,24 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
 mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
-)"
-echo recurse.at:24 >"$at_check_line_file"
+tar -xf archive --same-order -C directory || exit 1
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+ls directory|sort
+)"
+echo same-order01.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -22159,16 +28646,22 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
 mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
+tar -xf archive --same-order -C directory || exit 1
+
+ls directory|sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -22177,35 +28670,34 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/recurse.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
+mkdir directory
+tar -xf archive --same-order -C directory || exit 1
+
+ls directory|sort
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/same-order01.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/recurse.at:24:
+              $at_traceoff
+$as_echo "$at_srcdir/same-order01.at:29:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -22214,20 +28706,24 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
 mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
-)"
-echo recurse.at:24 >"$at_check_line_file"
+tar -xf archive --same-order -C directory || exit 1
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+ls directory|sort
+)"
+echo same-order01.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -22236,16 +28732,22 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
 mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
+tar -xf archive --same-order -C directory || exit 1
+
+ls directory|sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -22254,35 +28756,34 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/recurse.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
+mkdir directory
+tar -xf archive --same-order -C directory || exit 1
+
+ls directory|sort
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/same-order01.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/recurse.at:24:
+              $at_traceoff
+$as_echo "$at_srcdir/same-order01.at:29:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -22291,20 +28792,24 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
 mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
-)"
-echo recurse.at:24 >"$at_check_line_file"
+tar -xf archive --same-order -C directory || exit 1
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+ls directory|sort
+)"
+echo same-order01.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -22313,16 +28818,22 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
 mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
+tar -xf archive --same-order -C directory || exit 1
+
+ls directory|sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -22331,59 +28842,58 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-touch directory/file
-tar --create --file archive --no-recursion directory || exit 1
-tar tf archive
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "directory/
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/recurse.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+genfile -l 1024 -f file1
+genfile -l 1024 -f file2
+tar cf archive file1 file2
+
+mkdir directory
+tar -xf archive --same-order -C directory || exit 1
 
-$at_traceon
+ls directory|sort
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/same-order01.at:29"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  54 ) # 54. same-order01.at:26: working -C with --same-order
-    at_setup_line='same-order01.at:26'
-    at_desc="working -C with --same-order"
-    $at_quiet $ECHO_N " 54: working -C with --same-order                   $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_71
+#AT_START_72
+# 72. same-order02.at:25: multiple -C options
+at_setup_line='same-order02.at:25'
+at_desc="multiple -C options"
+$at_quiet $as_echo_n " 72: $at_desc                            "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "54. same-order01.at:26: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "72. same-order02.at:25: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/same-order01.at:29:
+  $at_traceoff
+$as_echo "$at_srcdir/same-order02.at:28:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -22392,28 +28902,25 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
-)"
-echo same-order01.at:29 >"$at_check_line_file"
+HERE=\`pwd\`
+tar -xf archive --same-order -C \$HERE/en file1 -C \$HERE/to file2 || exit 1
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+ls en
+echo separator
+ls to
+)"
+echo same-order02.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -22422,24 +28929,23 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
+HERE=`pwd`
+tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+
+ls en
+echo separator
+ls to
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -22448,44 +28954,36 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
+HERE=`pwd`
+tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+
+ls en
+echo separator
+ls to
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+separator
 file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/same-order01.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/same-order02.at:28"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/same-order01.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/same-order02.at:28:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -22494,28 +28992,25 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
+
+HERE=\`pwd\`
+tar -xf archive --same-order -C \$HERE/en file1 -C \$HERE/to file2 || exit 1
 
-ls directory|sort
+ls en
+echo separator
+ls to
 )"
-echo same-order01.at:29 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo same-order02.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -22524,24 +29019,23 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
+HERE=`pwd`
+tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+
+ls en
+echo separator
+ls to
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -22550,44 +29044,36 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
+HERE=`pwd`
+tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+
+ls en
+echo separator
+ls to
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+separator
 file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/same-order01.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/same-order02.at:28"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/same-order01.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/same-order02.at:28:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -22596,28 +29082,25 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
-)"
-echo same-order01.at:29 >"$at_check_line_file"
+HERE=\`pwd\`
+tar -xf archive --same-order -C \$HERE/en file1 -C \$HERE/to file2 || exit 1
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+ls en
+echo separator
+ls to
+)"
+echo same-order02.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -22626,24 +29109,23 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
+HERE=`pwd`
+tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+
+ls en
+echo separator
+ls to
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -22652,44 +29134,36 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
+HERE=`pwd`
+tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+
+ls en
+echo separator
+ls to
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+separator
 file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/same-order01.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/same-order02.at:28"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/same-order01.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/same-order02.at:28:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -22698,28 +29172,25 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
-)"
-echo same-order01.at:29 >"$at_check_line_file"
+HERE=\`pwd\`
+tar -xf archive --same-order -C \$HERE/en file1 -C \$HERE/to file2 || exit 1
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+ls en
+echo separator
+ls to
+)"
+echo same-order02.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -22728,24 +29199,23 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
+HERE=`pwd`
+tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+
+ls en
+echo separator
+ls to
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -22754,44 +29224,36 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
+HERE=`pwd`
+tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+
+ls en
+echo separator
+ls to
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+separator
 file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/same-order01.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/same-order02.at:28"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/same-order01.at:29:
+              $at_traceoff
+$as_echo "$at_srcdir/same-order02.at:28:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -22800,28 +29262,25 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
-)"
-echo same-order01.at:29 >"$at_check_line_file"
+HERE=\`pwd\`
+tar -xf archive --same-order -C \$HERE/en file1 -C \$HERE/to file2 || exit 1
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+ls en
+echo separator
+ls to
+)"
+echo same-order02.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains a `...` command substitution)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -22830,24 +29289,23 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
+HERE=`pwd`
+tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+
+ls en
+echo separator
+ls to
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -22856,68 +29314,60 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-
-test -z "`sort < /dev/null 2>&1`" || exit 77
-
-
 genfile -l 1024 -f file1
 genfile -l 1024 -f file2
 tar cf archive file1 file2
 
-mkdir directory
-tar -xf archive --same-order -C directory || exit 1
+mkdir en
+mkdir to
 
-ls directory|sort
+HERE=`pwd`
+tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+
+ls en
+echo separator
+ls to
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "file1
+separator
 file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/same-order01.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/same-order02.at:28"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  55 ) # 55. same-order02.at:25: multiple -C options
-    at_setup_line='same-order02.at:25'
-    at_desc="multiple -C options"
-    $at_quiet $ECHO_N " 55: multiple -C options                            $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_72
+#AT_START_73
+# 73. shortrec.at:25: short records
+at_setup_line='shortrec.at:25'
+at_desc="short records"
+$at_quiet $as_echo_n " 73: $at_desc                                  "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "55. same-order02.at:25: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "73. shortrec.at:25: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/same-order02.at:28:
+  $at_traceoff
+$as_echo "$at_srcdir/shortrec.at:28:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -22926,29 +29376,20 @@ TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=\`pwd\`
-tar -xf archive --same-order -C \$HERE/en file1 -C \$HERE/to file2 || exit 1
-
-ls en
-echo separator
-ls to
-)"
-echo same-order02.at:28 >"$at_check_line_file"
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a `...` command substitution)'
-fi
+rm -r directory
+)"
+echo shortrec.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -22957,25 +29398,18 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=`pwd`
-tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
 
-ls en
-echo separator
-ls to
+rm -r directory
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -22984,46 +29418,27 @@ TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=`pwd`
-tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
 
-ls en
-echo separator
-ls to
+rm -r directory
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-separator
-file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/same-order02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/shortrec.at:28"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/same-order02.at:28:
+              $at_traceoff
+$as_echo "$at_srcdir/shortrec.at:28:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -23032,29 +29447,20 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=\`pwd\`
-tar -xf archive --same-order -C \$HERE/en file1 -C \$HERE/to file2 || exit 1
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
 
-ls en
-echo separator
-ls to
+rm -r directory
 )"
-echo same-order02.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a `...` command substitution)'
-fi
+echo shortrec.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -23063,25 +29469,18 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=`pwd`
-tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
 
-ls en
-echo separator
-ls to
+rm -r directory
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -23090,46 +29489,27 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=`pwd`
-tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
 
-ls en
-echo separator
-ls to
+rm -r directory
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-separator
-file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/same-order02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/shortrec.at:28"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/same-order02.at:28:
+              $at_traceoff
+$as_echo "$at_srcdir/shortrec.at:28:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -23138,29 +29518,20 @@ TAR_OPTIONS=\"-H ustar\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=\`pwd\`
-tar -xf archive --same-order -C \$HERE/en file1 -C \$HERE/to file2 || exit 1
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
 
-ls en
-echo separator
-ls to
+rm -r directory
 )"
-echo same-order02.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a `...` command substitution)'
-fi
+echo shortrec.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -23169,25 +29540,18 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=`pwd`
-tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
 
-ls en
-echo separator
-ls to
+rm -r directory
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -23196,46 +29560,193 @@ TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
 
-mkdir en
-mkdir to
+rm -r directory
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/shortrec.at:28"
 
-HERE=`pwd`
-tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-ls en
-echo separator
-ls to
+              { $at_traceoff
+$as_echo "$at_srcdir/shortrec.at:28:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
+
+rm -r directory
+)"
+echo shortrec.at:28 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
+
+rm -r directory
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H posix"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
+
+rm -r directory
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/shortrec.at:28"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/shortrec.at:28:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
+
+rm -r directory
+)"
+echo shortrec.at:28 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
+
+rm -r directory
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
+
+mkdir directory
+(cd directory && touch a b c d e f g h i j k l m n o p q r)
+tar -c -b 1 -f - directory | tar -t -f - > /dev/null
+tar -c -b 1 -f archive directory
+tar -t -f archive > /dev/null
+tar -t -f - < archive > /dev/null
+
+rm -r directory
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-separator
-file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/same-order02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/shortrec.at:28"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
-              $at_traceoff
-echo "$at_srcdir/same-order02.at:28:
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_73
+#AT_START_74
+# 74. sparse01.at:21: sparse files
+at_setup_line='sparse01.at:21'
+at_desc="sparse files"
+$at_quiet $as_echo_n " 74: $at_desc                                   "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "74. sparse01.at:21: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/sparse01.at:24:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -23244,29 +29755,24 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=\`pwd\`
-tar -xf archive --same-order -C \$HERE/en file1 -C \$HERE/to file2 || exit 1
+genfile --length 1000 -f begin
+genfile --length 1000 -f end
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-ls en
+tar tfv archive
 echo separator
-ls to
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 )"
-echo same-order02.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a `...` command substitution)'
-fi
+echo sparse01.at:24 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -23275,25 +29781,22 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=`pwd`
-tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+genfile --length 1000 -f begin
+genfile --length 1000 -f end
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-ls en
+tar tfv archive
 echo separator
-ls to
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -23302,46 +29805,31 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=`pwd`
-tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+genfile --length 1000 -f begin
+genfile --length 1000 -f end
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-ls en
+tar tfv archive
 echo separator
-ls to
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-separator
-file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/same-order02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_func_check_status 0 $at_status "$at_srcdir/sparse01.at:24"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/same-order02.at:28:
+              $at_traceoff
+$as_echo "$at_srcdir/sparse01.at:24:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -23350,29 +29838,24 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=\`pwd\`
-tar -xf archive --same-order -C \$HERE/en file1 -C \$HERE/to file2 || exit 1
+genfile --length 1000 -f begin
+genfile --length 1000 -f end
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-ls en
+tar tfv archive
 echo separator
-ls to
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 )"
-echo same-order02.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains a `...` command substitution)'
-fi
+echo sparse01.at:24 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -23381,25 +29864,22 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=`pwd`
-tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+genfile --length 1000 -f begin
+genfile --length 1000 -f end
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-ls en
+tar tfv archive
 echo separator
-ls to
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -23408,450 +29888,390 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile -l 1024 -f file1
-genfile -l 1024 -f file2
-tar cf archive file1 file2
-
-mkdir en
-mkdir to
-
-HERE=`pwd`
-tar -xf archive --same-order -C $HERE/en file1 -C $HERE/to file2 || exit 1
+genfile --length 1000 -f begin
+genfile --length 1000 -f end
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-ls en
+tar tfv archive
 echo separator
-ls to
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "file1
-separator
-file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/same-order02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  56 ) # 56. shortrec.at:25: short records
-    at_setup_line='shortrec.at:25'
-    at_desc="short records"
-    $at_quiet $ECHO_N " 56: short records                                  $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "56. shortrec.at:25: testing ..."
-      $at_traceon
-
-
-
-
-
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_func_check_status 0 $at_status "$at_srcdir/sparse01.at:24"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  $at_traceoff
-echo "$at_srcdir/shortrec.at:28:
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
+              { $at_traceoff
+$as_echo "$at_srcdir/sparse01.at:24:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H v7\"
+TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --length 1000 -f begin
+genfile --length 1000 -f end
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-rm -r directory
+tar tfv archive
+echo separator
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 )"
-echo shortrec.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo sparse01.at:24 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H v7"
+TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --length 1000 -f begin
+genfile --length 1000 -f end
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-rm -r directory
+tar tfv archive
+echo separator
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir v7
-(cd v7
-TEST_TAR_FORMAT=v7
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H v7"
+TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
+genfile --length 1000 -f begin
+genfile --length 1000 -f end
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
+
+tar tfv archive
+echo separator
 mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
-
-rm -r directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo stderr:; tee stderr <"$at_stderr"
-echo stdout:; cat "$at_stdout"
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortrec.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_func_check_status 0 $at_status "$at_srcdir/sparse01.at:24"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
 
-  $at_traceoff
-echo "$at_srcdir/shortrec.at:28: grep -v '^.*tar: Record size = ' stderr; exit 0"
-echo shortrec.at:28 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
+cat >stdout.re <<'_ATEOF'
+separator
+-rw-r--r-- ^ ^ *  *1000 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 begin
+-rw-r--r-- ^ ^ *  *10344448 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 sparsefile
+-rw-r--r-- ^ ^ *  *1000 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 end
+separator
+sparsefile 10344448
+_ATEOF
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+awk '{print NR " " $0}' stdout > $$.1
+awk '{print NR " " $0}' stdout.re | join - $$.1 |
+while read NUM RE LINE
+do
+  echo "$LINE" | grep -- "$RE" >/dev/null || exit 1
+done
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortrec.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_74
+#AT_START_75
+# 75. sparse02.at:21: extracting sparse file over a pipe
+at_setup_line='sparse02.at:21'
+at_desc="extracting sparse file over a pipe"
+$at_quiet $as_echo_n " 75: $at_desc             "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "75. sparse02.at:21: testing ..."
+  $at_traceon
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+# Tar 1.14 - 1.15.1 was unable to extract sparse files to a pipe.
+# References: <16896.21739.460782.124775@jik.kamens.brookline.ma.us>
+# http://lists.gnu.org/archive/html/bug-tar/2005-02/msg00003.html
 
-$at_traceoff
-echo "$at_srcdir/shortrec.at:28:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/sparse02.at:28:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse sparsefile || exit 1
+echo separator
 
-rm -r directory
+tar xfO archive | cat - > sparsecopy || exit 1
+cmp sparsefile sparsecopy
 )"
-echo shortrec.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo sparse02.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse sparsefile || exit 1
+echo separator
 
-rm -r directory
+tar xfO archive | cat - > sparsecopy || exit 1
+cmp sparsefile sparsecopy
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse sparsefile || exit 1
+echo separator
 
-rm -r directory
+tar xfO archive | cat - > sparsecopy || exit 1
+cmp sparsefile sparsecopy
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo stderr:; tee stderr <"$at_stderr"
-echo stdout:; cat "$at_stdout"
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortrec.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/sparse02.at:28"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+              { $at_traceoff
+$as_echo "$at_srcdir/sparse02.at:28:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
 
-$at_traceon
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse sparsefile || exit 1
+echo separator
 
+tar xfO archive | cat - > sparsecopy || exit 1
+cmp sparsefile sparsecopy
+)"
+echo sparse02.at:28 >"$at_check_line_file"
 
-  $at_traceoff
-echo "$at_srcdir/shortrec.at:28: grep -v '^.*tar: Record size = ' stderr; exit 0"
-echo shortrec.at:28 >"$at_check_line_file"
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse sparsefile || exit 1
+echo separator
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+tar xfO archive | cat - > sparsecopy || exit 1
+cmp sparsefile sparsecopy
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
 else
-    ( :; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortrec.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H gnu"
+export TAR_OPTIONS
+rm -rf *
 
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse sparsefile || exit 1
+echo separator
 
-  echo 1 > "$at_status_file"
-  exit 1
+tar xfO archive | cat - > sparsecopy || exit 1
+cmp sparsefile sparsecopy
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/sparse02.at:28"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-$at_traceoff
-echo "$at_srcdir/shortrec.at:28:
-mkdir ustar
-(cd ustar
-TEST_TAR_FORMAT=ustar
+              { $at_traceoff
+$as_echo "$at_srcdir/sparse02.at:28:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H ustar\"
+TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse sparsefile || exit 1
+echo separator
 
-rm -r directory
+tar xfO archive | cat - > sparsecopy || exit 1
+cmp sparsefile sparsecopy
 )"
-echo shortrec.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo sparse02.at:28 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir ustar
-(cd ustar
-TEST_TAR_FORMAT=ustar
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H ustar"
+TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse sparsefile || exit 1
+echo separator
 
-rm -r directory
+tar xfO archive | cat - > sparsecopy || exit 1
+cmp sparsefile sparsecopy
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir ustar
-(cd ustar
-TEST_TAR_FORMAT=ustar
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H ustar"
+TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
+tar -c -f archive --sparse sparsefile || exit 1
+echo separator
 
-rm -r directory
+tar xfO archive | cat - > sparsecopy || exit 1
+cmp sparsefile sparsecopy
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo stderr:; tee stderr <"$at_stderr"
-echo stdout:; cat "$at_stdout"
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortrec.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/sparse02.at:28"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
 
   $at_traceoff
-echo "$at_srcdir/shortrec.at:28: grep -v '^.*tar: Record size = ' stderr; exit 0"
-echo shortrec.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_75
+#AT_START_76
+# 76. sparse03.at:21: storing sparse files > 8G
+at_setup_line='sparse03.at:21'
+at_desc="storing sparse files > 8G"
+$at_quiet $as_echo_n " 76: $at_desc                      "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "76. sparse03.at:21: testing ..."
+  $at_traceon
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortrec.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
+# Tar 1.15.1 incorrectly computed sparse member size if the extended
+# PAX header contained size keyword.
+# References: <87vf46nb36.fsf@penguin.cs.ucla.edu>
+# http://lists.gnu.org/archive/html/bug-tar/2005-06/msg00040.html
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
-$at_traceoff
-echo "$at_srcdir/shortrec.at:28:
+  { $at_traceoff
+$as_echo "$at_srcdir/sparse03.at:29:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -23860,24 +30280,24 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --length 1000 --file begin
+genfile --length 1000 --file end
+genfile --sparse --file sparsefile --block-size 512 8G A || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-rm -r directory
+tar tfv archive
+echo separator
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 )"
-echo shortrec.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo sparse03.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -23886,20 +30306,22 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --length 1000 --file begin
+genfile --length 1000 --file end
+genfile --sparse --file sparsefile --block-size 512 8G A || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-rm -r directory
+tar tfv archive
+echo separator
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -23908,76 +30330,80 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+genfile --length 1000 --file begin
+genfile --length 1000 --file end
+genfile --sparse --file sparsefile --block-size 512 8G A || exit 77
+tar -c -f archive --sparse begin sparsefile end || exit 1
+echo separator
 
-rm -r directory
+tar tfv archive
+echo separator
+mkdir directory
+tar Cxf directory archive
+genfile --stat=name,size sparsefile
+cmp sparsefile directory/sparsefile
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo stderr:; tee stderr <"$at_stderr"
-echo stdout:; cat "$at_stdout"
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortrec.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo stdout:; tee stdout <"$at_stdout"
+at_func_check_status 0 $at_status "$at_srcdir/sparse03.at:29"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
 
-  $at_traceoff
-echo "$at_srcdir/shortrec.at:28: grep -v '^.*tar: Record size = ' stderr; exit 0"
-echo shortrec.at:28 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
+cat >stdout.re <<'_ATEOF'
+separator
+-rw-r--r-- ^ ^ *  *1000 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 begin
+-rw-r--r-- ^ ^ *  *8589935104 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 sparsefile
+-rw-r--r-- ^ ^ *  *1000 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 end
+separator
+sparsefile 8589935104
+_ATEOF
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+awk '{print NR " " $0}' stdout > $$.1
+awk '{print NR " " $0}' stdout.re | join - $$.1 |
+while read NUM RE LINE
+do
+  echo "$LINE" | grep -- "$RE" >/dev/null || exit 1
+done
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortrec.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_76
+#AT_START_77
+# 77. sparsemv.at:21: sparse files in MV archives
+at_setup_line='sparsemv.at:21'
+at_desc="sparse files in MV archives"
+$at_quiet $as_echo_n " 77: $at_desc                    "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "77. sparsemv.at:21: testing ..."
+  $at_traceon
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
+# Check if sparse files are correctly split between GNU multi-volume
+# archives.
+# There are two cases: the file can be split within an empty (null) block,
+# or within a data block. Since null blocks are not archived, the first
+# case means the file is split between two consecutive data blocks.
+#
+
+
 
-$at_traceoff
-echo "$at_srcdir/shortrec.at:28:
+  { $at_traceoff
+$as_echo "$at_srcdir/sparsemv.at:31:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -23986,24 +30412,30 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
+echo \"Pass 1: Split between data blocks\"
+echo \"Create archive\"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo \"Test archive\"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo \"Compare archive\"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-rm -r directory
+echo \"Pass 2: Split within a data block\"
+genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
+echo \"Create archive\"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo \"Test archive\"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo \"Compare archive\"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 )"
-echo shortrec.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo sparsemv.at:31 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -24012,20 +30444,28 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
+echo "Pass 1: Split between data blocks"
+echo "Create archive"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo "Test archive"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo "Compare archive"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-rm -r directory
+echo "Pass 2: Split within a data block"
+genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
+echo "Create archive"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo "Test archive"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo "Compare archive"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -24034,615 +30474,684 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-mkdir directory
-(cd directory && touch a b c d e f g h i j k l m n o p q r)
-tar -c -b 1 -f - directory | tar -t -f -
-tar -c -b 1 -f archive directory
-tar -t -f archive
-tar -t -f - < archive
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
+echo "Pass 1: Split between data blocks"
+echo "Create archive"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo "Test archive"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo "Compare archive"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-rm -r directory
+echo "Pass 2: Split within a data block"
+genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
+echo "Create archive"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo "Test archive"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo "Compare archive"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-echo stderr:; tee stderr <"$at_stderr"
-echo stdout:; cat "$at_stdout"
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortrec.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-  $at_traceoff
-echo "$at_srcdir/shortrec.at:28: grep -v '^.*tar: Record size = ' stderr; exit 0"
-echo shortrec.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    at_trace_this=yes
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
-else
-    ( :; grep -v '^.*tar: Record size = ' stderr; exit 0 ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortrec.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-
-
-
-
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  57 ) # 57. sparse01.at:21: sparse files
-    at_setup_line='sparse01.at:21'
-    at_desc="sparse files"
-    $at_quiet $ECHO_N " 57: sparse files                                   $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "57. sparse01.at:21: testing ..."
-      $at_traceon
-
-
-
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Pass 1: Split between data blocks
+Create archive
+Test archive
+sparsefile
+Compare archive
+Pass 2: Split within a data block
+Create archive
+Test archive
+sparsefile
+Compare archive
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/sparsemv.at:31"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  $at_traceoff
-echo "$at_srcdir/sparse01.at:24:
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+              { $at_traceoff
+$as_echo "$at_srcdir/sparsemv.at:31:
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H posix\"
+TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 -f begin
-genfile --length 1000 -f end
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
+echo \"Pass 1: Split between data blocks\"
+echo \"Create archive\"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo \"Test archive\"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo \"Compare archive\"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-tar tfv archive
-echo separator
-mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+echo \"Pass 2: Split within a data block\"
+genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
+echo \"Create archive\"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo \"Test archive\"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo \"Compare archive\"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 )"
-echo sparse01.at:24 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo sparsemv.at:31 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 -f begin
-genfile --length 1000 -f end
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
+echo "Pass 1: Split between data blocks"
+echo "Create archive"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo "Test archive"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo "Compare archive"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-tar tfv archive
-echo separator
-mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+echo "Pass 2: Split within a data block"
+genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
+echo "Create archive"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo "Test archive"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo "Compare archive"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+  ( :;
+mkdir oldgnu
+(cd oldgnu
+TEST_TAR_FORMAT=oldgnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 -f begin
-genfile --length 1000 -f end
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
+echo "Pass 1: Split between data blocks"
+echo "Create archive"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo "Test archive"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo "Compare archive"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-tar tfv archive
-echo separator
-mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+echo "Pass 2: Split within a data block"
+genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
+echo "Create archive"
+tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
+echo "Test archive"
+tar --record-size=512 -t -M -f arc.1 -f arc.2
+echo "Compare archive"
+tar --record-size=512 -d -M -f arc.1 -f arc.2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo stdout:; tee stdout <"$at_stdout"
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/sparse01.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Pass 1: Split between data blocks
+Create archive
+Test archive
+sparsefile
+Compare archive
+Pass 2: Split within a data block
+Create archive
+Test archive
+sparsefile
+Compare archive
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/sparsemv.at:31"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
-              $at_traceoff
-echo "$at_srcdir/sparse01.at:24:
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_77
+#AT_START_78
+# 78. spmvp00.at:21: sparse files in PAX MV archives, v.0.0
+at_setup_line='spmvp00.at:21'
+at_desc="sparse files in PAX MV archives, v.0.0"
+$at_quiet $as_echo_n " 78: $at_desc         "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "78. spmvp00.at:21: testing ..."
+  $at_traceon
+
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/spmvp00.at:24:
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H gnu\"
+TAR_OPTIONS=\"-H pax\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 -f begin
-genfile --length 1000 -f end
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHI 1M ABCDEFGHI || exit 77
+echo \"Pass 1: Split between data blocks\"
+echo \"Create archive\"
+tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo \"Test archive\"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo \"Compare archive\"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-tar tfv archive
-echo separator
-mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+echo \"Pass 2: Split within a data block\"
+genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
+echo \"Create archive\"
+tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo \"Test archive\"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo \"Compare archive\"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 )"
-echo sparse01.at:24 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo spmvp00.at:24 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H pax"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 -f begin
-genfile --length 1000 -f end
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHI 1M ABCDEFGHI || exit 77
+echo "Pass 1: Split between data blocks"
+echo "Create archive"
+tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-tar tfv archive
-echo separator
-mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+echo "Pass 2: Split within a data block"
+genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
+echo "Create archive"
+tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+  ( :;
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H pax"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 -f begin
-genfile --length 1000 -f end
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHI 1M ABCDEFGHI || exit 77
+echo "Pass 1: Split between data blocks"
+echo "Create archive"
+tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-tar tfv archive
-echo separator
-mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+echo "Pass 2: Split within a data block"
+genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
+echo "Create archive"
+tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo stdout:; tee stdout <"$at_stdout"
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/sparse01.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Pass 1: Split between data blocks
+Create archive
+Test archive
+sparsefile
+Compare archive
+Pass 2: Split within a data block
+Create archive
+Test archive
+sparsefile
+Compare archive
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/spmvp00.at:24"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
 
-$at_traceon
 
-              $at_traceoff
-echo "$at_srcdir/sparse01.at:24:
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_78
+#AT_START_79
+# 79. spmvp01.at:21: sparse files in PAX MV archives, v.0.1
+at_setup_line='spmvp01.at:21'
+at_desc="sparse files in PAX MV archives, v.0.1"
+$at_quiet $as_echo_n " 79: $at_desc         "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "79. spmvp01.at:21: testing ..."
+  $at_traceon
+
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/spmvp01.at:24:
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H oldgnu\"
+TAR_OPTIONS=\"-H pax\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 -f begin
-genfile --length 1000 -f end
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
+echo \"Pass 1: Split between data blocks\"
+echo \"Create archive\"
+tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo \"Test archive\"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo \"Compare archive\"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-tar tfv archive
-echo separator
-mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+echo \"Pass 2: Split within a data block\"
+genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
+echo \"Create archive\"
+tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo \"Test archive\"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo \"Compare archive\"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 )"
-echo sparse01.at:24 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo spmvp01.at:24 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H pax"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 -f begin
-genfile --length 1000 -f end
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
+echo "Pass 1: Split between data blocks"
+echo "Create archive"
+tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-tar tfv archive
-echo separator
-mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+echo "Pass 2: Split within a data block"
+genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
+echo "Create archive"
+tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir oldgnu
-(cd oldgnu
-TEST_TAR_FORMAT=oldgnu
+  ( :;
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H oldgnu"
+TAR_OPTIONS="-H pax"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 -f begin
-genfile --length 1000 -f end
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
+echo "Pass 1: Split between data blocks"
+echo "Create archive"
+tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-tar tfv archive
-echo separator
-mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+echo "Pass 2: Split within a data block"
+genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
+echo "Create archive"
+tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo stdout:; tee stdout <"$at_stdout"
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/sparse01.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-
-
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Pass 1: Split between data blocks
+Create archive
+Test archive
+sparsefile
+Compare archive
+Pass 2: Split within a data block
+Create archive
+Test archive
+sparsefile
+Compare archive
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/spmvp01.at:24"
 
-cat >stdout.re <<'_ATEOF'
-separator
--rw-r--r-- ^ ^ *  *1000 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 begin
--rw-r--r-- ^ ^ *  *10344448 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 sparsefile
--rw-r--r-- ^ ^ *  *1000 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 end
-separator
-sparsefile 10344448
-_ATEOF
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-awk '{print NR " " $0}' stdout > $$.1
-awk '{print NR " " $0}' stdout.re | join - $$.1 |
-while read NUM RE LINE
-do
-  echo "$LINE" | grep -- "$RE" >/dev/null || exit 1
-done
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  58 ) # 58. sparse02.at:21: extracting sparse file over a pipe
-    at_setup_line='sparse02.at:21'
-    at_desc="extracting sparse file over a pipe"
-    $at_quiet $ECHO_N " 58: extracting sparse file over a pipe             $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_79
+#AT_START_80
+# 80. spmvp10.at:21: sparse files in PAX MV archives, v.1.0
+at_setup_line='spmvp10.at:21'
+at_desc="sparse files in PAX MV archives, v.1.0"
+$at_quiet $as_echo_n " 80: $at_desc         "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "58. sparse02.at:21: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "80. spmvp10.at:21: testing ..."
+  $at_traceon
 
 
 
-# Tar 1.14 - 1.15.1 was unable to extract sparse files to a pipe.
-# References: <16896.21739.460782.124775@jik.kamens.brookline.ma.us>
-# http://lists.gnu.org/archive/html/bug-tar/2005-02/msg00003.html
 
 
 
-  $at_traceoff
-echo "$at_srcdir/sparse02.at:28:
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+  $at_traceoff
+$as_echo "$at_srcdir/spmvp10.at:24:
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H posix\"
+TAR_OPTIONS=\"-H pax\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse sparsefile || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
+echo \"Pass 1: Split between data blocks\"
+echo \"Create archive\"
+tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo \"Test archive\"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo \"Compare archive\"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-tar xfO archive | cat - > sparsecopy || exit 1
-cmp sparsefile sparsecopy
+echo \"Pass 2: Split within a data block\"
+genfile --sparse --file sparsefile 0 ABCDEFG 1M ABCDEFGHI || exit 77
+echo \"Create archive\"
+tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo \"Test archive\"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo \"Compare archive\"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 )"
-echo sparse02.at:28 >"$at_check_line_file"
-
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo spmvp10.at:24 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS="-H pax"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse sparsefile || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
+echo "Pass 1: Split between data blocks"
+echo "Create archive"
+tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-tar xfO archive | cat - > sparsecopy || exit 1
-cmp sparsefile sparsecopy
+echo "Pass 2: Split within a data block"
+genfile --sparse --file sparsefile 0 ABCDEFG 1M ABCDEFGHI || exit 77
+echo "Create archive"
+tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir posix
-(cd posix
-TEST_TAR_FORMAT=posix
+  ( :;
+mkdir pax
+(cd pax
+TEST_TAR_FORMAT=pax
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H posix"
+TAR_OPTIONS="-H pax"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse sparsefile || exit 1
-echo separator
+exec <&-
+genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
+echo "Pass 1: Split between data blocks"
+echo "Create archive"
+tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
+
+echo "Pass 2: Split within a data block"
+genfile --sparse --file sparsefile 0 ABCDEFG 1M ABCDEFGHI || exit 77
+echo "Create archive"
+tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
+echo "Test archive"
+tar -t -M -f arc.1 -f arc.2 -f arc.3
+echo "Compare archive"
+tar -d -M -f arc.1 -f arc.2 -f arc.3
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Pass 1: Split between data blocks
+Create archive
+Test archive
+sparsefile
+Compare archive
+Pass 2: Split within a data block
+Create archive
+Test archive
+sparsefile
+Compare archive
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/spmvp10.at:24"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-tar xfO archive | cat - > sparsecopy || exit 1
-cmp sparsefile sparsecopy
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/sparse02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
 
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_80
+#AT_START_81
+# 81. update.at:28: update unchanged directories
+at_setup_line='update.at:28'
+at_desc="update unchanged directories"
+$at_quiet $as_echo_n " 81: $at_desc                   "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "81. update.at:28: testing ..."
+  $at_traceon
 
-$at_traceon
 
-              $at_traceoff
-echo "$at_srcdir/sparse02.at:28:
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/update.at:31:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H gnu\"
+TAR_OPTIONS=\"-H v7\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse sparsefile || exit 1
-echo separator
 
-tar xfO archive | cat - > sparsecopy || exit 1
-cmp sparsefile sparsecopy
-)"
-echo sparse02.at:28 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
+)"
+echo update.at:31 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse sparsefile || exit 1
-echo separator
 
-tar xfO archive | cat - > sparsecopy || exit 1
-cmp sparsefile sparsecopy
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
+
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir gnu
-(cd gnu
-TEST_TAR_FORMAT=gnu
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H gnu"
+TAR_OPTIONS="-H v7"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse sparsefile || exit 1
-echo separator
-
-tar xfO archive | cat - > sparsecopy || exit 1
-cmp sparsefile sparsecopy
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/sparse02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
 
-  echo 1 > "$at_status_file"
-  exit 1
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+separator
+directory/
+directory/file1
+directory/file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update.at:31"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/sparse02.at:28:
+              $at_traceoff
+$as_echo "$at_srcdir/update.at:31:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -24651,22 +31160,24 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse sparsefile || exit 1
-echo separator
 
-tar xfO archive | cat - > sparsecopy || exit 1
-cmp sparsefile sparsecopy
-)"
-echo sparse02.at:28 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
+
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
+)"
+echo update.at:31 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -24675,18 +31186,22 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse sparsefile || exit 1
-echo separator
 
-tar xfO archive | cat - > sparsecopy || exit 1
-cmp sparsefile sparsecopy
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
+
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -24695,66 +31210,126 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77
-tar -c -f archive --sparse sparsefile || exit 1
-echo separator
 
-tar xfO archive | cat - > sparsecopy || exit 1
-cmp sparsefile sparsecopy
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
+
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/sparse02.at:28: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+separator
+directory/
+directory/file1
+directory/file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update.at:31"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+              { $at_traceoff
+$as_echo "$at_srcdir/update.at:31:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
 
-$at_traceon
 
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
 
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
+)"
+echo update.at:31 >"$at_check_line_file"
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
-  59 ) # 59. sparse03.at:21: storing sparse files > 8G
-    at_setup_line='sparse03.at:21'
-    at_desc="storing sparse files > 8G"
-    $at_quiet $ECHO_N " 59: storing sparse files > 8G                      $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "59. sparse03.at:21: testing ..."
-      $at_traceon
 
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
 
-# Tar 1.15.1 incorrectly computed sparse member size if the extended
-# PAX header contained size keyword.
-# References: <87vf46nb36.fsf@penguin.cs.ucla.edu>
-# http://lists.gnu.org/archive/html/bug-tar/2005-06/msg00040.html
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H ustar"
+export TAR_OPTIONS
+rm -rf *
 
 
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-  $at_traceoff
-echo "$at_srcdir/sparse03.at:29:
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
+
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+separator
+directory/
+directory/file1
+directory/file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update.at:31"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+              { $at_traceoff
+$as_echo "$at_srcdir/update.at:31:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -24763,28 +31338,24 @@ TAR_OPTIONS=\"-H posix\"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 --file begin
-genfile --length 1000 --file end
-genfile --sparse --file sparsefile --block-size 512 8G A || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
 
-tar tfv archive
-echo separator
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
 mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
-)"
-echo sparse03.at:29 >"$at_check_line_file"
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
+)"
+echo update.at:31 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -24793,24 +31364,22 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 --file begin
-genfile --length 1000 --file end
-genfile --sparse --file sparsefile --block-size 512 8G A || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
 
-tar tfv archive
-echo separator
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
 mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
+
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -24819,91 +31388,37 @@ TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-genfile --length 1000 --file begin
-genfile --length 1000 --file end
-genfile --sparse --file sparsefile --block-size 512 8G A || exit 77
-tar -c -f archive --sparse begin sparsefile end || exit 1
-echo separator
 
-tar tfv archive
-echo separator
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
 mkdir directory
-tar Cxf directory archive
-genfile --stat=name,size sparsefile
-cmp sparsefile directory/sparsefile
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
+
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo stdout:; tee stdout <"$at_stdout"
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/sparse03.at:29: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
-
-
-
-
-
-cat >stdout.re <<'_ATEOF'
-separator
--rw-r--r-- ^ ^ *  *1000 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 begin
--rw-r--r-- ^ ^ *  *8589935104 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 sparsefile
--rw-r--r-- ^ ^ *  *1000 0-90-90-90-9-0-90-9-0-90-9 0-90-9:0-90-9 end
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
 separator
-sparsefile 8589935104
-_ATEOF
-
-awk '{print NR " " $0}' stdout > $$.1
-awk '{print NR " " $0}' stdout.re | join - $$.1 |
-while read NUM RE LINE
-do
-  echo "$LINE" | grep -- "$RE" >/dev/null || exit 1
-done
-
-
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  60 ) # 60. sparsemv.at:21: sparse files in MV archives
-    at_setup_line='sparsemv.at:21'
-    at_desc="sparse files in MV archives"
-    $at_quiet $ECHO_N " 60: sparse files in MV archives                    $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "60. sparsemv.at:21: testing ..."
-      $at_traceon
-
-
-
-# Check if sparse files are correctly split between GNU multi-volume
-# archives.
-# There are two cases: the file can be split within an empty (null) block,
-# or within a data block. Since null blocks are not archived, the first
-# case means the file is split between two consecutive data blocks.
-#
-
+directory/
+directory/file1
+directory/file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update.at:31"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  $at_traceoff
-echo "$at_srcdir/sparsemv.at:31:
+              { $at_traceoff
+$as_echo "$at_srcdir/update.at:31:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -24912,34 +31427,24 @@ TAR_OPTIONS=\"-H gnu\"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
-echo \"Pass 1: Split between data blocks\"
-echo \"Create archive\"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo \"Test archive\"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo \"Compare archive\"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-echo \"Pass 2: Split within a data block\"
-genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
-echo \"Create archive\"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo \"Test archive\"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo \"Compare archive\"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
-)"
-echo sparsemv.at:31 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
+
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
+)"
+echo update.at:31 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -24948,30 +31453,22 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
-echo "Pass 1: Split between data blocks"
-echo "Create archive"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo "Test archive"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo "Compare archive"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-echo "Pass 2: Split within a data block"
-genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
-echo "Create archive"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo "Test archive"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo "Compare archive"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
+
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -24980,58 +31477,163 @@ TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
-echo "Pass 1: Split between data blocks"
-echo "Create archive"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo "Test archive"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo "Compare archive"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-echo "Pass 2: Split within a data block"
-genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
-echo "Create archive"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo "Test archive"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo "Compare archive"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir directory
+genfile --length 10240 --pattern zeros --file directory/file1
+genfile --length 10240 --pattern default --file directory/file2
+
+tar cf archive directory || exit 1
+echo separator
+tar uf archive directory || exit 1
+echo separator
+tar tf archive | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Pass 1: Split between data blocks
-Create archive
-Test archive
-sparsefile
-Compare archive
-Pass 2: Split within a data block
-Create archive
-Test archive
-sparsefile
-Compare archive
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/sparsemv.at:31: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+separator
+directory/
+directory/file1
+directory/file2
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update.at:31"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_81
+#AT_START_82
+# 82. update01.at:29: update directories
+at_setup_line='update01.at:29'
+at_desc="update directories"
+$at_quiet $as_echo_n " 82: $at_desc                             "
+at_xfail=no
+      test -f $XFAILFILE && at_xfail=yes
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "82. update01.at:29: testing ..."
+  $at_traceon
+
+
+
+
+
+  { $at_traceoff
+$as_echo "$at_srcdir/update01.at:32:
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H v7\"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir a
+genfile --file a/b
+
+tar cf arc a
+
+echo \"separator\"
+
+sleep 2
+genfile --file a/c
+
+tar ufv arc a
+echo \"separator\"
+tar tf arc | sort || exit 1
+)"
+echo update01.at:32 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir a
+genfile --file a/b
+
+tar cf arc a
+
+echo "separator"
+
+sleep 2
+genfile --file a/c
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+mkdir v7
+(cd v7
+TEST_TAR_FORMAT=v7
+export TEST_TAR_FORMAT
+TAR_OPTIONS="-H v7"
+export TAR_OPTIONS
+rm -rf *
 
 
-  echo 1 > "$at_status_file"
-  exit 1
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir a
+genfile --file a/b
+
+tar cf arc a
+
+echo "separator"
+
+sleep 2
+genfile --file a/c
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+a/c
+separator
+a/
+a/b
+a/c
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update01.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/sparsemv.at:31:
+              $at_traceoff
+$as_echo "$at_srcdir/update01.at:32:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -25040,34 +31642,28 @@ TAR_OPTIONS=\"-H oldgnu\"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
-echo \"Pass 1: Split between data blocks\"
-echo \"Create archive\"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo \"Test archive\"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo \"Compare archive\"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-echo \"Pass 2: Split within a data block\"
-genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
-echo \"Create archive\"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo \"Test archive\"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo \"Compare archive\"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
-)"
-echo sparsemv.at:31 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+mkdir a
+genfile --file a/b
+
+tar cf arc a
+
+echo \"separator\"
+
+sleep 2
+genfile --file a/c
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+tar ufv arc a
+echo \"separator\"
+tar tf arc | sort || exit 1
+)"
+echo update01.at:32 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -25076,30 +31672,26 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
-echo "Pass 1: Split between data blocks"
-echo "Create archive"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo "Test archive"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo "Compare archive"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-echo "Pass 2: Split within a data block"
-genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
-echo "Create archive"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo "Test archive"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo "Compare archive"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir a
+genfile --file a/b
+
+tar cf arc a
+
+echo "separator"
+
+sleep 2
+genfile --file a/c
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -25108,547 +31700,372 @@ TAR_OPTIONS="-H oldgnu"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
-echo "Pass 1: Split between data blocks"
-echo "Create archive"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo "Test archive"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo "Compare archive"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
 
-echo "Pass 2: Split within a data block"
-genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
-echo "Create archive"
-tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1
-echo "Test archive"
-tar --record-size=512 -t -M -f arc.1 -f arc.2
-echo "Compare archive"
-tar --record-size=512 -d -M -f arc.1 -f arc.2
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Pass 1: Split between data blocks
-Create archive
-Test archive
-sparsefile
-Compare archive
-Pass 2: Split within a data block
-Create archive
-Test archive
-sparsefile
-Compare archive
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/sparsemv.at:31: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+mkdir a
+genfile --file a/b
 
+tar cf arc a
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo "separator"
 
-$at_traceon
+sleep 2
+genfile --file a/c
 
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+a/c
+separator
+a/
+a/b
+a/c
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update01.at:32"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
+              { $at_traceoff
+$as_echo "$at_srcdir/update01.at:32:
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H ustar\"
+export TAR_OPTIONS
+rm -rf *
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  61 ) # 61. spmvp00.at:21: sparse files in PAX MV archives, v.0.0
-    at_setup_line='spmvp00.at:21'
-    at_desc="sparse files in PAX MV archives, v.0.0"
-    $at_quiet $ECHO_N " 61: sparse files in PAX MV archives, v.0.0         $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "61. spmvp00.at:21: testing ..."
-      $at_traceon
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
+mkdir a
+genfile --file a/b
 
+tar cf arc a
 
+echo \"separator\"
 
+sleep 2
+genfile --file a/c
 
+tar ufv arc a
+echo \"separator\"
+tar tf arc | sort || exit 1
+)"
+echo update01.at:32 >"$at_check_line_file"
 
-  $at_traceoff
-echo "$at_srcdir/spmvp00.at:24:
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H pax\"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHI 1M ABCDEFGHI || exit 77
-echo \"Pass 1: Split between data blocks\"
-echo \"Create archive\"
-tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo \"Test archive\"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo \"Compare archive\"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-echo \"Pass 2: Split within a data block\"
-genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
-echo \"Create archive\"
-tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo \"Test archive\"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo \"Compare archive\"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
-)"
-echo spmvp00.at:24 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+mkdir a
+genfile --file a/b
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H pax"
-export TAR_OPTIONS
-rm -rf *
+tar cf arc a
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHI 1M ABCDEFGHI || exit 77
-echo "Pass 1: Split between data blocks"
-echo "Create archive"
-tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
+echo "separator"
 
-echo "Pass 2: Split within a data block"
-genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
-echo "Create archive"
-tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
+sleep 2
+genfile --file a/c
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
+  ( :;
+mkdir ustar
+(cd ustar
+TEST_TAR_FORMAT=ustar
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H pax"
+TAR_OPTIONS="-H ustar"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHI 1M ABCDEFGHI || exit 77
-echo "Pass 1: Split between data blocks"
-echo "Create archive"
-tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-echo "Pass 2: Split within a data block"
-genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
-echo "Create archive"
-tar --sparse --sparse-version=0.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: Record size = 12 blocks
-tar: Record size = 12 blocks
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Pass 1: Split between data blocks
-Create archive
-Test archive
-sparsefile
-Compare archive
-Pass 2: Split within a data block
-Create archive
-Test archive
-sparsefile
-Compare archive
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/spmvp00.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+mkdir a
+genfile --file a/b
 
+tar cf arc a
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo "separator"
 
-$at_traceon
+sleep 2
+genfile --file a/c
 
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+a/c
+separator
+a/
+a/b
+a/c
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update01.at:32"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
+              { $at_traceoff
+$as_echo "$at_srcdir/update01.at:32:
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H posix\"
+export TAR_OPTIONS
+rm -rf *
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  62 ) # 62. spmvp01.at:21: sparse files in PAX MV archives, v.0.1
-    at_setup_line='spmvp01.at:21'
-    at_desc="sparse files in PAX MV archives, v.0.1"
-    $at_quiet $ECHO_N " 62: sparse files in PAX MV archives, v.0.1         $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "62. spmvp01.at:21: testing ..."
-      $at_traceon
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
+mkdir a
+genfile --file a/b
 
+tar cf arc a
 
+echo \"separator\"
 
+sleep 2
+genfile --file a/c
 
+tar ufv arc a
+echo \"separator\"
+tar tf arc | sort || exit 1
+)"
+echo update01.at:32 >"$at_check_line_file"
 
-  $at_traceoff
-echo "$at_srcdir/spmvp01.at:24:
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H pax\"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
-echo \"Pass 1: Split between data blocks\"
-echo \"Create archive\"
-tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo \"Test archive\"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo \"Compare archive\"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-echo \"Pass 2: Split within a data block\"
-genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
-echo \"Create archive\"
-tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo \"Test archive\"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo \"Compare archive\"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
-)"
-echo spmvp01.at:24 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+mkdir a
+genfile --file a/b
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H pax"
-export TAR_OPTIONS
-rm -rf *
+tar cf arc a
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
-echo "Pass 1: Split between data blocks"
-echo "Create archive"
-tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
+echo "separator"
 
-echo "Pass 2: Split within a data block"
-genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
-echo "Create archive"
-tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
+sleep 2
+genfile --file a/c
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
+  ( :;
+mkdir posix
+(cd posix
+TEST_TAR_FORMAT=posix
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H pax"
+TAR_OPTIONS="-H posix"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77
-echo "Pass 1: Split between data blocks"
-echo "Create archive"
-tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-echo "Pass 2: Split within a data block"
-genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77
-echo "Create archive"
-tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: Record size = 12 blocks
-tar: Record size = 12 blocks
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Pass 1: Split between data blocks
-Create archive
-Test archive
-sparsefile
-Compare archive
-Pass 2: Split within a data block
-Create archive
-Test archive
-sparsefile
-Compare archive
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/spmvp01.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+mkdir a
+genfile --file a/b
 
+tar cf arc a
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo "separator"
 
-$at_traceon
+sleep 2
+genfile --file a/c
 
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+a/c
+separator
+a/
+a/b
+a/c
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update01.at:32"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
+              { $at_traceoff
+$as_echo "$at_srcdir/update01.at:32:
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
+export TEST_TAR_FORMAT
+TAR_OPTIONS=\"-H gnu\"
+export TAR_OPTIONS
+rm -rf *
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  63 ) # 63. spmvp10.at:21: sparse files in PAX MV archives, v.1.0
-    at_setup_line='spmvp10.at:21'
-    at_desc="sparse files in PAX MV archives, v.1.0"
-    $at_quiet $ECHO_N " 63: sparse files in PAX MV archives, v.1.0         $ECHO_C"
-    at_xfail=no
-      test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "63. spmvp10.at:21: testing ..."
-      $at_traceon
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
+mkdir a
+genfile --file a/b
 
+tar cf arc a
 
+echo \"separator\"
 
+sleep 2
+genfile --file a/c
 
+tar ufv arc a
+echo \"separator\"
+tar tf arc | sort || exit 1
+)"
+echo update01.at:32 >"$at_check_line_file"
 
-  $at_traceoff
-echo "$at_srcdir/spmvp10.at:24:
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS=\"-H pax\"
+TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
-echo \"Pass 1: Split between data blocks\"
-echo \"Create archive\"
-tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo \"Test archive\"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo \"Compare archive\"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-echo \"Pass 2: Split within a data block\"
-genfile --sparse --file sparsefile 0 ABCDEFG 1M ABCDEFGHI || exit 77
-echo \"Create archive\"
-tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo \"Test archive\"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo \"Compare archive\"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
-)"
-echo spmvp10.at:24 >"$at_check_line_file"
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+mkdir a
+genfile --file a/b
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
-export TEST_TAR_FORMAT
-TAR_OPTIONS="-H pax"
-export TAR_OPTIONS
-rm -rf *
+tar cf arc a
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
-echo "Pass 1: Split between data blocks"
-echo "Create archive"
-tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
+echo "separator"
 
-echo "Pass 2: Split within a data block"
-genfile --sparse --file sparsefile 0 ABCDEFG 1M ABCDEFGHI || exit 77
-echo "Create archive"
-tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
+sleep 2
+genfile --file a/c
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
-mkdir pax
-(cd pax
-TEST_TAR_FORMAT=pax
+  ( :;
+mkdir gnu
+(cd gnu
+TEST_TAR_FORMAT=gnu
 export TEST_TAR_FORMAT
-TAR_OPTIONS="-H pax"
+TAR_OPTIONS="-H gnu"
 export TAR_OPTIONS
 rm -rf *
 
-exec <&-
-genfile --sparse --file sparsefile 0 ABCDEFGH 1M ABCDEFGHI || exit 77
-echo "Pass 1: Split between data blocks"
-echo "Create archive"
-tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
 
-echo "Pass 2: Split within a data block"
-genfile --sparse --file sparsefile 0 ABCDEFG 1M ABCDEFGHI || exit 77
-echo "Create archive"
-tar --sparse --sparse-version=1.0 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile
-echo "Test archive"
-tar -t -M -f arc.1 -f arc.2 -f arc.3
-echo "Compare archive"
-tar -d -M -f arc.1 -f arc.2 -f arc.3
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-at_failed=false
-echo >>"$at_stderr"; echo "tar: Record size = 12 blocks
-tar: Record size = 12 blocks
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Pass 1: Split between data blocks
-Create archive
-Test archive
-sparsefile
-Compare archive
-Pass 2: Split within a data block
-Create archive
-Test archive
-sparsefile
-Compare archive
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/spmvp10.at:24: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+mkdir a
+genfile --file a/b
 
+tar cf arc a
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+echo "separator"
+
+sleep 2
+genfile --file a/c
 
-$at_traceon
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+a/c
+separator
+a/
+a/b
+a/c
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update01.at:32"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  64 ) # 64. update.at:27: update unchanged directories
-    at_setup_line='update.at:27'
-    at_desc="update unchanged directories"
-    $at_quiet $ECHO_N " 64: update unchanged directories                   $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_82
+#AT_START_83
+# 83. update02.at:26: update changed files
+at_setup_line='update02.at:26'
+at_desc="update changed files"
+$at_quiet $as_echo_n " 83: $at_desc                           "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "64. update.at:27: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "83. update02.at:26: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/update.at:30:
+  $at_traceoff
+$as_echo "$at_srcdir/update02.at:29:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -25660,25 +32077,25 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
-)"
-echo update.at:30 >"$at_check_line_file"
+tar cf arc a
+
+echo \"separator\"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo \"separator\"
+tar tf arc | sort || exit 1
+)"
+echo update02.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -25690,21 +32107,23 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
+tar cf arc a
+
+echo "separator"
+
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -25716,44 +32135,39 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+tar cf arc a
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
-separator
-directory/
-directory/file1
-directory/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/update.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+echo "separator"
 
+sleep 2
+touch a/b
 
-  echo 1 > "$at_status_file"
-  exit 1
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+a/b
+separator
+a/
+a/b
+a/b
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update02.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/update.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/update02.at:29:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -25765,25 +32179,25 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
-)"
-echo update.at:30 >"$at_check_line_file"
+tar cf arc a
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo \"separator\"
+
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo \"separator\"
+tar tf arc | sort || exit 1
+)"
+echo update02.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -25795,21 +32209,23 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
+tar cf arc a
+
+echo "separator"
+
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -25821,44 +32237,39 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+tar cf arc a
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
-separator
-directory/
-directory/file1
-directory/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/update.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+echo "separator"
 
+sleep 2
+touch a/b
 
-  echo 1 > "$at_status_file"
-  exit 1
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+a/b
+separator
+a/
+a/b
+a/b
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update02.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/update.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/update02.at:29:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -25870,25 +32281,25 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
-)"
-echo update.at:30 >"$at_check_line_file"
+tar cf arc a
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo \"separator\"
+
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo \"separator\"
+tar tf arc | sort || exit 1
+)"
+echo update02.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -25900,21 +32311,23 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
+tar cf arc a
+
+echo "separator"
+
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -25926,44 +32339,39 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+tar cf arc a
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
-separator
-directory/
-directory/file1
-directory/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/update.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+echo "separator"
 
+sleep 2
+touch a/b
 
-  echo 1 > "$at_status_file"
-  exit 1
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+a/b
+separator
+a/
+a/b
+a/b
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update02.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/update.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/update02.at:29:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -25975,25 +32383,25 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
-)"
-echo update.at:30 >"$at_check_line_file"
+tar cf arc a
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo \"separator\"
+
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo \"separator\"
+tar tf arc | sort || exit 1
+)"
+echo update02.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -26005,21 +32413,23 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
+tar cf arc a
+
+echo "separator"
+
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -26031,44 +32441,39 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
+tar cf arc a
 
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
-separator
-directory/
-directory/file1
-directory/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/update.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
+echo "separator"
 
+sleep 2
+touch a/b
 
-  echo 1 > "$at_status_file"
-  exit 1
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+a/b
+separator
+a/
+a/b
+a/b
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update02.at:29"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/update.at:30:
+              $at_traceoff
+$as_echo "$at_srcdir/update02.at:29:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -26080,25 +32485,25 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
-)"
-echo update.at:30 >"$at_check_line_file"
+tar cf arc a
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
+echo \"separator\"
+
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo \"separator\"
+tar tf arc | sort || exit 1
+)"
+echo update02.at:29 >"$at_check_line_file"
 
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -26110,21 +32515,23 @@ rm -rf *
 
 test -z "`sort < /dev/null 2>&1`" || exit 77
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+mkdir a
+genfile --file a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
+tar cf arc a
+
+echo "separator"
+
+sleep 2
+touch a/b
+
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -26134,70 +32541,65 @@ export TAR_OPTIONS
 rm -rf *
 
 
-test -z "`sort < /dev/null 2>&1`" || exit 77
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+mkdir a
+genfile --file a/b
+
+tar cf arc a
+
+echo "separator"
 
-mkdir directory
-genfile --length 10240 --pattern zeros --file directory/file1
-genfile --length 10240 --pattern default --file directory/file2
+sleep 2
+touch a/b
 
-tar cf archive directory || exit 1
-echo separator
-tar uf archive directory || exit 1
-echo separator
-tar tf archive | sort || exit 1
+tar ufv arc a
+echo "separator"
+tar tf arc | sort || exit 1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
+a/b
 separator
-directory/
-directory/file1
-directory/file2
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/update.at:30: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+a/
+a/b
+a/b
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/update02.at:29"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  65 ) # 65. volume.at:23: volume
-    at_setup_line='volume.at:23'
-    at_desc="volume"
-    $at_quiet $ECHO_N " 65: volume                                         $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_83
+#AT_START_84
+# 84. volume.at:23: volume
+at_setup_line='volume.at:23'
+at_desc="volume"
+$at_quiet $as_echo_n " 84: $at_desc                                         "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "65. volume.at:23: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "84. volume.at:23: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/volume.at:26:
+  $at_traceoff
+$as_echo "$at_srcdir/volume.at:26:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -26224,13 +32626,9 @@ test \$? = 2
 )"
 echo volume.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -26255,11 +32653,9 @@ echo 1>&2 -----
 tar xfV archive babel
 test $? = 2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -26284,11 +32680,10 @@ echo 1>&2 -----
 tar xfV archive babel
 test $? = 2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "-----
+echo >>"$at_stderr"; $as_echo "-----
 tar: Volume \`label' does not match \`lab'
 tar: Error is not recoverable: exiting now
 -----
@@ -26297,25 +32692,16 @@ tar: Error is not recoverable: exiting now
 -----
 tar: Volume \`label' does not match \`babel'
 tar: Error is not recoverable: exiting now
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/volume.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/volume.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/volume.at:26:
+              $at_traceoff
+$as_echo "$at_srcdir/volume.at:26:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -26342,13 +32728,9 @@ test \$? = 2
 )"
 echo volume.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -26373,11 +32755,9 @@ echo 1>&2 -----
 tar xfV archive babel
 test $? = 2
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -26402,11 +32782,10 @@ echo 1>&2 -----
 tar xfV archive babel
 test $? = 2
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "-----
+echo >>"$at_stderr"; $as_echo "-----
 tar: Volume \`label' does not match \`lab'
 tar: Error is not recoverable: exiting now
 -----
@@ -26415,49 +32794,40 @@ tar: Error is not recoverable: exiting now
 -----
 tar: Volume \`label' does not match \`babel'
 tar: Error is not recoverable: exiting now
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/volume.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/volume.at:26"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  66 ) # 66. volsize.at:29: volume header size
-    at_setup_line='volsize.at:29'
-    at_desc="volume header size"
-    $at_quiet $ECHO_N " 66: volume header size                             $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_84
+#AT_START_85
+# 85. volsize.at:29: volume header size
+at_setup_line='volsize.at:29'
+at_desc="volume header size"
+$at_quiet $as_echo_n " 85: $at_desc                             "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "66. volsize.at:29: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "85. volsize.at:29: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/volsize.at:32:
+  $at_traceoff
+$as_echo "$at_srcdir/volsize.at:32:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -26483,13 +32853,9 @@ find abc|sort
 )"
 echo volsize.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -26513,11 +32879,9 @@ echo Extracted directory
 tar xf $TEST_DATA_DIR/abc.tar
 find abc|sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -26541,14 +32905,11 @@ echo Extracted directory
 tar xf $TEST_DATA_DIR/abc.tar
 find abc|sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: Record size = 5 blocks
-tar: Record size = 5 blocks
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Short Listing
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Short Listing
 abc/not-a-file.gif
 abc/CCC
 Verbose Listing
@@ -26557,24 +32918,15 @@ V--------- 0/0            1536 2006-05-08 22:07 abc/not-a-file.gif--Volume Heade
 Extracted directory
 abc
 abc/CCC
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/volsize.at:32: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/volsize.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/volsize.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/volsize.at:32:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -26600,13 +32952,9 @@ find abc|sort
 )"
 echo volsize.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -26630,11 +32978,9 @@ echo Extracted directory
 tar xf $TEST_DATA_DIR/abc.tar
 find abc|sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -26658,14 +33004,11 @@ echo Extracted directory
 tar xf $TEST_DATA_DIR/abc.tar
 find abc|sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: Record size = 5 blocks
-tar: Record size = 5 blocks
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Short Listing
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Short Listing
 abc/not-a-file.gif
 abc/CCC
 Verbose Listing
@@ -26674,24 +33017,15 @@ V--------- 0/0            1536 2006-05-08 22:07 abc/not-a-file.gif--Volume Heade
 Extracted directory
 abc
 abc/CCC
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/volsize.at:32: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/volsize.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/volsize.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/volsize.at:32:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -26717,13 +33051,9 @@ find abc|sort
 )"
 echo volsize.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -26747,11 +33077,9 @@ echo Extracted directory
 tar xf $TEST_DATA_DIR/abc.tar
 find abc|sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -26775,14 +33103,11 @@ echo Extracted directory
 tar xf $TEST_DATA_DIR/abc.tar
 find abc|sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: Record size = 5 blocks
-tar: Record size = 5 blocks
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Short Listing
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Short Listing
 abc/not-a-file.gif
 abc/CCC
 Verbose Listing
@@ -26791,24 +33116,15 @@ V--------- 0/0            1536 2006-05-08 22:07 abc/not-a-file.gif--Volume Heade
 Extracted directory
 abc
 abc/CCC
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/volsize.at:32: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/volsize.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/volsize.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/volsize.at:32:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -26834,13 +33150,9 @@ find abc|sort
 )"
 echo volsize.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -26864,11 +33176,9 @@ echo Extracted directory
 tar xf $TEST_DATA_DIR/abc.tar
 find abc|sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -26892,14 +33202,11 @@ echo Extracted directory
 tar xf $TEST_DATA_DIR/abc.tar
 find abc|sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: Record size = 5 blocks
-tar: Record size = 5 blocks
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Short Listing
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Short Listing
 abc/not-a-file.gif
 abc/CCC
 Verbose Listing
@@ -26908,24 +33215,15 @@ V--------- 0/0            1536 2006-05-08 22:07 abc/not-a-file.gif--Volume Heade
 Extracted directory
 abc
 abc/CCC
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/volsize.at:32: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/volsize.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/volsize.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/volsize.at:32:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -26951,13 +33249,9 @@ find abc|sort
 )"
 echo volsize.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -26981,11 +33275,9 @@ echo Extracted directory
 tar xf $TEST_DATA_DIR/abc.tar
 find abc|sort
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -27009,14 +33301,11 @@ echo Extracted directory
 tar xf $TEST_DATA_DIR/abc.tar
 find abc|sort
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: Record size = 5 blocks
-tar: Record size = 5 blocks
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "Short Listing
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "Short Listing
 abc/not-a-file.gif
 abc/CCC
 Verbose Listing
@@ -27025,49 +33314,40 @@ V--------- 0/0            1536 2006-05-08 22:07 abc/not-a-file.gif--Volume Heade
 Extracted directory
 abc
 abc/CCC
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/volsize.at:32: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/volsize.at:32"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  67 ) # 67. comprec.at:21: compressed format recognition
-    at_setup_line='comprec.at:21'
-    at_desc="compressed format recognition"
-    $at_quiet $ECHO_N " 67: compressed format recognition                  $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_85
+#AT_START_86
+# 86. comprec.at:21: compressed format recognition
+at_setup_line='comprec.at:21'
+at_desc="compressed format recognition"
+$at_quiet $as_echo_n " 86: $at_desc                  "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "67. comprec.at:21: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "86. comprec.at:21: testing ..."
+  $at_traceon
 
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/comprec.at:25:
+  $at_traceoff
+$as_echo "$at_srcdir/comprec.at:25:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -27089,13 +33369,9 @@ cmp orig file1
 )"
 echo comprec.at:25 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -27115,11 +33391,9 @@ mv file1 orig
 tar xfv archive
 cmp orig file1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -27139,32 +33413,22 @@ mv file1 orig
 tar xfv archive
 cmp orig file1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
 separator
 file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/comprec.at:25: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/comprec.at:25"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/comprec.at:25:
+              $at_traceoff
+$as_echo "$at_srcdir/comprec.at:25:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -27186,13 +33450,9 @@ cmp orig file1
 )"
 echo comprec.at:25 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -27212,11 +33472,9 @@ mv file1 orig
 tar xfv archive
 cmp orig file1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -27236,32 +33494,22 @@ mv file1 orig
 tar xfv archive
 cmp orig file1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
 separator
 file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/comprec.at:25: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/comprec.at:25"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/comprec.at:25:
+              $at_traceoff
+$as_echo "$at_srcdir/comprec.at:25:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -27283,13 +33531,9 @@ cmp orig file1
 )"
 echo comprec.at:25 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -27309,11 +33553,9 @@ mv file1 orig
 tar xfv archive
 cmp orig file1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -27333,32 +33575,22 @@ mv file1 orig
 tar xfv archive
 cmp orig file1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
 separator
 file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/comprec.at:25: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/comprec.at:25"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/comprec.at:25:
+              $at_traceoff
+$as_echo "$at_srcdir/comprec.at:25:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -27380,13 +33612,9 @@ cmp orig file1
 )"
 echo comprec.at:25 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -27406,11 +33634,9 @@ mv file1 orig
 tar xfv archive
 cmp orig file1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -27430,32 +33656,22 @@ mv file1 orig
 tar xfv archive
 cmp orig file1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
 separator
 file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/comprec.at:25: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/comprec.at:25"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/comprec.at:25:
+              $at_traceoff
+$as_echo "$at_srcdir/comprec.at:25:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -27477,13 +33693,9 @@ cmp orig file1
 )"
 echo comprec.at:25 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -27503,11 +33715,9 @@ mv file1 orig
 tar xfv archive
 cmp orig file1
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -27527,56 +33737,46 @@ mv file1 orig
 tar xfv archive
 cmp orig file1
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "separator
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "separator
 separator
 file1
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/comprec.at:25: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/comprec.at:25"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  68 ) # 68. shortfile.at:26: short input files
-    at_setup_line='shortfile.at:26'
-    at_desc="short input files"
-    $at_quiet $ECHO_N " 68: short input files                              $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_86
+#AT_START_87
+# 87. shortfile.at:26: short input files
+at_setup_line='shortfile.at:26'
+at_desc="short input files"
+$at_quiet $as_echo_n " 87: $at_desc                              "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "68. shortfile.at:26: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "87. shortfile.at:26: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/shortfile.at:29:
+  $at_traceoff
+$as_echo "$at_srcdir/shortfile.at:29:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -27590,13 +33790,9 @@ tar tf foo
 )"
 echo shortfile.at:29 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -27608,11 +33804,9 @@ rm -rf *
 genfile --length 511 --file foo || exit 5
 tar tf foo
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -27624,55 +33818,45 @@ rm -rf *
 genfile --length 511 --file foo || exit 5
 tar tf foo
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: This does not look like a tar archive
+echo >>"$at_stderr"; $as_echo "tar: This does not look like a tar archive
 tar: Exiting with failure status due to previous errors
-" | $at_diff - "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   2) ;;
-   *) echo "$at_srcdir/shortfile.at:29: exit code was $at_status, expected 2"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 2 $at_status "$at_srcdir/shortfile.at:29"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  69 ) # 69. shortupd.at:29: updating short archives
-    at_setup_line='shortupd.at:29'
-    at_desc="updating short archives"
-    $at_quiet $ECHO_N " 69: updating short archives                        $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_87
+#AT_START_88
+# 88. shortupd.at:29: updating short archives
+at_setup_line='shortupd.at:29'
+at_desc="updating short archives"
+$at_quiet $as_echo_n " 88: $at_desc                        "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "69. shortupd.at:29: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "88. shortupd.at:29: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/shortupd.at:32:
+  $at_traceoff
+$as_echo "$at_srcdir/shortupd.at:32:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -27686,13 +33870,9 @@ tar uf archive foo
 )"
 echo shortupd.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -27704,11 +33884,9 @@ rm -rf *
 touch foo
 tar uf archive foo
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -27720,29 +33898,18 @@ rm -rf *
 touch foo
 tar uf archive foo
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortupd.at:32: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/shortupd.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/shortupd.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/shortupd.at:32:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -27756,13 +33923,9 @@ tar uf archive foo
 )"
 echo shortupd.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -27774,11 +33937,9 @@ rm -rf *
 touch foo
 tar uf archive foo
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -27790,29 +33951,18 @@ rm -rf *
 touch foo
 tar uf archive foo
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortupd.at:32: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/shortupd.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/shortupd.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/shortupd.at:32:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -27826,13 +33976,9 @@ tar uf archive foo
 )"
 echo shortupd.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -27844,11 +33990,9 @@ rm -rf *
 touch foo
 tar uf archive foo
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -27860,29 +34004,18 @@ rm -rf *
 touch foo
 tar uf archive foo
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortupd.at:32: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/shortupd.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/shortupd.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/shortupd.at:32:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -27896,13 +34029,9 @@ tar uf archive foo
 )"
 echo shortupd.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -27914,11 +34043,9 @@ rm -rf *
 touch foo
 tar uf archive foo
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -27929,30 +34056,19 @@ rm -rf *
 
 touch foo
 tar uf archive foo
-) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
-fi
-
-at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortupd.at:32: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
+) ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/shortupd.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/shortupd.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/shortupd.at:32:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -27966,13 +34082,9 @@ tar uf archive foo
 )"
 echo shortupd.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -27984,11 +34096,9 @@ rm -rf *
 touch foo
 tar uf archive foo
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -28000,53 +34110,42 @@ rm -rf *
 touch foo
 tar uf archive foo
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-$at_diff "$at_devnull" "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/shortupd.at:32: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+at_func_diff_devnull "$at_stderr" || at_failed=:
+at_func_diff_devnull "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/shortupd.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  70 ) # 70. truncate.at:29: truncate
-    at_setup_line='truncate.at:29'
-    at_desc="truncate"
-    $at_quiet $ECHO_N " 70: truncate                                       $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_88
+#AT_START_89
+# 89. truncate.at:29: truncate
+at_setup_line='truncate.at:29'
+at_desc="truncate"
+$at_quiet $as_echo_n " 89: $at_desc                                       "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "70. truncate.at:29: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "89. truncate.at:29: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/truncate.at:32:
+  $at_traceoff
+$as_echo "$at_srcdir/truncate.at:32:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -28057,7 +34156,7 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: \$?
 echo separator
 sleep 1
@@ -28065,13 +34164,9 @@ genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar)"
 echo truncate.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -28082,17 +34177,15 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
 genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -28103,43 +34196,34 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
 genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo: File shrank by 5120 bytes; padding with zeros
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "foo
+echo >>"$at_stderr"; $as_echo "tar: foo: File shrank by 5120 bytes; padding with zeros
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
 baz
 Exit status: 1
 separator
 foo
 foo: Mod time differs
 baz
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   1) ;;
-   *) echo "$at_srcdir/truncate.at:32: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 1 $at_status "$at_srcdir/truncate.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/truncate.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/truncate.at:32:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -28150,7 +34234,7 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: \$?
 echo separator
 sleep 1
@@ -28158,13 +34242,9 @@ genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar)"
 echo truncate.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -28175,17 +34255,15 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
 genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -28196,43 +34274,34 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
 genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo: File shrank by 5120 bytes; padding with zeros
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "foo
+echo >>"$at_stderr"; $as_echo "tar: foo: File shrank by 5120 bytes; padding with zeros
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
 baz
 Exit status: 1
 separator
 foo
 foo: Mod time differs
 baz
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   1) ;;
-   *) echo "$at_srcdir/truncate.at:32: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 1 $at_status "$at_srcdir/truncate.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/truncate.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/truncate.at:32:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -28243,7 +34312,7 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: \$?
 echo separator
 sleep 1
@@ -28251,13 +34320,9 @@ genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar)"
 echo truncate.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -28268,17 +34333,15 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
 genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -28289,43 +34352,34 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
 genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo: File shrank by 5120 bytes; padding with zeros
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "foo
+echo >>"$at_stderr"; $as_echo "tar: foo: File shrank by 5120 bytes; padding with zeros
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
 baz
 Exit status: 1
 separator
 foo
 foo: Mod time differs
 baz
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   1) ;;
-   *) echo "$at_srcdir/truncate.at:32: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 1 $at_status "$at_srcdir/truncate.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/truncate.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/truncate.at:32:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -28336,7 +34390,7 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: \$?
 echo separator
 sleep 1
@@ -28344,13 +34398,9 @@ genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar)"
 echo truncate.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -28361,17 +34411,15 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
 genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -28382,43 +34430,34 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
 genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo: File shrank by 5120 bytes; padding with zeros
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "foo
+echo >>"$at_stderr"; $as_echo "tar: foo: File shrank by 5120 bytes; padding with zeros
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
 baz
 Exit status: 1
 separator
 foo
 foo: Mod time differs
 baz
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   1) ;;
-   *) echo "$at_srcdir/truncate.at:32: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 1 $at_status "$at_srcdir/truncate.at:32"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/truncate.at:32:
+              $at_traceoff
+$as_echo "$at_srcdir/truncate.at:32:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -28429,7 +34468,7 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: \$?
 echo separator
 sleep 1
@@ -28437,13 +34476,9 @@ genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar)"
 echo truncate.at:32 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -28454,17 +34489,15 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
 genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -28475,67 +34508,58 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 49995k --truncate foo
+genfile --run --checkpoint 10 --length 49995k --truncate foo -- tar --checkpoint -vcf bar foo baz
 echo Exit status: $?
 echo separator
 sleep 1
 genfile --file foo --seek 49995k --length 5k --pattern=zeros
 tar dvf bar) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo: File shrank by 5120 bytes; padding with zeros
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "foo
+echo >>"$at_stderr"; $as_echo "tar: foo: File shrank by 5120 bytes; padding with zeros
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
 baz
 Exit status: 1
 separator
 foo
 foo: Mod time differs
 baz
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   1) ;;
-   *) echo "$at_srcdir/truncate.at:32: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 1 $at_status "$at_srcdir/truncate.at:32"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
 
-  71 ) # 71. grow.at:24: grow
-    at_setup_line='grow.at:24'
-    at_desc="grow"
-    $at_quiet $ECHO_N " 71: grow                                           $ECHO_C"
-    at_xfail=no
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_89
+#AT_START_90
+# 90. grow.at:24: grow
+at_setup_line='grow.at:24'
+at_desc="grow"
+$at_quiet $as_echo_n " 90: $at_desc                                           "
+at_xfail=no
       test -f $XFAILFILE && at_xfail=yes
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "71. grow.at:24: testing ..."
-      $at_traceon
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "90. grow.at:24: testing ..."
+  $at_traceon
 
 
 
 
 
-  $at_traceoff
-echo "$at_srcdir/grow.at:27:
+  $at_traceoff
+$as_echo "$at_srcdir/grow.at:27:
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -28546,18 +34570,13 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \\
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 )"
 echo grow.at:27 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -28568,14 +34587,11 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir v7
 (cd v7
 TEST_TAR_FORMAT=v7
@@ -28586,35 +34602,25 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo: file changed as we read it
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "foo
+echo >>"$at_stderr"; $as_echo "tar: foo: file changed as we read it
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
 baz
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   1) ;;
-   *) echo "$at_srcdir/grow.at:27: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 1 $at_status "$at_srcdir/grow.at:27"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/grow.at:27:
+              $at_traceoff
+$as_echo "$at_srcdir/grow.at:27:
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -28625,18 +34631,13 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \\
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 )"
 echo grow.at:27 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -28647,14 +34648,11 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir oldgnu
 (cd oldgnu
 TEST_TAR_FORMAT=oldgnu
@@ -28665,35 +34663,25 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo: file changed as we read it
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "foo
+echo >>"$at_stderr"; $as_echo "tar: foo: file changed as we read it
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
 baz
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   1) ;;
-   *) echo "$at_srcdir/grow.at:27: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 1 $at_status "$at_srcdir/grow.at:27"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/grow.at:27:
+              $at_traceoff
+$as_echo "$at_srcdir/grow.at:27:
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -28704,18 +34692,13 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \\
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 )"
 echo grow.at:27 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -28726,14 +34709,11 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir ustar
 (cd ustar
 TEST_TAR_FORMAT=ustar
@@ -28744,35 +34724,25 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo: file changed as we read it
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "foo
+echo >>"$at_stderr"; $as_echo "tar: foo: file changed as we read it
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
 baz
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   1) ;;
-   *) echo "$at_srcdir/grow.at:27: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
-
-  echo 1 > "$at_status_file"
-  exit 1
-fi
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 1 $at_status "$at_srcdir/grow.at:27"
 
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/grow.at:27:
+              $at_traceoff
+$as_echo "$at_srcdir/grow.at:27:
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -28783,18 +34753,13 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \\
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 )"
 echo grow.at:27 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -28805,14 +34770,11 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir posix
 (cd posix
 TEST_TAR_FORMAT=posix
@@ -28823,35 +34785,25 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo: file changed as we read it
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "foo
+echo >>"$at_stderr"; $as_echo "tar: foo: file changed as we read it
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
 baz
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   1) ;;
-   *) echo "$at_srcdir/grow.at:27: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 1 $at_status "$at_srcdir/grow.at:27"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-              $at_traceoff
-echo "$at_srcdir/grow.at:27:
+              $at_traceoff
+$as_echo "$at_srcdir/grow.at:27:
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -28862,18 +34814,13 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \\
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 )"
 echo grow.at:27 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -28884,14 +34831,11 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ) ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 mkdir gnu
 (cd gnu
 TEST_TAR_FORMAT=gnu
@@ -28902,58 +34846,285 @@ rm -rf *
 
 genfile --file foo --length 50000k
 genfile --file baz
-genfile --run 'tar -vcf bar foo baz' --checkpoint 10 --length 1024 \
-        --append foo
+genfile --run --checkpoint 10 --length 1024 --append foo -- tar --checkpoint -vcf bar foo baz
 ) ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-echo >>"$at_stderr"; echo "tar: foo: file changed as we read it
-" | $at_diff - "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "foo
+echo >>"$at_stderr"; $as_echo "tar: foo: file changed as we read it
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "foo
 baz
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   1) ;;
-   *) echo "$at_srcdir/grow.at:27: exit code was $at_status, expected 1"
-      at_failed=:;;
-esac
-if $at_failed; then
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 1 $at_status "$at_srcdir/grow.at:27"
 
+$at_failed && at_func_log_failure
+$at_traceon; }
 
-  echo 1 > "$at_status_file"
-  exit 1
+
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_90
+#AT_START_91
+# 91. remfiles01.at:28: remove-files with compression
+at_setup_line='remfiles01.at:28'
+at_desc="remove-files with compression"
+$at_quiet $as_echo_n " 91: $at_desc                  "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "91. remfiles01.at:28: testing ..."
+  $at_traceon
+
+
+
+unset TAR_OPTIONS
+{ $at_traceoff
+$as_echo "$at_srcdir/remfiles01.at:32:
+
+cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir dir
+cd dir
+genfile --file a --length 0
+chmod 0 a
+genfile --file b
+mkdir c
+
+# Depending on when the SIGPIPE gets delivered, the invocation below
+# may finish with either
+#  tar: a: Cannot write: Broken pipe
+# or
+#  tar: Child returned status 2
+
+tar -c -f a -z --remove-files b c 2>err
+EC=\$?
+sed -n '/(child)/p' err >&2
+rm err
+find . | sort
+exit \$EC
+"
+echo remfiles01.at:32 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+
+cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir dir
+cd dir
+genfile --file a --length 0
+chmod 0 a
+genfile --file b
+mkdir c
+
+# Depending on when the SIGPIPE gets delivered, the invocation below
+# may finish with either
+#  tar: a: Cannot write: Broken pipe
+# or
+#  tar: Child returned status 2
+
+tar -c -f a -z --remove-files b c 2>err
+EC=$?
+sed -n '/(child)/p' err >&2
+rm err
+find . | sort
+exit $EC
+ ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+
+cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir dir
+cd dir
+genfile --file a --length 0
+chmod 0 a
+genfile --file b
+mkdir c
+
+# Depending on when the SIGPIPE gets delivered, the invocation below
+# may finish with either
+#  tar: a: Cannot write: Broken pipe
+# or
+#  tar: Child returned status 2
+
+tar -c -f a -z --remove-files b c 2>err
+EC=$?
+sed -n '/(child)/p' err >&2
+rm err
+find . | sort
+exit $EC
+ ) >"$at_stdout" 2>"$at_stderr"
 fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar (child): a: Cannot open: Permission denied
+tar (child): Error is not recoverable: exiting now
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo ".
+./a
+./b
+./c
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 2 $at_status "$at_srcdir/remfiles01.at:32"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
 
-$at_traceon
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_91
+#AT_START_92
+# 92. remfiles02.at:28: remove-files with compression: grand-child
+at_setup_line='remfiles02.at:28'
+at_desc="remove-files with compression: grand-child"
+$at_quiet $as_echo_n " 92: $at_desc     "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "92. remfiles02.at:28: testing ..."
+  $at_traceon
 
 
 
+unset TAR_OPTIONS
+{ $at_traceoff
+$as_echo "$at_srcdir/remfiles02.at:32:
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
+cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
 
-  72 ) # 72. gtarfail.at:21: gtarfail
-    at_setup_line='gtarfail.at:21'
-    at_desc="gtarfail"
-    $at_quiet $ECHO_N " 72: gtarfail                                       $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "72. gtarfail.at:21: testing ..."
-      $at_traceon
+
+mkdir dir
+cd dir
+mkdir a
+genfile --file b
+mkdir c
+
+tar -c -f a -z --remove-files b c 2>err
+EC=\$?
+sed -n '/(child)/p' err >&2
+rm err
+find . | sort
+exit \$EC
+"
+echo remfiles02.at:32 >"$at_check_line_file"
+
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
+
+cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir dir
+cd dir
+mkdir a
+genfile --file b
+mkdir c
+
+tar -c -f a -z --remove-files b c 2>err
+EC=$?
+sed -n '/(child)/p' err >&2
+rm err
+find . | sort
+exit $EC
+ ) >"$at_stdout" 2>"$at_stder1"
+  at_func_filter_trace $?
+else
+  ( :;
+
+cat /dev/null | gzip - > /dev/null 2>&1 || exit 77
+
+
+test -z "`sort < /dev/null 2>&1`" || exit 77
+
+
+mkdir dir
+cd dir
+mkdir a
+genfile --file b
+mkdir c
+
+tar -c -f a -z --remove-files b c 2>err
+EC=$?
+sed -n '/(child)/p' err >&2
+rm err
+find . | sort
+exit $EC
+ ) >"$at_stdout" 2>"$at_stderr"
+fi
+at_status=$?
+at_failed=false
+echo >>"$at_stderr"; $as_echo "tar (child): a: Cannot open: Is a directory
+tar (child): Error is not recoverable: exiting now
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo ".
+./a
+./b
+./c
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 2 $at_status "$at_srcdir/remfiles02.at:32"
+
+$at_failed && at_func_log_failure
+$at_traceon; }
+
+
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_92
+#AT_START_93
+# 93. gtarfail.at:21: gtarfail
+at_setup_line='gtarfail.at:21'
+at_desc="gtarfail"
+$at_quiet $as_echo_n " 93: $at_desc                                       "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "93. gtarfail.at:21: testing ..."
+  $at_traceon
 
 
 
 unset TAR_OPTIONS
 
-$at_traceoff
-echo "$at_srcdir/gtarfail.at:26:
+$at_traceoff
+$as_echo "$at_srcdir/gtarfail.at:26:
 
 test -z "$STAR_TESTSCRIPTS" && exit 77
 tarball_prereq gtarfail.tar bf7612e401aaa679edbb07ae1183811b $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77
@@ -28963,13 +35134,9 @@ tar --utc -tvf \$STAR_TESTSCRIPTS/gtarfail.tar
 "
 echo gtarfail.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 
 test -z "$STAR_TESTSCRIPTS" && exit 77
 tarball_prereq gtarfail.tar bf7612e401aaa679edbb07ae1183811b $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77
@@ -28977,11 +35144,9 @@ tarball_prereq gtarfail.tar bf7612e401aaa679edbb07ae1183811b $STAR_TESTSCRIPTS $
 
 tar --utc -tvf $STAR_TESTSCRIPTS/gtarfail.tar
  ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 
 test -z "$STAR_TESTSCRIPTS" && exit 77
 tarball_prereq gtarfail.tar bf7612e401aaa679edbb07ae1183811b $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77
@@ -28989,56 +35154,46 @@ tarball_prereq gtarfail.tar bf7612e401aaa679edbb07ae1183811b $STAR_TESTSCRIPTS $
 
 tar --utc -tvf $STAR_TESTSCRIPTS/gtarfail.tar
  ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "-rw-r--r-- jes/glone       518 2001-05-25 14:41 vedpowered.gif
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-rw-r--r-- jes/glone       518 2001-05-25 14:41 vedpowered.gif
 -rw-r--r-- jes/glone      6825 1997-04-29 00:19 cd.gif
 -rw-r--r-- jes/glone     33354 1999-06-22 12:17 DSCN0049c.JPG
 -rw-r--r-- jes/glone     86159 2001-06-05 18:16 Window1.jpg
 -rw-r--r-- jes/glone      1310 2001-05-25 13:05 vipower.gif
 -rw-rw-rw- jes/glone    148753 1998-09-15 13:08 billyboy.jpg
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/gtarfail.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/gtarfail.at:26"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  73 ) # 73. gtarfail2.at:21: gtarfail2
-    at_setup_line='gtarfail2.at:21'
-    at_desc="gtarfail2"
-    $at_quiet $ECHO_N " 73: gtarfail2                                      $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "73. gtarfail2.at:21: testing ..."
-      $at_traceon
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_93
+#AT_START_94
+# 94. gtarfail2.at:21: gtarfail2
+at_setup_line='gtarfail2.at:21'
+at_desc="gtarfail2"
+$at_quiet $as_echo_n " 94: $at_desc                                      "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "94. gtarfail2.at:21: testing ..."
+  $at_traceon
 
 
 
 unset TAR_OPTIONS
 
-$at_traceoff
-echo "$at_srcdir/gtarfail2.at:26:
+$at_traceoff
+$as_echo "$at_srcdir/gtarfail2.at:26:
 
 test -z "$STAR_TESTSCRIPTS" && exit 77
 tarball_prereq gtarfail2.tar 6b607d1faec14b82f69525d9c5b66e53 $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77
@@ -29047,36 +35202,29 @@ tar --utc -tvf \$STAR_TESTSCRIPTS/gtarfail2.tar
 "
 echo gtarfail2.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 
 test -z "$STAR_TESTSCRIPTS" && exit 77
 tarball_prereq gtarfail2.tar 6b607d1faec14b82f69525d9c5b66e53 $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77
 
 tar --utc -tvf $STAR_TESTSCRIPTS/gtarfail2.tar
  ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 
 test -z "$STAR_TESTSCRIPTS" && exit 77
 tarball_prereq gtarfail2.tar 6b607d1faec14b82f69525d9c5b66e53 $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77
 
 tar --utc -tvf $STAR_TESTSCRIPTS/gtarfail2.tar
  ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "-rwxr-xr-x jes/glone       214 2001-09-21 14:08 .clean
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-rwxr-xr-x jes/glone       214 2001-09-21 14:08 .clean
 lrwxrwxrwx jes/cats          0 1998-05-07 12:39 RULES -> makefiles/RULES
 drwxr-sr-x jes/glone         0 2001-12-10 00:00 build/
 -rw-r--r-- jes/glone    312019 2001-12-10 00:00 build/smake-1.2.tar.gz
@@ -29086,45 +35234,36 @@ drwxr-sr-x jes/glone         0 2001-11-09 18:20 build/psmake/
 -rw-r--r-- jes/glone       647 2001-02-25 23:50 build/psmake/Makefile
 lrwxrwxrwx jes/glone         0 2001-08-29 10:53 build/psmake/archconf.c -> ../archconf.c
 lrwxrwxrwx jes/glone         0 2001-08-29 10:54 build/psmake/astoi.c -> ../../lib/astoi.c
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/gtarfail2.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/gtarfail2.at:26"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  74 ) # 74. multi-fail.at:21: multi-fail
-    at_setup_line='multi-fail.at:21'
-    at_desc="multi-fail"
-    $at_quiet $ECHO_N " 74: multi-fail                                     $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "74. multi-fail.at:21: testing ..."
-      $at_traceon
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_94
+#AT_START_95
+# 95. multi-fail.at:21: multi-fail
+at_setup_line='multi-fail.at:21'
+at_desc="multi-fail"
+$at_quiet $as_echo_n " 95: $at_desc                                     "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "95. multi-fail.at:21: testing ..."
+  $at_traceon
 
 
 
 unset TAR_OPTIONS
 
-$at_traceoff
-echo "$at_srcdir/multi-fail.at:26:
+$at_traceoff
+$as_echo "$at_srcdir/multi-fail.at:26:
 
 test -z "$STAR_TESTSCRIPTS" && exit 77
 tarball_prereq gnu-multi-fail-volume1.gtar 7c28663dd98b0bd91ceb4be7af55254e $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77
@@ -29139,13 +35278,9 @@ tar --utc -tvM -f \$STAR_TESTSCRIPTS/gnu-multi-fail-volume1.gtar \\
 "
 echo multi-fail.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 
 test -z "$STAR_TESTSCRIPTS" && exit 77
 tarball_prereq gnu-multi-fail-volume1.gtar 7c28663dd98b0bd91ceb4be7af55254e $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77
@@ -29158,11 +35293,9 @@ tarball_prereq gnu-multi-fail-volume2.gtar b5d41c4c3ec440687d4a44957b5079a8 $STA
 tar --utc -tvM -f $STAR_TESTSCRIPTS/gnu-multi-fail-volume1.gtar \
                -f $STAR_TESTSCRIPTS/gnu-multi-fail-volume2.gtar <&-
  ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 
 test -z "$STAR_TESTSCRIPTS" && exit 77
 tarball_prereq gnu-multi-fail-volume1.gtar 7c28663dd98b0bd91ceb4be7af55254e $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77
@@ -29175,12 +35308,11 @@ tarball_prereq gnu-multi-fail-volume2.gtar b5d41c4c3ec440687d4a44957b5079a8 $STA
 tar --utc -tvM -f $STAR_TESTSCRIPTS/gnu-multi-fail-volume1.gtar \
                -f $STAR_TESTSCRIPTS/gnu-multi-fail-volume2.gtar <&-
  ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
-$at_diff "$at_devnull" "$at_stderr" || at_failed=:
-echo >>"$at_stdout"; echo "drwxrwsr-x joerg/bs          0 2003-10-11 14:32 OBJ/i386-sunos5-gcc/
+at_func_diff_devnull "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "drwxrwsr-x joerg/bs          0 2003-10-11 14:32 OBJ/i386-sunos5-gcc/
 -rw-r--r-- joerg/bs          1 2003-10-11 14:32 OBJ/i386-sunos5-gcc/Dnull
 -rw-r--r-- joerg/bs       1743 2003-10-10 18:06 OBJ/i386-sunos5-gcc/star.d
 -rw-r--r-- joerg/bs       1460 2003-10-11 11:53 OBJ/i386-sunos5-gcc/header.d
@@ -29232,45 +35364,36 @@ echo >>"$at_stdout"; echo "drwxrwsr-x joerg/bs          0 2003-10-11 14:32 OBJ/i
 -rw-r--r-- joerg/bs       2576 2003-10-10 18:07 OBJ/i386-sunos5-gcc/names.o
 -rw-r--r-- joerg/bs        952 2003-10-10 18:07 OBJ/i386-sunos5-gcc/movearch.o
 -rw-r--r-- joerg/bs       2756 2003-10-07 17:53 OBJ/i386-sunos5-gcc/table.o
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/multi-fail.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/multi-fail.at:26"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  75 ) # 75. ustar-big-2g.at:21: ustar-big-2g
-    at_setup_line='ustar-big-2g.at:21'
-    at_desc="ustar-big-2g"
-    $at_quiet $ECHO_N " 75: ustar-big-2g                                   $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "75. ustar-big-2g.at:21: testing ..."
-      $at_traceon
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_95
+#AT_START_96
+# 96. ustar-big-2g.at:21: ustar-big-2g
+at_setup_line='ustar-big-2g.at:21'
+at_desc="ustar-big-2g"
+$at_quiet $as_echo_n " 96: $at_desc                                   "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "96. ustar-big-2g.at:21: testing ..."
+  $at_traceon
 
 
 
 unset TAR_OPTIONS
 
-$at_traceoff
-echo "$at_srcdir/ustar-big-2g.at:26:
+$at_traceoff
+$as_echo "$at_srcdir/ustar-big-2g.at:26:
 
 cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77
 
@@ -29283,13 +35406,9 @@ tar --utc -tvjf \$STAR_TESTSCRIPTS/ustar-big-2g.tar.bz2
 "
 echo ustar-big-2g.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 
 cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77
 
@@ -29300,11 +35419,9 @@ tarball_prereq ustar-big-2g.tar.bz2 b63979733629c8fcdf40b60065422767 $STAR_TESTS
 
 tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-2g.tar.bz2
  ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 
 cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77
 
@@ -29315,28 +35432,18 @@ tarball_prereq ustar-big-2g.tar.bz2 b63979733629c8fcdf40b60065422767 $STAR_TESTS
 
 tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-2g.tar.bz2
  ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
 echo stderr:; tee stderr <"$at_stderr"
-echo >>"$at_stdout"; echo "-rw------- jes/glone 2147483647 2002-06-15 14:53 big
+echo >>"$at_stdout"; $as_echo "-rw------- jes/glone 2147483647 2002-06-15 14:53 big
 -rw-r--r-- jes/glone          0 2002-06-15 14:53 file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/ustar-big-2g.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/ustar-big-2g.at:26"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 done
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  76 ) # 76. ustar-big-8g.at:21: ustar-big-8g
-    at_setup_line='ustar-big-8g.at:21'
-    at_desc="ustar-big-8g"
-    $at_quiet $ECHO_N " 76: ustar-big-8g                                   $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "76. ustar-big-8g.at:21: testing ..."
-      $at_traceon
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_96
+#AT_START_97
+# 97. ustar-big-8g.at:21: ustar-big-8g
+at_setup_line='ustar-big-8g.at:21'
+at_desc="ustar-big-8g"
+$at_quiet $as_echo_n " 97: $at_desc                                   "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "97. ustar-big-8g.at:21: testing ..."
+  $at_traceon
 
 
 
 unset TAR_OPTIONS
 
-$at_traceoff
-echo "$at_srcdir/ustar-big-8g.at:26:
+$at_traceoff
+$as_echo "$at_srcdir/ustar-big-8g.at:26:
 
 cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77
 
@@ -29386,13 +35493,9 @@ tar --utc -tvjf \$STAR_TESTSCRIPTS/ustar-big-8g.tar.bz2
 "
 echo ustar-big-8g.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 
 cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77
 
@@ -29403,11 +35506,9 @@ tarball_prereq ustar-big-8g.tar.bz2 60ff503fa4b8288bef7ada89e9c91b0f $STAR_TESTS
 
 tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-8g.tar.bz2
  ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 
 cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77
 
@@ -29418,28 +35519,18 @@ tarball_prereq ustar-big-8g.tar.bz2 60ff503fa4b8288bef7ada89e9c91b0f $STAR_TESTS
 
 tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-8g.tar.bz2
  ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
 echo stderr:; tee stderr <"$at_stderr"
-echo >>"$at_stdout"; echo "-rw------- jes/glone 8589934591 2002-06-15 15:08 8gb-1
+echo >>"$at_stdout"; $as_echo "-rw------- jes/glone 8589934591 2002-06-15 15:08 8gb-1
 -rw-r--r-- jes/glone          0 2002-06-15 14:53 file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/ustar-big-8g.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/ustar-big-8g.at:26"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 done
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-  77 ) # 77. pax-big-10g.at:21: pax-big-10g
-    at_setup_line='pax-big-10g.at:21'
-    at_desc="pax-big-10g"
-    $at_quiet $ECHO_N " 77: pax-big-10g                                    $ECHO_C"
-    at_xfail=no
-    echo "#                             -*- compilation -*-" >> "$at_group_log"
-    (
-      echo "77. pax-big-10g.at:21: testing ..."
-      $at_traceon
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_97
+#AT_START_98
+# 98. pax-big-10g.at:21: pax-big-10g
+at_setup_line='pax-big-10g.at:21'
+at_desc="pax-big-10g"
+$at_quiet $as_echo_n " 98: $at_desc                                    "
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "98. pax-big-10g.at:21: testing ..."
+  $at_traceon
 
 
 
 unset TAR_OPTIONS
 
-$at_traceoff
-echo "$at_srcdir/pax-big-10g.at:26:
+$at_traceoff
+$as_echo "$at_srcdir/pax-big-10g.at:26:
 
 cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77
 
@@ -29489,13 +35580,9 @@ tar --utc -tvjf \$STAR_TESTSCRIPTS/pax-big-10g.tar.bz2
 "
 echo pax-big-10g.at:26 >"$at_check_line_file"
 
-at_trace_this=
-if test -n "$at_traceon"; then
-    echo 'Not enabling shell tracing (command contains an embedded newline)'
-fi
-
-if test -n "$at_trace_this"; then
-    ( $at_traceon;
+if { echo 'Not enabling shell tracing (command contains an embedded newline)'
+   false; }; then
+  ( $at_traceon;
 
 cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77
 
@@ -29506,11 +35593,9 @@ tarball_prereq pax-big-10g.tar.bz2 ca15c23acc8d8bb1f27e60113a5f8bff $STAR_TESTSC
 
 tar --utc -tvjf $STAR_TESTSCRIPTS/pax-big-10g.tar.bz2
  ) >"$at_stdout" 2>"$at_stder1"
-    at_status=$?
-    grep '^ *+' "$at_stder1" >&2
-    grep -v '^ *+' "$at_stder1" >"$at_stderr"
+  at_func_filter_trace $?
 else
-    ( :;
+  ( :;
 
 cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77
 
@@ -29521,28 +35606,18 @@ tarball_prereq pax-big-10g.tar.bz2 ca15c23acc8d8bb1f27e60113a5f8bff $STAR_TESTSC
 
 tar --utc -tvjf $STAR_TESTSCRIPTS/pax-big-10g.tar.bz2
  ) >"$at_stdout" 2>"$at_stderr"
-    at_status=$?
 fi
-
+at_status=$?
 at_failed=false
 echo stderr:; tee stderr <"$at_stderr"
-echo >>"$at_stdout"; echo "-rw------- jes/glone 10737418240 2002-06-15 21:18 10g
+echo >>"$at_stdout"; $as_echo "-rw------- jes/glone 10737418240 2002-06-15 21:18 10g
 -rw-r--r-- jes/glone           0 2002-06-15 14:53 file
-" | $at_diff - "$at_stdout" || at_failed=:
-case $at_status in
-   77) echo 77 > "$at_status_file"; exit 77;;
-   0) ;;
-   *) echo "$at_srcdir/pax-big-10g.at:26: exit code was $at_status, expected 0"
-      at_failed=:;;
-esac
-if $at_failed; then
-
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_func_check_status 0 $at_status "$at_srcdir/pax-big-10g.at:26"
 
-  echo 1 > "$at_status_file"
-  exit 1
-fi
-
-$at_traceon
+$at_failed && at_func_log_failure
+$at_traceon; }
 
 
 
 done
 
 
-      $at_traceoff
-      $at_times_p && times >"$at_times_file"
-    ) 5>&1 2>&1 | eval $at_tee_pipe
-    at_status=`cat "$at_status_file"`
-    ;;
-
-
-  * )
-    echo "$as_me: no such test group: $at_group" >&2
-    continue
-    ;;
-  esac
-
-  # Be sure to come back to the suite directory, in particular
-  # since below we might `rm' the group directory we are in currently.
-  cd "$at_suite_dir"
-
-  case $at_group in
-    banner-*) ;;
-    *)
-      if test ! -f "$at_check_line_file"; then
-       sed "s/^ */$as_me: warning: /" <<_ATEOF
-       A failure happened in a test group before any test could be
-       run. This means that test suite is improperly designed.  Please
-       report this failure to <bug-tar@gnu.org>.
-_ATEOF
-       echo "$at_setup_line" >"$at_check_line_file"
-      fi
-      at_group_count=`expr 1 + $at_group_count`
-      $at_verbose $ECHO_N "$at_group. $at_setup_line: $ECHO_C"
-      echo $ECHO_N "$at_group. $at_setup_line: $ECHO_C" >> "$at_group_log"
-      case $at_xfail:$at_status in
-       yes:0)
-           at_msg="UNEXPECTED PASS"
-           at_xpass_list="$at_xpass_list $at_group"
-           at_errexit=$at_errexit_p
-           ;;
-       no:0)
-           at_msg="ok"
-           at_pass_list="$at_pass_list $at_group"
-           at_errexit=false
-           ;;
-       *:77)
-           at_msg='skipped ('`cat "$at_check_line_file"`')'
-           at_skip_list="$at_skip_list $at_group"
-           at_errexit=false
-           ;;
-       yes:*)
-           at_msg='expected failure ('`cat "$at_check_line_file"`')'
-           at_xfail_list="$at_xfail_list $at_group"
-           at_errexit=false
-           ;;
-       no:*)
-           at_msg='FAILED ('`cat "$at_check_line_file"`')'
-           at_fail_list="$at_fail_list $at_group"
-           at_errexit=$at_errexit_p
-           ;;
-      esac
-      # Make sure there is a separator even with long titles.
-      echo " $at_msg"
-      at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg"
-      case $at_status in
-       0|77)
-         # $at_times_file is only available if the group succeeded.
-         # We're not including the group log, so the success message
-         # is written in the global log separately.  But we also
-         # write to the group log in case they're using -d.
-         if test -f "$at_times_file"; then
-           at_log_msg="$at_log_msg     ("`sed 1d "$at_times_file"`')'
-           rm -f "$at_times_file"
-          fi
-         echo "$at_log_msg" >> "$at_group_log"
-         echo "$at_log_msg" >&5
-
-         # Cleanup the group directory, unless the user wants the files.
-         if $at_debug_p ; then
-                 {
-           echo "#! /bin/sh"
-           echo 'test "${ZSH_VERSION+set}" = set && alias -g '\''${1+"$@"}'\''='\''"$@"'\'''
-           echo "cd '$at_dir'"
-           echo 'exec ${CONFIG_SHELL-'"$SHELL"'}' "$0" \
-                '-v -d' "$at_debug_args" "$at_group" '${1+"$@"}'
-           echo 'exit 1'
-         } >$at_group_dir/run
-         chmod +x $at_group_dir/run
-
-         elif test -d "$at_group_dir"; then
-           find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
-           rm -fr "$at_group_dir"
-         fi
-         ;;
-       *)
-         # Upon failure, include the log into the testsuite's global
-         # log.  The failure message is written in the group log.  It
-         # is later included in the global log.
-         echo "$at_log_msg" >> "$at_group_log"
-
-         # Upon failure, keep the group directory for autopsy, and
-         # create the debugging script.
-                 {
-           echo "#! /bin/sh"
-           echo 'test "${ZSH_VERSION+set}" = set && alias -g '\''${1+"$@"}'\''='\''"$@"'\'''
-           echo "cd '$at_dir'"
-           echo 'exec ${CONFIG_SHELL-'"$SHELL"'}' "$0" \
-                '-v -d' "$at_debug_args" "$at_group" '${1+"$@"}'
-           echo 'exit 1'
-         } >$at_group_dir/run
-         chmod +x $at_group_dir/run
-
-         $at_errexit && break
-         ;;
-      esac
-      ;;
-  esac
-done
-
-# Back to the top directory.
-cd "$at_dir"
-
-# Compute the duration of the suite.
-at_stop_date=`date`
-at_stop_time=`date +%s 2>/dev/null`
-echo "$as_me: ending at: $at_stop_date" >&5
-case $at_start_time,$at_stop_time in
-  [0-9]*,[0-9]*)
-    at_duration_s=`expr $at_stop_time - $at_start_time`
-    at_duration_m=`expr $at_duration_s / 60`
-    at_duration_h=`expr $at_duration_m / 60`
-    at_duration_s=`expr $at_duration_s % 60`
-    at_duration_m=`expr $at_duration_m % 60`
-    at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s"
-    echo "$as_me: test suite duration: $at_duration" >&5
-    ;;
-esac
-
-# Wrap up the test suite with summary statistics.
-at_skip_count=`set dummy $at_skip_list; shift; echo $#`
-at_fail_count=`set dummy $at_fail_list; shift; echo $#`
-at_xpass_count=`set dummy $at_xpass_list; shift; echo $#`
-at_xfail_count=`set dummy $at_xfail_list; shift; echo $#`
-
-at_run_count=`expr $at_group_count - $at_skip_count`
-at_unexpected_count=`expr $at_xpass_count + $at_fail_count`
-at_total_fail_count=`expr $at_xfail_count + $at_fail_count`
-
-echo
-cat <<\_ASBOX
-## ------------- ##
-## Test results. ##
-## ------------- ##
-_ASBOX
-echo
-{
-  echo
-  cat <<\_ASBOX
-## ------------- ##
-## Test results. ##
-## ------------- ##
-_ASBOX
-  echo
-} >&5
-
-if test $at_run_count = 1; then
-  at_result="1 test"
-  at_were=was
-else
-  at_result="$at_run_count tests"
-  at_were=were
-fi
-if $at_errexit_p && test $at_unexpected_count != 0; then
-  if test $at_xpass_count = 1; then
-    at_result="$at_result $at_were run, one passed"
-  else
-    at_result="$at_result $at_were run, one failed"
-  fi
-  at_result="$at_result unexpectedly and inhibited subsequent tests."
-else
-  # Don't you just love exponential explosion of the number of cases?
-  case $at_xpass_count:$at_fail_count:$at_xfail_count in
-    # So far, so good.
-    0:0:0) at_result="$at_result $at_were successful." ;;
-    0:0:*) at_result="$at_result behaved as expected." ;;
-
-    # Some unexpected failures
-    0:*:0) at_result="$at_result $at_were run,
-$at_fail_count failed unexpectedly." ;;
-
-    # Some failures, both expected and unexpected
-    0:*:1) at_result="$at_result $at_were run,
-$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
-    0:*:*) at_result="$at_result $at_were run,
-$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
-
-    # No unexpected failures, but some xpasses
-    *:0:*) at_result="$at_result $at_were run,
-$at_xpass_count passed unexpectedly." ;;
-
-    # No expected failures, but failures and xpasses
-    *:1:0) at_result="$at_result $at_were run,
-$at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;;
-    *:*:0) at_result="$at_result $at_were run,
-$at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;;
-
-    # All of them.
-    *:*:1) at_result="$at_result $at_were run,
-$at_xpass_count passed unexpectedly,
-$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
-    *:*:*) at_result="$at_result $at_were run,
-$at_xpass_count passed unexpectedly,
-$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
-  esac
-
-  if test $at_skip_count = 0 && test $at_run_count -gt 1; then
-    at_result="All $at_result"
-  fi
-fi
-
-# Now put skips in the mix.
-case $at_skip_count in
-  0) ;;
-  1) at_result="$at_result
-1 test was skipped." ;;
-  *) at_result="$at_result
-$at_skip_count tests were skipped." ;;
-esac
-
-if test $at_unexpected_count = 0; then
-  echo "$at_result"
-  echo "$at_result" >&5
-else
-  echo "ERROR: $at_result" >&2
-  echo "ERROR: $at_result" >&5
-  {
-    echo
-    cat <<\_ASBOX
-## ------------------------ ##
-## Summary of the failures. ##
-## ------------------------ ##
-_ASBOX
-
-    # Summary of failed and skipped tests.
-    if test $at_fail_count != 0; then
-      echo "Failed tests:"
-      $SHELL "$0" $at_fail_list --list
-      echo
-    fi
-    if test $at_skip_count != 0; then
-      echo "Skipped tests:"
-      $SHELL "$0" $at_skip_list --list
-      echo
-    fi
-    if test $at_xpass_count != 0; then
-      echo "Unexpected passes:"
-      $SHELL "$0" $at_xpass_list --list
-      echo
-    fi
-    if test $at_fail_count != 0; then
-      cat <<\_ASBOX
-## ---------------------- ##
-## Detailed failed tests. ##
-## ---------------------- ##
-_ASBOX
-      echo
-      for at_group in $at_fail_list
-      do
-        at_group_normalized=$at_group
-
-  while :; do
-    case $at_group_normalized in #(
-    $at_format*) break;;
-    esac
-    at_group_normalized=0$at_group_normalized
-  done
-
-        cat "$at_suite_dir/$at_group_normalized/$as_me.log"
-        echo
-      done
-      echo
-    fi
-    if test -n "$at_top_srcdir"; then
-      sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## ${at_top_build_prefix}config.log ##
-_ASBOX
-      sed 's/^/| /' ${at_top_build_prefix}config.log
-      echo
-    fi
-  } >&5
-
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## $as_me.log was created. ##
-_ASBOX
-
-  echo
-  echo "Please send \`${at_testdir+${at_testdir}/}$as_me.log' and all information you think might help:"
-  echo
-  echo "   To: <bug-tar@gnu.org>"
-  echo "   Subject: [GNU tar 1.22] $as_me:$at_fail_list${at_fail_list:+ failed${at_xpass_list:+,}}$at_xpass_list${at_xpass_list:+ passed unexpectedly}"
-  echo
-  if test $at_debug_p = false; then
-    echo
-    echo 'You may investigate any problem if you feel able to do so, in which'
-    echo 'case the test suite provides a good starting point.  Its output may'
-    echo "be found below \`${at_testdir+${at_testdir}/}$as_me.dir'."
-    echo
-  fi
-    exit 1
-fi
-
-exit 0
-
-
-
+  $at_traceoff
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+at_status=`cat "$at_status_file"`
+#AT_STOP_98