Subject: update generated testsuite file with CVE-2014-9112 testcases
Author: Steve Beattie <sbeattie@ubuntu.com>
Submitted-upstream: ubuntu-only

The patch to address CVE-2014-9112 added 2 testcases to th cpio
testsuite, which is generated via m4/autom4te. However, the debian
packaging does not rebuild this at build time, meaning the added tests
were not run during the build. This patch is the result of rebuilding
the cpio testsuite via:

  autom4te2.64  --language=autotest -I ./ testsuite.at -o testsuite

in the tests/ subdirectory.
---
 tests/testsuite | 1800 +++++++++++++++++++++++++++++---------------------------
 1 file changed, 952 insertions(+), 848 deletions(-)

Index: b/tests/testsuite
===================================================================
--- a/tests/testsuite
+++ b/tests/testsuite
@@ -1,17 +1,18 @@
 #! /bin/sh
-# Generated from testsuite.at by GNU Autoconf 2.63.
+# Generated from testsuite.at by GNU Autoconf 2.64.
+#
+# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
+# 2009 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.
-## --------------------- ##
-## M4sh Initialization.  ##
-## --------------------- ##
+## -------------------- ##
+## M4sh Initialization. ##
+## -------------------- ##
 
 # Be more Bourne compatible
 DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
   emulate sh
   NULLCMD=:
   # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
@@ -19,23 +20,15 @@ if test -n "${ZSH_VERSION+set}" && (emul
   alias -g '${1+"$@"}'='"$@"'
   setopt NO_GLOB_SUBST
 else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
+  case `(set -o) 2>/dev/null` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
 esac
-
 fi
 
 
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
 as_nl='
 '
 export as_nl
@@ -43,7 +36,13 @@ export as_nl
 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
+# Prefer a ksh shell builtin over an external printf program on Solaris,
+# but without wasting forks for bash or zsh.
+if test -z "$BASH_VERSION$ZSH_VERSION" \
+    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
+  as_echo='print -r --'
+  as_echo_n='print -rn --'
+elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
   as_echo='printf %s\n'
   as_echo_n='printf %s'
 else
@@ -54,7 +53,7 @@ else
     as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
     as_echo_n_body='eval
       arg=$1;
-      case $arg in
+      case $arg in #(
       *"$as_nl"*)
 	expr "X$arg" : "X\\(.*\\)$as_nl";
 	arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
@@ -77,13 +76,6 @@ if test "${PATH_SEPARATOR+set}" != set;
   }
 fi
 
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
-  as_unset=unset
-else
-  as_unset=false
-fi
-
 
 # IFS
 # We need space, tab and new line, in precisely that order.  Quoting is
@@ -93,15 +85,15 @@ fi
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
-case $0 in
+case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
+    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+  done
 IFS=$as_save_IFS
 
      ;;
@@ -113,12 +105,16 @@ if test "x$as_myself" = x; then
 fi
 if test ! -f "$as_myself"; then
   $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  { (exit 1); exit 1; }
+  exit 1
 fi
 
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+# Unset variables that we do not need and which cause bugs (e.g. in
+# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
+# suppresses any "Segmentation fault" message there.  '((' could
+# trigger a bug in pdksh 5.2.14.
+for as_var in BASH_ENV ENV MAIL MAILPATH
+do eval test x\${$as_var+set} = xset \
+  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
 done
 PS1='$ '
 PS2='> '
@@ -130,330 +126,299 @@ export LC_ALL
 LANGUAGE=C
 export LANGUAGE
 
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-	 X"$0" : 'X\(//\)$' \| \
-	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\/\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-
 # CDPATH.
