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