aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
authorpgf <pgf@69ca8d6d-28ef-0310-b511-8ec308f3f277>2006-06-08 21:37:26 +0000
committerpgf <pgf@69ca8d6d-28ef-0310-b511-8ec308f3f277>2006-06-08 21:37:26 +0000
commitdc3b7958d75c261b988db308963da8e85792ace7 (patch)
tree5f109ab555b2e3ca7df717cd7590058ab12d54c1 /libbb
parent0b623f284cee0ef504cda61a8c8338c2acdb0082 (diff)
downloadbusybox-w32-dc3b7958d75c261b988db308963da8e85792ace7.tar.gz
busybox-w32-dc3b7958d75c261b988db308963da8e85792ace7.tar.bz2
busybox-w32-dc3b7958d75c261b988db308963da8e85792ace7.zip
made "test" an ash built-in.
moved the contents of libbb/bb_echo.c back into coreutils/echo.c, which is a more reasonable place for them than libbb. this forces anyone who wants echo and test to be builtin to ash to also have them available as applets. their cost is very small, and the number of people who wouldn't want them as applets is also very small. added warning about shell builtins vs. CONFIG_FEATURE_SH_STANDALONE_SHELL, which conflicts with their use. thanks to nathanael copa for debugging help. some string size optimization in test.c may have been lost with this commit, but this is a good new baseline. git-svn-id: svn://busybox.net/trunk/busybox@15344 69ca8d6d-28ef-0310-b511-8ec308f3f277
Diffstat (limited to 'libbb')
-rw-r--r--libbb/Makefile.in2
-rw-r--r--libbb/bb_echo.c151
2 files changed, 1 insertions, 152 deletions
diff --git a/libbb/Makefile.in b/libbb/Makefile.in
index f05b8ec16..0324ec041 100644
--- a/libbb/Makefile.in
+++ b/libbb/Makefile.in
@@ -35,7 +35,7 @@ LIBBB-y:= \
35 getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \ 35 getopt_ulflags.c default_error_retval.c wfopen_input.c speed_table.c \
36 perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \ 36 perror_nomsg_and_die.c perror_nomsg.c skip_whitespace.c bb_askpass.c \
37 warn_ignoring_args.c concat_subpath_file.c vfork_daemon_rexec.c \ 37 warn_ignoring_args.c concat_subpath_file.c vfork_daemon_rexec.c \
38 bb_echo.c bb_do_delay.c 38 bb_do_delay.c
39 39
40# conditionally compiled objects: 40# conditionally compiled objects:
41LIBBB-$(CONFIG_FEATURE_SHADOWPASSWDS)+=pwd2spwd.c 41LIBBB-$(CONFIG_FEATURE_SHADOWPASSWDS)+=pwd2spwd.c
diff --git a/libbb/bb_echo.c b/libbb/bb_echo.c
deleted file mode 100644
index 0c5a94766..000000000
--- a/libbb/bb_echo.c
+++ /dev/null
@@ -1,151 +0,0 @@
1/* vi: set sw=4 ts=4: */
2/*
3 * echo implementation for busybox
4 *
5 * Copyright (c) 1991, 1993
6 * The Regents of the University of California. All rights reserved.
7 *
8 * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
9 *
10 * Original copyright notice is retained at the end of this file.
11 */
12
13/* BB_AUDIT SUSv3 compliant -- unless configured as fancy echo. */
14/* http://www.opengroup.org/onlinepubs/007904975/utilities/echo.html */
15
16/* Mar 16, 2003 Manuel Novoa III (mjn3@codepoet.org)
17 *
18 * Because of behavioral differences, implemented configurable SUSv3
19 * or 'fancy' gnu-ish behaviors. Also, reduced size and fixed bugs.
20 * 1) In handling '\c' escape, the previous version only suppressed the
21 * trailing newline. SUSv3 specifies _no_ output after '\c'.
22 * 2) SUSv3 specifies that octal escapes are of the form \0{#{#{#}}}.
23 * The previous version version did not allow 4-digit octals.
24 */
25
26
27#include <stdio.h>
28#include <string.h>
29#include "libbb.h"
30
31int bb_echo(int ATTRIBUTE_UNUSED argc, char **argv)
32{
33#ifndef CONFIG_FEATURE_FANCY_ECHO
34#define eflag '\\'
35 ++argv;
36#else
37 const char *p;
38 int nflag = 1;
39 int eflag = 0;
40
41 while (*++argv && (**argv == '-')) {
42 /* If it appears that we are handling options, then make sure
43 * that all of the options specified are actually valid.
44 * Otherwise, the string should just be echoed.
45 */
46
47 if (!*(p = *argv + 1)) { /* A single '-', so echo it. */
48 goto just_echo;
49 }
50
51 do {
52 if (strrchr("neE", *p) == 0) {
53 goto just_echo;
54 }
55 } while (*++p);
56
57 /* All of the options in this arg are valid, so handle them. */
58 p = *argv + 1;
59 do {
60 if (*p == 'n') {
61 nflag = 0;
62 } else if (*p == 'e') {
63 eflag = '\\';
64 } else {
65 eflag = 0;
66 }
67 } while (*++p);
68 }
69
70just_echo:
71#endif
72 while (*argv) {
73 register int c;
74
75 while ((c = *(*argv)++)) {
76 if (c == eflag) { /* Check for escape seq. */
77 if (**argv == 'c') {
78 /* '\c' means cancel newline and
79 * ignore all subsequent chars. */
80 return 0;
81 }
82#ifndef CONFIG_FEATURE_FANCY_ECHO
83 /* SUSv3 specifies that octal escapes must begin with '0'. */
84 if (((unsigned int)(**argv - '1')) >= 7)
85#endif
86 {
87 /* Since SUSv3 mandates a first digit of 0, 4-digit octals
88 * of the form \0### are accepted. */
89 if ((**argv == '0') && (((unsigned int)(argv[0][1] - '0')) < 8)) {
90 (*argv)++;
91 }
92 /* bb_process_escape_sequence can handle nul correctly */
93 c = bb_process_escape_sequence((const char **) argv);
94 }
95 }
96 putchar(c);
97 }
98
99 if (*++argv) {
100 putchar(' ');
101 }
102 }
103
104#ifdef CONFIG_FEATURE_FANCY_ECHO
105 if (nflag) {
106 putchar('\n');
107 }
108#else
109 putchar('\n');
110#endif
111 return 0;
112}
113
114/*-
115 * Copyright (c) 1991, 1993
116 * The Regents of the University of California. All rights reserved.
117 *
118 * This code is derived from software contributed to Berkeley by
119 * Kenneth Almquist.
120 *
121 * Redistribution and use in source and binary forms, with or without
122 * modification, are permitted provided that the following conditions
123 * are met:
124 * 1. Redistributions of source code must retain the above copyright
125 * notice, this list of conditions and the following disclaimer.
126 * 2. Redistributions in binary form must reproduce the above copyright
127 * notice, this list of conditions and the following disclaimer in the
128 * documentation and/or other materials provided with the distribution.
129 *
130 * 3. <BSD Advertising Clause omitted per the July 22, 1999 licensing change
131 * ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change>
132 *
133 * California, Berkeley and its contributors.
134 * 4. Neither the name of the University nor the names of its contributors
135 * may be used to endorse or promote products derived from this software
136 * without specific prior written permission.
137 *
138 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
139 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
140 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
141 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
142 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
143 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
144 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
145 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
146 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
147 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
148 * SUCH DAMAGE.
149 *
150 * @(#)echo.c 8.1 (Berkeley) 5/31/93
151 */