-$as_unset CDPATH
-
+(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 
 if test "x$CONFIG_SHELL" = x; then
-  if (eval ":") 2>/dev/null; then
-  as_have_required=yes
+  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
+  emulate sh
+  NULLCMD=:
+  # 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
 else
-  as_have_required=no
+  case \`(set -o) 2>/dev/null\` in #(
+  *posix*) :
+    set -o posix ;; #(
+  *) :
+     ;;
+esac
 fi
-
-  if test $as_have_required = yes &&	 (eval ":
-(as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
+"
+  as_required="as_fn_return () { (exit \$1); }
+as_fn_success () { as_fn_return 0; }
+as_fn_failure () { as_fn_return 1; }
+as_fn_ret_success () { return 0; }
+as_fn_ret_failure () { return 1; }
 
 exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
+as_fn_success || { exitcode=1; echo as_fn_success failed.; }
+as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
+as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
+as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
+if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
+
+else
+  exitcode=1; echo positional parameters were not saved.
+fi
+test x\$exitcode = x0 || exit 1"
+  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
+  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
+  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
+  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
+test \$(( 1 + 1 )) = 2 || exit 1"
+  if (eval "$as_required") 2>/dev/null; then :
+  as_have_required=yes
 else
-  exitcode=1
-  echo positional parameters were not saved.
+  as_have_required=no
 fi
+  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
 
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=\$LINENO
-  as_lineno_2=\$LINENO
-  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
-  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
-  :
 else
-  as_candidate_shells=
-    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+as_found=false
 for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  case $as_dir in
+  as_found=:
+  case $as_dir in #(
 	 /*)
 	   for as_base in sh bash ksh sh5; do
-	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+	     # Try only shells that exist, to save several forks.
+	     as_shell=$as_dir/$as_base
+	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		    { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  CONFIG_SHELL=$as_shell as_have_required=yes
+		   if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
+  break 2
+fi
+fi
 	   done;;
        esac
+  as_found=false
 done
+$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
+	      { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
+  CONFIG_SHELL=$SHELL as_have_required=yes
+fi; }
 IFS=$as_save_IFS
 
 
-      for as_shell in $as_candidate_shells $SHELL; do
-	 # Try only shells that exist, to save several forks.
-	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-		{ ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # 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
-else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-_ASEOF
-}; then
-  CONFIG_SHELL=$as_shell
-	       as_have_required=yes
-	       if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
-  emulate sh
-  NULLCMD=:
-  # 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
-else
-  case `(set -o) 2>/dev/null` in
-  *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-(as_func_return () {
-  (exit $1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
-
-exitcode=0
-if as_func_success; then
-  :
-else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
-  :
-else
-  exitcode=1
-  echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
+      if test "x$CONFIG_SHELL" != x; then :
+  # We cannot yet assume a decent shell, so we have to provide a
+	# neutralization value for shells without unset; and this also
+	# works around shells that cannot unset nonexistent variables.
+	BASH_ENV=/dev/null
+	ENV=/dev/null
+	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
+	export CONFIG_SHELL
+	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
 fi
 
-if ( set x; as_func_ret_success y && test x = "$1" ); then
-  :
-else
-  exitcode=1
-  echo positional parameters were not saved.
+    if test x$as_have_required = xno; then :
+  $as_echo "$0: This script requires a shell more modern than all"
+  $as_echo "$0: the shells that I found on your system."
+  if test x${ZSH_VERSION+set} = xset ; then
+    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
+    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
+  else
+    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
+$0: including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
+  fi
+  exit 1
 fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
-  break
 fi
-
 fi
+SHELL=${CONFIG_SHELL-/bin/sh}
+export SHELL
+# Unset more variables known to interfere with behavior of common tools.
+CLICOLOR_FORCE= GREP_OPTIONS=
+unset CLICOLOR_FORCE GREP_OPTIONS
 
-      done
+## --------------------- ##
+## M4sh Shell Functions. ##
+## --------------------- ##
+# as_fn_unset VAR
+# ---------------
+# Portably unset VAR.
+as_fn_unset ()
+{
+  { eval $1=; unset $1;}
+}
+as_unset=as_fn_unset
 
-      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+"$@"}
-fi
+# as_fn_set_status STATUS
+# -----------------------
+# Set $? to STATUS, without forking.
+as_fn_set_status ()
+{
+  return $1
+} # as_fn_set_status
 
+# as_fn_exit STATUS
+# -----------------
+# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
+as_fn_exit ()
+{
+  set +e
+  as_fn_set_status $1
+  exit $1
+} # as_fn_exit
 
-    if test $as_have_required = no; then
-  echo This script requires a shell more modern than all the
-      echo shells that I found on your system.  Please install a
-      echo modern shell, or manually run the script under such a
-      echo shell if you do have one.
-      { (exit 1); exit 1; }
-fi
+# as_fn_mkdir_p
+# -------------
+# Create "$as_dir" as a directory, including parents if necessary.
+as_fn_mkdir_p ()
+{
 
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || eval $as_mkdir_p || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
 
-fi
 
-fi
+} # as_fn_mkdir_p
+# as_fn_append VAR VALUE
+# ----------------------
+# Append the text in VALUE to the end of the definition contained in VAR. Take
+# advantage of any shell optimizations that allow amortized linear growth over
+# repeated appends, instead of the typical quadratic growth present in naive
+# implementations.
+if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
+  eval 'as_fn_append ()
+  {
+    eval $1+=\$2
+  }'
+else
+  as_fn_append ()
+  {
+    eval $1=\$$1\$2
+  }
+fi # as_fn_append
 
+# as_fn_arith ARG...
+# ------------------
+# Perform arithmetic evaluation on the ARGs, and store the result in the
+# global $as_val. Take advantage of shells that can avoid forks. The arguments
+# must be portable across $(()) and expr.
+if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
+  eval 'as_fn_arith ()
+  {
+    as_val=$(( $* ))
+  }'
+else
+  as_fn_arith ()
+  {
+    as_val=`expr "$@" || test $? -eq 1`
+  }
+fi # as_fn_arith
 
 
-(eval "as_func_return () {
-  (exit \$1)
-}
-as_func_success () {
-  as_func_return 0
-}
-as_func_failure () {
-  as_func_return 1
-}
-as_func_ret_success () {
-  return 0
-}
-as_func_ret_failure () {
-  return 1
-}
+# as_fn_error ERROR [LINENO LOG_FD]
+# ---------------------------------
+# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
+# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
+# script with status $?, using 1 if that was 0.
+as_fn_error ()
+{
+  as_status=$?; test $as_status -eq 0 && as_status=1
+  if test "$3"; then
+    as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+    $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
+  fi
+  $as_echo "$as_me: error: $1" >&2
+  as_fn_exit $as_status
+} # as_fn_error
 
-exitcode=0
-if as_func_success; then
-  :
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
 else
-  exitcode=1
-  echo as_func_success failed.
-fi
-
-if as_func_failure; then
-  exitcode=1
-  echo as_func_failure succeeded.
+  as_expr=false
 fi
 
-if as_func_ret_success; then
-  :
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
 else
-  exitcode=1
-  echo as_func_ret_success failed.
+  as_basename=false
 fi
 
-if as_func_ret_failure; then
-  exitcode=1
-  echo as_func_ret_failure succeeded.
-fi
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
 
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
-  :
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
 else
-  exitcode=1
-  echo positional parameters were not saved.
+  as_dirname=false
 fi
 
-test \$exitcode = 0") || {
-  echo No shell found that supports shell functions.
-  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.
-}
-
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
 
 
-  as_lineno_1=$LINENO
-  as_lineno_2=$LINENO
-  test "x$as_lineno_1" != "x$as_lineno_2" &&
-  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
-  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
-  # uniformly replaced by the line number.  The first 'sed' inserts a
-  # line-number line after each line using $LINENO; the second 'sed'
-  # does the real work.  The second script uses 'N' to pair each
-  # line-number line with the line containing $LINENO, and appends
-  # trailing '-' during substitution so that $LINENO is not a special
-  # case at line end.
-  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
-  # scripts with optimization help from Paolo Bonzini.  Blame Lee
-  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  as_lineno_1=$LINENO as_lineno_1a=$LINENO
+  as_lineno_2=$LINENO as_lineno_2a=$LINENO
+  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
+  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
+  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
   sed -n '
     p
     /[$]LINENO/=
@@ -470,9 +435,7 @@ test \$exitcode = 0") || {
       s/-\n.*//
     ' >$as_me.lineno &&
   chmod +x "$as_me.lineno" ||
-    { { $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; }; }
+    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
 
   # Don't try to exec as it changes $[0], causing all sort of problems
   # (the dirname of $[0] is not the place where we might find the
@@ -482,29 +445,18 @@ $as_echo "$as_me: error: cannot create $
   exit
 }
 
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
 ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
+case `echo -n x` in #(((((
 -n*)
-  case `echo 'x\c'` in
+  case `echo 'xy\c'` in
   *c*) ECHO_T='	';;	# ECHO_T is single tab character.
-  *)   ECHO_C='\c';;
+  xy)  ECHO_C='\c';;
+  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
+       ECHO_T='	';;
   esac;;
 *)
   ECHO_N='-n';;
 esac
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
 
 rm -f conf$$ conf$$.exe conf$$.file
 if test -d conf$$.dir; then
@@ -534,7 +486,7 @@ rm -f conf$$ conf$$.exe conf$$.dir/conf$
 rmdir conf$$.dir 2>/dev/null
 
 if mkdir -p . 2>/dev/null; then
-  as_mkdir_p=:
+  as_mkdir_p='mkdir -p "$as_dir"'
 else
   test -d ./-p && rmdir ./-p
   as_mkdir_p=false
@@ -553,10 +505,10 @@ else
       if test -d "$1"; then
 	test -d "$1/.";
       else
-	case $1 in
+	case $1 in #(
 	-*)set "./$1";;
 	esac;
-	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
 	???[sx]*):;;*)false;;esac;fi
     '\'' sh
   '
@@ -591,6 +543,11 @@ at_errexit_p=false
 # Shall we be verbose?  ':' means no, empty means yes.
 at_verbose=:
 at_quiet=
+# Running several jobs in parallel, 0 means as many as test groups.
+at_jobs=1
+at_traceon=:
+at_trace_echo=:
+at_check_filter_trace=:
 
 # 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.
@@ -621,39 +578,41 @@ at_change_dir=false
 # List of the tested programs.
 at_tested='cpio'
 # List of the all the test groups.
-at_groups_all=' 1 2 3 4 5 6 7 8 9'
+at_groups_all=' 1 2 3 4 5 6 7 8 9 10 11'
 # 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='?'
+at_format='??'
 # Description of all the test groups.
 at_help_all="1;version.at:19;cpio version;;
 2;inout.at:19;basic functionality: copyin/copyout;copyin copyout;
 3;symlink.at:22;symlink;symlink copyout;
-4;interdir.at:24;interdir;interdir copyin copypass;
-5;setstat01.at:17;delayed setstat;setstat setstat01;
-6;setstat02.at:17;delayed setstat (with -depth);setstat debian=458079 setstat02;
-7;setstat03.at:17;delayed setstat (copy-pass);setstat debian=458079 setstat03;
-8;setstat04.at:17;delayed setstat (umask);setstat debian=458079 setstat04;
-9;setstat05.at:17;delayed setstat (umask, copy-pass);setstat debian=458079 setstat05;
+4;symlink-bad-length.at:23;symlink-bad-length;symlink-long copyout;
+5;symlink-long.at:23;symlink-long;symlink-long copyout;
+6;interdir.at:24;interdir;interdir copyin copypass;
+7;setstat01.at:17;delayed setstat;setstat setstat01;
+8;setstat02.at:17;delayed setstat (with -depth);setstat debian=458079 setstat02;
+9;setstat03.at:17;delayed setstat (copy-pass);setstat debian=458079 setstat03;
+10;setstat04.at:17;delayed setstat (umask);setstat debian=458079 setstat04;
+11;setstat05.at:17;delayed setstat (umask, copy-pass);setstat debian=458079 setstat05;
 "
 
-# 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 ()
+# at_fn_validate_ranges NAME...
+# -----------------------------
+# Validate and normalize the test group number contained in each variable
+# NAME. Leading zeroes are treated as decimal.
+at_fn_validate_ranges ()
 {
   for at_grp
   do
     eval at_value=\$$at_grp
-    if test $at_value -lt 1 || test $at_value -gt 9; then
+    if test $at_value -lt 1 || test $at_value -gt 11; 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 $(( )).
+	  # AS_VAR_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.
@@ -709,29 +668,31 @@ do
 	;;
 
     --trace | -x )
-	at_traceon='set -x'; at_traceoff='set +x'
+	at_traceon='set -x'
+	at_trace_echo=echo
+	at_check_filter_trace=at_fn_filter_trace
 	;;
 
     [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 "
+	at_fn_validate_ranges at_option
+	as_fn_append 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_func_validate_ranges at_range_start
+	at_fn_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 "
+	as_fn_append 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_func_validate_ranges at_range_end
+	at_fn_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 "
+	as_fn_append at_groups "$at_range "
 	;;
 
     [0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9] | \
@@ -747,11 +708,11 @@ do
 	  at_range_end=$at_range_start
 	  at_range_start=$at_tmp
 	fi
-	at_func_validate_ranges at_range_start at_range_end
+	at_fn_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 "
+	as_fn_append at_groups "$at_range "
 	;;
 
     # Directory selection.
@@ -763,6 +724,22 @@ do
 	at_dir=$at_optarg
 	;;
 
+    # Parallel execution.
+    --jobs | -j )
+	at_jobs=0
+	;;
+    --jobs=* | -j[0-9]* )
+	if test -n "$at_optarg"; then
+	  at_jobs=$at_optarg
+	else
+	  at_jobs=`expr X$at_option : 'X-j\(.*\)'`
+	fi
+	case $at_jobs in *[!0-9]*)
+	  at_optname=`echo " $at_option" | sed 's/^ //; s/[0-9=].*//'`
+	  as_fn_error "non-numeric argument to $at_optname: $at_jobs" ;;
+	esac
+	;;
+
     # Keywords.
     --keywords | -k )
 	at_prev=--keywords
@@ -791,7 +768,7 @@ do
 	at_groups_selected=`$as_echo "$at_groups_selected" | sed 's/;.*//' |
 	  tr "$as_nl" ' '
 	`
-	at_groups="$at_groups$at_groups_selected "
+	as_fn_append at_groups "$at_groups_selected "
 	;;
 
     *=*)
@@ -799,14 +776,12 @@ do
 	# Reject names that are not valid shell variable names.
 	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; }; } ;;
+	    as_fn_error "invalid variable name: \`$at_envvar'" ;;
 	esac
 	at_value=`$as_echo "$at_optarg" | sed "s/'/'\\\\\\\\''/g"`
 	# Export now, but save eval for later and for debug scripts.
 	export $at_envvar
-	at_debug_args="$at_debug_args $at_envvar='$at_value'"
+	as_fn_append at_debug_args " $at_envvar='$at_value'"
 	;;
 
      *) $as_echo "$as_me: invalid option: $at_option" >&2
@@ -817,13 +792,10 @@ $as_echo "$as_me: error: invalid variabl
 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; }; }
+if test -n "$at_prev"; then :
+  as_fn_error "\`$at_prev' requires an argument."
 fi
 
-
 # Selected test groups.
 if test -z "$at_groups"; then
   at_groups=$at_groups_all
@@ -840,16 +812,17 @@ Usage: $0 [OPTION]... [VARIABLE=VALUE]..
 Run all the tests, or the selected TESTS, given by numeric ranges, and
 save a detailed log file.  Upon failure, create debugging scripts.
 
-You should not change environment variables unless explicitly passed
-as command line arguments.  Set \`AUTOTEST_PATH' to select the executables
+Do not change environment variables directly.  Instead, set them via
+command line arguments.  Set \`AUTOTEST_PATH' to select the executables
 to exercise.  Each relative directory is expanded as build and source
-directories relatively to the top level of this distribution.  E.g.,
+directories relative to the top level of this distribution.
+E.g., from within the build directory /tmp/foo-1.0, invoking this:
 
   $ $0 AUTOTEST_PATH=bin
 
-possibly amounts into
+is equivalent to the following, assuming the source directory is /src/foo-1.0:
 
-  PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH
+  PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $0
 _ATEOF
 cat <<_ATEOF || at_write_fail=1
 
@@ -864,6 +837,8 @@ cat <<_ATEOF || at_write_fail=1
 Execution tuning:
   -C, --directory=DIR
                  change to directory DIR before starting
+  -j, --jobs[=N]
+                 Allow N jobs at once; infinite jobs with no arg (default 1)
   -k, --keywords=KEYWORDS
                  select the tests matching all the comma-separated KEYWORDS
                  multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD
@@ -877,6 +852,7 @@ _ATEOF
 cat <<_ATEOF || at_write_fail=1
 
 Report bugs to <bug-cpio@gnu.org>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
 _ATEOF
   exit $at_write_fail
 fi
@@ -901,26 +877,45 @@ _ATEOF
   $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
+	   for (n = split ($ 0, a, " "); n; n--)
+	     selected[a[n]] = 1
 	   next
 	 }
-	 {
+	 NF > 0 {
 	   if (selected[$ 1]) {
 	     printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3
-	     if ($ 4) printf "      %s\n", $ 4
+	     if ($ 4) {
+	       lmax = 79
+	       indent = "     "
+	       line = indent
+	       len = length (line)
+	       n = split ($ 4, a, " ")
+	       for (i = 1; i <= n; i++) {
+		 l = length (a[i]) + 1
+		 if (i > 1 && len + l > lmax) {
+		   print line
+		   line = indent " " a[i]
+		   len = length (line)
+		 } else {
+		   line = line " " a[i]
+		   len += l
+		 }
+	       }
+	       if (n)
+		 print line
+	     }
 	   }
 	 }' || at_write_fail=1
   exit $at_write_fail
 fi
 if $at_version_p; then
   $as_echo "$as_me (GNU cpio 2.11)" &&
-  cat <<\_ACEOF || at_write_fail=1
+  cat <<\_ATEOF || at_write_fail=1
 
-Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
-Free Software Foundation, Inc.
+Copyright (C) 2009 Free Software Foundation, Inc.
 This test suite is free software; the Free Software Foundation gives
 unlimited permission to copy, distribute and modify it.
-_ACEOF
+_ATEOF
   exit $at_write_fail
 fi
 
@@ -939,9 +934,7 @@ if $at_change_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; }; }
+    || as_fn_error "unable to change directory"
   at_dir=`pwd`
 fi
 
@@ -949,9 +942,7 @@ fi
 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; }; }
+  . ./$at_file || as_fn_error "invalid content: $at_file"
 done
 
 # Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix:
@@ -966,8 +957,7 @@ 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"'`
+    eval at_val=\$at_$at_dir_var
     case $at_val in
       [\\/$]* | ?:[\\/]* ) at_prefix= ;;
       *) at_prefix=../../ ;;
