revert previous commit for now. testscript which breaks:
H4sIAAAAAAACA31TTUvDQBC951c804DtIQ0iiFhSPHiwiCDqzUpIuhO6JN2ETSS16n93Np+GFiGE zM6bN2/fTPQOro5xENYuEVLzBz9eaF6RlWupSpyHaXqzVuvyljbbDCRV0UR7WeLiHEtT4D2GCcUy pdNFh4pkg4wGZCV8Z6opTPOw3GI+swoq4ZIVZxqkSv0JqRAiWkBkmAJNegHIGG9vcAWcSnjM6dTo uby8vsL7+wLllhQQKKr4SoFv/8nbXE5pQcdpk4nlwH6AE7zer17uVs/BmHVftnUdxYh0yHbV3ghY 9wh2rQlBkdMm8PmIe57Bjfs7dTW9X/OoEG6lwzwnzYKA7+8jHpsJTuFN4+IjKhKZM6dpZ0xuQ2Nz 7bGB1F74zlebmzTm/PS+OB0GZz4HLcPgz+BeDxyS9S7YU6e3qZaQk5gZgRHvQtI59Eet7QwBWFnL O/F+ej9Fpmg0ug7OHrnqHy2+7y8x6DGEG3E0Az41RuPlYfXEEx0psrl8PAUebzf6ZklabgD8V3SS Z7Vo6xfOuQS6gQMAAA== 「mksh -o posix z」 failed in that it continues; 「mksh z」 correctly aborts let’s see what the obsd people have to say herefore
This commit is contained in:
parent
e39c1f860d
commit
d99541d7c8
4
check.t
4
check.t
@ -1,4 +1,4 @@
|
|||||||
# $MirOS: src/bin/mksh/check.t,v 1.259 2009/03/16 15:14:22 tg Exp $
|
# $MirOS: src/bin/mksh/check.t,v 1.260 2009/03/16 15:50:11 tg Exp $
|
||||||
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: bksl-nl.t,v 1.2 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
# $OpenBSD: history.t,v 1.5 2001/01/28 23:04:56 niklas Exp $
|
||||||
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
# $OpenBSD: read.t,v 1.3 2003/03/10 03:48:16 david Exp $
|
||||||
@ -7,7 +7,7 @@
|
|||||||
# http://www.research.att.com/~gsf/public/ifs.sh
|
# http://www.research.att.com/~gsf/public/ifs.sh
|
||||||
|
|
||||||
expected-stdout:
|
expected-stdout:
|
||||||
@(#)MIRBSD KSH R36 2009/03/16 ~test
|
@(#)MIRBSD KSH R36 2009/03/15
|
||||||
description:
|
description:
|
||||||
Check version of shell.
|
Check version of shell.
|
||||||
stdin:
|
stdin:
|
||||||
|
19
exec.c
19
exec.c
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.49 2009/03/16 15:14:23 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/exec.c,v 1.50 2009/03/16 15:50:12 tg Exp $");
|
||||||
|
|
||||||
static int comexec(struct op *, struct tbl *volatile, const char **,
|
static int comexec(struct op *, struct tbl *volatile, const char **,
|
||||||
int volatile);
|
int volatile);
|
||||||
@ -25,8 +25,6 @@ execute(struct op *volatile t,
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
volatile int rv = 0;
|
volatile int rv = 0;
|
||||||
/* for FPOSIX only: rv being propagated or newly defined? */
|
|
||||||
volatile bool rv_prop = false;
|
|
||||||
int pv[2];
|
int pv[2];
|
||||||
const char ** volatile ap;
|
const char ** volatile ap;
|
||||||
char ** volatile up;
|
char ** volatile up;
|
||||||
@ -102,7 +100,6 @@ execute(struct op *volatile t,
|
|||||||
|
|
||||||
case TPAREN:
|
case TPAREN:
|
||||||
rv = execute(t->left, flags|XFORK);
|
rv = execute(t->left, flags|XFORK);
|
||||||
rv_prop = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TPIPE:
|
case TPIPE:
|
||||||
@ -210,10 +207,9 @@ execute(struct op *volatile t,
|
|||||||
case TOR:
|
case TOR:
|
||||||
case TAND:
|
case TAND:
|
||||||
rv = execute(t->left, XERROK);
|
rv = execute(t->left, XERROK);
|
||||||
if (t->right != NULL && (rv == 0) == (t->type == TAND)) {
|
if (t->right != NULL && (rv == 0) == (t->type == TAND))
|
||||||
rv = execute(t->right, flags & XERROK);
|
rv = execute(t->right, flags & XERROK);
|
||||||
rv_prop = true;
|
else
|
||||||
} else
|
|
||||||
flags |= XERROK;
|
flags |= XERROK;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -258,7 +254,6 @@ execute(struct op *volatile t,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
rv = 0; /* in case of a continue */
|
rv = 0; /* in case of a continue */
|
||||||
rv_prop = true;
|
|
||||||
if (t->type == TFOR) {
|
if (t->type == TFOR) {
|
||||||
while (*ap != NULL) {
|
while (*ap != NULL) {
|
||||||
setstr(global(t->str), *ap++, KSH_UNWIND_ERROR);
|
setstr(global(t->str), *ap++, KSH_UNWIND_ERROR);
|
||||||
@ -268,7 +263,6 @@ execute(struct op *volatile t,
|
|||||||
for (;;) {
|
for (;;) {
|
||||||
if (!(cp = do_selectargs(ap, is_first))) {
|
if (!(cp = do_selectargs(ap, is_first))) {
|
||||||
rv = 1;
|
rv = 1;
|
||||||
rv_prop = false;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
is_first = false;
|
is_first = false;
|
||||||
@ -298,7 +292,6 @@ execute(struct op *volatile t,
|
|||||||
rv = 0; /* in case of a continue */
|
rv = 0; /* in case of a continue */
|
||||||
while ((execute(t->left, XERROK) == 0) == (t->type == TWHILE))
|
while ((execute(t->left, XERROK) == 0) == (t->type == TWHILE))
|
||||||
rv = execute(t->right, flags & XERROK);
|
rv = execute(t->right, flags & XERROK);
|
||||||
rv_prop = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TIF:
|
case TIF:
|
||||||
@ -308,7 +301,6 @@ execute(struct op *volatile t,
|
|||||||
rv = execute(t->left, XERROK) == 0 ?
|
rv = execute(t->left, XERROK) == 0 ?
|
||||||
execute(t->right->left, flags & XERROK) :
|
execute(t->right->left, flags & XERROK) :
|
||||||
execute(t->right->right, flags & XERROK);
|
execute(t->right->right, flags & XERROK);
|
||||||
rv_prop = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TCASE:
|
case TCASE:
|
||||||
@ -321,12 +313,10 @@ execute(struct op *volatile t,
|
|||||||
break;
|
break;
|
||||||
Found:
|
Found:
|
||||||
rv = execute(t->left, flags & XERROK);
|
rv = execute(t->left, flags & XERROK);
|
||||||
rv_prop = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TBRACE:
|
case TBRACE:
|
||||||
rv = execute(t->left, flags & XERROK);
|
rv = execute(t->left, flags & XERROK);
|
||||||
rv_prop = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TFUNCT:
|
case TFUNCT:
|
||||||
@ -338,7 +328,6 @@ execute(struct op *volatile t,
|
|||||||
* (allows "ls -l | time grep foo").
|
* (allows "ls -l | time grep foo").
|
||||||
*/
|
*/
|
||||||
rv = timex(t, flags & ~XEXEC);
|
rv = timex(t, flags & ~XEXEC);
|
||||||
rv_prop = true;
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TEXEC: /* an eval'd TCOM */
|
case TEXEC: /* an eval'd TCOM */
|
||||||
@ -364,7 +353,7 @@ execute(struct op *volatile t,
|
|||||||
quitenv(NULL); /* restores IO */
|
quitenv(NULL); /* restores IO */
|
||||||
if ((flags&XEXEC))
|
if ((flags&XEXEC))
|
||||||
unwind(LEXIT); /* exit child */
|
unwind(LEXIT); /* exit child */
|
||||||
if (rv != 0 && (!Flag(FPOSIX) || !rv_prop) &&!(flags & XERROK)) {
|
if (rv != 0 && !(flags & XERROK)) {
|
||||||
trapsig(SIGERR_);
|
trapsig(SIGERR_);
|
||||||
if (Flag(FERREXIT))
|
if (Flag(FERREXIT))
|
||||||
unwind(LERROR);
|
unwind(LERROR);
|
||||||
|
4
sh.h
4
sh.h
@ -102,9 +102,9 @@
|
|||||||
#define __SCCSID(x) __IDSTRING(sccsid,x)
|
#define __SCCSID(x) __IDSTRING(sccsid,x)
|
||||||
|
|
||||||
#ifdef EXTERN
|
#ifdef EXTERN
|
||||||
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.277 2009/03/16 15:14:23 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.278 2009/03/16 15:50:13 tg Exp $");
|
||||||
#endif
|
#endif
|
||||||
#define MKSH_VERSION "R36 2009/03/16 ~test"
|
#define MKSH_VERSION "R36 2009/03/15"
|
||||||
|
|
||||||
#ifndef MKSH_INCLUDES_ONLY
|
#ifndef MKSH_INCLUDES_ONLY
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user