From 8274e06677ba55532a4e1488b659f0b1e743130e Mon Sep 17 00:00:00 2001 From: Denis Vlasenko Date: Mon, 6 Aug 2007 03:41:08 +0000 Subject: [PATCH] sed: fix 'q' command handling ("Nguyen Thai Ngoc Duy" ) add testsuite entry for it. Fix applet order checker. Fix cmp yelling. trylink: fix error file and map file generation applets: fix applet order --- editors/sed.c | 11 +++++++++-- include/applets.h | 2 +- scripts/trylink | 13 ++++++++----- testsuite/all_sourcecode.tests | 2 +- testsuite/testing.sh | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/editors/sed.c b/editors/sed.c index d0c2ca742..4647079aa 100644 --- a/editors/sed.c +++ b/editors/sed.c @@ -836,6 +836,14 @@ static void puts_maybe_newline(char *s, FILE *file, char *last_puts_char, char l #define sed_puts(s, n) (puts_maybe_newline(s, G.nonstdout, &last_puts_char, n)) +static int beg_match(sed_cmd_t *sed_cmd, const char *pattern_space) +{ + int retval = sed_cmd->beg_match && !regexec(sed_cmd->beg_match, pattern_space, 0, NULL, 0); + if (retval) + G.previous_regex_ptr = sed_cmd->beg_match; + return retval; +} + /* Process all the lines in all the files */ static void process_files(void) @@ -880,8 +888,7 @@ restart: /* Or did we match the start of a numerical range? */ || (sed_cmd->beg_line > 0 && (sed_cmd->beg_line == linenum)) /* Or does this line match our begin address regex? */ - || (sed_cmd->beg_match && - !regexec(sed_cmd->beg_match, pattern_space, 0, NULL, 0)) + || (beg_match(sed_cmd, pattern_space)) /* Or did we match last line of input? */ || (sed_cmd->beg_line == -1 && next_line == NULL); diff --git a/include/applets.h b/include/applets.h index 7eefa0843..b5b9fc884 100644 --- a/include/applets.h +++ b/include/applets.h @@ -217,8 +217,8 @@ USE_LS(APPLET_NOEXEC(ls, ls, _BB_DIR_BIN, _BB_SUID_NEVER, ls)) USE_LSATTR(APPLET(lsattr, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_LSMOD(APPLET(lsmod, _BB_DIR_SBIN, _BB_SUID_NEVER)) USE_UNLZMA(APPLET_ODDNAME(lzmacat, unlzma, _BB_DIR_USR_BIN, _BB_SUID_NEVER, lzmacat)) -USE_MATCHPATHCON(APPLET(matchpathcon, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) USE_MAKEDEVS(APPLET(makedevs, _BB_DIR_SBIN, _BB_SUID_NEVER)) +USE_MATCHPATHCON(APPLET(matchpathcon, _BB_DIR_USR_SBIN, _BB_SUID_NEVER)) USE_MD5SUM(APPLET_ODDNAME(md5sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_NEVER, md5sum)) USE_MDEV(APPLET(mdev, _BB_DIR_SBIN, _BB_SUID_NEVER)) USE_MESG(APPLET(mesg, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) diff --git a/scripts/trylink b/scripts/trylink index bfc67bf5d..b8bf8b1c7 100755 --- a/scripts/trylink +++ b/scripts/trylink @@ -25,8 +25,9 @@ try "-Wl,--start-group $l_list -Wl,--end-group" "$@" \ # Hack: we are not supposed to know executable name, # but this hack cuts down link time mv busybox_unstripped busybox_unstripped.tmp +mv busybox.map busybox.map.tmp -# Now try to remove each lib and build without. +# Now try to remove each lib and build without it. # Stop when no lib can be removed. ever_discarded=false while test "$BBOX_LIB_LIST"; do @@ -47,17 +48,19 @@ while test "$BBOX_LIB_LIST"; do done # All libs were needed, can't remove any $all_needed && break - # If there is no space, the list has just one lib. + # If there is no space char, the list has just one lib. # I'm not sure that in this case lib really is 100% needed. # Let's try linking without it anyway... thus commented out. - #echo "$BBOX_LIB_LIST" | grep -q ' ' || break + #{ echo "$BBOX_LIB_LIST" | grep -q ' '; } || break done mv busybox_unstripped.tmp busybox_unstripped +mv busybox.map.tmp busybox.map $ever_discarded && { - # Ok, make the binary + # Make the binary with final, minimal list of libs echo "Final link with: $BBOX_LIB_LIST" l_list=`echo "$BBOX_LIB_LIST" | sed -e 's/ / -l/g' -e 's/^/-l/'` - try "-Wl,--start-group $l_list -Wl,--end-group" "$@" + try "-Wl,--start-group $l_list -Wl,--end-group" "$@" && exit 1 } +rm busybox_ld.err exit 0 # Ensure "success" exit code diff --git a/testsuite/all_sourcecode.tests b/testsuite/all_sourcecode.tests index c115878fe..a537dcee9 100755 --- a/testsuite/all_sourcecode.tests +++ b/testsuite/all_sourcecode.tests @@ -19,7 +19,7 @@ # verify the applet order is correct in applets.h, otherwise # applets won't be called properly. # -sed -n -e '/^USE_[A-Z]*(APPLET(/{s:.*(::;s:,.*::;s:"::g;p}' \ +sed -n -e '/^USE_[A-Z]*(APPLET/{s:,.*::;s:.*(::;s:"::g;p}' \ $srcdir/../include/applets.h > applet.order.current LC_ALL=C sort applet.order.current > applet.order.correct testing "Applet order" "diff -u applet.order.current applet.order.correct" "" "" "" diff --git a/testsuite/testing.sh b/testsuite/testing.sh index 01fdfbeca..a886a76eb 100755 --- a/testsuite/testing.sh +++ b/testsuite/testing.sh @@ -76,7 +76,7 @@ testing() echo -ne "$5" | eval "$2" > actual RETVAL=$? - cmp expected actual > /dev/null + cmp expected actual >/dev/null 2>/dev/null if [ $? -ne 0 ] then FAILCOUNT=$[$FAILCOUNT+1]