@@ -976,9 +966,9 @@ if test -n "$at_top_srcdir"; then
   done
 fi
 
-## ------------------- ##
-## Directory structure ##
-## ------------------- ##
+## -------------------- ##
+## Directory structure. ##
+## -------------------- ##
 
 # This is the set of directories and files used by this script
 # (non-literals are capitalized):
@@ -1015,6 +1005,8 @@ at_suite_log=$at_dir/$as_me.log
 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
+# The fifo used for the job dispatcher.
+at_job_fifo=$at_suite_dir/at-job-fifo
 
 if $at_clean; then
   test -d "$at_suite_dir" &&
@@ -1038,23 +1030,23 @@ for as_dir in $AUTOTEST_PATH $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -n "$at_path" && at_path=$at_path$PATH_SEPARATOR
+    test -n "$at_path" && as_fn_append at_path $PATH_SEPARATOR
 case $as_dir in
   [\\/]* | ?:[\\/]* )
-    at_path=$at_path$as_dir
+    as_fn_append at_path "$as_dir"
     ;;
   * )
     if test -z "$at_top_build_prefix"; then
       # Stand-alone test suite.
-      at_path=$at_path$as_dir
+      as_fn_append at_path "$as_dir"
     else
       # Embedded test suite.
-      at_path=$at_path$at_top_build_prefix$as_dir$PATH_SEPARATOR
-      at_path=$at_path$at_top_srcdir/$as_dir
+      as_fn_append at_path "$at_top_build_prefix$as_dir$PATH_SEPARATOR"
+      as_fn_append at_path "$at_top_srcdir/$as_dir"
     fi
     ;;
 esac
-done
+  done
 IFS=$as_save_IFS
 
 
@@ -1068,7 +1060,7 @@ for as_dir in $at_path
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -d "$as_dir" || continue
+    test -d "$as_dir" || continue
 case $as_dir in
   [\\/]* | ?:[\\/]* ) ;;
   * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;;
@@ -1076,15 +1068,17 @@ 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 ;;
+  *) as_fn_append at_new_path "$PATH_SEPARATOR$as_dir" ;;
 esac
-done
+  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
@@ -1163,8 +1157,8 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  $as_echo "PATH: $as_dir"
-done
+    $as_echo "PATH: $as_dir"
+  done
 IFS=$as_save_IFS
 
 }
@@ -1181,53 +1175,76 @@ IFS=$as_save_IFS
 } >&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 ()
+## ------------------------- ##
+## Autotest shell functions. ##
+## ------------------------- ##
+
+# at_fn_banner NUMBER
+# -------------------
+# Output banner NUMBER, provided the testsuite is running multiple groups and
+# this particular banner has not yet been printed.
+at_fn_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_fn_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_fn_check_prepare_notrace REASON LINE
+# ---------------------------------------
+# Perform AT_CHECK preparations for the command at LINE for an untraceable
+# command; REASON is the reason for disabling tracing.
+at_fn_check_prepare_notrace ()
+{
+  $at_trace_echo "Not enabling shell tracing (command contains $1)"
+  $as_echo "$2" >"$at_check_line_file"
+  at_check_trace=: at_check_filter=:
+  : >"$at_stdout"; : >"$at_stderr"
 }
 
