Add new experimental global builtin, doing the same as local (typeset, really – but that doesn’t deserve its name) does, except localising all parameters it touches
Better error messages with non-integral environment imports
$RANDOM environment import accepts any string now
Add setenv cshism to dot.mkshrc
Allow ^C to interrupt the built-in cat(1)
Fix mksh taking down the entire terminal, hard, when scripts use $COLUMNS and fork off utilities; regression introduced in mksh R37 (sorry, no regression test possible)
Properly mark need-ctty regression tests
MKSH_NO_EXTERNAL_CAT – Quell the external cat(1) calls magic
Yes, “echo” is not portable, document
Improve content and look of the manual page
Move /etc/{,suid_}profile to /system/etc/ on Android
Prevent more compiler warnings; catch build errors earlier
mksh R40 is a major everything release:
Correct small mistakes in manpage and build script
Port to Haiku (and probably, implicitly, BeOS; this is not tested though)
Add Haiku specific RLIMIT_NOVMON as ‘V’ to ulimit builtin
In the Emacs editing mode, hi-bit7 octets are now considered “motion characters” for word boundaries – Esc+b, Esc+f, ^W, …
Make EXECSHELL default configurable at compile time (embedded)
If MKSH_SMALL do not compile in “set -o bgnice” by default
Rework how RLIMIT_{AS,RSS,VMEM} map to ‘m’ and ‘v’ ulimits
Add some more OS specific limits seen in zsh
SUSv4 ${v=a\ b} and "${v=a\ b}" and ${v-a\ b} compliance, tests
Make "~/.mkshrc" path configurable at compile time (embedded)
Fix SUNWcc 12.1 error message scan in build phase=u
Fix variable assignment scope during command execution (expansion vs. assignment execution environment); [Herbert Xu, Geoff Clare] Add more regression tests for this
Fix single quotes in "${foo#bar}" (differs from "${foo-bar}")
Fix mknod(8) usage message: b|c are not optional
Fix "${x#?}" expansion when quoted (quotes, space)
Make default temporary directory configurable at compile time
Fix performance deficiencies in the built-in realpath function
Deprecate Build.sh -longoptions in favour of short ones: -valgrind becomes -g (like debug), -combine and -llvm become -c {combine,llvm} and the LLVM optimiser flags are passed via -O = -o -std-compile-opts
New Build.sh options -c dragonegg (for using the LLVM plugin to GCC 4.5 with inter-module optimisation), -v (version)
Document another way to get a coloured PS1 in the manpage
Disallow some more kinds to trim a vector; Debian #581867
Simplify some code; RCSID and comment sync with OpenBSD ksh
Apply diff from manuel giraud to keep track of LINENO in a trap
Remove arc4random(3) functionality; seed an LCG depending on the OS doing Address Space Layout Randomisation; speed up (we will use either arc4random_pushb_fast(3) if it exists or arc4random_pushb(3) if forced by the user with -DMKSH_A4PB e.g. on Cygwin)
Fix spelling mistakes in dot.mkshrc
Implement “live” window resize for the Emacs editing mode
More fixes for bugs found by Valgrind and LLVM+Clang scan-build
For script compatibility support “set ±o arc4random” during a transition period until R40 is out (but issue a warning to stderr)
Add (, ), (( to reserved words in the manual page and fix some formatting errors with GNU groff’s mdoc
Make printf.c.1.15 use mksh’s shf_* routines instead of stdio
Correct shf buffer I/O routines to avoid a memory corruption bug discovered by Waldemar Brodkorb and other bad effects
Fix NULL pointer dereference during iteration loop when checking for alias recursion; discovered by Michal Hlavinka
More int → bool conversion, whitespace and general code cleanup
Fix window size not being checked during runtime of external programmes by not relying on SIGWINCH so much but instead checking before every interactive editing of a command line
Improve mksh(1) manpage coverage, remove mentions of not-mksh
Use wcwidth() from system on MirBSD
u_int32_t is no longer needed (only for OpenBSD’s pre-ISO-C99 arc4random API, which we no longer call), so don’t provide it from Build.sh any longer
Scan for uint8_t and provide if not found
Fix realpath builtin for “/file/” arguments wrt. POSIX
Do not generate <stdint.h> from Build.sh as file any more if it is missing; rather let sh.h define the types appropriately and fix related compiler warnings
Add “cat” builtin (defers to external if options are given)
Reduce size by improved string pooling, improving struct packing, lowering size of some allocation chunks, and better code
Document 「x=$(eval $(cat)) <<'EOF'」 workaround for the $(…) parsing bug in the mksh(1) manual page and on the Red Hat Bugzilla
Add support for handling a “--” argument to more builtins
Correct some error messages and typos
Don’t alias stop, suspend on Android (system specific conflict for stop; suspend just joined the boat)
Address what few concerns Chris Palmer (Android security team) had: check all multiplications and some additions for integer overflows, mostly in allocation context, and check setres{u,g}id/setuid for EAGAIN iff the target OS is known to be returning it (Linux only, right now)
Some small manpage fixes
Clean up mirtoconf and build warnings with some compilers
Fix \c? vs. \c~ mis-documentation in mksh(1)
Remove the somewhat-portable setmode.c from the mksh source distribution and demote mknod(8) to an optional builtin, disabled by default, manually re-enabled in the installer only on MirBSD
Regenerate wcwidth table from Unicode 6.0.0
Change behaviour of argument-less exit in traps to match SUSv4, original patch from Jonathan Nieder (Debian Closes: #599484)
dot.mkshrc no longer exports $PS1, as recommended by Frank Terbeck, to avoid confusing other shells
The character width table is now in sync with Unicode 6.0.0
MKSH_SMALL doesn’t imply HAVE_REVOKE=0 any longer
Ignore a ‘$’ preceding ‘"…"’ (like bash, ksh93)
Make “foo=<<EOF” a direct assignment of here document (or here string) to string variable
Add KSHEGID, KSHGID, KSHUID variables (idea from Richard K.)
Option -d to read specifies a delimiter, like ksh93 (10x dgk)
Extension ${foo@#} expands to hash of $foo (mksh specific)
Emacs prev-hist-word resets the counter if other editing commands were run in between; repeat calling works, even together with arguments, now; arguments are 0-based (Debian Closes: #603801)
Introduce MKSH_NOPROSPECTOFWORK which implies MKSH_UNEMPLOYED and additionally disables job signals, |&, sigprocmask(2), etc.
POSIX: trap 'echo foo' UNKNOWN is not a syntax error
Do not use <sys/file.h> unless it exists
dot.mkshrc: When we set a UTF-8 locale (e.g. for the GNU OS), we must also set -o utf8-mode to match it
Don’t append a space after tab-completing a parameter substitution that doesn’t contain a glob/extglob (LP: #710539)
Limit history file size to 1 GiB for sanity
Add smores, a more(1)-like pager, as shell function to dot.mkshrc (not control character safe but tty aware)
Make builtins directly callable; utf8-mode is determined by LC_ALL/LC_CTYPE/LANG environment variables in that case
If the interactive shell uses setlocale(3)/nl_langinfo(3) to divine utf8-mode, fall back to environment variables unless success
From a direct builtin call, echo(1) behaves POSIXish
Replace some MirBSD utilities with links to mksh(1) and ensure some integration to keep compatibility
Add a microsecond capable sleep(1) builtin [updated 20110213]
If the built-in cat is invoked from a direct builtin call, it now properly handles the POSIXly demanded ‘-u’ option (as a no-op)
Support the PIPESTATUS array (like GNU bash)
Port to MiNT / FreeMiNT (Atari m68k operating system)
Do not close filedescriptor #3 (controlling tty) on UWIN
Make the tree printing code safe for re-entrancy of output
Implement recursive parser for $(…) to fix RedHat BZ#496791
Use the existing state machine, a recursive parser and retracing the input stream for correct x=(…$((…$(…)…))…) parsing
complain about ${x:1:2:3} instead of crashing
make optional printf(1) builtin __CRAZY=Yes clean and prevent it from crashing by reading past end of (invalid) format strings
abort(3) on rogue pointers #ifdef DEBUG
Correct some documentation, code commentary, etc.
Handle the UTF-8 Byte Order Mark in $(…) expressions
Speed up reading input by checking for the BOM only once
Fix mis-detection of gcc format attribute (false negative)
Include some Android specific hacks (no change on other OEs)
In ${foo/bar/baz} expressions, when adjourning empty patterns to avoid running into a busy-wait loop, remember to skip the anchor characters (‘#’ or ‘%’) at the beginning, yet keep the special meaning replacing a string begin or end with a string has
Write a pattern optimiser that is run internally before calls to the pattern matching code always (currently, replaces a@(b@(c)d)e with abcde but keeps @(a|a), then (in a second pass) collapses adjacent asterisk (‘*’) wildcards into a single one; this fixes some of the symptoms of severe performance issues our pattern matching code has to the extent that it can prevent busy-looping (found by Jb_boin)
Handle pathnames with exactly two leading slashes well (SUSv4 3.266)
Fix here documents, add testcases
Fix corner case ${##1}, add tests for that and ${##} and ${#?}
Bring back “test -H” ifdef S_ISCDF (for HP-UX) from pdksh
Align read-only variable behaviour with (future) POSIX
Permit ${foo%(*} on FSH (Debian Closes: #619947)
Allow skipping testcases that need a controlling tty
Correct skipping the UTF-8 BOM when identifying a file
Do not use <stdbool.h> any longer
Use double-underscore-framed __attribute__s
Always catch SIGALRM (for the sleep builtin)
Functions now inherit a global set -x
Do not explicitly initialise static globals to 0/NULL
Eliminate some dead code (functions, globals)
Correct more tree handling bugs and merge similar code
Add “+=” to concatenate scalars and append to arrays
Support empty here document delimiters
Fix the four-argument form of test(1)
Drop the pre-POSIX ability to “test -t” without specifying “fd”
Defer dropping an alias in favour of a POSIX function to when the function is actually defined and check for the closing parenthesis too
Implement a new regression test attribute need-pass: {yes|no} and exit 1 if unexpected fails occur
Add ;& and ;| for case
Rewrite the read builtin and its documentation; adding -A (read IFS words into array), -a (read octets/wide characters into array), -N/-n (read only / up to z bytes), -t (read with timeout)
This update has been submitted for testing by robert.
This update has been pushed to testing
This update has been submitted for stable by robert.
This update has been pushed to stable