From 157c398c7e655325cd86c5bbf57997de4fdff9d6 Mon Sep 17 00:00:00 2001 From: cperciva Date: Sat, 13 Aug 2005 21:28:43 +0000 Subject: Correctly exit from extract_run() and update_run() if files needed are missing from ${WORKDIR}/files/. This bug was caused by the astonishing interaction of "return" and pipelines; in the following code, the "return" does not exit the function, but instead exits the subshell which was spawned for the last element of the pipeline; consequently, the output produced is "foo". foo() { echo bar | while read baz; do if [ ${baz} = "bar" ]; then return 1 fi done echo foo } Reported by: simon --- usr.sbin/portsnap/portsnap/portsnap.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'usr.sbin') diff --git a/usr.sbin/portsnap/portsnap/portsnap.sh b/usr.sbin/portsnap/portsnap/portsnap.sh index a7731e9..bf06387 100644 --- a/usr.sbin/portsnap/portsnap/portsnap.sh +++ b/usr.sbin/portsnap/portsnap/portsnap.sh @@ -768,7 +768,7 @@ extract_metadata() { # Do the actual work involved in "extract" extract_run() { - grep "^${EXTRACTPATH}" ${WORKDIR}/INDEX | while read LINE; do + if ! grep "^${EXTRACTPATH}" ${WORKDIR}/INDEX | while read LINE; do FILE=`echo ${LINE} | cut -f 1 -d '|'` HASH=`echo ${LINE} | cut -f 2 -d '|'` echo ${PORTSDIR}/${FILE} @@ -789,7 +789,9 @@ extract_run() { -C ${PORTSDIR} ${FILE} ;; esac - done + done; then + return 1 + fi if [ ! -z "${EXTRACTPATH}" ]; then return 0; fi @@ -818,7 +820,8 @@ update_run() { # Install new files echo "Extracting new files:" - sort ${WORKDIR}/INDEX | comm -13 ${PORTSDIR}/.portsnap.INDEX - | + if ! sort ${WORKDIR}/INDEX | + comm -13 ${PORTSDIR}/.portsnap.INDEX - | while read LINE; do FILE=`echo ${LINE} | cut -f 1 -d '|'` HASH=`echo ${LINE} | cut -f 2 -d '|'` @@ -838,7 +841,9 @@ update_run() { -C ${PORTSDIR} ${FILE} ;; esac - done + done; then + return 1 + fi extract_metadata extract_indices -- cgit v1.1