From 8f8f42b289910f762f2c1f2561718e5b6ce40300 Mon Sep 17 00:00:00 2001 From: Ralf Wildenhues Date: Tue, 19 Sep 2006 06:03:01 +0000 Subject: [PATCH] * gnulib-tool (func_exit): New function, to allow to pass the exit status portably through the trap. Use everywhere. (--help, --version): Signal a write error. (trap): catch SIGPIPE, for write errors. Exit at the end of the trap, with the correct exit status. --- ChangeLog | 8 ++++++++ gnulib-tool | 44 ++++++++++++++++++++++++++++++-------------- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 42cb276fb0..1d29bd2d6d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-09-19 Ralf Wildenhues + + * gnulib-tool (func_exit): New function, to allow to pass the + exit status portably through the trap. Use everywhere. + (--help, --version): Signal a write error. + (trap): catch SIGPIPE, for write errors. + Exit at the end of the trap, with the correct exit status. + 2006-09-18 Bruno Haible * modules/inttypes (Files): Remove m4/inttypes-h.m4. diff --git a/gnulib-tool b/gnulib-tool index 7a71916fa1..08392682b4 100755 --- a/gnulib-tool +++ b/gnulib-tool @@ -22,7 +22,7 @@ progname=$0 package=gnulib -cvsdatestamp='$Date: 2006-09-18 17:03:47 $' +cvsdatestamp='$Date: 2006-09-19 06:03:02 $' last_checkin_date=`echo "$cvsdatestamp" | sed -e 's,^\$[D]ate: ,,'` version=`echo "$last_checkin_date" | sed -e 's/ .*$//' -e 's,/,-,g'` nl=' @@ -179,6 +179,13 @@ func_emit_copyright_notice () echo "# Generated by gnulib-tool." } +# func_exit STATUS +# exit with status +func_exit () +{ + (exit $1); exit $1 +} + # func_tmpdir # creates a temporary directory. # Sets variable @@ -206,7 +213,7 @@ func_tmpdir () } || { echo "$0: cannot create a temporary directory in $TMPDIR" >&2 - { (exit 1); exit 1; } + func_exit 1 } } @@ -232,7 +239,7 @@ func_fatal_error () { echo "gnulib-tool: *** $1" 1>&2 echo "gnulib-tool: *** Stop." 1>&2 - exit 1 + func_exit 1 } # func_readlink SYMLINK @@ -567,10 +574,10 @@ func_relconcat () shift ;; --help | --hel | --he | --h ) func_usage - exit 0 ;; + func_exit $? ;; --version | --versio | --versi | --vers | --ver | --ve | --v ) func_version - exit 0 ;; + func_exit $? ;; -- ) # Stop option processing shift @@ -578,7 +585,7 @@ func_relconcat () -* ) echo "gnulib-tool: unknown option $1" 1>&2 echo "Try 'gnulib-tool --help' for more information." 1>&2 - exit 1 ;; + func_exit 1 ;; * ) break ;; esac @@ -590,7 +597,7 @@ func_relconcat () echo "Try 'gnulib-tool --help' for more information." 1>&2 echo "If you really want to modify the gnulib configuration of your project," 1>&2 echo "you need to use 'gnulib --import' - at your own risk!" 1>&2 - exit 1 + func_exit 1 fi if test -n "$local_gnulib_dir" || test -n "$supplied_libname" \ || test -n "$sourcebase" || test -n "$m4base" \ @@ -601,7 +608,7 @@ func_relconcat () echo "Try 'gnulib-tool --help' for more information." 1>&2 echo "If you really want to modify the gnulib configuration of your project," 1>&2 echo "you need to use 'gnulib --import' - at your own risk!" 1>&2 - exit 1 + func_exit 1 fi do_changelog=false fi @@ -704,7 +711,16 @@ done gnulib_dir=`echo "$self_abspathname" | sed -e 's,/[^/]*$,,'` func_tmpdir -trap 'rm -rf "$tmp"' 0 1 2 3 15 +trap 'exit_status=$? + if test "$signal" != 0; then + echo "caught signal $signal" >&2 + fi + rm -rf "$tmp" + exit $exit_status' 0 +for signal in 1 2 3 13 15; do + trap '{ signal='$signal'; func_exit 1; }' $signal +done +signal=0 # func_lookup_file file # looks up a file in $local_gnulib_dir or $gnulib_dir, or combines it through @@ -2532,7 +2548,7 @@ case $mode in # local_gnulib_dir, avoidlist, sourcebase, m4base, docbase, # testsbase, libname, lgpl, makefile_name, libtool, macro_prefix # don't propagate from one directory to another. - (func_import) || exit 1 + (func_import) || func_exit 1 done else # Really ambiguous. @@ -2579,7 +2595,7 @@ case $mode in if test -n "$remaining"; then echo "Remaining files:" $remaining 1>&2 echo "gnulib-tool: *** Stop." 1>&2 - exit 1 + func_exit 1 fi cd .. cd .. @@ -2602,7 +2618,7 @@ case $mode in if test -n "$remaining"; then echo "Remaining files:" $remaining 1>&2 echo "gnulib-tool: *** Stop." 1>&2 - exit 1 + func_exit 1 fi cd .. cd .. @@ -2705,12 +2721,12 @@ esac rm -rf "$tmp" # Undo the effect of the previous 'trap' command. Some shellology: -# We cannot use "trap - 0 1 2 3 15", because Solaris sh would attempt to +# We cannot use "trap - 0 1 2 3 13 15", because Solaris sh would attempt to # execute the command "-". "trap '' ..." is fine only for signal 0 (= normal # exit); for the others we need to call 'exit' explicitly. The value of $? is # 128 + signal number and is set before the trap-registered command is run. trap '' 0 -trap 'exit $?' 1 2 3 15 +trap 'func_exit $?' 1 2 3 13 15 exit 0 -- 2.30.2