introduce LONE_CHAR (optimized strcmp with one-char string)
This commit is contained in:
parent
6910741067
commit
bf66fbc8e2
@ -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);
|
||||
}
|
||||
|
||||
|
@ -189,7 +189,7 @@ static void lvm_probe_all(blkid_cache cache)
|
||||
struct dirent *lv_iter;
|
||||
|
||||
vg_name = vg_iter->d_name;
|
||||
if (!strcmp(vg_name, ".") || !strcmp(vg_name, ".."))
|
||||
if (LONE_CHAR(vg_name, '.') || !strcmp(vg_name, ".."))
|
||||
continue;
|
||||
vdirname = xmalloc(vg_len + strlen(vg_name) + 8);
|
||||
sprintf(vdirname, "%s/%s/LVs", VG_DIR, vg_name);
|
||||
@ -203,7 +203,7 @@ static void lvm_probe_all(blkid_cache cache)
|
||||
char *lv_name, *lvm_device;
|
||||
|
||||
lv_name = lv_iter->d_name;
|
||||
if (!strcmp(lv_name, ".") || !strcmp(lv_name, ".."))
|
||||
if (LONE_CHAR(lv_name, '.') || !strcmp(lv_name, ".."))
|
||||
continue;
|
||||
|
||||
lvm_device = xmalloc(vg_len + strlen(vg_name) +
|
||||
|
@ -157,9 +157,10 @@ skip_setflags:
|
||||
static int chattr_dir_proc(const char *dir_name, struct dirent *de,
|
||||
void *private EXT2FS_ATTR((unused)))
|
||||
{
|
||||
/*if (strcmp(de->d_name, ".") && strcmp(de->d_name, "..")) {*/
|
||||
if (de->d_name[0] == '.' && (de->d_name[1] == '\0' || \
|
||||
(de->d_name[1] == '.' && de->d_name[2] == '\0'))) {
|
||||
/*if (strcmp(de->d_name, ".") || strcmp(de->d_name, "..")) {*/
|
||||
if (de->d_name[0] == '.'
|
||||
&& (!de->d_name[1] || (de->d_name[1] == '.' && !de->d_name[2]))
|
||||
) {
|
||||
char *path = concat_subpath_file(dir_name, de->d_name);
|
||||
if (path) {
|
||||
change_attributes(path);
|
||||
|
@ -144,7 +144,7 @@ static errcode_t check_mntent_file(const char *mtab_file, const char *file,
|
||||
* read/write, since if the root is mounted read/only, the
|
||||
* contents of /etc/mtab may not be accurate.
|
||||
*/
|
||||
if (!strcmp(mnt->mnt_dir, "/")) {
|
||||
if (LONE_CHAR(mnt->mnt_dir, '/')) {
|
||||
is_root:
|
||||
#define TEST_FILE "/.ismount-test-file"
|
||||
*mount_flags |= EXT2_MF_ISROOT;
|
||||
|
@ -1080,7 +1080,7 @@ static int check_all(void)
|
||||
*/
|
||||
if (!parallel_root) {
|
||||
for (fs = filesys_info; fs; fs = fs->next) {
|
||||
if (!strcmp(fs->mountpt, "/"))
|
||||
if (LONE_CHAR(fs->mountpt, '/'))
|
||||
break;
|
||||
}
|
||||
if (fs) {
|
||||
@ -1099,7 +1099,7 @@ static int check_all(void)
|
||||
*/
|
||||
if (skip_root)
|
||||
for (fs = filesys_info; fs; fs = fs->next)
|
||||
if (!strcmp(fs->mountpt, "/"))
|
||||
if (LONE_CHAR(fs->mountpt, '/'))
|
||||
fs->flags |= FLAG_DONE;
|
||||
|
||||
while (not_done_yet) {
|
||||
|
@ -263,6 +263,8 @@ extern char *xasprintf(const char *format, ...) __attribute__ ((format (printf,
|
||||
//int NOT_LONE_DASH(const char *s) { return s[0] != '-' || s[1]; }
|
||||
#define LONE_DASH(s) ((s)[0] == '-' && !(s)[1])
|
||||
#define NOT_LONE_DASH(s) ((s)[0] != '-' || (s)[1])
|
||||
#define LONE_CHAR(s,c) ((s)[0] == (c) && !(s)[1])
|
||||
#define NOT_LONE_CHAR(s,c) ((s)[0] != (c) || (s)[1])
|
||||
|
||||
/* dmalloc will redefine these to it's own implementation. It is safe
|
||||
* to have the prototypes here unconditionally. */
|
||||
@ -386,7 +388,9 @@ extern void bb_vperror_msg(const char *s, va_list p);
|
||||
extern void bb_vinfo_msg(const char *s, va_list p);
|
||||
|
||||
|
||||
extern int bb_echo(int argc, char** argv);
|
||||
/* applets which are useful from another applets */
|
||||
extern int bb_cat(char** argv);
|
||||
extern int bb_echo(char** argv);
|
||||
extern int bb_test(int argc, char** argv);
|
||||
|
||||
#ifndef BUILD_INDIVIDUAL
|
||||
|
@ -1047,8 +1047,9 @@ int init_main(int argc, char **argv)
|
||||
}
|
||||
|
||||
/* Check if we are supposed to be in single user mode */
|
||||
if (argc > 1 && (!strcmp(argv[1], "single") ||
|
||||
!strcmp(argv[1], "-s") || !strcmp(argv[1], "1"))) {
|
||||
if (argc > 1
|
||||
&& (!strcmp(argv[1], "single") || !strcmp(argv[1], "-s") || LONE_CHAR(argv[1], '1'))
|
||||
) {
|
||||
/* Start a shell on console */
|
||||
new_init_action(RESPAWN, bb_default_login_shell, "");
|
||||
} else {
|
||||
|
@ -40,15 +40,14 @@ int correct_password(const struct passwd *pw)
|
||||
char *unencrypted, *encrypted, *correct;
|
||||
|
||||
#ifdef CONFIG_FEATURE_SHADOWPASSWDS
|
||||
if (!strcmp(pw->pw_passwd, "x") || !strcmp(pw->pw_passwd, "*")) {
|
||||
if (LONE_CHAR(pw->pw_passwd, 'x') || LONE_CHAR(pw->pw_passwd, '*')) {
|
||||
struct spwd *sp = getspnam(pw->pw_name);
|
||||
|
||||
if (!sp)
|
||||
bb_error_msg_and_die("no valid shadow password");
|
||||
|
||||
correct = sp->sp_pwdp;
|
||||
}
|
||||
else
|
||||
} else
|
||||
#endif
|
||||
correct = pw->pw_passwd;
|
||||
|
||||
|
@ -44,7 +44,7 @@ int last_main(int argc, char **argv)
|
||||
bb_perror_msg_and_die("short read");
|
||||
}
|
||||
|
||||
if (strncmp(ut.ut_line, "~", 1) == 0) {
|
||||
if (ut.ut_line[0] == '~') {
|
||||
if (strncmp(ut.ut_user, "shutdown", 8) == 0)
|
||||
ut.ut_type = SHUTDOWN_TIME;
|
||||
else if (strncmp(ut.ut_user, "reboot", 6) == 0)
|
||||
|
@ -759,7 +759,7 @@ static servtab_t *getconfigent(void)
|
||||
while (nsep != NULL) {
|
||||
nsep->se_checked = 1;
|
||||
if (nsep->se_family == AF_INET) {
|
||||
if (!strcmp(nsep->se_hostaddr, "*"))
|
||||
if (LONE_CHAR(nsep->se_hostaddr, '*'))
|
||||
nsep->se_ctrladdr_in.sin_addr.s_addr = INADDR_ANY;
|
||||
else if (!inet_aton(nsep->se_hostaddr, &nsep->se_ctrladdr_in.sin_addr)) {
|
||||
struct hostent *hp;
|
||||
|
@ -678,7 +678,7 @@ static int ipaddr_modify(int cmd, int argc, char **argv)
|
||||
if (brd_len) {
|
||||
duparg("broadcast", *argv);
|
||||
}
|
||||
if (strcmp(*argv, "+") == 0) {
|
||||
if (LONE_CHAR(*argv, '+')) {
|
||||
brd_len = -1;
|
||||
}
|
||||
else if (LONE_DASH(*argv)) {
|
||||
|
@ -8172,7 +8172,7 @@ exitcmd(int argc, char **argv)
|
||||
static int
|
||||
echocmd(int argc, char **argv)
|
||||
{
|
||||
return bb_echo(argc, argv);
|
||||
return bb_echo(argv);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user