introduce LONE_CHAR (optimized strcmp with one-char string)
This commit is contained in:
@@ -10,6 +10,7 @@ lib-y:=
|
||||
lib-$(CONFIG_BASENAME) += basename.o
|
||||
lib-$(CONFIG_CAL) += cal.o
|
||||
lib-$(CONFIG_CAT) += cat.o
|
||||
lib-$(CONFIG_LESS) += cat.o # less uses it if stdout isn't a tty
|
||||
lib-$(CONFIG_CATV) += catv.o
|
||||
lib-$(CONFIG_CHGRP) += chgrp.o chown.o
|
||||
lib-$(CONFIG_CHMOD) += chmod.o
|
||||
@@ -28,6 +29,7 @@ lib-$(CONFIG_DIRNAME) += dirname.o
|
||||
lib-$(CONFIG_DOS2UNIX) += dos2unix.o
|
||||
lib-$(CONFIG_DU) += du.o
|
||||
lib-$(CONFIG_ECHO) += echo.o
|
||||
lib-$(CONFIG_ASH) += echo.o # used by ash
|
||||
lib-$(CONFIG_ENV) += env.o
|
||||
lib-$(CONFIG_EXPR) += expr.o
|
||||
lib-$(CONFIG_FALSE) += false.o
|
||||
@@ -65,6 +67,7 @@ lib-$(CONFIG_SYNC) += sync.o
|
||||
lib-$(CONFIG_TAIL) += tail.o
|
||||
lib-$(CONFIG_TEE) += tee.o
|
||||
lib-$(CONFIG_TEST) += test.o
|
||||
lib-$(CONFIG_ASH) += test.o # used by ash
|
||||
lib-$(CONFIG_TOUCH) += touch.o
|
||||
lib-$(CONFIG_TR) += tr.o
|
||||
lib-$(CONFIG_TRUE) += true.o
|
||||
|
@@ -11,20 +11,12 @@
|
||||
/* http://www.opengroup.org/onlinepubs/007904975/utilities/cat.html */
|
||||
|
||||
#include "busybox.h"
|
||||
#include <unistd.h>
|
||||
|
||||
int cat_main(int argc, char **argv)
|
||||
int bb_cat(char **argv)
|
||||
{
|
||||
FILE *f;
|
||||
int retval = EXIT_SUCCESS;
|
||||
|
||||
getopt32(argc, argv, "u");
|
||||
|
||||
argv += optind;
|
||||
if (!*argv) {
|
||||
*--argv = "-";
|
||||
}
|
||||
|
||||
do {
|
||||
f = fopen_or_warn_stdin(*argv);
|
||||
if (f) {
|
||||
@@ -39,3 +31,15 @@ int cat_main(int argc, char **argv)
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
int cat_main(int argc, char **argv)
|
||||
{
|
||||
getopt32(argc, argv, "u");
|
||||
|
||||
argv += optind;
|
||||
if (!*argv) {
|
||||
*--argv = "-";
|
||||
}
|
||||
|
||||
return bb_cat(argv);
|
||||
}
|
||||
|
@@ -1079,7 +1079,7 @@ static char **get_dir(char *path)
|
||||
|
||||
dp = warn_opendir(path);
|
||||
while ((ep = readdir(dp))) {
|
||||
if ((!strcmp(ep->d_name, "..")) || (!strcmp(ep->d_name, ".")))
|
||||
if (!strcmp(ep->d_name, "..") || LONE_CHAR(ep->d_name, '.'))
|
||||
continue;
|
||||
add_to_dirlist(ep->d_name, NULL, NULL, 0);
|
||||
}
|
||||
|
@@ -29,7 +29,7 @@
|
||||
#include <stdlib.h>
|
||||
#include "busybox.h"
|
||||
|
||||
int bb_echo(int ATTRIBUTE_UNUSED argc, char **argv)
|
||||
int bb_echo(char **argv)
|
||||
{
|
||||
#ifndef CONFIG_FEATURE_FANCY_ECHO
|
||||
#define eflag '\\'
|
||||
@@ -114,7 +114,7 @@ just_echo:
|
||||
|
||||
int echo_main(int argc, char** argv)
|
||||
{
|
||||
(void)bb_echo(argc, argv);
|
||||
(void)bb_echo(argv);
|
||||
fflush_stdout_and_exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
|
@@ -136,7 +136,7 @@ static int null(VALUE * v)
|
||||
if (v->type == integer)
|
||||
return v->u.i == 0;
|
||||
else /* string: */
|
||||
return v->u.s[0] == '\0' || strcmp(v->u.s, "0") == 0;
|
||||
return v->u.s[0] == '\0' || LONE_CHAR(v->u.s, '0');
|
||||
}
|
||||
|
||||
/* Coerce V to a string value (can't fail). */
|
||||
|
@@ -175,14 +175,16 @@ int bb_test(int argc, char **argv)
|
||||
{
|
||||
int res;
|
||||
|
||||
if (strcmp(argv[0], "[") == 0) {
|
||||
if (strcmp(argv[--argc], "]")) {
|
||||
if (LONE_CHAR(argv[0], '[')) {
|
||||
--argc;
|
||||
if (NOT_LONE_CHAR(argv[argc], ']')) {
|
||||
bb_error_msg("missing ]");
|
||||
return 2;
|
||||
}
|
||||
argv[argc] = NULL;
|
||||
} else if (strcmp(argv[0], "[[") == 0) {
|
||||
if (strcmp(argv[--argc], "]]")) {
|
||||
--argc;
|
||||
if (strcmp(argv[argc], "]]")) {
|
||||
bb_error_msg("missing ]]");
|
||||
return 2;
|
||||
}
|
||||
@@ -578,6 +580,6 @@ static int is_a_group_member(gid_t gid)
|
||||
|
||||
int test_main(int argc, char **argv)
|
||||
{
|
||||
exit(bb_test(argc, argv));
|
||||
return bb_test(argc, argv);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user