apply post-1.15.2 fixes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2009-12-12 22:17:44 +01:00
parent 8cbc300d08
commit 3e97eeb408
13 changed files with 529 additions and 428 deletions

View File

@ -358,6 +358,15 @@ scripts_basic:
# To avoid any implicit rule to kick in, define an empty command.
scripts/basic/%: scripts_basic ;
# bbox: we have helpers in applets/
# we depend on scripts_basic, since scripts/basic/fixdep
# must be built before any other host prog
PHONY += applets_dir
applets_dir: scripts_basic
$(Q)$(MAKE) $(build)=applets
applets/%: applets_dir ;
PHONY += outputmakefile
# outputmakefile generates a Makefile in the output directory, if using a
# separate output directory. This allows convenient use of make in the
@ -797,7 +806,7 @@ ifneq ($(KBUILD_MODULES),)
$(Q)rm -f $(MODVERDIR)/*
endif
archprepare: prepare1 scripts_basic
archprepare: prepare1 scripts_basic applets_dir
prepare0: archprepare FORCE
$(Q)$(MAKE) $(build)=.

View File

@ -79,9 +79,13 @@ int split_main(int argc UNUSED_PARAM, char **argv)
argv += optind;
if (argv[0]) {
int fd;
if (argv[1])
sfx = argv[1];
xmove_fd(xopen(argv[0], O_RDONLY), 0);
fd = open_or_warn_stdin(argv[0]);
if (fd == -1)
return EXIT_FAILURE;
xmove_fd(fd, STDIN_FILENO);
} else {
argv[0] = (char *) bb_msg_standard_input;
}

View File

@ -2393,12 +2393,14 @@ static var *evaluate(node *op, var *res)
case XC( OC_MOVE ):
/* if source is a temporary string, jusk relink it to dest */
if (R.v == v1+1 && R.v->string) {
res = setvar_p(L.v, R.v->string);
R.v->string = NULL;
} else {
//Disabled: if R.v is numeric but happens to have cached R.v->string,
//then L.v ends up being a string, which is wrong
// if (R.v == v1+1 && R.v->string) {
// res = setvar_p(L.v, R.v->string);
// R.v->string = NULL;
// } else {
res = copyvar(L.v, R.v);
}
// }
break;
case XC( OC_TERNARY ):

View File

