Date: Sun, 13 Oct 1996 22:30:01 -0700 (PDT) From: Steve Price <sprice@hiwaay.net> To: freebsd-bugs Subject: Re: bin/1793: /bin/sh return w/o exitstatus in a function sets exitstatus to true Message-ID: <199610140530.WAA27376@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR bin/1793; it has been noted by GNATS.
From: Steve Price <sprice@hiwaay.net>
To: george@cia-g.com
Cc: freebsd-gnats-submit@FreeBSD.org,
GNATS Management <gnats@freefall.freebsd.org>,
freebsd-bugs@freefall.freebsd.org, sprice@hiwaay.net
Subject: Re: bin/1793: /bin/sh return w/o exitstatus in a function sets exitstatus to true
Date: Mon, 14 Oct 1996 00:22:33 -0500 (CDT)
On Sun, 13 Oct 1996 george@cia-g.com wrote:
#
# >Number: 1793
# >Category: bin
# >Synopsis: /bin/sh return w/o exitstatus in a function sets exitstatus to true
# >Confidential: no
# >Severity: non-critical
# >Priority: low
# >Responsible: freebsd-bugs
# >State: open
# >Class: sw-bug
# >Submitter-Id: current-users
# >Arrival-Date: Sun Oct 13 20:10:01 PDT 1996
# >Last-Modified:
# >Originator: George Simunovich
# >Organization:
# >Release: 2.2-current
# >Environment:
# 2.2-CURRENT FreeBSD 2.2-CURRENT #0: Sat Oct 12 13:26:46 MDT 1996
# >Description:
# A return without an exit status in a sh functino sets the exit status
# to true.
#
# bash works as does /bin/sh on FreeBSD 2.1.0-RELEASE
# >How-To-Repeat:
# When the following script is run it echos "True Condition".
#
# #!/bin/sh
#
# Tester()
# {
# false
# return
# }
#
# if Tester
# then
# echo "True Condition"
# else
# echo "Not True Condition"
# fi
#
# >Fix:
# use bash?
#
# >Audit-Trail:
# >Unformatted:
#
Try doing a 'return $?' to return the exitstatus of the previously
executed command. Attached is a one-liner that fixes the case above
but breaks this new case (at least wrt /bin/bash).
steve[~]$ cat > testing
tester()
{
return
}
false
if tester
then
echo "true"
else
echo "false"
fi
^D
steve[~] /tmp/sh testing
true
steve[~] /bin/bash testing
false
steve[~]
I will look into this some more and see what I can find.
Steve
Index: eval.c
===================================================================
RCS file: /home/ncvs/src/bin/sh/eval.c,v
retrieving revision 1.6
diff -u -r1.6 eval.c
--- eval.c 1996/10/06 15:17:19 1.6
+++ eval.c 1996/10/14 05:02:36
@@ -958,7 +958,7 @@
{
int ret;
- ret = exitstatus;
+ ret = oexitstatus;
if (argc > 1)
ret = number(argv[1]);
if (funcnest) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199610140530.WAA27376>
