diff --git a/Changelog b/Changelog index 493c9c2f8..673d1aafd 100644 --- a/Changelog +++ b/Changelog @@ -15,6 +15,10 @@ * Optional support contributed by Ben Collins for the kernel init chroot patch by Werner Almesberger, which allows init to chroot to a new device, and umount the old one. + * added (and documented) "-n" option for head - + contributed Friedrich Vedder + * Cleanup for a number of usage messages -- also + contributed Friedrich Vedder * Fixed bug that wouldn't let one chown a symlink -- it would always dereference before. -beppu diff --git a/archival/tar.c b/archival/tar.c index 21ef24dcb..aedb36a23 100644 --- a/archival/tar.c +++ b/archival/tar.c @@ -54,7 +54,7 @@ static const char tar_usage[] = #else static const char tar_usage[] = -"tar -[cxtvOf] [tarFileName] [FILE] ...\n\n" +"tar -[xtvOf] [tarFileName] [FILE] ...\n\n" "Extract, or list files stored in a tar file. This\n" "version of tar does not support creation of tar files.\n\n" "Options:\n" diff --git a/coreutils/du.c b/coreutils/du.c index ec03afd95..79b553643 100644 --- a/coreutils/du.c +++ b/coreutils/du.c @@ -35,7 +35,7 @@ typedef void (Display)(size_t, char *); static const char du_usage[] = -"Usage: du [OPTION]... [FILE]...\n\n" +"du [OPTION]... [FILE]...\n\n" "\t-s\tdisplay only a total for each argument\n" ; @@ -140,4 +140,4 @@ du_main(int argc, char **argv) exit(0); } -/* $Id: du.c,v 1.8 1999/12/17 18:44:15 erik Exp $ */ +/* $Id: du.c,v 1.9 2000/01/23 18:19:02 erik Exp $ */ diff --git a/coreutils/head.c b/coreutils/head.c index 7f08a8041..4e58bdcd7 100644 --- a/coreutils/head.c +++ b/coreutils/head.c @@ -26,10 +26,12 @@ #include const char head_usage[] = -"Usage: head [FILE]...\n\n" +"head [OPTION] [FILE]...\n\n" "Print first 10 lines of each FILE to standard output.\n" "With more than one FILE, precede each with a header giving the\n" -"file name. With no FILE, or when FILE is -, read standard input.\n"; +"file name. With no FILE, or when FILE is -, read standard input.\n\n" +"Options:\n" +"\t-n NUM\t\tPrint first NUM lines instead of first 10\n"; int head(int len, FILE *src) @@ -49,22 +51,22 @@ head(int len, FILE *src) int head_main(int argc, char **argv) { - int i = 1; char opt; - int len = 10; - - /* 1st option is potentially special */ - if ((argc > 1) && (argv[1][0] == '-') && isDecimal(argv[1][1])) { - int tmplen = atoi(&argv[1][1]); - if (tmplen) { len = tmplen; } - i = 2; - } + int len = 10, tmplen, i; /* parse argv[] */ - for ( ; i < argc; i++) { + for (i = 1; i < argc; i++) { if (argv[i][0] == '-') { opt = argv[i][1]; switch (opt) { + case 'n': + tmplen = 0; + if (i++ < argc) + tmplen = atoi(argv[i]); + if (tmplen < 1) + usage(head_usage); + len = tmplen; + break; case '-': case 'h': usage(head_usage); @@ -103,4 +105,4 @@ head_main(int argc, char **argv) exit(0); } -/* $Id: head.c,v 1.4 1999/12/17 18:52:06 erik Exp $ */ +/* $Id: head.c,v 1.5 2000/01/23 18:19:02 erik Exp $ */ diff --git a/coreutils/mkdir.c b/coreutils/mkdir.c index dc245a18e..017ef9b08 100644 --- a/coreutils/mkdir.c +++ b/coreutils/mkdir.c @@ -26,7 +26,8 @@ #include #include -static const char mkdir_usage[] = "Usage: mkdir [OPTION] DIRECTORY...\n\n" +static const char mkdir_usage[] = +"mkdir [OPTION] DIRECTORY...\n\n" "Create the DIRECTORY(ies), if they do not already exist\n\n" "Options:\n" "\t-m\tset permission mode (as in chmod), not rwxrwxrwx - umask\n" diff --git a/coreutils/sort.c b/coreutils/sort.c index 0fe7bf99b..4df5627ac 100644 --- a/coreutils/sort.c +++ b/coreutils/sort.c @@ -29,7 +29,7 @@ #include static const char sort_usage[] = -"Usage: sort [OPTION]... [FILE]...\n\n" +"sort [OPTION]... [FILE]...\n\n" ; /* typedefs _______________________________________________________________ */ @@ -309,4 +309,4 @@ sort_main(int argc, char **argv) exit(0); } -/* $Id: sort.c,v 1.8 1999/12/23 22:46:10 beppu Exp $ */ +/* $Id: sort.c,v 1.9 2000/01/23 18:19:02 erik Exp $ */ diff --git a/coreutils/uniq.c b/coreutils/uniq.c index 034ea316e..a7bff54ec 100644 --- a/coreutils/uniq.c +++ b/coreutils/uniq.c @@ -27,7 +27,7 @@ #include static const char uniq_usage[] = -"Usage: uniq [OPTION]... [INPUT [OUTPUT]]\n" +"uniq [OPTION]... [INPUT [OUTPUT]]\n" "Discard all but one of successive identical lines from INPUT (or\n" "standard input), writing to OUTPUT (or standard output).\n" "\n" @@ -193,4 +193,4 @@ uniq_main(int argc, char **argv) exit(0); } -/* $Id: uniq.c,v 1.4 2000/01/07 01:57:32 beppu Exp $ */ +/* $Id: uniq.c,v 1.5 2000/01/23 18:19:02 erik Exp $ */ diff --git a/coreutils/wc.c b/coreutils/wc.c index a1e2fca56..e69f0d899 100644 --- a/coreutils/wc.c +++ b/coreutils/wc.c @@ -28,7 +28,6 @@ static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n" "\t-c\tprint the byte counts\n" "\t-l\tprint the newline counts\n" "\t-L\tprint the length of the longest line\n" -"\t-L\tprint the length of the longest line\n" "\t-w\tprint the word counts\n"; static int total_lines, total_words, total_chars, max_length; diff --git a/du.c b/du.c index ec03afd95..79b553643 100644 --- a/du.c +++ b/du.c @@ -35,7 +35,7 @@ typedef void (Display)(size_t, char *); static const char du_usage[] = -"Usage: du [OPTION]... [FILE]...\n\n" +"du [OPTION]... [FILE]...\n\n" "\t-s\tdisplay only a total for each argument\n" ; @@ -140,4 +140,4 @@ du_main(int argc, char **argv) exit(0); } -/* $Id: du.c,v 1.8 1999/12/17 18:44:15 erik Exp $ */ +/* $Id: du.c,v 1.9 2000/01/23 18:19:02 erik Exp $ */ diff --git a/head.c b/head.c index 7f08a8041..4e58bdcd7 100644 --- a/head.c +++ b/head.c @@ -26,10 +26,12 @@ #include const char head_usage[] = -"Usage: head [FILE]...\n\n" +"head [OPTION] [FILE]...\n\n" "Print first 10 lines of each FILE to standard output.\n" "With more than one FILE, precede each with a header giving the\n" -"file name. With no FILE, or when FILE is -, read standard input.\n"; +"file name. With no FILE, or when FILE is -, read standard input.\n\n" +"Options:\n" +"\t-n NUM\t\tPrint first NUM lines instead of first 10\n"; int head(int len, FILE *src) @@ -49,22 +51,22 @@ head(int len, FILE *src) int head_main(int argc, char **argv) { - int i = 1; char opt; - int len = 10; - - /* 1st option is potentially special */ - if ((argc > 1) && (argv[1][0] == '-') && isDecimal(argv[1][1])) { - int tmplen = atoi(&argv[1][1]); - if (tmplen) { len = tmplen; } - i = 2; - } + int len = 10, tmplen, i; /* parse argv[] */ - for ( ; i < argc; i++) { + for (i = 1; i < argc; i++) { if (argv[i][0] == '-') { opt = argv[i][1]; switch (opt) { + case 'n': + tmplen = 0; + if (i++ < argc) + tmplen = atoi(argv[i]); + if (tmplen < 1) + usage(head_usage); + len = tmplen; + break; case '-': case 'h': usage(head_usage); @@ -103,4 +105,4 @@ head_main(int argc, char **argv) exit(0); } -/* $Id: head.c,v 1.4 1999/12/17 18:52:06 erik Exp $ */ +/* $Id: head.c,v 1.5 2000/01/23 18:19:02 erik Exp $ */ diff --git a/internal.h b/internal.h index 2b07d672d..b77feabad 100644 --- a/internal.h +++ b/internal.h @@ -26,6 +26,7 @@ #include "busybox.def.h" #include +#include #include #include #include @@ -174,7 +175,7 @@ extern int check_wildcard_match(const char* text, const char* pattern); extern long getNum (const char *cp); extern pid_t findInitPid(); -#if (__GLIBC__ < 2) && defined BB_SYSLOGD +#if (__GLIBC__ < 2) && (defined BB_SYSLOGD || defined BB_INIT) extern int vdprintf(int d, const char *format, va_list ap); #endif diff --git a/mkdir.c b/mkdir.c index dc245a18e..017ef9b08 100644 --- a/mkdir.c +++ b/mkdir.c @@ -26,7 +26,8 @@ #include #include -static const char mkdir_usage[] = "Usage: mkdir [OPTION] DIRECTORY...\n\n" +static const char mkdir_usage[] = +"mkdir [OPTION] DIRECTORY...\n\n" "Create the DIRECTORY(ies), if they do not already exist\n\n" "Options:\n" "\t-m\tset permission mode (as in chmod), not rwxrwxrwx - umask\n" diff --git a/mount.c b/mount.c index 713e5e850..709c7fc49 100644 --- a/mount.c +++ b/mount.c @@ -428,44 +428,42 @@ static int set_loop(const char *device, const char *file, int offset, int *loopr loopinfo.lo_encrypt_key_size = 0; if (ioctl(fd, LOOP_SET_FD, ffd) < 0) { perror("ioctl: LOOP_SET_FD"); - exit(1); + close(fd); + close(ffd); + return 1; } if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) { (void) ioctl(fd, LOOP_CLR_FD, 0); perror("ioctl: LOOP_SET_STATUS"); - exit(1); + close(fd); + close(ffd); + return 1; } close(fd); close(ffd); return 0; } -static char *find_unused_loop_device (void) +char *find_unused_loop_device (void) { - char dev[20]; - int i, fd, somedev = 0, someloop = 0; - struct stat statbuf; - struct loop_info loopinfo; + char dev[20]; + int i, fd; + struct stat statbuf; + struct loop_info loopinfo; - for(i = 0; i < 256; i++) { - sprintf(dev, "/dev/loop%d", i); - if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) { - somedev++; - fd = open (dev, O_RDONLY); - if (fd >= 0) { - if(ioctl (fd, LOOP_GET_STATUS, &loopinfo) == 0) - someloop++; /* in use */ - else if (errno == ENXIO) { - close (fd); - return strdup(dev); /* probably free */ - } - close (fd); - } - continue; - } - if (i >= 7) - break; - } - return NULL; + for(i = 0; i <= 7; i++) { + sprintf(dev, "/dev/loop%d", i); + if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) { + if ((fd = open (dev, O_RDONLY)) >= 0) { + if(ioctl (fd, LOOP_GET_STATUS, &loopinfo) == -1 && + errno == ENXIO) { /* probably free */ + close (fd); + return strdup(dev); + } + close (fd); + } + } + } + return NULL; } #endif /* BB_FEATURE_MOUNT_LOOP */ diff --git a/sfdisk.c b/sfdisk.c index 5b67e69ab..5dc44eacc 100644 --- a/sfdisk.c +++ b/sfdisk.c @@ -55,7 +55,7 @@ static const char sfdisk_usage[] = -"Usage: sfdisk [options] device ...\n" +"sfdisk [options] device ...\n" "device: something like /dev/hda or /dev/sda\n" "useful options:\n" " -s [or --show-size]: list size of a partition\n" @@ -2345,7 +2345,7 @@ sfdisk_main(int argc, char **argv) { char *unhidearg = 0; if (argc < 1) - usage( sfdisk_usage); + usage(sfdisk_usage); while ((c = getopt_long (argc, argv, short_opts, long_opts, NULL)) != -1) { switch (c) { @@ -2407,7 +2407,7 @@ sfdisk_main(int argc, char **argv) { verify = 1; break; case '?': default: - usage( sfdisk_usage); + usage(sfdisk_usage); /* undocumented flags */ case 128: @@ -2461,7 +2461,7 @@ sfdisk_main(int argc, char **argv) { exit(exit_status); } - if (optind == argc) usage( sfdisk_usage); + if (optind == argc) usage(sfdisk_usage); if (opt_list || opt_out_geom || opt_size || verify) { while (optind < argc) { diff --git a/sort.c b/sort.c index 0fe7bf99b..4df5627ac 100644 --- a/sort.c +++ b/sort.c @@ -29,7 +29,7 @@ #include static const char sort_usage[] = -"Usage: sort [OPTION]... [FILE]...\n\n" +"sort [OPTION]... [FILE]...\n\n" ; /* typedefs _______________________________________________________________ */ @@ -309,4 +309,4 @@ sort_main(int argc, char **argv) exit(0); } -/* $Id: sort.c,v 1.8 1999/12/23 22:46:10 beppu Exp $ */ +/* $Id: sort.c,v 1.9 2000/01/23 18:19:02 erik Exp $ */ diff --git a/tar.c b/tar.c index 21ef24dcb..aedb36a23 100644 --- a/tar.c +++ b/tar.c @@ -54,7 +54,7 @@ static const char tar_usage[] = #else static const char tar_usage[] = -"tar -[cxtvOf] [tarFileName] [FILE] ...\n\n" +"tar -[xtvOf] [tarFileName] [FILE] ...\n\n" "Extract, or list files stored in a tar file. This\n" "version of tar does not support creation of tar files.\n\n" "Options:\n" diff --git a/umount.c b/umount.c index af1b3a43e..9ad6f26c2 100644 --- a/umount.c +++ b/umount.c @@ -37,7 +37,7 @@ static int del_loop(const char *device); #endif static const char umount_usage[] = -"Usage: umount [flags] filesystem|directory\n\n" +"umount [flags] filesystem|directory\n\n" "Flags:\n" "\t-a:\tUnmount all file systems" #ifdef BB_MTAB diff --git a/uniq.c b/uniq.c index 034ea316e..a7bff54ec 100644 --- a/uniq.c +++ b/uniq.c @@ -27,7 +27,7 @@ #include static const char uniq_usage[] = -"Usage: uniq [OPTION]... [INPUT [OUTPUT]]\n" +"uniq [OPTION]... [INPUT [OUTPUT]]\n" "Discard all but one of successive identical lines from INPUT (or\n" "standard input), writing to OUTPUT (or standard output).\n" "\n" @@ -193,4 +193,4 @@ uniq_main(int argc, char **argv) exit(0); } -/* $Id: uniq.c,v 1.4 2000/01/07 01:57:32 beppu Exp $ */ +/* $Id: uniq.c,v 1.5 2000/01/23 18:19:02 erik Exp $ */ diff --git a/util-linux/mount.c b/util-linux/mount.c index 713e5e850..709c7fc49 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c @@ -428,44 +428,42 @@ static int set_loop(const char *device, const char *file, int offset, int *loopr loopinfo.lo_encrypt_key_size = 0; if (ioctl(fd, LOOP_SET_FD, ffd) < 0) { perror("ioctl: LOOP_SET_FD"); - exit(1); + close(fd); + close(ffd); + return 1; } if (ioctl(fd, LOOP_SET_STATUS, &loopinfo) < 0) { (void) ioctl(fd, LOOP_CLR_FD, 0); perror("ioctl: LOOP_SET_STATUS"); - exit(1); + close(fd); + close(ffd); + return 1; } close(fd); close(ffd); return 0; } -static char *find_unused_loop_device (void) +char *find_unused_loop_device (void) { - char dev[20]; - int i, fd, somedev = 0, someloop = 0; - struct stat statbuf; - struct loop_info loopinfo; + char dev[20]; + int i, fd; + struct stat statbuf; + struct loop_info loopinfo; - for(i = 0; i < 256; i++) { - sprintf(dev, "/dev/loop%d", i); - if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) { - somedev++; - fd = open (dev, O_RDONLY); - if (fd >= 0) { - if(ioctl (fd, LOOP_GET_STATUS, &loopinfo) == 0) - someloop++; /* in use */ - else if (errno == ENXIO) { - close (fd); - return strdup(dev); /* probably free */ - } - close (fd); - } - continue; - } - if (i >= 7) - break; - } - return NULL; + for(i = 0; i <= 7; i++) { + sprintf(dev, "/dev/loop%d", i); + if (stat (dev, &statbuf) == 0 && S_ISBLK(statbuf.st_mode)) { + if ((fd = open (dev, O_RDONLY)) >= 0) { + if(ioctl (fd, LOOP_GET_STATUS, &loopinfo) == -1 && + errno == ENXIO) { /* probably free */ + close (fd); + return strdup(dev); + } + close (fd); + } + } + } + return NULL; } #endif /* BB_FEATURE_MOUNT_LOOP */ diff --git a/util-linux/umount.c b/util-linux/umount.c index af1b3a43e..9ad6f26c2 100644 --- a/util-linux/umount.c +++ b/util-linux/umount.c @@ -37,7 +37,7 @@ static int del_loop(const char *device); #endif static const char umount_usage[] = -"Usage: umount [flags] filesystem|directory\n\n" +"umount [flags] filesystem|directory\n\n" "Flags:\n" "\t-a:\tUnmount all file systems" #ifdef BB_MTAB diff --git a/wc.c b/wc.c index a1e2fca56..e69f0d899 100644 --- a/wc.c +++ b/wc.c @@ -28,7 +28,6 @@ static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n" "\t-c\tprint the byte counts\n" "\t-l\tprint the newline counts\n" "\t-L\tprint the length of the longest line\n" -"\t-L\tprint the length of the longest line\n" "\t-w\tprint the word counts\n"; static int total_lines, total_words, total_chars, max_length;