@ -377,6 +377,8 @@ static int grep_file(FILE *file)
print_line(line + gl->matched_range.rm_so,
end - gl->matched_range.rm_so,
linenum, ':');
if (old == '\0')
break;
line[end] = old;
#if !ENABLE_EXTRA_COMPAT
if (regexec(&gl->compiled_regex, line + end,

View File

@ -174,12 +174,14 @@ char *strchrnul(const char *s, int c);
* a lvalue. This makes it more likely to not swap them by mistake
*/
#if defined(i386) || defined(__x86_64__)
# define move_from_unaligned_int(v, intp) ((v) = *(int*)(intp))
# define move_from_unaligned16(v, u16p) ((v) = *(uint16_t*)(u16p))
# define move_from_unaligned32(v, u32p) ((v) = *(uint32_t*)(u32p))
# define move_to_unaligned32(u32p, v) (*(uint32_t*)(u32p) = (v))
/* #elif ... - add your favorite arch today! */
#else
/* performs reasonably well (gcc usually inlines memcpy here) */
# define move_from_unaligned_int(v, intp) (memcpy(&(v), (intp), sizeof(int)))
# define move_from_unaligned16(v, u16p) (memcpy(&(v), (u16p), 2))
# define move_from_unaligned32(v, u32p) (memcpy(&(v), (u32p), 4))
# define move_to_unaligned32(u32p, v) do { \

View File

@ -143,6 +143,7 @@ lib-$(CONFIG_FEATURE_HTTPD_AUTH_MD5) += pw_encrypt.o
lib-$(CONFIG_DF) += find_mount_point.o
lib-$(CONFIG_MKFS_MINIX) += find_mount_point.o
lib-$(CONFIG_FSCK_MINIX) += find_mount_point.o
lib-$(CONFIG_MOUNT) += find_mount_point.o
lib-$(CONFIG_HWCLOCK) += rtc.o
lib-$(CONFIG_RTCWAKE) += rtc.o

View File

@ -12,22 +12,35 @@
#include "libbb.h"
#include <mtd/mtd-user.h>
#include <mtd/jffs2-user.h>
#include <linux/jffs2.h>
#define OPTION_J (1 << 0)
#define OPTION_Q (1 << 1)
#define IS_NAND (1 << 2)
#define BBTEST (1 << 3)
struct globals {
/* This is used in the cpu_to_je/je_to_cpu macros in jffs2_user.h */
int tgt_endian;
};
#define G (*(struct globals*)&bb_common_bufsiz1)
#define target_endian (G.tgt_endian)
#define INIT_G() do { \
target_endian = __BYTE_ORDER; \
} while (0)
/* mtd/jffs2-user.h used to have this atrocity:
extern int target_endian;
#define t16(x) ({ __u16 __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_16(__b); })
#define t32(x) ({ __u32 __b = (x); (target_endian==__BYTE_ORDER)?__b:bswap_32(__b); })
#define cpu_to_je16(x) ((jint16_t){t16(x)})
#define cpu_to_je32(x) ((jint32_t){t32(x)})
#define cpu_to_jemode(x) ((jmode_t){t32(x)})
#define je16_to_cpu(x) (t16((x).v16))
#define je32_to_cpu(x) (t32((x).v32))
#define jemode_to_cpu(x) (t32((x).m))
but mtd/jffs2-user.h is gone now (at least 2.6.31.6 does not have it anymore)
*/
/* We always use native endianness */
#undef cpu_to_je16
#undef cpu_to_je32
#define cpu_to_je16(v) ((jint16_t){(v)})
#define cpu_to_je32(v) ((jint32_t){(v)})
static uint32_t crc32(uint32_t val, const void *ss, int len,
uint32_t *crc32_table)
@ -40,9 +53,11 @@ static uint32_t crc32(uint32_t val, const void *ss, int len,
static void show_progress(mtd_info_t *meminfo, erase_info_t *erase)
{
printf("\rErasing %d Kibyte @ %x -- %2llu %% complete.",
(unsigned)meminfo->erasesize / 1024, erase->start,
(unsigned long long) erase->start * 100 / meminfo->size);
printf("\rErasing %u Kibyte @ %x - %2u%% complete.",
(unsigned)meminfo->erasesize / 1024,
erase->start,
(unsigned) ((unsigned long long) erase->start * 100 / meminfo->size)
);
fflush(stdout);
}
@ -57,17 +72,15 @@ int flash_eraseall_main(int argc UNUSED_PARAM, char **argv)
unsigned int flags;
char *mtd_name;
INIT_G();
opt_complementary = "=1";
flags = BBTEST | getopt32(argv, "jq");
mtd_name = argv[optind];
xstat(mtd_name, &st);
fd = xopen(mtd_name, O_RDWR);
fstat(fd, &st);
if (!S_ISCHR(st.st_mode))
bb_error_msg_and_die("%s: not a char device", mtd_name);
fd = xopen(mtd_name, O_RDWR);
xioctl(fd, MEMGETINFO, &meminfo);
erase.length = meminfo.erasesize;
if (meminfo.type == MTD_NANDFLASH)

View File

@ -173,13 +173,14 @@ static void ping6(len_and_sockaddr *lsa)
}
#endif
int ping_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int ping_main(int argc UNUSED_PARAM, char **argv)
#if !ENABLE_PING6
# define common_ping_main(af, argv) common_ping_main(argv)
#endif
static int common_ping_main(sa_family_t af, char **argv)
{
len_and_sockaddr *lsa;
#if ENABLE_PING6
sa_family_t af = AF_UNSPEC;
#if ENABLE_PING6
while ((++argv)[0] && argv[0][0] == '-') {
if (argv[0][1] == '4') {
af = AF_INET;
@ -689,7 +690,8 @@ static void ping6(len_and_sockaddr *lsa)
/* don't check len - we trust the kernel: */
/* && mp->cmsg_len >= CMSG_LEN(sizeof(int)) */
) {
hoplimit = *(int*)CMSG_DATA(mp);
/*hoplimit = *(int*)CMSG_DATA(mp); - unaligned access */
move_from_unaligned_int(hoplimit, CMSG_DATA(mp));
}
}
unpack6(packet, c, /*&from,*/ hoplimit);
@ -716,18 +718,16 @@ static void ping(len_and_sockaddr *lsa)
ping4(lsa);
}
int ping_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int ping_main(int argc UNUSED_PARAM, char **argv)
static int common_ping_main(int opt, char **argv)
{
len_and_sockaddr *lsa;
char *str_s;
int opt;
INIT_G();
/* exactly one argument needed; -v and -q don't mix; -c NUM, -w NUM, -W NUM */
opt_complementary = "=1:q--v:v--q:c+:w+:W+";
opt = getopt32(argv, OPT_STRING, &pingcount, &str_s, &deadline, &timeout, &str_I);
opt |= getopt32(argv, OPT_STRING, &pingcount, &str_s, &deadline, &timeout, &str_I);
if (opt & OPT_s)
datalen = xatou16(str_s); // -s
if (opt & OPT_I) { // -I
@ -765,13 +765,25 @@ int ping_main(int argc UNUSED_PARAM, char **argv)
#endif /* FEATURE_FANCY_PING */
int ping_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int ping_main(int argc UNUSED_PARAM, char **argv)
{
#if !ENABLE_FEATURE_FANCY_PING
return common_ping_main(AF_UNSPEC, argv);
#else
return common_ping_main(0, argv);
#endif
}
#if ENABLE_PING6
int ping6_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int ping6_main(int argc UNUSED_PARAM, char **argv)
{
argv[0] = (char*)"-6";
return ping_main(0 /* argc+1 - but it's unused anyway */,
argv - 1);
# if !ENABLE_FEATURE_FANCY_PING
return common_ping_main(AF_INET6, argv);
# else
return common_ping_main(OPT_IPV6, argv);
# endif
}
#endif

View File

@ -17,11 +17,28 @@ menuconfig: $(obj)/mconf
config: $(obj)/conf
$< Config.in
# Mtime granularity problem.
# It was observed that these commands:
# make allnoconfig; sed -i -e '/CONFIG_TRUE/s/.*/CONFIG_TRUE=y/' .config; make
# sometimes produce busybox with "true" applet still disabled.
# This is caused by .config updated by sed having mtime which is still
# equal to (not bigger than) include/autoconf.h's mtime,
# and thus 2nd make does not regenerate include/autoconf.h.
# Waiting for 1 second after non-interactive "make XXXXconfig"
# prevents this from happening.
#
# We'd like to detect whether filesystem we are on has coarse mtimes,
# but can't do it yet, bbox ls hasn't got --full-time.
#MTIME_IS_COARSE:=@ls --full-time -ld | grep -F .000 >/dev/null
MTIME_IS_COARSE:=@true
oldconfig: $(obj)/conf
$< -o Config.in
$(MTIME_IS_COARSE) && sleep 1
silentoldconfig: $(obj)/conf
$< -s Config.in
$(MTIME_IS_COARSE) && sleep 1
update-po-config: $(obj)/kxgettext
xgettext --default-domain=linux \
@ -46,15 +63,19 @@ PHONY += randconfig allyesconfig allnoconfig allmodconfig defconfig
randconfig: $(obj)/conf
$< -r Config.in
$(MTIME_IS_COARSE) && sleep 1
allyesconfig: $(obj)/conf
$< -y Config.in
$(MTIME_IS_COARSE) && sleep 1
allnoconfig: $(obj)/conf
$< -n Config.in
$(MTIME_IS_COARSE) && sleep 1
allmodconfig: $(obj)/conf
$< -m Config.in
$(MTIME_IS_COARSE) && sleep 1
defconfig: $(obj)/conf
ifeq ($(KBUILD_DEFCONFIG),)
@ -63,9 +84,11 @@ else
@echo *** Default configuration is based on '$(KBUILD_DEFCONFIG)'
$(Q)$< -D $(KBUILD_DEFCONFIG) Config.in
endif
$(MTIME_IS_COARSE) && sleep 1
%_defconfig: $(obj)/conf
$(Q)$< -D $@ Config.in
$(MTIME_IS_COARSE) && sleep 1
# Help text used by make help
help:

File diff suppressed because it is too large Load Diff

View File

@ -47,4 +47,21 @@ testing "awk NF in BEGIN" \
":0::::\n" \
"" ""
prg='
function b(tmp) {
tmp = 0;
print "" tmp; #this line causes the bug
return tmp;
}
function c(tmpc) {
tmpc = b(); return tmpc;
}
BEGIN {
print (c() ? "string" : "number");
}'
testing "awk string cast (bug 725)" \
"awk '$prg'" \
"0\nnumber\n" \
"" ""
exit $FAILCOUNT

View File

@ -90,4 +90,9 @@ testing "grep -E -o prints all matches" \
"00:19:3E:00:AA:5E\n00:1D:60:3D:3A:FB\n00:22:43:49:FB:AA\n" \
"" "00:19:3E:00:AA:5E 00:1D:60:3D:3A:FB 00:22:43:49:FB:AA\n"
testing "grep -o does not loop forever" \
'grep -o "[^/]*$"' \
"test\n" \
"" "/var/test\n"
exit $FAILCOUNT

View File

@ -1958,6 +1958,7 @@ int mount_main(int argc UNUSED_PARAM, char **argv)
// If we're mounting all
} else {
struct mntent *mp;
// No, mount -a won't mount anything,
// even user mounts, for mere humans
if (nonroot)
@ -1985,10 +1986,25 @@ int mount_main(int argc UNUSED_PARAM, char **argv)
// NFS mounts want this to be xrealloc-able
mtcur->mnt_opts = xstrdup(mtcur->mnt_opts);
// Mount this thing
if (singlemount(mtcur, 1)) {
// Count number of failed mounts
rc++;
// If nothing is mounted on this directory...
// (otherwise repeated "mount -a" mounts everything again)
mp = find_mount_point(mtcur->mnt_dir, /*subdir_too:*/ 0);
// We do not check fsname match of found mount point -
// "/" may have fsname of "/dev/root" while fstab
// says "/dev/something_else".
if (mp) {
if (verbose) {
bb_error_msg("according to %s, "
"%s is already mounted on %s",
bb_path_mtab_file,
mp->mnt_fsname, mp->mnt_dir);
}
} else {
// ...mount this thing
if (singlemount(mtcur, /*ignore_busy:*/ 1)) {
// Count number of failed mounts
rc++;
}
}
free(mtcur->mnt_opts);
}