Skip site navigation (1)Skip section navigation (2)
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>