summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorknu <knu@FreeBSD.org>2001-11-17 19:10:11 +0000
committerknu <knu@FreeBSD.org>2001-11-17 19:10:11 +0000
commitb58a3e40782ae0e677cf9298f2c46d94b75d464b (patch)
tree012bf9627bbece65cbf708b3fac1e45edf9656dc /bin
parent271e61648420b256374ae031ae2d70a0c59672ba (diff)
downloadFreeBSD-src-b58a3e40782ae0e677cf9298f2c46d94b75d464b.zip
FreeBSD-src-b58a3e40782ae0e677cf9298f2c46d94b75d464b.tar.gz
Make test(1) a builtin command of our sh(1) for efficiency. The
binary size increase is 3,784 bytes (about 0.6%). I don't drop the printf builtin while I'm here because some /etc/rc.* scripts seem to use it before mounting /usr where printf(1) resides. Reviewed by: arch (sheldonh) Inspired by: NetBSD, ksh Clued by: ume (on how the printf builtin is used)
Diffstat (limited to 'bin')
-rw-r--r--bin/sh/Makefile6
-rw-r--r--bin/sh/builtins.def3
-rw-r--r--bin/sh/sh.17
-rw-r--r--bin/test/test.18
-rw-r--r--bin/test/test.c5
5 files changed, 24 insertions, 5 deletions
diff --git a/bin/sh/Makefile b/bin/sh/Makefile
index 01c46f5..14e07ea 100644
--- a/bin/sh/Makefile
+++ b/bin/sh/Makefile
@@ -5,7 +5,7 @@ PROG= sh
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 @@ CFLAGS+=-DSHELL -I. -I${.CURDIR}
# 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
diff --git a/bin/sh/builtins.def b/bin/sh/builtins.def
index 7cdcc38..bd4c1df 100644
--- a/bin/sh/builtins.def
+++ b/bin/sh/builtins.def
@@ -62,7 +62,7 @@ execcmd exec
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 @@ waitcmd wait
#foocmd foo
aliascmd alias
ulimitcmd ulimit
+testcmd test [
diff --git a/bin/sh/sh.1 b/bin/sh/sh.1
index 2a11e4d..fe2f3e3 100644
--- a/bin/sh/sh.1
+++ b/bin/sh/sh.1
@@ -1273,9 +1273,12 @@ make it the first or last character listed.
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
+command are provided for efficiency.
.Bl -tag -width Ds
.It Ic \&:
A null command that returns a 0 (true) exit value.
diff --git a/bin/test/test.1 b/bin/test/test.1
index 8a996cd..7b8a84f 100644
--- a/bin/test/test.1
+++ b/bin/test/test.1
@@ -286,6 +286,13 @@ The
operator has higher precedence than the
.Fl o
operator.
+.Pp
+Some shells may provide a builtin
+.Nm
+command which is similar or identical to this utility.
+Consult the
+.Xr builtin 1
+manual page.
.Sh GRAMMAR AMBIGUITY
The
.Nm
@@ -310,6 +317,7 @@ missing.
An error occurred.
.El
.Sh SEE ALSO
+.Xr builtin 1 ,
.Xr expr 1 ,
.Xr sh 1
.Sh STANDARDS
diff --git a/bin/test/test.c b/bin/test/test.c
index 1d96297..1cd9a11 100644
--- a/bin/test/test.c
+++ b/bin/test/test.c
@@ -27,6 +27,11 @@ static const char rcsid[] =
#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 ;
OpenPOWER on IntegriCloud