diff --git a/Rules.mak b/Rules.mak index 95a6714bd..c3ae258c6 100644 --- 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:= diff --git a/archival/dpkg.c b/archival/dpkg.c index 74d3a83d9..3621db41d 100644 --- a/archival/dpkg.c +++ b/archival/dpkg.c @@ -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++; diff --git a/debianutils/which.c b/debianutils/which.c index 4d206ab29..f2991c561 100644 --- a/debianutils/which.c +++ b/debianutils/which.c @@ -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) { diff --git a/editors/awk.c b/editors/awk.c index e11c8350f..9c8bef53a 100644 --- a/editors/awk.c +++ b/editors/awk.c @@ -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; il) 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); diff --git a/include/platform.h b/include/platform.h index a8858a74c..257ddb260 100644 --- a/include/platform.h +++ b/include/platform.h @@ -67,11 +67,6 @@ # endif #endif -#ifdef __GNUC__ -#define strlen(x) bb_strlen(x) -extern size_t bb_strlen(const char *string); -#endif - /* ---- Endian Detection ------------------------------------ */ #ifndef __APPLE__ # include diff --git a/libbb/Makefile.in b/libbb/Makefile.in index 102047d73..865b7e726 100644 --- a/libbb/Makefile.in +++ b/libbb/Makefile.in @@ -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 $*) diff --git a/libbb/correct_password.c b/libbb/correct_password.c index bb9e7d3cc..527b3100b 100644 --- a/libbb/correct_password.c +++ b/libbb/correct_password.c @@ -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; } diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index f1f988f80..9b9081e26 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -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: diff --git a/loginutils/login.c b/loginutils/login.c index 277fc98ee..88123c0aa 100644 --- a/loginutils/login.c +++ b/loginutils/login.c @@ -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; } diff --git a/modutils/modprobe.c b/modutils/modprobe.c index 32a37ce17..2925dd28d 100644 --- a/modutils/modprobe.c +++ b/modutils/modprobe.c @@ -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] )) { diff --git a/networking/arping.c b/networking/arping.c index 721368273..303e49935 100644 --- a/networking/arping.c +++ b/networking/arping.c @@ -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); } diff --git a/networking/ifupdown.c b/networking/ifupdown.c index 3d7bd7e19..32b92fb62 100644 --- a/networking/ifupdown.c +++ b/networking/ifupdown.c @@ -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); diff --git a/procps/sysctl.c b/procps/sysctl.c index 850cbae67..125f13207 100644 --- a/procps/sysctl.c +++ b/procps/sysctl.c @@ -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); } diff --git a/util-linux/hwclock.c b/util-linux/hwclock.c index 5992d8420..2fe57b2fc 100644 --- a/util-linux/hwclock.c +++ b/util-linux/hwclock.c @@ -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--;