-# at_func_filter_trace EXIT-CODE
+# at_fn_check_prepare_trace LINE
 # ------------------------------
-# 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 ()
+# Perform AT_CHECK preparations for the command at LINE for a traceable
+# command.
+at_fn_check_prepare_trace ()
+{
+  $as_echo "$1" >"$at_check_line_file"
+  at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace
+  : >"$at_stdout"; : >"$at_stderr"
+}
+
+# at_fn_check_prepare_dynamic COMMAND LINE
+# ----------------------------------------
+# Decide if COMMAND at LINE is traceable at runtime, and call the appropriate
+# preparation function.
+at_fn_check_prepare_dynamic ()
+{
+  case $1 in
+    *$as_nl*)
+      at_fn_check_prepare_notrace 'an embedded newline' "$2" ;;
+    *)
+      at_fn_check_prepare_trace "$2" ;;
+  esac
+}
+
+# at_fn_filter_trace
+# ------------------
+# Remove the lines in the file "$at_stderr" generated by "set -x" and print
+# them to stderr.
+at_fn_filter_trace ()
 {
+  mv "$at_stderr" "$at_stder1"
   grep '^ *+' "$at_stder1" >&2
   grep -v '^ *+' "$at_stder1" >"$at_stderr"
-  return $1
 }
 
-# at_func_log_failure FILE-LIST
-# -----------------------------
+# at_fn_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 ()
+at_fn_log_failure ()
 {
   for file
     do $as_echo "$file:"; sed 's/^/> /' "$file"; done
@@ -1235,56 +1252,62 @@ at_func_log_failure ()
   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 ()
+# at_fn_check_skip EXIT-CODE LINE
+# -------------------------------
+# Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit
+# the test group subshell with that same exit code. Use LINE in any report
+# about test failure.
+at_fn_check_skip ()
 {
   case $1 in
+    99) echo 99 > "$at_status_file"; at_failed=:
+	$as_echo "$2: hard failure"; exit 99;;
     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 ()
+# at_fn_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 or 99, exit the test group subshell with that same
+# exit code; if it is anything else print an error message referring to LINE,
+# and fail the test.
+at_fn_check_status ()
 {
   case $2 in
     $1 ) ;;
     77) echo 77 > "$at_status_file"; exit 77;;
+    99) echo 99 > "$at_status_file"; at_failed=:
+	$as_echo "$3: hard failure"; exit 99;;
     *) $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 ()
+# at_fn_diff_devnull FILE
+# -----------------------
+# Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless diff
+# invocations.
+at_fn_diff_devnull ()
 {
   test -s "$1" || return 0
   $at_diff "$at_devnull" "$1"
 }
 
-# at_func_test NUMBER
-# -------------------
+# at_fn_test NUMBER
+# -----------------
 # Parse out test NUMBER from the tail of this file.
-at_func_test ()
+at_fn_test ()
 {
   eval at_sed=\$at_sed$1
   sed "$at_sed" "$at_myself" > "$at_test_source"
 }
 
-# at_func_create_debugging_script
-# -------------------------------
+# at_fn_create_debugging_script
+# -----------------------------
 # Create the debugging script $at_group_dir/run which will reproduce the
 # current test group.
-at_func_create_debugging_script ()
+at_fn_create_debugging_script ()
 {
   {
     echo "#! /bin/sh" &&
@@ -1296,28 +1319,9 @@ at_func_create_debugging_script ()
   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 ##
-## ---------------------- ##
+## -------------------------------- ##
+## End of autotest shell functions. ##
+## -------------------------------- ##
 {
   cat <<\_ASBOX
 ## ---------------- ##
@@ -1336,8 +1340,8 @@ for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-  test -f "$as_dir/$at_program" && break
-done
+    test -f "$as_dir/$at_program" && break
+  done
 IFS=$as_save_IFS
 
   if test -f "$as_dir/$at_program"; then
@@ -1347,9 +1351,7 @@ IFS=$as_save_IFS
       echo
     } >&5 2>&1
   else
-    { { $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; }; }
+    as_fn_error "cannot find $at_program" "$LINENO" 5
   fi
 done
 
@@ -1366,11 +1368,8 @@ at_start_time=`date +%s 2>/dev/null`
 $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" ||
-  { { $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; }; }
+as_dir="$at_suite_dir"; as_fn_mkdir_p ||
+  as_fn_error "cannot create \`$at_suite_dir'" "$LINENO" 5
 
 # Can we diff with `/dev/null'?  DU 5.0 refuses.
 if diff /dev/null /dev/null >/dev/null 2>&1; then
@@ -1404,28 +1403,40 @@ BEGIN { FS="" }
   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; }; }
+  as_fn_error "cannot create test line number cache" "$LINENO" 5
 rm -f "$at_suite_dir/at-source-lines"
 
+# Set number of jobs for `-j'; avoid more jobs than test groups.
+set X $at_groups; shift; at_max_jobs=$#
+if test $at_max_jobs -eq 0; then
+  at_jobs=1
+fi
+if test $at_jobs -ne 1 &&
+   { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then
+  at_jobs=$at_max_jobs
+fi
+
+# If parallel mode, don't output banners, don't split summary lines.
+if test $at_jobs -ne 1; then
+  at_print_banners=false
+  at_quiet=:
+fi
+
 # 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; }; }
+as_fn_error "testsuite directory setup failed" "$LINENO" 5
 
 # 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 ()
+# at_fn_group_prepare
+# -------------------
+# Prepare running a test group.
+at_fn_group_prepare ()
 {
   # The directory for additional per-group helper files.
   at_job_dir=$at_helper_dir/$at_group
@@ -1459,56 +1470,20 @@ at_func_group_prepare ()
 
 
   # Create a fresh directory for the next test group, and enter.
+  # If one already exists, the user may have invoked ./run from
+  # within that directory; we remove the contents, but not the
+  # directory itself, so that we aren't pulling the rug out from
+  # under the shell's notion of the current directory.
   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
+  find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx {} \;
+  rm -fr "$at_group_dir"/* "$at_group_dir"/.[!.] "$at_group_dir"/.??*
+fi ||
+    { $as_echo "$as_me:${as_lineno-$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
-  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-	 X"$as_dir" : 'X\(//\)[^/]' \| \
-	 X"$as_dir" : 'X\(//\)$' \| \
-	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)[^/].*/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\/\)$/{
-	    s//\1/
-	    q
-	  }
-	  /^X\(\/\).*/{
-	    s//\1/
-	    q
-	  }
-	  s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || 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; }; }; }
+  as_dir="$at_group_dir"; as_fn_mkdir_p
 
   echo 0 > "$at_status_file"
 
@@ -1521,9 +1496,10 @@ $as_echo "$as_me: error: cannot create d
   fi
 }
 
-# at_func_group_postprocess
-# -------------------------
-at_func_group_postprocess ()
+# at_fn_group_postprocess
+# -----------------------
+# Perform cleanup after running a test group.
+at_fn_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.
@@ -1536,10 +1512,16 @@ at_func_group_postprocess ()
       report this failure to <bug-cpio@gnu.org>.
 _ATEOF
     $as_echo "$at_setup_line" >"$at_check_line_file"
+    at_status=99
   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
+    *:99)
+	at_msg='FAILED ('`cat "$at_check_line_file"`')'
+	at_res=fail
+	at_errexit=$at_errexit_p
+	;;
     yes:0)
 	at_msg="UNEXPECTED PASS"
 	at_res=xpass
@@ -1567,8 +1549,13 @@ _ATEOF
 	;;
   esac
   echo "$at_res" > "$at_job_dir/$at_res"
-  # Make sure there is a separator even with long titles.
-  $as_echo " $at_msg"
+  # In parallel mode, output the summary line only afterwards.
+  if test $at_jobs -ne 1 && test -n "$at_verbose"; then
+    $as_echo "$at_desc_line $at_msg"
+  else
+    # Make sure there is a separator even with long titles.
+    $as_echo " $at_msg"
+  fi
   at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg"
   case $at_status in
     0|77)
@@ -1585,7 +1572,7 @@ _ATEOF
 
       # Cleanup the group directory, unless the user wants the files.
       if $at_debug_p; then
