Date: Sat, 10 Nov 2001 05:39:18 +0900 From: "Akinori MUSHA" <knu@iDaemons.org> To: audit@FreeBSD.org Subject: make test(1) a sh(1) builtin command Message-ID: <86n11vel1l.wl@archon.local.idaemons.org>
next in thread | raw e-mail | index | archive | help
Hi,
Why don't we make test(1) a sh(1) builtin command? As we all know,
test(1) is one of the most frequently used commands, so making it
shell builtin will greatly reduce forking and peak memory usage.
Another interest is expr(1), which can sometimes be used repeatedly in
a script, however, because it uses regex to provide the `:' operation
the binary size increase is so big it might not pay.
Currently printf(1) is builtin but it does not seem to be used that
often, so it could be an option to remove it if the size increase that
the addition of test(1) causes were going to be a problem.
For your information, the sizes of the resulted sh binaries are as
follows:
printf test expr size:
N N N 633,148 bytes
Y N N 636,456 bytes (original)
N Y N 636,964 bytes (*)
Y Y N 640,240 bytes (my suggestion)
N Y Y 645,928 bytes
Y Y Y 649,268 bytes
(*) NetBSD's sh(1) already included test as a builtin command
in place of printf.
I think it would be a great trade to pay just 0.6% size increase for a
test(1) builtin command. What do you guys think?
--
/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp
"Somewhere out of a memory.. of lighted streets on quiet nights.."
Index: share/man/man1/builtin.1
===================================================================
RCS file: /home/ncvs/src/share/man/man1/builtin.1,v
retrieving revision 1.13
diff -u -r1.13 builtin.1
--- share/man/man1/builtin.1 8 Aug 2001 11:48:26 -0000 1.13
+++ share/man/man1/builtin.1 9 Nov 2001 19:10:22 -0000
@@ -60,6 +60,7 @@
.Nm exec ,
.Nm exit ,
.Nm export ,
+.Nm false ,
.Nm fc ,
.Nm fg ,
.Nm filetest ,
@@ -107,9 +108,11 @@
.Nm suspend ,
.Nm switch ,
.Nm telltc ,
+.Nm test ,
.Nm then ,
.Nm time ,
.Nm trap ,
+.Nm true ,
.Nm type ,
.Nm ulimit ,
.Nm umask ,
@@ -198,6 +201,7 @@
.It Ic exec Ta \&No Ta Yes Ta Yes
.It Ic exit Ta \&No Ta Yes Ta Yes
.It Ic export Ta \&No Ta \&No Ta Yes
+.It Ic false Ta Yes Ta \&No Ta Yes
.It Ic fc Ta \&No Ta \&No Ta Yes
.It Ic fg Ta \&No Ta Yes Ta Yes
.It Ic filetest Ta \&No Ta Yes Ta \&No
@@ -245,9 +249,11 @@
.It Ic suspend Ta \&No Ta Yes Ta \&No
.It Ic switch Ta \&No Ta Yes Ta \&No
.It Ic telltc Ta \&No Ta Yes Ta \&No
+.It Ic test Ta Yes Ta \&No Ta Yes
.It Ic then Ta \&No Ta \&No Ta Yes
.It Ic time Ta Yes Ta Yes Ta \&No
.It Ic trap Ta \&No Ta \&No Ta Yes
+.It Ic true Ta Yes Ta \&No Ta Yes
.It Ic type Ta \&No Ta \&No Ta Yes
.It Ic ulimit Ta \&No Ta \&No Ta Yes
.It Ic umask Ta \&No Ta Yes Ta Yes
Index: bin/sh/Makefile
===================================================================
RCS file: /home/ncvs/src/bin/sh/Makefile,v
retrieving revision 1.30
diff -u -r1.30 Makefile
--- bin/sh/Makefile 8 Sep 1999 15:40:43 -0000 1.30
+++ bin/sh/Makefile 9 Nov 2001 18:53:20 -0000
@@ -5,7 +5,7 @@
SHSRCS= alias.c arith.y arith_lex.l cd.c echo.c error.c eval.c exec.c expand.c \
histedit.c input.c jobs.c mail.c main.c memalloc.c miscbltin.c \
mystring.c options.c output.c parser.c printf.c redir.c show.c \
- trap.c var.c
+ test.c trap.c var.c
GENSRCS= builtins.c init.c nodes.c syntax.c
GENHDRS= builtins.h nodes.h syntax.h token.h y.tab.h
SRCS= ${SHSRCS} ${GENSRCS} ${GENHDRS} y.tab.h
@@ -22,7 +22,9 @@
# for debug:
# CFLAGS+= -g -DDEBUG=2
-.PATH: ${.CURDIR}/bltin ${.CURDIR}/../../usr.bin/printf
+.PATH: ${.CURDIR}/bltin \
+ ${.CURDIR}/../../bin/test \
+ ${.CURDIR}/../../usr.bin/printf
CLEANFILES+= mkinit mkinit.o mknodes mknodes.o \
mksyntax mksyntax.o
Index: bin/sh/builtins.def
===================================================================
RCS file: /home/ncvs/src/bin/sh/builtins.def,v
retrieving revision 1.7
diff -u -r1.7 builtins.def
--- bin/sh/builtins.def 27 Aug 1999 23:15:08 -0000 1.7
+++ bin/sh/builtins.def 9 Nov 2001 18:53:28 -0000
@@ -62,7 +62,7 @@
exitcmd exit
expcmd exp let
exportcmd export readonly
-#exprcmd expr test [
+#exprcmd expr
falsecmd false
histcmd -h fc
fgcmd -j fg
@@ -90,3 +90,4 @@
#foocmd foo
aliascmd alias
ulimitcmd ulimit
+testcmd test [
Index: bin/sh/sh.1
===================================================================
RCS file: /home/ncvs/src/bin/sh/sh.1,v
retrieving revision 1.55
diff -u -r1.55 sh.1
--- bin/sh/sh.1 8 Aug 2001 18:31:58 -0000 1.55
+++ bin/sh/sh.1 9 Nov 2001 19:11:41 -0000
@@ -1273,9 +1273,12 @@
This section lists the commands which
are builtin because they need to perform some operation
that cannot be performed by a separate process. In addition to
-these, a builtin version of the
+these, builtin versions of the
.Xr printf 1
-command is provided for efficiency.
+command and
+the
+.Xr test 1
+are provided for efficiency.
.Bl -tag -width Ds
.It Ic \&:
A null command that returns a 0 (true) exit value.
Index: bin/test/test.c
===================================================================
RCS file: /home/ncvs/src/bin/test/test.c,v
retrieving revision 1.31
diff -u -r1.31 test.c
--- bin/test/test.c 20 May 2001 05:33:53 -0000 1.31
+++ bin/test/test.c 9 Nov 2001 19:00:29 -0000
@@ -27,6 +27,11 @@
#include <string.h>
#include <unistd.h>
+#ifdef SHELL
+#define main testcmd
+#include "bltin/bltin.h"
+#endif
+
/* test(1) accepts the following grammar:
oexpr ::= aexpr | aexpr "-o" oexpr ;
aexpr ::= nexpr | nexpr "-a" aexpr ;
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-audit" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?86n11vel1l.wl>
