diff --git a/Build.sh b/Build.sh index d0c8240..dcd8da8 100644 --- a/Build.sh +++ b/Build.sh @@ -1,5 +1,5 @@ #!/bin/sh -srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.491 2011/11/26 17:56:29 tg Exp $' +srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.492 2011/12/02 22:55:45 tg Exp $' #- # Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # Thorsten Glaser @@ -22,17 +22,7 @@ srcversion='$MirOS: src/bin/mksh/Build.sh,v 1.491 2011/11/26 17:56:29 tg Exp $' # People analysing the output must whitelist conftest.c for any kind # of compiler warning checks (mirtoconf is by design not quiet). # -# Environment used: CC CFLAGS CPPFLAGS LDFLAGS LIBS NOWARN NROFF -# TARGET_OS TARGET_OSREV -# Feature selectors: USE_PRINTF_BUILTIN -# CPPFLAGS recognised: MKSH_MIDNIGHTBSD01ASH_COMPAT MKSH_CONSERVATIVE_FDS -# MKSH_DONT_EMIT_IDSTRING MKSH_NO_DEPRECATED_WARNING -# MKSH_DISABLE_DEPRECATED MKSH_ASSUME_UTF8 MKSH_A4PB -# MKSH_SMALL MKSH_BINSHREDUCED MKSH_NOPROSPECTOFWORK -# MKSH_UNEMPLOYED MKSH_NO_LIMITS MKSH_DEFAULT_TMPDIR -# MKSH_DEFAULT_EXECSHELL MKSHRC_PATH MKSH_CLS_STRING -# MKSH_CLRTOEOL_STRING MKSH_NO_EXTERNAL_CAT -# MKSH_NOPWNAM MKSH_S_NOVI +# Used environment documentation is at the end of this file. LC_ALL=C export LC_ALL @@ -1183,7 +1173,7 @@ else #define EXTERN #define MKSH_INCLUDES_ONLY #include "sh.h" - __RCSID("$MirOS: src/bin/mksh/Build.sh,v 1.491 2011/11/26 17:56:29 tg Exp $"); + __RCSID("$MirOS: src/bin/mksh/Build.sh,v 1.492 2011/12/02 22:55:45 tg Exp $"); int main(void) { printf("Hello, World!\n"); return (0); } EOF case $cm in @@ -1785,3 +1775,51 @@ $e $e Run the regression test suite: ./test.sh $e Please also read the sample file dot.mkshrc and the fine manual. exit 0 + +: <<'EOD' + +=== Environment used === + +==== build environment ==== +CC default: cc +CFLAGS if empty, defaults to -xO2 or +O2 + or -O3 -qstrict or -O2, per compiler +CPPFLAGS default empty +LDFLAGS default empty; added before sources +LIBS default empty; added after sources + [Interix] default: -lcrypt (XXX still needed?) +NOWARN -Wno-error or similar +NROFF default: nroff +TARGET_OS default: $(uname -s || uname) +TARGET_OSREV [QNX] default: $(uname -r) + +==== feature selectors ==== +USE_PRINTF_BUILTIN 1 to include (unsupported) printf(1) as builtin +===== general format ===== +HAVE_STRLEN ac_test +HAVE_STRING_H ac_header +HAVE_CAN_FSTACKPROTECTORALL ac_flags + +==== cpp definitions ==== +MKSHRC_PATH "~/.mkshrc" (do not change) +MKSH_A4PB force use of arc4random_pushb +MKSH_ASSUME_UTF8 (0=disabled, 1=enabled; default: unset) +MKSH_BINSHREDUCED if */sh or */-sh, enable set -o sh +MKSH_CLRTOEOL_STRING "\033[K" +MKSH_CLS_STRING "\033[;H\033[J" +MKSH_CONSERVATIVE_FDS fd 0-9 for scripts, shell only up to 31 +MKSH_DEFAULT_EXECSHELL "/bin/sh" (do not change) +MKSH_DEFAULT_TMPDIR "/tmp" (do not change) +MKSH_DISABLE_DEPRECATED disable code paths scheduled for later removal +MKSH_DONT_EMIT_IDSTRING omit RCS IDs from binary +MKSH_MIDNIGHTBSD01ASH_COMPAT set -o sh: additional compatibility quirk +MKSH_NOPROSPECTOFWORK disable jobs, co-processes, etc. (do not use) +MKSH_NOPWNAM skip PAM calls, for -static on eglibc, Solaris +MKSH_NO_DEPRECATED_WARNING omit warning when deprecated stuff is run +MKSH_NO_EXTERNAL_CAT omit hack to skip cat builtin when flags passed +MKSH_NO_LIMITS omit ulimit code +MKSH_SMALL omit some code, optimise hard for size (slower) +MKSH_S_NOVI disable Vi editing mode (default if MKSH_SMALL) +MKSH_UNEMPLOYED disable job control (but not jobs/co-processes) + +EOD diff --git a/check.t b/check.t index e81563e..e2f3bba 100644 --- a/check.t +++ b/check.t @@ -1,4 +1,4 @@ -# $MirOS: src/bin/mksh/check.t,v 1.497 2011/11/30 21:34:10 tg Exp $ +# $MirOS: src/bin/mksh/check.t,v 1.498 2011/12/02 22:55:46 tg 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: read.t,v 1.3 2003/03/10 03:48:16 david Exp $ @@ -28,7 +28,7 @@ # http://www.freebsd.org/cgi/cvsweb.cgi/src/tools/regression/bin/test/regress.sh?rev=HEAD expected-stdout: - @(#)MIRBSD KSH R40 2011/11/30 + @(#)MIRBSD KSH R40 2011/12/02 description: Check version of shell. stdin: diff --git a/funcs.c b/funcs.c index 14e5899..1160991 100644 --- a/funcs.c +++ b/funcs.c @@ -38,7 +38,7 @@ #endif #endif -__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.200 2011/11/30 21:34:12 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.201 2011/12/02 22:55:48 tg Exp $"); #if HAVE_KILLPG /* @@ -2697,7 +2697,7 @@ c_mknod(const char **wp) #endif /*- - test(1) accepts the following grammar: + test(1) roughly accepts the following grammar: oexpr ::= aexpr | aexpr "-o" oexpr ; aexpr ::= nexpr | nexpr "-a" aexpr ; nexpr ::= primary | "!" nexpr ; @@ -2713,13 +2713,13 @@ c_mknod(const char **wp) binary-operator ::= "="|"=="|"!="|"-eq"|"-ne"|"-ge"|"-gt"|"-le"|"-lt"| "-nt"|"-ot"|"-ef"| - "<"|">" # rules used for [[ .. ]] expressions + "<"|">" # rules used for [[ ... ]] expressions ; - operand ::= + operand ::= */ /* POSIX says > 1 for errors */ -#define T_ERR_EXIT 2 +#define T_ERR_EXIT 2 int c_test(const char **wp) @@ -2778,19 +2778,13 @@ c_test(const char **wp) case 3: ptest_three: swp = te.pos.wp; - /* skip lhs, without evaluation */ - (*te.getopnd)(&te, TO_NONOP, false); + /* inside knowledge shows ptest_getopnd never evaluates */ + /* skip lhs, without evaluation; assign with */ + lhs = (*te.getopnd)(&te, TO_NONOP, true); if ((op = (*te.isa)(&te, TM_BINOP))) { - const char *rhs; - - /* read rhs, with evaluation */ - rhs = (*te.getopnd)(&te, op, true); - /* back up to lhs */ - te.pos.wp = swp; - /* re-read lhs, with evaluation */ - lhs = (*te.getopnd)(&te, op, true); - /* finally run the test of lhs op rhs */ - rv = (*te.eval)(&te, op, lhs, rhs, true); + /* test lhs op rhs */ + rv = (*te.eval)(&te, op, lhs, + (*te.getopnd)(&te, op, true), true); goto ptest_out; } /* back up to lhs */ diff --git a/sh.h b/sh.h index 51d46de..fea71c2 100644 --- a/sh.h +++ b/sh.h @@ -151,9 +151,9 @@ #endif #ifdef EXTERN -__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.506 2011/11/30 21:34:15 tg Exp $"); +__RCSID("$MirOS: src/bin/mksh/sh.h,v 1.507 2011/12/02 22:55:49 tg Exp $"); #endif -#define MKSH_VERSION "R40 2011/11/30" +#define MKSH_VERSION "R40 2011/12/02" #ifndef MKSH_INCLUDES_ONLY