-	at_func_create_debugging_script
+	at_fn_create_debugging_script
       else
 	if test -d "$at_group_dir"; then
 	  find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
@@ -1602,7 +1589,7 @@ _ATEOF
 
       # 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
+      at_fn_create_debugging_script
       if $at_errexit; then
 	echo stop > "$at_stop_file"
       fi
@@ -1615,22 +1602,130 @@ _ATEOF
 ## Driver loop. ##
 ## ------------ ##
 
+
+if (set -m && set +m && set +b) >/dev/null 2>&1; then
+  set +b
+  at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=-
+else
+  at_job_control_on=: at_job_control_off=: at_job_group=
+fi
+
+for at_signal in 1 2 15; do
+  trap 'set +x; set +e
+	$at_job_control_off
+	at_signal='"$at_signal"'
+	echo stop > "$at_stop_file"
+	trap "" $at_signal
+	at_pgids=
+	for at_pgid in `jobs -p 2>/dev/null`; do
+	  at_pgids="$at_pgids $at_job_group$at_pgid"
+	done
+	test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null
+	wait
+	if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then
+	  echo >&2
+	fi
+	at_signame=`kill -l $at_signal 2>&1 || echo $at_signal`
+	set x $at_signame
+	test 0 -gt 2 && at_signame=$at_signal
+	{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: caught signal $at_signame, bailing out" >&5
+$as_echo "$as_me: WARNING: caught signal $at_signame, bailing out" >&2;}
+	as_fn_arith 128 + $at_signal && exit_status=$as_val
+	as_fn_exit $exit_status' $at_signal
+done
+
 rm -f "$at_stop_file"
 at_first=:
 
