← Commit list

a38965111

Rob Landley
Rob Landley
2006-05-07
SOURCE BUG Duration: 59s

Subject

Remove bb_strlen() in favor of -fno-builtin-strlen. Saves as many bytes as the old optimization did (actually does slightly better under gcc 4.0), and simplifies the code.

SOURCE BUG

This commit was genuinely broken at the time (not related to our build system): scripts/config/mkconfigs.c (2005-08-01 - 2006-10-05 arasi) uretilen bbconfigopts.h icine .config satirlarini kacissiz, ham newline'larla gömüyordu - gecerli C degildi, busybox'un kendi bb_mkdep araci bile parse edemiyordu (7d219aab7 ile duzeltildi, mkconfigs shell scripte cevrildi)

→ Bu hatanin tam hikayesini ve duzeltme diffini gor

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

Rules.mak+1 -0
@@ -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:=
archival/dpkg.c+1 -1
@@ -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++;
debianutils/which.c+2 -2
@@ -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) {
editors/awk.c+14 -14
@@ -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);
include/platform.h+0 -5
@@ -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 <byteswap.h>
libbb/Makefile.in+2 -2
@@ -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 $*)
libbb/correct_password.c+1 -1
@@ -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;
}
libbb/xfuncs.c+0 -9
@@ -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:
loginutils/login.c+1 -1
@@ -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;
}
modutils/modprobe.c+2 -2
@@ -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] )) {
networking/arping.c+1 -1
@@ -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);
}
networking/ifupdown.c+8 -8
@@ -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);
procps/sysctl.c+2 -2
@@ -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);
}
util-linux/hwclock.c+2 -2
@@ -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--;