Module Name: src
Committed By: christos
Date: Tue Mar 12 01:52:20 UTC 2013
Modified Files:
src/tools/host-mkdep: host-mkdep.in
Log Message:
Perform shell fd gymnastics to capture the error in the pipeline and exit.
To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/tools/host-mkdep/host-mkdep.in
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/tools/host-mkdep/host-mkdep.in
diff -u src/tools/host-mkdep/host-mkdep.in:1.24 src/tools/host-mkdep/host-mkdep.in:1.25
--- src/tools/host-mkdep/host-mkdep.in:1.24 Mon Mar 4 22:06:21 2013
+++ src/tools/host-mkdep/host-mkdep.in Mon Mar 11 21:52:20 2013
@@ -1,6 +1,6 @@
#!@BSHELL@ -
#
-# $NetBSD: host-mkdep.in,v 1.24 2013/03/05 03:06:21 christos Exp $
+# $NetBSD: host-mkdep.in,v 1.25 2013/03/12 01:52:20 christos Exp $
#
# Copyright (c) 1991, 1993
# The Regents of the University of California. All rights reserved.
@@ -69,6 +69,13 @@ set_objlist()
fi
}
+# Send the command output to 4, and a command to set the exit code to 5
+exec 5>&1
+run_cmd() {
+ "$@" 1>&4 4>&-
+ echo rv=$? 1>&5 5>&-
+}
+
# A getopt compatible command line parser in shell comands.
# (don't trust the shell builtin getopts to be in a known state on error)
while [ $# -gt 0 ]; do
@@ -226,12 +233,13 @@ if $MERGE; then
done <$f
done >$TMP
else
+ exec 5>&1
for f in $SRCS; do
file=${f##*/}
file=${file%.*}
set_objlist $file
- @CPP@ "$@" $f | @AWK@ '
+ eval $( (run_cmd @CPP@ "$@" $f 4>&1 | @AWK@ '
/^#/ {
# Be as tolerant as possible.
sub(/^#(line)? [ 0-9]*\"?/, "")
@@ -247,7 +255,11 @@ else
print "'"$objlist"'" ": " $0
'"$AWK_OPTIONAL"'
}
- ' >> $TMP
+ ' >> $TMP) 5>&1)
+ case "$rv" in
+ 0);;
+ *) exit $rv;;
+ esac
done
fi