OSDN Git Service

Remove bb_strlen() in favor of -fno-builtin-strlen. Saves as many bytes
authorRob Landley <rob@landley.net>
Sun, 7 May 2006 20:20:34 +0000 (20:20 -0000)
committerRob Landley <rob@landley.net>
Sun, 7 May 2006 20:20:34 +0000 (20:20 -0000)
as the old optimization did (actually does slightly better under gcc 4.0), and
simplifies the code.

14 files changed:
Rules.mak
archival/dpkg.c
debianutils/which.c
editors/awk.c
include/platform.h
libbb/Makefile.in
libbb/correct_password.c
libbb/xfuncs.c
loginutils/login.c
modutils/modprobe.c
networking/arping.c
networking/ifupdown.c
procps/sysctl.c
util-linux/hwclock.c

index 95a6714..c3ae258 100644 (file)
--- a/Rules.mak
+++ b/Rules.mak
@@ -125,6 +125,7 @@ check_ld=$(shell \
 # Pin CHECKED_CFLAGS with := so it's only evaluated once.
 CHECKED_CFLAGS:=$(call check_gcc,-funsigned-char,)
 CHECKED_CFLAGS+=$(call check_gcc,-mmax-stack-frame=256,)
+CHECKED_CFLAGS+=$(call check_gcc,-fno-builtin-strlen)
 
 # Preemptively pin this too.
 PROG_CFLAGS:=
index 74d3a83..3621db4 100644 (file)
@@ -1573,7 +1573,7 @@ static void unpack_package(deb_file_t *deb_file)
        init_archive_deb_control(archive_handle);
 
        while(all_control_files[i]) {
-               char *c = (char *) xmalloc(3 + bb_strlen(all_control_files[i]));
+               char *c = (char *) xmalloc(3 + strlen(all_control_files[i]));
                sprintf(c, "./%s", all_control_files[i]);
                accept_list= llist_add_to(accept_list, c);
                i++;
index 4d206ab..f2991c5 100644 (file)
@@ -29,7 +29,7 @@ int which_main(int argc, char **argv)
 
        path_list = getenv("PATH");
        if (path_list != NULL) {
-               size_t path_len = bb_strlen(path_list);
+               size_t path_len = strlen(path_list);
                char *new_list = NULL;
                count = 1;
 
@@ -88,7 +88,7 @@ int which_main(int argc, char **argv)
                                        break;
                                }
                                free(buf);
-                               path_n += (bb_strlen(path_n) + 1);
+                               path_n += (strlen(path_n) + 1);
                        }
                }
                if (found) {
index e11c835..9c8bef5 100644 (file)
@@ -534,7 +534,7 @@ static void *hash_find(xhash *hash, const char *name)
                if (++hash->nel / hash->csize > 10)
                        hash_rebuild(hash);
 
-               l = bb_strlen(name) + 1;
+               l = strlen(name) + 1;
                hi = xcalloc(sizeof(hash_item) + l, 1);
                memcpy(hi->name, name, l);
 
@@ -559,7 +559,7 @@ static void hash_remove(xhash *hash, const char *name)
        while (*phi) {
                hi = *phi;
                if (strcmp(hi->name, name) == 0) {
-                       hash->glen -= (bb_strlen(name) + 1);
+                       hash->glen -= (strlen(name) + 1);
                        hash->nel--;
                        *phi = hi->next;
                        free(hi);
@@ -1364,7 +1364,7 @@ static node *mk_splitter(char *s, tsplitter *spl)
                regfree(re);
                regfree(ire);
        }
-       if (bb_strlen(s) > 1) {
+       if (strlen(s) > 1) {
                mk_re_node(s, n, re);
        } else {
                n->info = (uint32_t) *s;
@@ -1432,7 +1432,7 @@ static int awk_split(char *s, node *spl, char **slist)
        regmatch_t pmatch[2];
 
        /* in worst case, each char would be a separate field */
-       *slist = s1 = bb_xstrndup(s, bb_strlen(s) * 2 + 3);
+       *slist = s1 = bb_xstrndup(s, strlen(s) * 2 + 3);
 
        c[0] = c[1] = (char)spl->info;
        c[2] = c[3] = '\0';
@@ -1527,12 +1527,12 @@ static void handle_special(var *v)
 
                /* recalculate $0 */
                sep = getvar_s(V[OFS]);
-               sl = bb_strlen(sep);
+               sl = strlen(sep);
                b = NULL;
                len = 0;
                for (i=0; i<n; i++) {
                        s = getvar_s(&Fields[i]);
-                       l = bb_strlen(s);
+                       l = strlen(s);
                        if (b) {
                                memcpy(b+len, sep, sl);
                                len += sl;
@@ -1769,7 +1769,7 @@ static char *awk_printf(node *n)
 
                } else if (c == 's') {
                    s1 = getvar_s(arg);
-                       qrealloc(&b, incr+i+bb_strlen(s1), &bsize);
+                       qrealloc(&b, incr+i+strlen(s1), &bsize);
                        i += sprintf(b+i, s, s1);
 
                } else {
@@ -1809,7 +1809,7 @@ static int awk_sub(node *rn, char *repl, int nm, var *src, var *dest, int ex)
 
        i = di = 0;
        sp = getvar_s(src);
-       rl = bb_strlen(repl);
+       rl = strlen(repl);
        while (regexec(re, sp, 10, pmatch, sp==getvar_s(src) ? 0:REG_NOTBOL) == 0) {
                so = pmatch[0].rm_so;
                eo = pmatch[0].rm_eo;
@@ -1922,7 +1922,7 @@ static var *exec_builtin(node *op, var *res)
                break;
 
          case B_ss:
-               l = bb_strlen(as[0]);
+               l = strlen(as[0]);
                i = getvar_i(av[1]) - 1;
                if (i>l) i=l; if (i<0) i=0;
                n = (nargs > 2) ? getvar_i(av[2]) : l-i;
@@ -1950,8 +1950,8 @@ lo_cont:
 
          case B_ix:
                n = 0;
-               ll = bb_strlen(as[1]);
-               l = bb_strlen(as[0]) - ll;
+               ll = strlen(as[1]);
+               l = strlen(as[0]) - ll;
                if (ll > 0 && l >= 0) {
                        if (! icase) {
                                s = strstr(as[0], as[1]);
@@ -2353,7 +2353,7 @@ re_cont:
                          case F_le:
                                if (! op1)
                                        L.s = getvar_s(V[F0]);
-                               R.d = bb_strlen(L.s);
+                               R.d = strlen(L.s);
                                break;
 
                          case F_sy:
@@ -2441,12 +2441,12 @@ re_cont:
                  /* concatenation (" ") and index joining (",") */
                  case XC( OC_CONCAT ):
                  case XC( OC_COMMA ):
-                       opn = bb_strlen(L.s) + bb_strlen(R.s) + 2;
+                       opn = strlen(L.s) + strlen(R.s) + 2;
                        X.s = (char *)xmalloc(opn);
                        strcpy(X.s, L.s);
                        if ((opinfo & OPCLSMASK) == OC_COMMA) {
                                L.s = getvar_s(V[SUBSEP]);
-                               X.s = (char *)xrealloc(X.s, opn + bb_strlen(L.s));
+                               X.s = (char *)xrealloc(X.s, opn + strlen(L.s));
                                strcat(X.s, L.s);
                        }
                        strcat(X.s, R.s);
index a8858a7..257ddb2 100644 (file)
 # endif
 #endif
 
-#ifdef __GNUC__
-#define strlen(x) bb_strlen(x)
-extern size_t bb_strlen(const char *string);
-#endif
-
 /* ---- Endian Detection ------------------------------------ */
 #ifndef __APPLE__
 # include <byteswap.h>
index 102047d..865b7e7 100644 (file)
@@ -69,7 +69,7 @@ $(LIBBB_MOBJ0):$(LIBBB_MSRC0)
 LIBBB_MSRC1:=$(srcdir)/xfuncs.c
 LIBBB_MOBJ1:=xmalloc.o xrealloc.o xcalloc.o xstrdup.o xstrndup.o \
        xfopen.o xopen.o xopen3.o xread.o xread_all.o xread_char.o \
-       xferror.o xferror_stdout.o xfflush_stdout.o strlen.o
+       xferror.o xferror_stdout.o xfflush_stdout.o
 LIBBB_MOBJ1:=$(patsubst %,$(LIBBB_DIR)/%, $(LIBBB_MOBJ1))
 $(LIBBB_MOBJ1):$(LIBBB_MSRC1)
        $(compile.c) -DL_$(notdir $*)
@@ -101,7 +101,7 @@ $(LIBBB_MOBJ5):$(LIBBB_MSRC5)
        $(compile.c) -DL_$(notdir $*)
 
 LIBBB_MSRC6:=$(srcdir)/llist.c
-LIBBB_MOBJ6:=llist_add_to.o llist_add_to_end.o llist_free_one.o llist_free.o
+LIBBB_MOBJ6:=llist_add_to.o llist_add_to_end.o llist_pop.o llist_free.o
 LIBBB_MOBJ6:=$(patsubst %,$(LIBBB_DIR)/%, $(LIBBB_MOBJ6))
 $(LIBBB_MOBJ6):$(LIBBB_MSRC6)
        $(compile.c) -DL_$(notdir $*)
index bb9e7d3..527b310 100644 (file)
@@ -72,6 +72,6 @@ int correct_password ( const struct passwd *pw )
                return 0;
        }
        encrypted = crypt ( unencrypted, correct );
-       memset ( unencrypted, 0, bb_strlen ( unencrypted ));
+       memset ( unencrypted, 0, strlen ( unencrypted ));
        return ( strcmp ( encrypted, correct ) == 0 ) ? 1 : 0;
 }
index f1f988f..9b9081e 100644 (file)
@@ -174,15 +174,6 @@ void bb_xfflush_stdout(void)
 }
 #endif
 
-// GCC forces inlining of strlen everywhere, which is generally a byte
-// larger than calling a function, and it's called a lot so it adds up.
-#ifdef L_strlen
-size_t bb_strlen(const char *string)
-{
-           return(__builtin_strlen(string));
-}
-#endif
-
 /* END CODE */
 /*
 Local Variables:
index 277fc98..88123c0 100644 (file)
@@ -338,7 +338,7 @@ static int check_tty ( const char *tty )
 
        if (( fp = fopen ( bb_path_securetty_file, "r" ))) {
                while ( fgets ( buf, sizeof( buf ) - 1, fp )) {
-                       for ( i = bb_strlen( buf ) - 1; i >= 0; --i ) {
+                       for ( i = strlen( buf ) - 1; i >= 0; --i ) {
                                if ( !isspace ( buf[i] ))
                                        break;
                        }
index 32a37ce..2925dd2 100644 (file)
@@ -283,7 +283,7 @@ static void include_conf ( struct dep_t **first, struct dep_t **current, char *b
                if ( p )
                        *p = 0;
 
-               l = bb_strlen ( buffer );
+               l = strlen ( buffer );
 
                while ( l && isspace ( buffer [l-1] )) {
                        buffer [l-1] = 0;
@@ -399,7 +399,7 @@ static struct dep_t *build_dep ( void )
        free(filename);
 
        while ( reads ( fd, buffer, sizeof( buffer ))) {
-               int l = bb_strlen ( buffer );
+               int l = strlen ( buffer );
                char *p = 0;
 
                while ( l > 0 && isspace ( buffer [l-1] )) {
index 7213682..303e499 100644 (file)
@@ -293,7 +293,7 @@ int arping_main(int argc, char **argv)
                if (opt & 128) /* timeout */
                        timeout = atoi(_timeout);
                if (opt & 256) { /* interface */
-                       if (bb_strlen(_device) > IF_NAMESIZE) {
+                       if (strlen(_device) > IF_NAMESIZE) {
                                bb_error_msg_and_die("Interface name `%s' must be less than %d",
                                                                _device, IF_NAMESIZE);
                        }
index 3d7bd7e..32b92fb 100644 (file)
@@ -256,7 +256,7 @@ static char *parse(char *command, struct interface_defn_t *ifd)
                                        varvalue = get_var(command, nextpercent - command, ifd);
 
                                        if (varvalue) {
-                                               addstr(&result, &len, &pos, varvalue, bb_strlen(varvalue));
+                                               addstr(&result, &len, &pos, varvalue, strlen(varvalue));
                                        } else {
 #ifdef CONFIG_FEATURE_IFUPDOWN_IP
                                                /* Sigh...  Add a special case for 'ip' to convert from
@@ -267,7 +267,7 @@ static char *parse(char *command, struct interface_defn_t *ifd)
                                                        if (varvalue && (res=count_netmask_bits(varvalue)) > 0) {
                                                                char argument[255];
                                                                sprintf(argument, "%d", res);
-                                                               addstr(&result, &len, &pos, argument, bb_strlen(argument));
+                                                               addstr(&result, &len, &pos, argument, strlen(argument));
                                                                command = nextpercent + 1;
                                                                break;
                                                        }
@@ -763,7 +763,7 @@ static struct interfaces_file_t *read_interfaces(const char *filename)
                                        {
                                                int i;
 
-                                               if (bb_strlen(buf_ptr) == 0) {
+                                               if (strlen(buf_ptr) == 0) {
                                                        bb_error_msg("option with empty value \"%s\"", buf);
                                                        return NULL;
                                                }
@@ -845,7 +845,7 @@ static char *setlocalenv(char *format, const char *name, const char *value)
        char *here;
        char *there;
 
-       result = xmalloc(bb_strlen(format) + bb_strlen(name) + bb_strlen(value) + 1);
+       result = xmalloc(strlen(format) + strlen(name) + strlen(value) + 1);
 
        sprintf(result, format, name, value);
 
@@ -860,7 +860,7 @@ static char *setlocalenv(char *format, const char *name, const char *value)
                        here++;
                }
        }
-       memmove(here, there, bb_strlen(there) + 1);
+       memmove(here, there, strlen(there) + 1);
 
        return result;
 }
@@ -1061,7 +1061,7 @@ static char *run_mapping(char *physical, struct mapping_defn_t * map)
                        /* If we are able to read a line of output from the script,
                         * remove any trailing whitespace and use this value
                         * as the name of the logical interface. */
-                       char *pch = new_logical + bb_strlen(new_logical) - 1;
+                       char *pch = new_logical + strlen(new_logical) - 1;
 
                        while (pch >= new_logical && isspace(*pch))
                                *(pch--) = '\0';
@@ -1083,7 +1083,7 @@ static char *run_mapping(char *physical, struct mapping_defn_t * map)
 
 static llist_t *find_iface_state(llist_t *state_list, const char *iface)
 {
-       unsigned short iface_len = bb_strlen(iface);
+       unsigned short iface_len = strlen(iface);
        llist_t *search = state_list;
 
        while (search) {
@@ -1308,7 +1308,7 @@ int ifupdown_main(int argc, char **argv)
                        llist_t *iface_state = find_iface_state(state_list, iface);
 
                        if (cmds == iface_up) {
-                               char *newiface = xmalloc(bb_strlen(iface) + 1 + bb_strlen(liface) + 1);
+                               char *newiface = xmalloc(strlen(iface) + 1 + strlen(liface) + 1);
                                sprintf(newiface, "%s=%s", iface, liface);
                                if (iface_state == NULL) {
                                        state_list = llist_add_to_end(state_list, newiface);
index 850cbae..125f132 100644 (file)
@@ -146,7 +146,7 @@ int sysctl_preload_file(const char *filename, int output)
                if (*ptr == '#' || *ptr == ';')
                        continue;
 
-               if (bb_strlen(ptr) < 2)
+               if (strlen(ptr) < 2)
                        continue;
 
                name = strtok(ptr, "=");
@@ -323,7 +323,7 @@ int sysctl_display_all(const char *path, int output, int show_table)
                                        sysctl_display_all(tmpdir, output, show_table);
                                } else
                                        retval |=
-                                               sysctl_read_setting(tmpdir + bb_strlen(PROC_PATH),
+                                               sysctl_read_setting(tmpdir + strlen(PROC_PATH),
                                                                                        output);
 
                        }
index 5992d84..2fe57b2 100644 (file)
@@ -109,7 +109,7 @@ static int show_clock(int utc)
 
        safe_strncpy ( buffer, ctime ( &t ), 64);
        if ( buffer [0] )
-               buffer [bb_strlen ( buffer ) - 1] = 0;
+               buffer [strlen ( buffer ) - 1] = 0;
 
        //printf ( "%s  %.6f seconds %s\n", buffer, 0.0, utc ? "" : ( ptm-> tm_isdst ? tzname [1] : tzname [0] ));
        printf ( "%s  %.6f seconds\n", buffer, 0.0 );
@@ -157,7 +157,7 @@ static int check_utc(void)
                RESERVE_CONFIG_BUFFER(buffer, 128);
 
                while ( fgets ( buffer, sizeof( buffer ), f )) {
-                       int len = bb_strlen ( buffer );
+                       int len = strlen ( buffer );
 
                        while ( len && isspace ( buffer [len - 1] ))
                                len--;