diff options
author | Denys Vlasenko | 2009-08-02 20:18:29 +0200 |
---|---|---|
committer | Denys Vlasenko | 2009-08-02 20:18:29 +0200 |
commit | 4cd4eb43320de6ecccb3b69087daee325d0bbfc1 (patch) | |
tree | 44db952d0feea229c4359bd5a2f8dc59db5ee07d | |
parent | 6a98f95373d60d48001299797f52b1f19c7ffecd (diff) | |
download | busybox-4cd4eb43320de6ecccb3b69087daee325d0bbfc1.zip busybox-4cd4eb43320de6ecccb3b69087daee325d0bbfc1.tar.gz |
apply post-1.14.2 patches
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | coreutils/df.c | 7 | ||||
-rw-r--r-- | coreutils/ls.c | 63 | ||||
-rw-r--r-- | coreutils/test.c | 13 | ||||
-rw-r--r-- | include/applets.h | 2 | ||||
-rw-r--r-- | include/libbb.h | 2 | ||||
-rw-r--r-- | libbb/find_mount_point.c | 22 | ||||
-rw-r--r-- | networking/udhcp/files.c | 2 | ||||
-rw-r--r-- | testsuite/ls/ls-1-works | 6 | ||||
-rw-r--r-- | testsuite/ls/ls-h-works | 6 | ||||
-rw-r--r-- | testsuite/ls/ls-l-works | 4 | ||||
-rw-r--r-- | testsuite/ls/ls-s-works | 4 | ||||
-rwxr-xr-x | testsuite/test.tests | 10 | ||||
-rw-r--r-- | util-linux/mkfs_minix.c | 8 | ||||
-rw-r--r-- | util-linux/mkfs_vfat.c | 6 |
14 files changed, 99 insertions, 56 deletions
diff --git a/coreutils/df.c b/coreutils/df.c index dfd6e0b..e9a865c 100644 --- a/coreutils/df.c +++ b/coreutils/df.c @@ -44,7 +44,6 @@ int df_main(int argc, char **argv) FILE *mount_table; struct mntent *mount_entry; struct statfs s; - static const char ignored_mounts[] ALIGN1 = "rootfs\0"; enum { OPT_KILO = (1 << 0), @@ -120,7 +119,7 @@ int df_main(int argc, char **argv) mount_point = *argv++; if (!mount_point) break; - mount_entry = find_mount_point(mount_point, bb_path_mtab_file); + mount_entry = find_mount_point(mount_point); if (!mount_entry) { bb_error_msg("%s: can't find mount point", mount_point); set_error: @@ -154,8 +153,8 @@ int df_main(int argc, char **argv) ) / (blocks_used + s.f_bavail); } - /* GNU coreutils 6.10 skip certain mounts, try to be compatible. */ - if (index_in_strings(device, ignored_mounts) != -1) + /* GNU coreutils 6.10 skips certain mounts, try to be compatible. */ + if (strcmp(device, "rootfs") == 0) continue; #ifdef WHY_WE_DO_IT_FOR_DEV_ROOT_ONLY diff --git a/coreutils/ls.c b/coreutils/ls.c index 61baa9a..38957e9 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c @@ -144,8 +144,7 @@ static const char ls_options[] ALIGN1 = USE_FEATURE_LS_FOLLOWLINKS("L") /* 1, 24 */ USE_FEATURE_LS_RECURSIVE("R") /* 1, 25 */ USE_FEATURE_HUMAN_READABLE("h") /* 1, 26 */ - USE_SELINUX("K") /* 1, 27 */ - USE_SELINUX("Z") /* 1, 28 */ + USE_SELINUX("KZ") /* 2, 28 */ USE_FEATURE_AUTOWIDTH("T:w:") /* 2, 30 */ ; enum { @@ -162,6 +161,16 @@ enum { OPT_Q = (1 << 10), //OPT_A = (1 << 11), //OPT_k = (1 << 12), + OPTBIT_color = 13 + + 4 * ENABLE_FEATURE_LS_TIMESTAMPS + + 4 * ENABLE_FEATURE_LS_SORTFILES + + 2 * ENABLE_FEATURE_LS_FILETYPES + + 1 * ENABLE_FEATURE_LS_FOLLOWLINKS + + 1 * ENABLE_FEATURE_LS_RECURSIVE + + 1 * ENABLE_FEATURE_HUMAN_READABLE + + 2 * ENABLE_SELINUX + + 2 * ENABLE_FEATURE_AUTOWIDTH, + OPT_color = 1 << OPTBIT_color, }; enum { @@ -889,16 +898,6 @@ static int list_single(const struct dnode *dn) } -/* colored LS support by JaWi, janwillem.janssen@lxtreme.nl */ -#if ENABLE_FEATURE_LS_COLOR -/* long option entry used only for --color, which has no short option - * equivalent */ -static const char ls_color_opt[] ALIGN1 = - "color\0" Optional_argument "\xff" /* no short equivalent */ - ; -#endif - - int ls_main(int argc UNUSED_PARAM, char **argv) { struct dnode **dnd; @@ -911,8 +910,25 @@ int ls_main(int argc UNUSED_PARAM, char **argv) int dnfiles; int dndirs; int i; +#if ENABLE_FEATURE_LS_COLOR + /* colored LS support by JaWi, janwillem.janssen@lxtreme.nl */ + /* coreutils 6.10: + * # ls --color=BOGUS + * ls: invalid argument 'BOGUS' for '--color' + * Valid arguments are: + * 'always', 'yes', 'force' + * 'never', 'no', 'none' + * 'auto', 'tty', 'if-tty' + * (and substrings: "--color=alwa" work too) + */ + static const char ls_longopts[] ALIGN1 = + "color\0" Optional_argument "\xff"; /* no short equivalent */ + static const char color_str[] ALIGN1 = + "always\0""yes\0""force\0" + "auto\0""tty\0""if-tty\0"; /* need to initialize since --color has _an optional_ argument */ - USE_FEATURE_LS_COLOR(const char *color_opt = "always";) + const char *color_opt = color_str; /* "always" */ +#endif INIT_G(); @@ -927,7 +943,7 @@ int ls_main(int argc UNUSED_PARAM, char **argv) #endif /* process options */ - USE_FEATURE_LS_COLOR(applet_long_options = ls_color_opt;) + USE_FEATURE_LS_COLOR(applet_long_options = ls_longopts;) #if ENABLE_FEATURE_AUTOWIDTH opt_complementary = "T+:w+"; /* -T N, -w N */ opt = getopt32(argv, ls_options, &tabstops, &terminal_width @@ -966,13 +982,20 @@ int ls_main(int argc UNUSED_PARAM, char **argv) if (!p || (p[0] && strcmp(p, "none") != 0)) show_color = 1; } - if (opt & (1 << i)) { /* next flag after short options */ - if (strcmp("always", color_opt) == 0) - show_color = 1; - else if (strcmp("never", color_opt) == 0) + if (opt & OPT_color) { + if (color_opt[0] == 'n') show_color = 0; - else if (strcmp("auto", color_opt) == 0 && isatty(STDOUT_FILENO)) - show_color = 1; + else switch (index_in_substrings(color_str, color_opt)) { + case 3: + case 4: + case 5: + if (isatty(STDOUT_FILENO)) { + case 0: + case 1: + case 2: + show_color = 1; + } + } } #endif diff --git a/coreutils/test.c b/coreutils/test.c index ae40192..ab7b416 100644 --- a/coreutils/test.c +++ b/coreutils/test.c @@ -571,7 +571,14 @@ static number_t nexpr(enum token n) nest_msg(">nexpr(%s)\n", TOKSTR[n]); if (n == UNOT) { - res = !nexpr(check_operator(*++args)); + n = check_operator(*++args); + if (n == EOI) { + /* special case: [ ! ], [ a -a ! ] are valid */ + /* IOW, "! ARG" may miss ARG */ + unnest_msg("<nexpr:1 (!EOI)\n"); + return 1; + } + res = !nexpr(n); unnest_msg("<nexpr:%lld\n", res); return res; } @@ -742,7 +749,7 @@ int test_main(int argc, char **argv) check_operator(argv[1]); if (last_operator->op_type == BINOP) { /* "test [!] arg1 <binary_op> arg2" */ - args = &argv[0]; + args = argv; res = (binop() == 0); goto ret; } @@ -755,7 +762,7 @@ int test_main(int argc, char **argv) argv--; } #endif - args = &argv[0]; + args = argv; res = !oexpr(check_operator(*args)); if (*args != NULL && *++args != NULL) { diff --git a/include/applets.h b/include/applets.h index 1d93258..32c596d 100644 --- a/include/applets.h +++ b/include/applets.h @@ -284,7 +284,7 @@ USE_PATCH(APPLET(patch, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) USE_PGREP(APPLET(pgrep, _BB_DIR_USR_BIN, _BB_SUID_NEVER)) USE_PIDOF(APPLET(pidof, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_PING(APPLET(ping, _BB_DIR_BIN, _BB_SUID_MAYBE)) -USE_PING6(APPLET(ping6, _BB_DIR_BIN, _BB_SUID_NEVER)) +USE_PING6(APPLET(ping6, _BB_DIR_BIN, _BB_SUID_MAYBE)) USE_PIPE_PROGRESS(APPLET(pipe_progress, _BB_DIR_BIN, _BB_SUID_NEVER)) USE_PIVOT_ROOT(APPLET(pivot_root, _BB_DIR_SBIN, _BB_SUID_NEVER)) USE_PKILL(APPLET_ODDNAME(pkill, pgrep, _BB_DIR_USR_BIN, _BB_SUID_NEVER, pkill)) diff --git a/include/libbb.h b/include/libbb.h index bedf659..2497ffe 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -1025,7 +1025,7 @@ extern void run_applet_no_and_exit(int a, char **argv) NORETURN FAST_FUNC; #ifdef HAVE_MNTENT_H extern int match_fstype(const struct mntent *mt, const char *fstypes) FAST_FUNC; -extern struct mntent *find_mount_point(const char *name, const char *table) FAST_FUNC; +extern struct mntent *find_mount_point(const char *name) FAST_FUNC; #endif extern void erase_mtab(const char * name) FAST_FUNC; extern unsigned int tty_baud_to_value(speed_t speed) FAST_FUNC; diff --git a/libbb/find_mount_point.c b/libbb/find_mount_point.c index 4cd6b16..12b2cfc 100644 --- a/libbb/find_mount_point.c +++ b/libbb/find_mount_point.c @@ -17,7 +17,7 @@ * Given any other file (or directory), find the mount table entry for its * filesystem. */ -struct mntent* FAST_FUNC find_mount_point(const char *name, const char *table) +struct mntent* FAST_FUNC find_mount_point(const char *name) { struct stat s; dev_t mountDevice; @@ -25,27 +25,35 @@ struct mntent* FAST_FUNC find_mount_point(const char *name, const char *table) struct mntent *mountEntry; if (stat(name, &s) != 0) - return 0; + return NULL; - if ((s.st_mode & S_IFMT) == S_IFBLK) + if (S_ISBLK(s.st_mode)) mountDevice = s.st_rdev; else mountDevice = s.st_dev; - mountTable = setmntent(table ? table : bb_path_mtab_file, "r"); + mountTable = setmntent(bb_path_mtab_file, "r"); if (!mountTable) return 0; - while ((mountEntry = getmntent(mountTable)) != 0) { + while ((mountEntry = getmntent(mountTable)) != NULL) { + /* rootfs mount in Linux 2.6 exists always, + * and it makes sense to always ignore it. + * Otherwise people can't reference their "real" root! */ + if (strcmp(mountEntry->mnt_fsname, "rootfs") == 0) + continue; + if (strcmp(name, mountEntry->mnt_dir) == 0 || strcmp(name, mountEntry->mnt_fsname) == 0 ) { /* String match. */ break; } - if (stat(mountEntry->mnt_fsname, &s) == 0 && s.st_rdev == mountDevice) /* Match the device. */ + /* Match the device. */ + if (stat(mountEntry->mnt_fsname, &s) == 0 && s.st_rdev == mountDevice) break; - if (stat(mountEntry->mnt_dir, &s) == 0 && s.st_dev == mountDevice) /* Match the directory's mount point. */ + /* Match the directory's mount point. */ + if (stat(mountEntry->mnt_dir, &s) == 0 && s.st_dev == mountDevice) break; } endmntent(mountTable); diff --git a/networking/udhcp/files.c b/networking/udhcp/files.c index a061a9c..55f3597 100644 --- a/networking/udhcp/files.c +++ b/networking/udhcp/files.c @@ -420,7 +420,7 @@ void FAST_FUNC read_leases(const char *file) continue; /* NB: add_lease takes "relative time", IOW, * lease duration, not lease deadline. */ - if (!(add_lease(lease.chaddr, lease.yiaddr, expires, lease.hostname))) { + if (!(add_lease(lease.chaddr, lease.yiaddr, expires, NULL /* was lease.hostname. bug in add_lease, disabled */ ))) { bb_error_msg("too many leases while loading %s", file); break; } diff --git a/testsuite/ls/ls-1-works b/testsuite/ls/ls-1-works index 8ad484f..8856949 100644 --- a/testsuite/ls/ls-1-works +++ b/testsuite/ls/ls-1-works @@ -1,4 +1,4 @@ [ -n "$d" ] || d=.. -ls -1 "$d" > logfile.gnu -busybox ls -1 "$d" > logfile.bb -cmp logfile.gnu logfile.bb +LC_ALL=C ls -1 "$d" > logfile.gnu +LC_ALL=C busybox ls -1 "$d" > logfile.bb +diff -ubw logfile.gnu logfile.bb diff --git a/testsuite/ls/ls-h-works b/testsuite/ls/ls-h-works index 7331262..0c83f7c 100644 --- a/testsuite/ls/ls-h-works +++ b/testsuite/ls/ls-h-works @@ -1,4 +1,4 @@ [ -n "$d" ] || d=.. -ls -h "$d" > logfile.gnu -busybox ls -h "$d" > logfile.bb -cmp logfile.gnu logfile.bb +LC_ALL=C ls -h "$d" > logfile.gnu +LC_ALL=C busybox ls -h "$d" > logfile.bb +diff -ubw logfile.gnu logfile.bb diff --git a/testsuite/ls/ls-l-works b/testsuite/ls/ls-l-works index efc2b19..1bad34b 100644 --- a/testsuite/ls/ls-l-works +++ b/testsuite/ls/ls-l-works @@ -1,4 +1,4 @@ [ -n "$d" ] || d=.. LC_ALL=C ls -l "$d" > logfile.gnu -busybox ls -l "$d" > logfile.bb -diff -w logfile.gnu logfile.bb +LC_ALL=C busybox ls -l "$d" > logfile.bb +diff -ubw logfile.gnu logfile.bb diff --git a/testsuite/ls/ls-s-works b/testsuite/ls/ls-s-works index 6c8bf36..0a9d752 100644 --- a/testsuite/ls/ls-s-works +++ b/testsuite/ls/ls-s-works @@ -1,4 +1,4 @@ [ -n "$d" ] || d=.. LC_ALL=C ls -1s "$d" > logfile.gnu -busybox ls -1s "$d" > logfile.bb -cmp logfile.gnu logfile.bb +LC_ALL=C busybox ls -1s "$d" > logfile.bb +diff -ubw logfile.gnu logfile.bb diff --git a/testsuite/test.tests b/testsuite/test.tests index d4be949..b7c84d9 100755 --- a/testsuite/test.tests +++ b/testsuite/test.tests @@ -21,6 +21,11 @@ testing "test '': should be false (1)" \ "1\n" \ "" "" +testing "test !: should be true (0)" \ + "busybox test !; echo \$?" \ + "0\n" \ + "" "" + testing "test a: should be true (0)" \ "busybox test a; echo \$?" \ "0\n" \ @@ -51,6 +56,11 @@ testing "test -lt = -gt: should be false (1)" \ "1\n" \ "" "" +testing "test a -a !: should be true (0)" \ + "busybox test a -a !; echo \$?" \ + "0\n" \ + "" "" + testing "test -f = a -o b: should be true (0)" \ "busybox test -f = a -o b; echo \$?" \ "0\n" \ diff --git a/util-linux/mkfs_minix.c b/util-linux/mkfs_minix.c index 2666132..18512a3 100644 --- a/util-linux/mkfs_minix.c +++ b/util-linux/mkfs_minix.c @@ -624,7 +624,6 @@ static void setup_tables(void) int mkfs_minix_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; int mkfs_minix_main(int argc UNUSED_PARAM, char **argv) { - struct mntent *mp; unsigned opt; char *tmp; struct stat statbuf; @@ -683,11 +682,8 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv) G.total_blocks = 65535; /* Check if it is mounted */ - mp = find_mount_point(G.device_name, NULL); - if (mp && strcmp(G.device_name, mp->mnt_fsname) == 0) - bb_error_msg_and_die("%s is mounted on %s; " - "refusing to make a filesystem", - G.device_name, mp->mnt_dir); + if (find_mount_point(G.device_name)) + bb_error_msg_and_die("can't format mounted filesystem"); xmove_fd(xopen(G.device_name, O_RDWR), dev_fd); if (fstat(dev_fd, &statbuf) < 0) diff --git a/util-linux/mkfs_vfat.c b/util-linux/mkfs_vfat.c index 72c2058..aa6ae92 100644 --- a/util-linux/mkfs_vfat.c +++ b/util-linux/mkfs_vfat.c @@ -273,10 +273,10 @@ int mkfs_vfat_main(int argc UNUSED_PARAM, char **argv) device_num == 0x0d00 || // xd device_num == 0x1600 ) // hdc, hdd ) - bb_error_msg_and_die("Will not try to make filesystem on full-disk device (use -I if wanted)"); + bb_error_msg_and_die("will not try to make filesystem on full-disk device (use -I if wanted)"); // can't work on mounted filesystems - if (find_mount_point(device_name, NULL)) - bb_error_msg_and_die("Can't format mounted filesystem"); + if (find_mount_point(device_name)) + bb_error_msg_and_die("can't format mounted filesystem"); #endif // get true sector size // (parameter must be int*, not long* or size_t*) |