-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
+if test $at_jobs -ne 1 &&
+     rm -f "$at_job_fifo" &&
+     test -n "$at_job_group" &&
+     ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null
+then
+  # FIFO job dispatcher.
+
+  trap 'at_pids=
+	for at_pid in `jobs -p`; do
+	  at_pids="$at_pids $at_job_group$at_pid"
+	done
+	if test -n "$at_pids"; then
+	  at_sig=TSTP
+	  test "${TMOUT+set}" = set && at_sig=STOP
+	  kill -$at_sig $at_pids 2>/dev/null
+	fi
+	kill -STOP $$
+	test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP
+
+  echo
+  # Turn jobs into a list of numbers, starting from 1.
+  at_joblist=`$as_echo " $at_groups_all " | \
+    sed 's/\( '$at_jobs'\) .*/\1/'`
+
+  set X $at_joblist
+  shift
+  for at_group in $at_groups; do
+    $at_job_control_on 2>/dev/null
+    (
+      # Start one test group.
+      $at_job_control_off
+      exec 6>"$at_job_fifo"
+      trap 'set +x; set +e
+	    trap "" PIPE
+	    echo stop > "$at_stop_file"
+	    echo token >&6
+	    as_fn_exit 141' PIPE
+      at_fn_group_prepare
+      if cd "$at_group_dir" &&
+	 at_fn_test $at_group &&
+	 . "$at_test_source" # AT_JOB_FIFO_FD>&-
+      then :; else
+	{ $as_echo "$as_me:${as_lineno-$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=:
+	at_failed=:
+      fi
+      at_fn_group_postprocess
+      echo token >&6
+    ) &
+    $at_job_control_off
+    if $at_first; then
+      at_first=false
+      exec 6<"$at_job_fifo"
+    fi
+    shift # Consume one token.
+    if test $# -gt 0; then :; else
+      read at_token <&6 || break
+      set x $*
+    fi
+    test -f "$at_stop_file" && break
+  done
+  # Read back the remaining ($at_jobs - 1) tokens.
+  set X $at_joblist
+  shift
+  if test $# -gt 0; then
+    shift
+    for at_job
+    do
+      read at_token
+    done <&6
   fi
-  at_func_group_postprocess
-  test -f "$at_stop_file" && break
-  at_first=false
-done
+  exec 6<&-
+  wait
+else
+  # Run serially, avoid forks and other potential surprises.
+  for at_group in $at_groups; do
+    at_fn_group_prepare
+    if cd "$at_group_dir" &&
+       at_fn_test $at_group &&
+       . "$at_test_source"; then :; else
+      { $as_echo "$as_me:${as_lineno-$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_fn_group_postprocess
+    test -f "$at_stop_file" && break
+    at_first=false
+  done
+fi
 
 # Wrap up the test suite with summary statistics.
 cd "$at_helper_dir"
@@ -1651,12 +1746,9 @@ set X $at_xfail_list; shift; at_xfail_co
 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
+as_fn_arith $at_group_count - $at_skip_count && at_run_count=$as_val
+as_fn_arith $at_xpass_count + $at_fail_count && at_unexpected_count=$as_val
+as_fn_arith $at_xfail_count + $at_fail_count && at_total_fail_count=$as_val
 
 # Back to the top directory.
 cd "$at_dir"
@@ -1668,16 +1760,11 @@ 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
+    as_fn_arith $at_stop_time - $at_start_time && at_duration_s=$as_val
+    as_fn_arith $at_duration_s / 60 && at_duration_m=$as_val
+    as_fn_arith $at_duration_m / 60 && at_duration_h=$as_val
+    as_fn_arith $at_duration_s % 60 && at_duration_s=$as_val
+    as_fn_arith $at_duration_m % 60 && at_duration_m=$as_val
     at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s"
     $as_echo "$as_me: test suite duration: $at_duration" >&5
     ;;
@@ -1855,7 +1942,8 @@ exit 0
 # 1. version.at:19: cpio version
 at_setup_line='version.at:19'
 at_desc="cpio version"
-$at_quiet $as_echo_n "  1: $at_desc                                   "
+at_desc_line="  1: $at_desc                                   "
+$at_quiet $as_echo_n "$at_desc_line"
 at_xfail=no
 echo "#                             -*- compilation -*-" >> "$at_group_log"
 (
@@ -1863,25 +1951,20 @@ echo "#                             -*-
   $at_traceon
 
 
-{ $at_traceoff
+{ set +x
 $as_echo "$at_srcdir/version.at:21: cpio --version | sed 1q"
-echo version.at:21 >"$at_check_line_file"
-
-if test -n "$at_traceon"; then
-  ( $at_traceon; cpio --version | sed 1q ) >"$at_stdout" 2>"$at_stder1"
-  at_func_filter_trace $?
-else
-  ( :; cpio --version | sed 1q ) >"$at_stdout" 2>"$at_stderr"
-fi
-at_status=$?
-at_failed=false
-at_func_diff_devnull "$at_stderr" || at_failed=:
+at_fn_check_prepare_trace "version.at:21"
+( $at_check_trace; cpio --version | sed 1q
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
 echo >>"$at_stdout"; $as_echo "cpio (GNU cpio) 2.11
 " | \
   $at_diff - "$at_stdout" || at_failed=:
-at_func_check_status 0 $at_status "$at_srcdir/version.at:21"
-if $at_failed; then
-  :
+at_fn_check_status 0 $at_status "$at_srcdir/version.at:21"
+if $at_failed; then :
+
 else
 
 echo '=============================================================='
@@ -1889,21 +1972,21 @@ echo 'WARNING: Not using the proper vers
 echo '=============================================================='
 
 fi
-
-$at_failed && at_func_log_failure
+$at_failed && at_fn_log_failure
 $at_traceon; }
 
 
-  $at_traceoff
+  set +x
   $at_times_p && times >"$at_times_file"
 ) 5>&1 2>&1 | eval $at_tee_pipe
-at_status=`cat "$at_status_file"`
+read at_status <"$at_status_file"
 #AT_STOP_1
 #AT_START_2
 # 2. inout.at:19: basic functionality: copyin/copyout
 at_setup_line='inout.at:19'
 at_desc="basic functionality: copyin/copyout"
-$at_quiet $as_echo_n "  2: $at_desc            "
+at_desc_line="  2: $at_desc            "
+$at_quiet $as_echo_n "$at_desc_line"
 at_xfail=no
 echo "#                             -*- compilation -*-" >> "$at_group_log"
 (
@@ -1924,7 +2007,7 @@ h	45
 _ATEOF
 
 
-{ $at_traceoff
+{ set +x
 $as_echo "$at_srcdir/inout.at:32:
 while read NAME LENGTH
 do
@@ -1932,47 +2015,35 @@ do
 	echo \$NAME
 done < filelist |
  cpio --quiet -o > archive"
-echo inout.at:32 >"$at_check_line_file"
-
-if { echo 'Not enabling shell tracing (command contains an embedded newline)'
-   false; }; then
-  ( $at_traceon;
-while read NAME LENGTH
-do
-	genfile --length $LENGTH > $NAME
-	echo $NAME
-done < filelist |
- cpio --quiet -o > archive ) >"$at_stdout" 2>"$at_stder1"
-  at_func_filter_trace $?
-else
-  ( :;
+at_fn_check_prepare_notrace 'an embedded newline' "inout.at:32"
+( $at_check_trace;
 while read NAME LENGTH
 do
 	genfile --length $LENGTH > $NAME
 	echo $NAME
 done < filelist |
- cpio --quiet -o > 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/inout.at:32"
-
-$at_failed && at_func_log_failure
+ cpio --quiet -o > archive
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
+at_fn_diff_devnull "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/inout.at:32"
+$at_failed && at_fn_log_failure
 $at_traceon; }
 
 
-  $at_traceoff
+  set +x
   $at_times_p && times >"$at_times_file"
 ) 5>&1 2>&1 | eval $at_tee_pipe
-at_status=`cat "$at_status_file"`
+read at_status <"$at_status_file"
 #AT_STOP_2
 #AT_START_3
 # 3. symlink.at:22: symlink
 at_setup_line='symlink.at:22'
 at_desc="symlink"
-$at_quiet $as_echo_n "  3: $at_desc                                        "
+at_desc_line="  3: $at_desc                                        "
+$at_quiet $as_echo_n "$at_desc_line"
 at_xfail=no
 echo "#                             -*- compilation -*-" >> "$at_group_log"
 (
@@ -1987,7 +2058,7 @@ symlink
 _ATEOF
 
 
-{ $at_traceoff
+{ set +x
 $as_echo "$at_srcdir/symlink.at:29:
 genfile --file file
 ln -s file symlink || exit 77
@@ -1999,24 +2070,8 @@ cd dir
 cpio --quiet -i < ../archive
 find . | sort
 "
-echo symlink.at:29 >"$at_check_line_file"
-
-if { echo 'Not enabling shell tracing (command contains an embedded newline)'
-   false; }; then
-  ( $at_traceon;
-genfile --file file
-ln -s file symlink || exit 77
-echo Creating the archive
-cpio --quiet -o < filelist > archive
-echo Extracting the archive
-mkdir dir
-cd dir
-cpio --quiet -i < ../archive
-find . | sort
- ) >"$at_stdout" 2>"$at_stder1"
-  at_func_filter_trace $?
-else
-  ( :;
+at_fn_check_prepare_notrace 'an embedded newline' "symlink.at:29"
+( $at_check_trace;
 genfile --file file
 ln -s file symlink || exit 77
 echo Creating the archive
@@ -2026,11 +2081,11 @@ mkdir dir
 cd dir
 cpio --quiet -i < ../archive
 find . | sort
- ) >"$at_stdout" 2>"$at_stderr"
-fi
-at_status=$?
-at_failed=false
-at_func_diff_devnull "$at_stderr" || at_failed=:
+
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
 echo >>"$at_stdout"; $as_echo "Creating the archive
 Extracting the archive
 .
@@ -2038,26 +2093,172 @@ Extracting the archive
 ./symlink
 " | \
   $at_diff - "$at_stdout" || at_failed=:
-at_func_check_status 0 $at_status "$at_srcdir/symlink.at:29"
-
-$at_failed && at_func_log_failure
+at_fn_check_status 0 $at_status "$at_srcdir/symlink.at:29"
+$at_failed && at_fn_log_failure
 $at_traceon; }
 
 
-  $at_traceoff
+  set +x
   $at_times_p && times >"$at_times_file"
 ) 5>&1 2>&1 | eval $at_tee_pipe
-at_status=`cat "$at_status_file"`
+read at_status <"$at_status_file"
 #AT_STOP_3
 #AT_START_4
-# 4. interdir.at:24: interdir
+# 4. symlink-bad-length.at:23: symlink-bad-length
+at_setup_line='symlink-bad-length.at:23'
+at_desc="symlink-bad-length"
+at_desc_line="  4: $at_desc                             "
+$at_quiet $as_echo_n "$at_desc_line"
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "4. symlink-bad-length.at:23: testing ..."
+  $at_traceon
+
+
+
+cat >ARCHIVE.base64 <<'_ATEOF'
+x3EjAIBAtIEtJy8nAQAAAHRUYW0FAAAADQBGSUxFAABzb21lIGNvbnRlbnQKAMdxIwBgQ/+hLScv
+JwEAAAB0VEhuBQD/////TElOSwAARklMRcdxAAAAAAAAAAAAAAEAAAAAAAAACwAAAAAAVFJBSUxF
+UiEhIQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+_ATEOF
+
+
+# The exact error message and exit status depend on the host architecture,
+# therefore strderr is filtered out and error code is not checked.
+
+# So far the only case when cpio would exit with code 0 is when it skips
+# several bytes and encounters a valid record header.  Perhaps it should
+# exit with code 2 (non-critical error), if at least one byte was skipped,
+# but that could hurt backward compatibility.
+
+{ set +x
+$as_echo "$at_srcdir/symlink-bad-length.at:46:
+base64 -d ARCHIVE.base64 > ARCHIVE || exit 77
+TZ=UTC cpio -ntv < ARCHIVE 2>stderr
+cat stderr | grep -v \\
+    -e 'stored filename length is out of range' \\
+    -e 'premature end of file' \\
+    -e 'archive header has reverse byte-order' \\
+    -e 'memory exhausted' \\
+    -e 'skipped [0-9][0-9]* bytes of junk' \\
+    -e '[0-9][0-9]* block' \\
+    >&2
+echo >&2 STDERR
+"
+at_fn_check_prepare_notrace 'an embedded newline' "symlink-bad-length.at:46"
+( $at_check_trace;
+base64 -d ARCHIVE.base64 > ARCHIVE || exit 77
+TZ=UTC cpio -ntv < ARCHIVE 2>stderr
+cat stderr | grep -v \
+    -e 'stored filename length is out of range' \
+    -e 'premature end of file' \
+    -e 'archive header has reverse byte-order' \
+    -e 'memory exhausted' \
+    -e 'skipped [0-9][0-9]* bytes of junk' \
+    -e '[0-9][0-9]* block' \
+    >&2
+echo >&2 STDERR
+
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "STDERR
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "-rw-rw-r--   1 10029    10031          13 Nov 25 11:52 FILE
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/symlink-bad-length.at:46"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_4
+#AT_START_5
+# 5. symlink-long.at:23: symlink-long
+at_setup_line='symlink-long.at:23'
+at_desc="symlink-long"
+at_desc_line="  5: $at_desc                                   "
+$at_quiet $as_echo_n "$at_desc_line"
+at_xfail=no
+echo "#                             -*- compilation -*-" >> "$at_group_log"
+(
+  $as_echo "5. symlink-long.at:23: testing ..."
+  $at_traceon
+
+
+
+{ set +x
+$as_echo "$at_srcdir/symlink-long.at:26:
+
+# len(dirname) > READBUFSIZE
+dirname=
+for i in {1..52}; do
+    dirname=\"xxxxxxxxx/\$dirname\"
+    mkdir \"\$dirname\"
+done
+ln -s \"\$dirname\" x || exit 77
+
+echo x | cpio -o > ar
+list=\`cpio -tv < ar | sed 's|.*-> ||'\`
+test \"\$list\" = \"\$dirname\" && echo success || echo fail
+"
+at_fn_check_prepare_notrace 'a `...` command substitution' "symlink-long.at:26"
+( $at_check_trace;
+
+# len(dirname) > READBUFSIZE
+dirname=
+for i in {1..52}; do
+    dirname="xxxxxxxxx/$dirname"
+    mkdir "$dirname"
+done
+ln -s "$dirname" x || exit 77
+
+echo x | cpio -o > ar
+list=`cpio -tv < ar | sed 's|.*-> ||'`
+test "$list" = "$dirname" && echo success || echo fail
+
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+echo >>"$at_stderr"; $as_echo "2 blocks
+2 blocks
+" | \
+  $at_diff - "$at_stderr" || at_failed=:
+echo >>"$at_stdout"; $as_echo "success
+" | \
+  $at_diff - "$at_stdout" || at_failed=:
+at_fn_check_status 0 $at_status "$at_srcdir/symlink-long.at:26"
+$at_failed && at_fn_log_failure
+$at_traceon; }
+
+
+  set +x
+  $at_times_p && times >"$at_times_file"
+) 5>&1 2>&1 | eval $at_tee_pipe
+read at_status <"$at_status_file"
+#AT_STOP_5
+#AT_START_6
+# 6. interdir.at:24: interdir
 at_setup_line='interdir.at:24'
 at_desc="interdir"
-$at_quiet $as_echo_n "  4: $at_desc                                       "
+at_desc_line="  6: $at_desc                                       "
+$at_quiet $as_echo_n "$at_desc_line"
 at_xfail=no
 echo "#                             -*- compilation -*-" >> "$at_group_log"
 (
-  $as_echo "4. interdir.at:24: testing ..."
+  $as_echo "6. interdir.at:24: testing ..."
   $at_traceon
 
 
@@ -2068,7 +2269,7 @@ dir/file
 _ATEOF
 
 
-{ $at_traceoff
+{ set +x
 $as_echo "$at_srcdir/interdir.at:31:
 umask 022
 mkdir dir
@@ -2083,27 +2284,8 @@ genfile --stat=name,mode.777 en/to/tre
 genfile --stat=name,mode.777 en/to/tre/dir
 genfile --stat=name,mode.777 en/to/tre/dir/file
 "
-echo interdir.at:31 >"$at_check_line_file"
-
-if { echo 'Not enabling shell tracing (command contains an embedded newline)'
-   false; }; then
-  ( $at_traceon;
-umask 022
-mkdir dir
-chmod 700 dir
-genfile --file dir/file
-echo Copying the hierarchy
-cpio -pdvm en/to/tre < filelist 2>&1
-echo Results
-genfile --stat=name,mode.777 en
-genfile --stat=name,mode.777 en/to
-genfile --stat=name,mode.777 en/to/tre
-genfile --stat=name,mode.777 en/to/tre/dir
-genfile --stat=name,mode.777 en/to/tre/dir/file
- ) >"$at_stdout" 2>"$at_stder1"
-  at_func_filter_trace $?
-else
-  ( :;
+at_fn_check_prepare_notrace 'an embedded newline' "interdir.at:31"
+( $at_check_trace;
 umask 022
 mkdir dir
 chmod 700 dir
@@ -2116,11 +2298,11 @@ genfile --stat=name,mode.777 en/to
 genfile --stat=name,mode.777 en/to/tre
 genfile --stat=name,mode.777 en/to/tre/dir
 genfile --stat=name,mode.777 en/to/tre/dir/file
- ) >"$at_stdout" 2>"$at_stderr"
-fi
-at_status=$?
-at_failed=false
-at_func_diff_devnull "$at_stderr" || at_failed=:
+
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
 echo >>"$at_stdout"; $as_echo "Copying the hierarchy
 en/to/tre/dir
 en/to/tre/dir/file
@@ -2133,26 +2315,26 @@ en/to/tre/dir 700
 en/to/tre/dir/file 644
 " | \
   $at_diff - "$at_stdout" || at_failed=:
-at_func_check_status 0 $at_status "$at_srcdir/interdir.at:31"
-
-$at_failed && at_func_log_failure
+at_fn_check_status 0 $at_status "$at_srcdir/interdir.at:31"
+$at_failed && at_fn_log_failure
 $at_traceon; }
 
 
-  $at_traceoff
+  set +x
   $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. setstat01.at:17: delayed setstat
+read at_status <"$at_status_file"
+#AT_STOP_6
+#AT_START_7
+# 7. setstat01.at:17: delayed setstat
 at_setup_line='setstat01.at:17'
 at_desc="delayed setstat"
-$at_quiet $as_echo_n "  5: $at_desc                                "
+at_desc_line="  7: $at_desc                                "
+$at_quiet $as_echo_n "$at_desc_line"
 at_xfail=no
 echo "#                             -*- compilation -*-" >> "$at_group_log"
 (
-  $as_echo "5. setstat01.at:17: testing ..."
+  $as_echo "7. setstat01.at:17: testing ..."
   $at_traceon
 
 
@@ -2162,7 +2344,7 @@ echo "#                             -*-
 # permissions did not allow writing to it, cpio was unable to populate
 # the directory.
 
-{ $at_traceoff
+{ set +x
 $as_echo "$at_srcdir/setstat01.at:25:
 mkdir dir
 echo \"test file\" > dir/file
@@ -2174,11 +2356,8 @@ mv dir old
 cpio -i --quiet < archive
 genfile --stat=mode.777 dir
 "
-echo setstat01.at:25 >"$at_check_line_file"
-
-if { echo 'Not enabling shell tracing (command contains an embedded newline)'
-   false; }; then
-  ( $at_traceon;
+at_fn_check_prepare_notrace 'an embedded newline' "setstat01.at:25"
+( $at_check_trace;
 mkdir dir
 echo "test file" > dir/file
 chmod 500 dir
@@ -2188,47 +2367,34 @@ mv dir old
 
 cpio -i --quiet < archive
 genfile --stat=mode.777 dir
- ) >"$at_stdout" 2>"$at_stder1"
-  at_func_filter_trace $?
-else
-  ( :;
-mkdir dir
-echo "test file" > dir/file
-chmod 500 dir
 
-find dir | cpio -o --quiet > archive
-mv dir old
-
-cpio -i --quiet < archive
-genfile --stat=mode.777 dir
- ) >"$at_stdout" 2>"$at_stderr"
-fi
-at_status=$?
-at_failed=false
-at_func_diff_devnull "$at_stderr" || at_failed=:
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
 echo >>"$at_stdout"; $as_echo "500
 " | \
   $at_diff - "$at_stdout" || at_failed=:
-at_func_check_status 0 $at_status "$at_srcdir/setstat01.at:25"
-
-$at_failed && at_func_log_failure
+at_fn_check_status 0 $at_status "$at_srcdir/setstat01.at:25"
+$at_failed && at_fn_log_failure
 $at_traceon; }
 
 
-  $at_traceoff
+  set +x
   $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. setstat02.at:17: delayed setstat (with -depth)
+read at_status <"$at_status_file"
+#AT_STOP_7
+#AT_START_8
+# 8. setstat02.at:17: delayed setstat (with -depth)
 at_setup_line='setstat02.at:17'
 at_desc="delayed setstat (with -depth)"
-$at_quiet $as_echo_n "  6: $at_desc                  "
+at_desc_line="  8: $at_desc                  "
+$at_quiet $as_echo_n "$at_desc_line"
 at_xfail=no
 echo "#                             -*- compilation -*-" >> "$at_group_log"
 (
-  $as_echo "6. setstat02.at:17: testing ..."
+  $as_echo "8. setstat02.at:17: testing ..."
   $at_traceon
 
 
@@ -2243,7 +2409,7 @@ echo "#                             -*-
 #
 # See also: setstat03, setstat04, setstat05
 
-{ $at_traceoff
+{ set +x
 $as_echo "$at_srcdir/setstat02.at:30:
 mkdir dir
 echo \"test file\" > dir/file
@@ -2255,11 +2421,8 @@ mv dir old
 cpio -id --quiet < archive
 genfile --stat=mode.777 dir
 "
-echo setstat02.at:30 >"$at_check_line_file"
-
-if { echo 'Not enabling shell tracing (command contains an embedded newline)'
-   false; }; then
-  ( $at_traceon;
+at_fn_check_prepare_notrace 'an embedded newline' "setstat02.at:30"
+( $at_check_trace;
 mkdir dir
 echo "test file" > dir/file
 chmod 500 dir
@@ -2269,47 +2432,34 @@ mv dir old
 
 cpio -id --quiet < archive
 genfile --stat=mode.777 dir
- ) >"$at_stdout" 2>"$at_stder1"
-  at_func_filter_trace $?
-else
-  ( :;
-mkdir dir
-echo "test file" > dir/file
-chmod 500 dir
 
-find dir -depth | cpio -o --quiet > archive
-mv dir old
-
-cpio -id --quiet < archive
-genfile --stat=mode.777 dir
- ) >"$at_stdout" 2>"$at_stderr"
-fi
-at_status=$?
-at_failed=false
-at_func_diff_devnull "$at_stderr" || at_failed=:
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
 echo >>"$at_stdout"; $as_echo "500
 " | \
   $at_diff - "$at_stdout" || at_failed=:
-at_func_check_status 0 $at_status "$at_srcdir/setstat02.at:30"
-
-$at_failed && at_func_log_failure
+at_fn_check_status 0 $at_status "$at_srcdir/setstat02.at:30"
+$at_failed && at_fn_log_failure
 $at_traceon; }
 
 
-  $at_traceoff
+  set +x
   $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. setstat03.at:17: delayed setstat (copy-pass)
+read at_status <"$at_status_file"
+#AT_STOP_8
+#AT_START_9
+# 9. setstat03.at:17: delayed setstat (copy-pass)
 at_setup_line='setstat03.at:17'
 at_desc="delayed setstat (copy-pass)"
-$at_quiet $as_echo_n "  7: $at_desc                    "
+at_desc_line="  9: $at_desc                    "
+$at_quiet $as_echo_n "$at_desc_line"
 at_xfail=no
 echo "#                             -*- compilation -*-" >> "$at_group_log"
 (
-  $as_echo "7. setstat03.at:17: testing ..."
+  $as_echo "9. setstat03.at:17: testing ..."
   $at_traceon
 
 
@@ -2325,7 +2475,7 @@ echo "#                             -*-
 #
 # See also: setstat02, setstat04. setstat05
 
-{ $at_traceoff
+{ set +x
 $as_echo "$at_srcdir/setstat03.at:31:
 mkdir dir
 echo \"test file\" > dir/file
@@ -2335,11 +2485,8 @@ mkdir newdir
 find dir -depth | cpio -pmaud --quiet newdir
 genfile --stat=mode.777 newdir/dir
 "
-echo setstat03.at:31 >"$at_check_line_file"
-
-if { echo 'Not enabling shell tracing (command contains an embedded newline)'
-   false; }; then
-  ( $at_traceon;
+at_fn_check_prepare_notrace 'an embedded newline' "setstat03.at:31"
+( $at_check_trace;
 mkdir dir
 echo "test file" > dir/file
 chmod 500 dir
@@ -2347,45 +2494,34 @@ mkdir newdir
 
 find dir -depth | cpio -pmaud --quiet newdir
 genfile --stat=mode.777 newdir/dir
- ) >"$at_stdout" 2>"$at_stder1"
-  at_func_filter_trace $?
-else
-  ( :;
-mkdir dir
-echo "test file" > dir/file
-chmod 500 dir
-mkdir newdir
 
-find dir -depth | cpio -pmaud --quiet newdir
-genfile --stat=mode.777 newdir/dir
- ) >"$at_stdout" 2>"$at_stderr"
-fi
-at_status=$?
-at_failed=false
-at_func_diff_devnull "$at_stderr" || at_failed=:
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
 echo >>"$at_stdout"; $as_echo "500
 " | \
   $at_diff - "$at_stdout" || at_failed=:
-at_func_check_status 0 $at_status "$at_srcdir/setstat03.at:31"
-
-$at_failed && at_func_log_failure
+at_fn_check_status 0 $at_status "$at_srcdir/setstat03.at:31"
+$at_failed && at_fn_log_failure
 $at_traceon; }
 
 
-  $at_traceoff
+  set +x
   $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. setstat04.at:17: delayed setstat (umask)
+read at_status <"$at_status_file"
+#AT_STOP_9
+#AT_START_10
+# 10. setstat04.at:17: delayed setstat (umask)
 at_setup_line='setstat04.at:17'
 at_desc="delayed setstat (umask)"
-$at_quiet $as_echo_n "  8: $at_desc                        "
+at_desc_line=" 10: $at_desc                        "
+$at_quiet $as_echo_n "$at_desc_line"
 at_xfail=no
 echo "#                             -*- compilation -*-" >> "$at_group_log"
 (
-  $as_echo "8. setstat04.at:17: testing ..."
+  $as_echo "10. setstat04.at:17: testing ..."
   $at_traceon
 
 
@@ -2402,7 +2538,7 @@ echo "#                             -*-
 #
 # See also: setstat02, setstat03, setstat05
 
-{ $at_traceoff
+{ set +x
 $as_echo "$at_srcdir/setstat04.at:32:
 umask 022
 mkdir dir
@@ -2415,11 +2551,8 @@ umask 077
 cpio -id --quiet < archive
 genfile --stat=mode.777 dir
 "
-echo setstat04.at:32 >"$at_check_line_file"
-
-if { echo 'Not enabling shell tracing (command contains an embedded newline)'
-   false; }; then
-  ( $at_traceon;
+at_fn_check_prepare_notrace 'an embedded newline' "setstat04.at:32"
+( $at_check_trace;
 umask 022
 mkdir dir
 echo "test file" > dir/file
@@ -2430,48 +2563,34 @@ mv dir old
 umask 077
 cpio -id --quiet < archive
 genfile --stat=mode.777 dir
- ) >"$at_stdout" 2>"$at_stder1"
-  at_func_filter_trace $?
-else
-  ( :;
-umask 022
-mkdir dir
-echo "test file" > dir/file
-mkdir newdir
-find dir -depth | cpio -o --quiet > archive
-mv dir old
 
-umask 077
-cpio -id --quiet < archive
-genfile --stat=mode.777 dir
- ) >"$at_stdout" 2>"$at_stderr"
-fi
-at_status=$?
-at_failed=false
-at_func_diff_devnull "$at_stderr" || at_failed=:
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
 echo >>"$at_stdout"; $as_echo "755
 " | \
   $at_diff - "$at_stdout" || at_failed=:
-at_func_check_status 0 $at_status "$at_srcdir/setstat04.at:32"
-
-$at_failed && at_func_log_failure
+at_fn_check_status 0 $at_status "$at_srcdir/setstat04.at:32"
+$at_failed && at_fn_log_failure
 $at_traceon; }
 
 
-  $at_traceoff
+  set +x
   $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. setstat05.at:17: delayed setstat (umask, copy-pass)
+read at_status <"$at_status_file"
+#AT_STOP_10
+#AT_START_11
+# 11. setstat05.at:17: delayed setstat (umask, copy-pass)
 at_setup_line='setstat05.at:17'
 at_desc="delayed setstat (umask, copy-pass)"
-$at_quiet $as_echo_n "  9: $at_desc             "
+at_desc_line=" 11: $at_desc             "
+$at_quiet $as_echo_n "$at_desc_line"
 at_xfail=no
 echo "#                             -*- compilation -*-" >> "$at_group_log"
 (
-  $as_echo "9. setstat05.at:17: testing ..."
+  $as_echo "11. setstat05.at:17: testing ..."
   $at_traceon
 
 
@@ -2488,7 +2607,7 @@ echo "#                             -*-
 #
 # See also: setstat02, setstat03
 
-{ $at_traceoff
+{ set +x
 $as_echo "$at_srcdir/setstat05.at:32:
 umask 022
 mkdir dir
@@ -2498,22 +2617,8 @@ umask 077
 find dir -depth | cpio -pmaud --quiet newdir
 genfile --stat=mode.777 newdir/dir
 "
-echo setstat05.at:32 >"$at_check_line_file"
-
-if { echo 'Not enabling shell tracing (command contains an embedded newline)'
-   false; }; then
-  ( $at_traceon;
-umask 022
-mkdir dir
-echo "test file" > dir/file
-mkdir newdir
-umask 077
-find dir -depth | cpio -pmaud --quiet newdir
-genfile --stat=mode.777 newdir/dir
- ) >"$at_stdout" 2>"$at_stder1"
-  at_func_filter_trace $?
-else
-  ( :;
+at_fn_check_prepare_notrace 'an embedded newline' "setstat05.at:32"
+( $at_check_trace;
 umask 022
 mkdir dir
 echo "test file" > dir/file
@@ -2521,22 +2626,21 @@ mkdir newdir
 umask 077
 find dir -depth | cpio -pmaud --quiet newdir
 genfile --stat=mode.777 newdir/dir
- ) >"$at_stdout" 2>"$at_stderr"
-fi
-at_status=$?
-at_failed=false
-at_func_diff_devnull "$at_stderr" || at_failed=:
+
+) >>"$at_stdout" 2>>"$at_stderr"
+at_status=$? at_failed=false
+$at_check_filter
+at_fn_diff_devnull "$at_stderr" || at_failed=:
 echo >>"$at_stdout"; $as_echo "755
 " | \
   $at_diff - "$at_stdout" || at_failed=:
-at_func_check_status 0 $at_status "$at_srcdir/setstat05.at:32"
-
-$at_failed && at_func_log_failure
+at_fn_check_status 0 $at_status "$at_srcdir/setstat05.at:32"
+$at_failed && at_fn_log_failure
 $at_traceon; }
 
 
-  $at_traceoff
+  set +x
   $at_times_p && times >"$at_times_file"
 ) 5>&1 2>&1 | eval $at_tee_pipe
-at_status=`cat "$at_status_file"`
-#AT_STOP_9
+read at_status <"$at_status_file"
+#AT_STOP_11