Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 14 Oct 1996 00:22:33 -0500 (CDT)
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
Message-ID:  <Pine.OSF.3.94.961014000718.15908D-100000@fly.HiWAAY.net>
In-Reply-To: <199610140306.UAA21113@freefall.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
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?Pine.OSF.3.94.961014000718.15908D-100000>