Skip site navigation (1)Skip section navigation (2)
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>