freebsd-dev/bin/sh
Jilles Tjoelker bd9b38d1f7 sh: Don't allocate a redirtab if there are no redirections.
Builtins (including variable assignments without command word), function
calls and redirected compound commands need to restore file descriptors
to their original state after execution. This is handled by allocating a
redirtab structure. These mallocs and frees show up heavily in pmcstat.

Only allocate a redirtab if there are actually redirections and maintain a
count of how many levels of REDIR_PUSH there are without redirtabs.

A simple loop without external programs like

sh -c 'i=0; w=$(printf %0100d 7); while [ "$i" -lt 1000000 ]; do
    i=$((i+1)); done'

is over 25% faster on an amd64 bhyve VM.
2016-01-30 21:21:25 +00:00
..
bltin sh: Fix compiler warnings related to duplicate or missing declarations. 2015-03-01 21:46:55 +00:00
funcs sh: Remove "kill" example function, which is superseded by the kill builtin 2012-01-21 20:39:17 +00:00
tests sh: Clean a readonly local, even if the variable does not exist outside. 2016-01-22 20:10:08 +00:00
alias.c sh: Fix some arithmetic undefined behaviour. 2015-06-24 20:51:48 +00:00
alias.h sh: Fix duplicate prototypes for builtins. 2011-06-13 21:03:27 +00:00
arith_yacc.c sh: Remove two redundant (uintmax_t) casts. 2014-08-20 20:15:43 +00:00
arith_yacc.h sh: Fix compiler warnings related to duplicate or missing declarations. 2015-03-01 21:46:55 +00:00
arith_yylex.c sh: Fix compiler warnings related to duplicate or missing declarations. 2015-03-01 21:46:55 +00:00
arith.h sh: Fix duplicate prototypes for builtins. 2011-06-13 21:03:27 +00:00
builtins.def wordexp: Rewrite to make WRDE_NOCMD reliable. 2015-09-30 21:32:29 +00:00
cd.c sh: Remove a global variable from cd.c. 2016-01-24 17:01:34 +00:00
cd.h sh: Fix duplicate prototypes for builtins. 2011-06-13 21:03:27 +00:00
error.c sh: Fix more compiler warnings related to variable declarations. 2015-03-03 21:21:43 +00:00
error.h sh: Move some code from onint() to onsig(), making onint() noreturn. 2014-12-21 23:09:59 +00:00
eval.c sh: Update associated state when restoring locals while leaving a function. 2016-01-10 16:31:28 +00:00
eval.h sh: Make struct arglist an array instead of a linked list. 2015-10-11 21:33:00 +00:00
exec.c sh: Reduce size of builtins table. 2016-01-03 21:30:22 +00:00
exec.h sh: Expand assignment-like words specially for export/readonly/local. 2012-07-15 10:19:43 +00:00
expand.c sh: Constify internal representation in expand.c. 2016-01-24 22:26:25 +00:00
expand.h sh: Perform pathname generation during the first expansion phases. 2015-12-31 18:47:54 +00:00
histedit.c sh: Fix more compiler warnings. 2015-03-01 22:32:23 +00:00
input.c sh: Remove arbitrary length limit on << EOF markers. 2014-09-14 16:46:30 +00:00
input.h sh: Remove arbitrary length limit on << EOF markers. 2014-09-14 16:46:30 +00:00
jobs.c sh: Pass along SIGINT from a child if job control is enabled, even when not 2015-04-25 13:34:25 +00:00
jobs.h sh: Fix race condition with signals and wait or set -T. 2013-09-02 21:57:46 +00:00
mail.c sh: Prefer "" to nullstr where possible. 2015-02-15 21:47:43 +00:00
mail.h
main.c sh: Add more necessary INTOFF/INTON. 2014-05-09 13:27:30 +00:00
main.h sh: Make various functions static. 2012-01-01 22:17:12 +00:00
Makefile Convert bin/ to LIBADD, reduce overlinking allow to build all components as 2014-11-25 11:15:40 +00:00
Makefile.depend Add META_MODE support. 2015-06-13 19:20:56 +00:00
memalloc.c sh: Add stsavestr(), like savestr() but allocates using stalloc(). 2015-02-15 21:41:29 +00:00
memalloc.h sh: Add stsavestr(), like savestr() but allocates using stalloc(). 2015-02-15 21:41:29 +00:00
miscbltin.c sh: Fix read with escaped IFS characters at the end. 2015-08-30 17:24:22 +00:00
mkbuiltins sh: Reduce size of builtins table. 2016-01-03 21:30:22 +00:00
mknodes.c sh/mknodes: Close files and check for errors when writing. 2015-12-20 16:40:36 +00:00
mksyntax.c sh: Fix more compiler warnings related to variable declarations. 2015-03-03 21:21:43 +00:00
mktokens sh: Fix compiler warnings related to duplicate or missing declarations. 2015-03-01 21:46:55 +00:00
myhistedit.h sh: Make various functions static. 2012-01-01 22:17:12 +00:00
mystring.c sh: Reject integer overflow in number and is_number. 2014-08-17 16:40:29 +00:00
mystring.h sh: Remove prefix() function. Use strncmp() instead. 2014-07-20 12:06:52 +00:00
nodes.c.pat sh: Remove global state from nodes.c. 2015-11-24 22:47:19 +00:00
nodetypes sh: Prefer "" to nullstr where possible. 2015-02-15 21:47:43 +00:00
options.c sh: Simplify some code related to positional parameters. 2016-01-19 22:41:26 +00:00
options.h sh: Simplify some code related to positional parameters. 2016-01-19 22:41:26 +00:00
output.c sh: Make sure output suitable as shell input is also printable. 2014-12-14 16:26:19 +00:00
output.h sh: Detect and flag write errors on stdout in builtins. 2012-12-12 22:01:10 +00:00
parser.c wordexp: Rewrite to make WRDE_NOCMD reliable. 2015-09-30 21:32:29 +00:00
parser.h wordexp: Rewrite to make WRDE_NOCMD reliable. 2015-09-30 21:32:29 +00:00
redir.c sh: Don't allocate a redirtab if there are no redirections. 2016-01-30 21:21:25 +00:00
redir.h sh: Remove unnecessary reset functions. 2013-08-16 20:24:41 +00:00
sh.1 sh(1): Document 'cd -'. 2016-01-30 20:10:20 +00:00
shell.h sh: Remove #define MKINIT. 2013-07-25 19:48:15 +00:00
show.c sh: Prefer memcpy() to strcpy() in most cases. Remove the scopy macro. 2013-11-30 21:27:11 +00:00
show.h sh: Constify various strings. 2009-12-24 18:41:14 +00:00
TOUR sh: Remove mkinit. 2013-07-25 15:08:41 +00:00
trap.c sh: Fix the trap builtin to be POSIX-compliant for 'trap exit SIG' and 'trap n n...'. 2015-04-18 23:49:57 +00:00
trap.h sh: Move some code from onint() to onsig(), making onint() noreturn. 2014-12-21 23:09:59 +00:00
var.c sh: Clean a readonly local, even if the variable does not exist outside. 2016-01-22 20:10:08 +00:00
var.h sh: Make struct arglist an array instead of a linked list. 2015-10-11 21:33:00 +00:00