summaryrefslogtreecommitdiff
path: root/coreutils
diff options
context:
space:
mode:
Diffstat (limited to 'coreutils')
-rw-r--r--coreutils/cat.c54
-rw-r--r--coreutils/chroot.c57
-rw-r--r--coreutils/date.c451
-rw-r--r--coreutils/dd.c284
-rw-r--r--coreutils/df.c119
-rw-r--r--coreutils/du.c185
-rw-r--r--coreutils/head.c134
-rw-r--r--coreutils/hostid.c8
-rw-r--r--coreutils/length.c14
-rw-r--r--coreutils/ln.c150
-rw-r--r--coreutils/logname.c22
-rw-r--r--coreutils/ls.c297
-rw-r--r--coreutils/mkdir.c133
-rw-r--r--coreutils/mkfifo.c64
-rw-r--r--coreutils/mknod.c39
-rw-r--r--coreutils/printf.c632
-rw-r--r--coreutils/pwd.c12
-rw-r--r--coreutils/rm.c102
-rw-r--r--coreutils/rmdir.c20
-rw-r--r--coreutils/sleep.c19
-rw-r--r--coreutils/sort.c385
-rw-r--r--coreutils/sync.c13
-rw-r--r--coreutils/tail.c1789
-rw-r--r--coreutils/tee.c129
-rw-r--r--coreutils/touch.c79
-rw-r--r--coreutils/tty.c25
-rw-r--r--coreutils/uname.c139
-rw-r--r--coreutils/uniq.c225
-rw-r--r--coreutils/wc.c127
-rw-r--r--coreutils/whoami.c27
-rw-r--r--coreutils/yes.c14
31 files changed, 2841 insertions, 2907 deletions
diff --git a/coreutils/cat.c b/coreutils/cat.c
index 0d32efe..86f85fe 100644
--- a/coreutils/cat.c
+++ b/coreutils/cat.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini Cat implementation for busybox
*
@@ -24,36 +25,37 @@
#include <stdio.h>
-static void print_file( FILE *file)
+static void print_file(FILE * file)
{
- int c;
- while ((c = getc(file)) != EOF)
- putc(c, stdout);
- fclose(file);
- fflush(stdout);
+ int c;
+
+ while ((c = getc(file)) != EOF)
+ putc(c, stdout);
+ fclose(file);
+ fflush(stdout);
}
extern int cat_main(int argc, char **argv)
{
- FILE *file;
-
- if (argc==1) {
- print_file( stdin);
- exit( TRUE);
- }
-
- if ( **(argv+1) == '-' ) {
- usage ("cat [file ...]\n");
- }
- argc--;
-
- while (argc-- > 0 && *(argv++) != '\0' && strlen(*argv) ) {
- file = fopen(*argv, "r");
- if (file == NULL) {
- perror(*argv);
- exit(FALSE);
+ FILE *file;
+
+ if (argc == 1) {
+ print_file(stdin);
+ exit(TRUE);
+ }
+
+ if (**(argv + 1) == '-') {
+ usage("cat [file ...]\n");
+ }
+ argc--;
+
+ while (argc-- > 0 && *(argv++) != '\0' && strlen(*argv)) {
+ file = fopen(*argv, "r");
+ if (file == NULL) {
+ perror(*argv);
+ exit(FALSE);
+ }
+ print_file(file);
}
- print_file( file);
- }
- exit(TRUE);
+ exit(TRUE);
}
diff --git a/coreutils/chroot.c b/coreutils/chroot.c
index 16524d9..6a01be6 100644
--- a/coreutils/chroot.c
+++ b/coreutils/chroot.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini chroot implementation for busybox
*
@@ -28,39 +29,39 @@
static const char chroot_usage[] = "chroot NEWROOT [COMMAND...]\n\n"
-"Run COMMAND with root directory set to NEWROOT.\n";
+
+ "Run COMMAND with root directory set to NEWROOT.\n";
int chroot_main(int argc, char **argv)
{
- if ( (argc < 2) || (**(argv+1) == '-') ) {
- usage( chroot_usage);
- }
- argc--;
- argv++;
+ if ((argc < 2) || (**(argv + 1) == '-')) {
+ usage(chroot_usage);
+ }
+ argc--;
+ argv++;
- if (chroot (*argv) || (chdir ("/"))) {
- fprintf(stderr, "chroot: cannot change root directory to %s: %s\n",
- *argv, strerror(errno));
- exit( FALSE);
- }
+ if (chroot(*argv) || (chdir("/"))) {
+ fprintf(stderr, "chroot: cannot change root directory to %s: %s\n",
+ *argv, strerror(errno));
+ exit(FALSE);
+ }
- argc--;
- argv++;
- if (argc >= 1) {
- fprintf(stderr, "command: %s\n", *argv);
- execvp (*argv, argv);
- }
- else {
- char *prog;
- prog = getenv ("SHELL");
- if (!prog)
- prog = "/bin/sh";
- execlp (prog, prog, NULL);
- }
- fprintf(stderr, "chroot: cannot execute %s: %s\n",
- *argv, strerror(errno));
- exit( FALSE);
-}
+ argc--;
+ argv++;
+ if (argc >= 1) {
+ fprintf(stderr, "command: %s\n", *argv);
+ execvp(*argv, argv);
+ } else {
+ char *prog;
+ prog = getenv("SHELL");
+ if (!prog)
+ prog = "/bin/sh";
+ execlp(prog, prog, NULL);
+ }
+ fprintf(stderr, "chroot: cannot execute %s: %s\n",
+ *argv, strerror(errno));
+ exit(FALSE);
+}
diff --git a/coreutils/date.c b/coreutils/date.c
index a352892..b4c3e71 100644
--- a/coreutils/date.c
+++ b/coreutils/date.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini date implementation for busybox
*
@@ -38,12 +39,13 @@
an RFC 822 complient date output for shell scripting
mail commands */
-static const char date_usage[] = "date [OPTION]... [+FORMAT]\n"
-" or: date [OPTION] [MMDDhhmm[[CC]YY][.ss]]\n\n"
-"Display the current time in the given FORMAT, or set the system date.\n"
-"\nOptions:\n\t-R\t\toutput RFC-822 compliant date string\n"
-"\t-s\t\tset time described by STRING\n"
-"\t-u\t\tprint or set Coordinated Universal Time\n";
+static const char date_usage[] = "date [OPTION]... [+FORMAT]\n"
+ " or: date [OPTION] [MMDDhhmm[[CC]YY][.ss]]\n\n"
+ "Display the current time in the given FORMAT, or set the system date.\n"
+ "\nOptions:\n\t-R\t\toutput RFC-822 compliant date string\n"
+ "\t-s\t\tset time described by STRING\n"
+
+ "\t-u\t\tprint or set Coordinated Universal Time\n";
/* Input parsing code is always bulky - used heavy duty libc stuff as
@@ -51,240 +53,233 @@ static const char date_usage[] = "date [OPTION]... [+FORMAT]\n"
/* Default input handling to save suprising some people */
-struct tm *
-date_conv_time(struct tm *tm_time, const char *t_string) {
- int nr;
-
- nr = sscanf(t_string, "%2d%2d%2d%2d%d",
- &(tm_time->tm_mon),
- &(tm_time->tm_mday),
- &(tm_time->tm_hour),
- &(tm_time->tm_min),
- &(tm_time->tm_year));
-
- if(nr < 4 || nr > 5) {
- fprintf(stderr, invalid_date, "date", t_string);
- exit( FALSE);
- }
-
- /* correct for century - minor Y2K problem here? */
- if(tm_time->tm_year >= 1900)
- tm_time->tm_year -= 1900;
- /* adjust date */
- tm_time->tm_mon -= 1;
-
- return(tm_time);
+struct tm *date_conv_time(struct tm *tm_time, const char *t_string)
+{
+ int nr;
+
+ nr = sscanf(t_string, "%2d%2d%2d%2d%d",
+ &(tm_time->tm_mon),
+ &(tm_time->tm_mday),
+ &(tm_time->tm_hour),
+ &(tm_time->tm_min), &(tm_time->tm_year));
+
+ if (nr < 4 || nr > 5) {
+ fprintf(stderr, invalid_date, "date", t_string);
+ exit(FALSE);
+ }
+
+ /* correct for century - minor Y2K problem here? */
+ if (tm_time->tm_year >= 1900)
+ tm_time->tm_year -= 1900;
+ /* adjust date */
+ tm_time->tm_mon -= 1;
+
+ return (tm_time);
}
/* The new stuff for LRP */
-struct tm *
-date_conv_ftime(struct tm *tm_time, const char *t_string) {
- struct tm itm_time, jtm_time, ktm_time, \
- ltm_time, mtm_time, ntm_time;
-
- itm_time = *tm_time;
- jtm_time = *tm_time;
- ktm_time = *tm_time;
- ltm_time = *tm_time;
- mtm_time = *tm_time;
- ntm_time = *tm_time;
-
- /* Parse input and assign appropriately to tm_time */
-
- if(sscanf(t_string, "%d:%d:%d",
- &itm_time.tm_hour,
- &itm_time.tm_min,
- &itm_time.tm_sec) == 3 ) {
-
- *tm_time = itm_time;
- return(tm_time);
-
- } else if (sscanf(t_string, "%d:%d",
- &jtm_time.tm_hour,
- &jtm_time.tm_min) == 2) {
-
- *tm_time = jtm_time;
- return(tm_time);
-
- } else if (sscanf(t_string, "%d.%d-%d:%d:%d",
- &ktm_time.tm_mon,
- &ktm_time.tm_mday,
- &ktm_time.tm_hour,
- &ktm_time.tm_min,
- &ktm_time.tm_sec) == 5) {
-
- ktm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
- *tm_time = ktm_time;
- return(tm_time);
-
- } else if (sscanf(t_string, "%d.%d-%d:%d",
- &ltm_time.tm_mon,
- &ltm_time.tm_mday,
- &ltm_time.tm_hour,
- &ltm_time.tm_min) == 4) {
-
- ltm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
- *tm_time = ltm_time;
- return(tm_time);
-
- } else if (sscanf(t_string, "%d.%d.%d-%d:%d:%d",
- &mtm_time.tm_year,
- &mtm_time.tm_mon,
- &mtm_time.tm_mday,
- &mtm_time.tm_hour,
- &mtm_time.tm_min,
- &mtm_time.tm_sec) == 6) {
-
- mtm_time.tm_year -= 1900; /* Adjust years */
- mtm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
- *tm_time = mtm_time;
- return(tm_time);
-
- } else if (sscanf(t_string, "%d.%d.%d-%d:%d",
- &ntm_time.tm_year,
- &ntm_time.tm_mon,
- &ntm_time.tm_mday,
- &ntm_time.tm_hour,
- &ntm_time.tm_min) == 5) {
- ntm_time.tm_year -= 1900; /* Adjust years */
- ntm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
- *tm_time = ntm_time;
- return(tm_time);
-
- }
-
- fprintf(stderr, invalid_date, "date", t_string);
-
- exit( FALSE);
+struct tm *date_conv_ftime(struct tm *tm_time, const char *t_string)
+{
+ struct tm itm_time, jtm_time, ktm_time, ltm_time, mtm_time, ntm_time;
+
+ itm_time = *tm_time;
+ jtm_time = *tm_time;
+ ktm_time = *tm_time;
+ ltm_time = *tm_time;
+ mtm_time = *tm_time;
+ ntm_time = *tm_time;
+
+ /* Parse input and assign appropriately to tm_time */
+
+ if (sscanf(t_string, "%d:%d:%d",
+ &itm_time.tm_hour, &itm_time.tm_min, &itm_time.tm_sec) == 3) {
+
+ *tm_time = itm_time;
+ return (tm_time);
+
+ } else if (sscanf(t_string, "%d:%d",
+ &jtm_time.tm_hour, &jtm_time.tm_min) == 2) {
+
+ *tm_time = jtm_time;
+ return (tm_time);
+
+ } else if (sscanf(t_string, "%d.%d-%d:%d:%d",
+ &ktm_time.tm_mon,
+ &ktm_time.tm_mday,
+ &ktm_time.tm_hour,
+ &ktm_time.tm_min, &ktm_time.tm_sec) == 5) {
+
+ ktm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
+ *tm_time = ktm_time;
+ return (tm_time);
+
+ } else if (sscanf(t_string, "%d.%d-%d:%d",
+ &ltm_time.tm_mon,
+ &ltm_time.tm_mday,
+ &ltm_time.tm_hour, &ltm_time.tm_min) == 4) {
+
+ ltm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
+ *tm_time = ltm_time;
+ return (tm_time);
+
+ } else if (sscanf(t_string, "%d.%d.%d-%d:%d:%d",
+ &mtm_time.tm_year,
+ &mtm_time.tm_mon,
+ &mtm_time.tm_mday,
+ &mtm_time.tm_hour,
+ &mtm_time.tm_min, &mtm_time.tm_sec) == 6) {
+
+ mtm_time.tm_year -= 1900; /* Adjust years */
+ mtm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
+ *tm_time = mtm_time;
+ return (tm_time);
+
+ } else if (sscanf(t_string, "%d.%d.%d-%d:%d",
+ &ntm_time.tm_year,
+ &ntm_time.tm_mon,
+ &ntm_time.tm_mday,
+ &ntm_time.tm_hour, &ntm_time.tm_min) == 5) {
+ ntm_time.tm_year -= 1900; /* Adjust years */
+ ntm_time.tm_mon -= 1; /* Adjust dates from 1-12 to 0-11 */
+ *tm_time = ntm_time;
+ return (tm_time);
+
+ }
+
+ fprintf(stderr, invalid_date, "date", t_string);
+
+ exit(FALSE);
}
-int
-date_main(int argc, char * * argv)
+int date_main(int argc, char **argv)
{
- char *date_str = NULL;
- char *date_fmt = NULL;
- char *t_buff;
- int i;
- int set_time = 0;
- int rfc822 = 0;
- int utc = 0;
- int use_arg = 0;
- time_t tm;
- struct tm tm_time;
-
- /* Interpret command line args */
- i = --argc;
- argv++;
- while (i > 0 && **argv) {
- if (**argv == '-') {
- while (i>0 && *++(*argv)) switch (**argv) {
- case 'R':
- rfc822 = 1;
- break;
- case 's':
- set_time = 1;
- if(date_str != NULL) usage ( date_usage);
- date_str = optarg;
- break;
- case 'u':
- utc = 1;
- if (putenv ("TZ=UTC0") != 0) {
- fprintf(stderr, memory_exhausted, "date");
- exit( FALSE);
+ char *date_str = NULL;
+ char *date_fmt = NULL;
+ char *t_buff;
+ int i;
+ int set_time = 0;
+ int rfc822 = 0;
+ int utc = 0;
+ int use_arg = 0;
+ time_t tm;
+ struct tm tm_time;
+
+ /* Interpret command line args */
+ i = --argc;
+ argv++;
+ while (i > 0 && **argv) {
+ if (**argv == '-') {
+ while (i > 0 && *++(*argv))
+ switch (**argv) {
+ case 'R':
+ rfc822 = 1;
+ break;
+ case 's':
+ set_time = 1;
+ if (date_str != NULL)
+ usage(date_usage);
+ date_str = optarg;
+ break;
+ case 'u':
+ utc = 1;
+ if (putenv("TZ=UTC0") != 0) {
+ fprintf(stderr, memory_exhausted, "date");
+ exit(FALSE);
+ }
+ /* Look ma, no break. Don't fix it either. */
+ case 'd':
+ use_arg = 1;
+ if (date_str != NULL)
+ usage(date_usage);
+ date_str = optarg;
+ break;
+ case '-':
+ usage(date_usage);
+ }
+ } else {
+ if ((date_fmt == NULL) && (strcmp(*argv, "+") == 0))
+ date_fmt = *argv;
+ else if (date_str == NULL) {
+ set_time = 1;
+ date_str = *argv;
+ } else {
+ usage(date_usage);
+ }
}
- /* Look ma, no break. Don't fix it either. */
- case 'd':
- use_arg = 1;
- if(date_str != NULL) usage ( date_usage);
- date_str = optarg;
- break;
- case '-':
- usage ( date_usage);
- }
- } else {
- if ( (date_fmt == NULL) && (strcmp(*argv, "+")==0) )
- date_fmt=*argv;
- else if (date_str == NULL) {
- set_time = 1;
- date_str=*argv;
- } else {
- usage ( date_usage);
- }
+ i--;
+ argv++;
}
- i--;
- argv++;
- }
-
-
- /* Now we have parsed all the information except the date format
- which depends on whether the clock is being set or read */
-
- time(&tm);
- memcpy(&tm_time, localtime(&tm), sizeof(tm_time));
- /* Zero out fields - take her back to midnight!*/
- if(date_str != NULL) {
- tm_time.tm_sec = 0;
- tm_time.tm_min = 0;
- tm_time.tm_hour = 0;
- }
-
- /* Process any date input to UNIX time since 1 Jan 1970 */
- if(date_str != NULL) {
-
- if(strchr(date_str, ':') != NULL) {
- date_conv_ftime(&tm_time, date_str);
- } else {
- date_conv_time(&tm_time, date_str);
- }
-
- /* Correct any day of week and day of year etc fields */
- tm = mktime(&tm_time);
- if (tm < 0 ) {
- fprintf(stderr, invalid_date, "date", date_str);
- exit( FALSE);
- }
-
- /* if setting time, set it */
- if(set_time) {
- if( stime(&tm) < 0) {
- fprintf(stderr, "date: can't set date.\n");
- exit( FALSE);
- }
- }
- }
-
- /* Display output */
-
- /* Deal with format string */
- if(date_fmt == NULL) {
- date_fmt = (rfc822
- ? (utc
- ? "%a, %_d %b %Y %H:%M:%S GMT"
- : "%a, %_d %b %Y %H:%M:%S %z")
- : "%a %b %e %H:%M:%S %Z %Y");
-
- } else if ( *date_fmt == '\0' ) {
- /* Imitate what GNU 'date' does with NO format string! */
- printf ("\n");
- exit( TRUE);
- }
-
- /* Handle special conversions */
-
- if( strncmp( date_fmt, "%f", 2) == 0 ) {
- date_fmt = "%Y.%m.%d-%H:%M:%S";
- }
-
- /* Print OUTPUT (after ALL that!) */
- t_buff = malloc(201);
- strftime(t_buff, 200, date_fmt, &tm_time);
- printf("%s\n", t_buff);
-
- exit( TRUE);
+
+
+ /* Now we have parsed all the information except the date format
+ which depends on whether the clock is being set or read */
+
+ time(&tm);
+ memcpy(&tm_time, localtime(&tm), sizeof(tm_time));
+ /* Zero out fields - take her back to midnight! */
+ if (date_str != NULL) {
+ tm_time.tm_sec = 0;
+ tm_time.tm_min = 0;
+ tm_time.tm_hour = 0;
+ }
+
+ /* Process any date input to UNIX time since 1 Jan 1970 */
+ if (date_str != NULL) {
+
+ if (strchr(date_str, ':') != NULL) {
+ date_conv_ftime(&tm_time, date_str);
+ } else {
+ date_conv_time(&tm_time, date_str);
+ }
+
+ /* Correct any day of week and day of year etc fields */
+ tm = mktime(&tm_time);
+ if (tm < 0) {
+ fprintf(stderr, invalid_date, "date", date_str);
+ exit(FALSE);
+ }
+
+ /* if setting time, set it */
+ if (set_time) {
+ if (stime(&tm) < 0) {
+ fprintf(stderr, "date: can't set date.\n");
+ exit(FALSE);
+ }
+ }
+ }
+
+ /* Display output */
+
+ /* Deal with format string */
+ if (date_fmt == NULL) {
+ date_fmt = (rfc822
+ ? (utc
+ ? "%a, %_d %b %Y %H:%M:%S GMT"
+ : "%a, %_d %b %Y %H:%M:%S %z")
+ : "%a %b %e %H:%M:%S %Z %Y");
+
+ } else if (*date_fmt == '\0') {
+ /* Imitate what GNU 'date' does with NO format string! */
+ printf("\n");
+ exit(TRUE);
+ }
+
+ /* Handle special conversions */
+
+ if (strncmp(date_fmt, "%f", 2) == 0) {
+ date_fmt = "%Y.%m.%d-%H:%M:%S";
+ }
+
+ /* Print OUTPUT (after ALL that!) */
+ t_buff = malloc(201);
+ strftime(t_buff, 200, date_fmt, &tm_time);
+ printf("%s\n", t_buff);
+
+ exit(TRUE);
}
diff --git a/coreutils/dd.c b/coreutils/dd.c
index 3e1024a..0d5b3e8 100644
--- a/coreutils/dd.c
+++ b/coreutils/dd.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini dd implementation for busybox
*
@@ -40,164 +41,159 @@ typedef unsigned long long int uintmax_t;
#endif
static const char dd_usage[] =
-"dd [if=name] [of=name] [bs=n] [count=n] [skip=n] [seek=n]\n\n"
-"Copy a file, converting and formatting according to options\n\n"
-"\tif=FILE\tread from FILE instead of stdin\n"
-"\tof=FILE\twrite to FILE instead of stdout\n"
-"\tbs=n\tread and write n bytes at a time\n"
-"\tcount=n\tcopy only n input blocks\n"
-"\tskip=n\tskip n input blocks\n"
-"\tseek=n\tskip n output blocks\n"
-"\n"
-"Numbers may be suffixed by w (x2), k (x1024), b (x512), or M (x1024^2)\n";
+ "dd [if=name] [of=name] [bs=n] [count=n] [skip=n] [seek=n]\n\n"
+ "Copy a file, converting and formatting according to options\n\n"
+ "\tif=FILE\tread from FILE instead of stdin\n"
+ "\tof=FILE\twrite to FILE instead of stdout\n"
+ "\tbs=n\tread and write n bytes at a time\n"
+ "\tcount=n\tcopy only n input blocks\n"
+ "\tskip=n\tskip n input blocks\n"
+ "\tseek=n\tskip n output blocks\n"
+ "\n"
+ "Numbers may be suffixed by w (x2), k (x1024), b (x512), or M (x1024^2)\n";
-extern int dd_main (int argc, char **argv)
+
+extern int dd_main(int argc, char **argv)
{
- const char *inFile = NULL;
- const char *outFile = NULL;
- char *cp;
- int inFd;
- int outFd;
- int inCc = 0;
- int outCc;
- long blockSize = 512;
- uintmax_t skipBlocks = 0;
- uintmax_t seekBlocks = 0;
- uintmax_t count = (uintmax_t)-1;
- uintmax_t intotal;
- uintmax_t outTotal;
- unsigned char *buf;
-
- argc--;
- argv++;
-
- /* Parse any options */
- while (argc) {
- if (inFile == NULL && (strncmp(*argv, "if", 2) == 0))
- inFile=((strchr(*argv, '='))+1);
- else if (outFile == NULL && (strncmp(*argv, "of", 2) == 0))
- outFile=((strchr(*argv, '='))+1);
- else if (strncmp("count", *argv, 5) == 0) {
- count = getNum ((strchr(*argv, '='))+1);
- if (count <= 0) {
- fprintf (stderr, "Bad count value %s\n", *argv);
- goto usage;
- }
- }
- else if (strncmp(*argv, "bs", 2) == 0) {
- blockSize = getNum ((strchr(*argv, '='))+1);
- if (blockSize <= 0) {
- fprintf (stderr, "Bad block size value %s\n", *argv);
- goto usage;
- }
- }
- else if (strncmp(*argv, "skip", 4) == 0) {
- skipBlocks = getNum ((strchr(*argv, '='))+1);
- if (skipBlocks <= 0) {
- fprintf (stderr, "Bad skip value %s\n", *argv);
- goto usage;
- }
+ const char *inFile = NULL;
+ const char *outFile = NULL;
+ char *cp;
+ int inFd;
+ int outFd;
+ int inCc = 0;
+ int outCc;
+ long blockSize = 512;
+ uintmax_t skipBlocks = 0;
+ uintmax_t seekBlocks = 0;
+ uintmax_t count = (uintmax_t) - 1;
+ uintmax_t intotal;
+ uintmax_t outTotal;
+ unsigned char *buf;
+
+ argc--;
+ argv++;
+ /* Parse any options */
+ while (argc) {
+ if (inFile == NULL && (strncmp(*argv, "if", 2) == 0))
+ inFile = ((strchr(*argv, '=')) + 1);
+ else if (outFile == NULL && (strncmp(*argv, "of", 2) == 0))
+ outFile = ((strchr(*argv, '=')) + 1);
+ else if (strncmp("count", *argv, 5) == 0) {
+ count = getNum((strchr(*argv, '=')) + 1);
+ if (count <= 0) {
+ fprintf(stderr, "Bad count value %s\n", *argv);
+ goto usage;
+ }
+ } else if (strncmp(*argv, "bs", 2) == 0) {
+ blockSize = getNum((strchr(*argv, '=')) + 1);
+ if (blockSize <= 0) {
+ fprintf(stderr, "Bad block size value %s\n", *argv);
+ goto usage;
+ }
+ } else if (strncmp(*argv, "skip", 4) == 0) {
+ skipBlocks = getNum((strchr(*argv, '=')) + 1);
+ if (skipBlocks <= 0) {
+ fprintf(stderr, "Bad skip value %s\n", *argv);
+ goto usage;
+ }
+
+ } else if (strncmp(*argv, "seek", 4) == 0) {
+ seekBlocks = getNum((strchr(*argv, '=')) + 1);
+ if (seekBlocks <= 0) {
+ fprintf(stderr, "Bad seek value %s\n", *argv);
+ goto usage;
+ }
+
+ } else {
+ goto usage;
+ }
+ argc--;
+ argv++;
}
- else if (strncmp(*argv, "seek", 4) == 0) {
- seekBlocks = getNum ((strchr(*argv, '='))+1);
- if (seekBlocks <= 0) {
- fprintf (stderr, "Bad seek value %s\n", *argv);
- goto usage;
- }
+ buf = malloc(blockSize);
+ if (buf == NULL) {
+ fprintf(stderr, "Cannot allocate buffer\n");
+ exit(FALSE);
}
- else {
- goto usage;
+
+ intotal = 0;
+ outTotal = 0;
+
+ if (inFile == NULL)
+ inFd = fileno(stdin);
+ else
+ inFd = open(inFile, 0);
+
+ if (inFd < 0) {
+ perror(inFile);
+ free(buf);
+ exit(FALSE);
}
- argc--;
- argv++;
- }
-
- buf = malloc (blockSize);
- if (buf == NULL) {
- fprintf (stderr, "Cannot allocate buffer\n");
- exit( FALSE);
- }
-
- intotal = 0;
- outTotal = 0;
-
- if (inFile == NULL)
- inFd = fileno(stdin);
- else
- inFd = open (inFile, 0);
-
- if (inFd < 0) {
- perror (inFile);
- free (buf);
- exit( FALSE);
- }
-
- if (outFile == NULL)
- outFd = fileno(stdout);
- else
- outFd = open(outFile, O_WRONLY | O_CREAT | O_TRUNC, 0666);
-
- if (outFd < 0) {
- perror (outFile);
- close (inFd);
- free (buf);
- exit( FALSE);
- }
-
- lseek(inFd, skipBlocks*blockSize, SEEK_SET);
- lseek(outFd, seekBlocks*blockSize, SEEK_SET);
- //
- //TODO: Convert to using fullRead & fullWrite
- // from utility.c
- // -Erik
- while (outTotal < count * blockSize) {
- inCc = read (inFd, buf, blockSize);
- if (inCc < 0) {
- perror (inFile);
- goto cleanup;
- } else if (inCc == 0) {
- goto cleanup;
+
+ if (outFile == NULL)
+ outFd = fileno(stdout);
+ else
+ outFd = open(outFile, O_WRONLY | O_CREAT | O_TRUNC, 0666);
+
+ if (outFd < 0) {
+ perror(outFile);
+ close(inFd);
+ free(buf);
+ exit(FALSE);
}
- intotal += inCc;
- cp = buf;
-
- while (intotal > outTotal) {
- if (outTotal + inCc > count * blockSize)
- inCc = count * blockSize - outTotal;
- outCc = write (outFd, cp, inCc);
- if (outCc < 0) {
- perror (outFile);
- goto cleanup;
- } else if (outCc == 0) {
- goto cleanup;
- }
-
- inCc -= outCc;
- cp += outCc;
- outTotal += outCc;
+
+ lseek(inFd, skipBlocks * blockSize, SEEK_SET);
+ lseek(outFd, seekBlocks * blockSize, SEEK_SET);
+ //
+ //TODO: Convert to using fullRead & fullWrite
+ // from utility.c
+ // -Erik
+ while (outTotal < count * blockSize) {
+ inCc = read(inFd, buf, blockSize);
+ if (inCc < 0) {
+ perror(inFile);
+ goto cleanup;
+ } else if (inCc == 0) {
+ goto cleanup;
+ }
+ intotal += inCc;
+ cp = buf;
+
+ while (intotal > outTotal) {
+ if (outTotal + inCc > count * blockSize)
+ inCc = count * blockSize - outTotal;
+ outCc = write(outFd, cp, inCc);
+ if (outCc < 0) {
+ perror(outFile);
+ goto cleanup;
+ } else if (outCc == 0) {
+ goto cleanup;
+ }
+
+ inCc -= outCc;
+ cp += outCc;
+ outTotal += outCc;
+ }
}
- }
- if (inCc < 0)
- perror (inFile);
+ if (inCc < 0)
+ perror(inFile);
cleanup:
- close (inFd);
- close (outFd);
- free (buf);
-
- printf ("%ld+%d records in\n", (long)(intotal / blockSize),
- (intotal % blockSize) != 0);
- printf ("%ld+%d records out\n", (long)(outTotal / blockSize),
- (outTotal % blockSize) != 0);
- exit( TRUE);
+ close(inFd);
+ close(outFd);
+ free(buf);
+
+ printf("%ld+%d records in\n", (long) (intotal / blockSize),
+ (intotal % blockSize) != 0);
+ printf("%ld+%d records out\n", (long) (outTotal / blockSize),
+ (outTotal % blockSize) != 0);
+ exit(TRUE);
usage:
- usage( dd_usage);
+ usage(dd_usage);
}
-
-
diff --git a/coreutils/df.c b/coreutils/df.c
index 24c94a2..43d5d26 100644
--- a/coreutils/df.c
+++ b/coreutils/df.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini df implementation for busybox
*
@@ -29,81 +30,81 @@
#include <fstab.h>
static const char df_usage[] = "df [filesystem ...]\n"
- "\n" "\tPrint the filesystem space used and space available.\n";
-extern const char mtab_file[]; /* Defined in utility.c */
+ "\n" "\tPrint the filesystem space used and space available.\n";
+
+extern const char mtab_file[]; /* Defined in utility.c */
static int df(char *device, const char *mountPoint)
{
- struct statfs s;
- long blocks_used;
- long blocks_percent_used;
- struct fstab* fstabItem;
-
- if (statfs(mountPoint, &s) != 0) {
- perror(mountPoint);
- return FALSE;
- }
+ struct statfs s;
+ long blocks_used;
+ long blocks_percent_used;
+ struct fstab *fstabItem;
- if (s.f_blocks > 0) {
- blocks_used = s.f_blocks - s.f_bfree;
- blocks_percent_used = (long)
- (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5);
- /* Note that if /etc/fstab is missing, libc can't fix up /dev/root for us */
- if (strcmp (device, "/dev/root") == 0) {
- fstabItem = getfsfile ("/");
- if (fstabItem != NULL)
- device = fstabItem->fs_spec;
+ if (statfs(mountPoint, &s) != 0) {
+ perror(mountPoint);
+ return FALSE;
}
- printf("%-20s %9ld %9ld %9ld %3ld%% %s\n",
- device,
- (long) (s.f_blocks * (s.f_bsize / 1024.0)),
- (long) ((s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0)),
- (long) (s.f_bavail * (s.f_bsize / 1024.0)),
- blocks_percent_used, mountPoint);
- }
+ if (s.f_blocks > 0) {
+ blocks_used = s.f_blocks - s.f_bfree;
+ blocks_percent_used = (long)
+ (blocks_used * 100.0 / (blocks_used + s.f_bavail) + 0.5);
+ /* Note that if /etc/fstab is missing, libc can't fix up /dev/root for us */
+ if (strcmp(device, "/dev/root") == 0) {
+ fstabItem = getfsfile("/");
+ if (fstabItem != NULL)
+ device = fstabItem->fs_spec;
+ }
+ printf("%-20s %9ld %9ld %9ld %3ld%% %s\n",
+ device,
+ (long) (s.f_blocks * (s.f_bsize / 1024.0)),
+ (long) ((s.f_blocks - s.f_bfree) * (s.f_bsize / 1024.0)),
+ (long) (s.f_bavail * (s.f_bsize / 1024.0)),
+ blocks_percent_used, mountPoint);
+
+ }
- return TRUE;
+ return TRUE;
}
extern int df_main(int argc, char **argv)
{
- printf("%-20s %-14s %s %s %s %s\n", "Filesystem",
- "1k-blocks", "Used", "Available", "Use%", "Mounted on");
+ printf("%-20s %-14s %s %s %s %s\n", "Filesystem",
+ "1k-blocks", "Used", "Available", "Use%", "Mounted on");
- if (argc > 1) {
- struct mntent *mountEntry;
- int status;
+ if (argc > 1) {
+ struct mntent *mountEntry;
+ int status;
- while (argc > 1) {
- if ((mountEntry = findMountPoint(argv[1], mtab_file)) ==
- 0) {
- fprintf(stderr, "%s: can't find mount point.\n", argv[1]);
- exit( FALSE);
- }
- status = df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
- if (status != 0)
- exit( status);
- argc--;
- argv++;
- }
- exit( TRUE);
- } else {
- FILE *mountTable;
- struct mntent *mountEntry;
+ while (argc > 1) {
+ if ((mountEntry = findMountPoint(argv[1], mtab_file)) == 0) {
+ fprintf(stderr, "%s: can't find mount point.\n", argv[1]);
+ exit(FALSE);
+ }
+ status = df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
+ if (status != 0)
+ exit(status);
+ argc--;
+ argv++;
+ }
+ exit(TRUE);
+ } else {
+ FILE *mountTable;
+ struct mntent *mountEntry;
- mountTable = setmntent(mtab_file, "r");
- if (mountTable == 0) {
- perror(mtab_file);
- exit(FALSE);
- }
+ mountTable = setmntent(mtab_file, "r");
+ if (mountTable == 0) {
+ perror(mtab_file);
+ exit(FALSE);
+ }
- while ((mountEntry = getmntent(mountTable))) {
- df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
+ while ((mountEntry = getmntent(mountTable))) {
+ df(mountEntry->mnt_fsname, mountEntry->mnt_dir);
+ }
+ endmntent(mountTable);
}
- endmntent(mountTable);
- }
- exit( TRUE);
+ exit(TRUE);
}
diff --git a/coreutils/du.c b/coreutils/du.c
index e2cf3f7..7151e3a 100644
--- a/coreutils/du.c
+++ b/coreutils/du.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini du implementation for busybox
*
@@ -31,119 +32,121 @@
#include <dirent.h>
#include <stdio.h>
#include <errno.h>
-#include <sys/param.h> /* for PATH_MAX */
+#include <sys/param.h> /* for PATH_MAX */
-typedef void (Display)(long, char *);
+typedef void (Display) (long, char *);
static const char du_usage[] =
-"du [OPTION]... [FILE]...\n\n"
-"\t-s\tdisplay only a total for each argument\n"
-;
-static int du_depth = 0;
+ "du [OPTION]... [FILE]...\n\n"
+ "\t-s\tdisplay only a total for each argument\n";
-static Display *print;
+static int du_depth = 0;
-static void
-print_normal(long size, char *filename)
+static Display *print;
+
+static void print_normal(long size, char *filename)
{
- fprintf(stdout, "%-7ld %s\n", size, filename);
+ fprintf(stdout, "%-7ld %s\n", size, filename);
}
-static void
-print_summary(long size, char *filename)
+static void print_summary(long size, char *filename)
{
- if (du_depth == 1) {
- print_normal(size, filename);
- }
+ if (du_depth == 1) {
+ print_normal(size, filename);
+ }
}
/* tiny recursive du */
-static long
-du(char *filename)
+static long du(char *filename)
{
- struct stat statbuf;
- long sum;
-
- if ((lstat(filename, &statbuf)) != 0) {
- fprintf(stdout, "du: %s: %s\n", filename, strerror(errno));
- return 0;
- }
-
- du_depth++;
- sum = statbuf.st_blocks;
-
- if (S_ISDIR(statbuf.st_mode)) {
- DIR *dir;
- struct dirent *entry;
-
- dir = opendir(filename);
- if (!dir) { return 0; }
- while ((entry = readdir(dir))) {
- char newfile[PATH_MAX + 1];
- char *name = entry->d_name;
-
- if ( (strcmp(name, "..") == 0)
- || (strcmp(name, ".") == 0))
- { continue; }
-
- if (strlen(filename) + strlen(name) + 1 > PATH_MAX) {
- fprintf(stderr, name_too_long, "du");
- return 0;
- }
- sprintf(newfile, "%s/%s", filename, name);
-
- sum += du(newfile);
+ struct stat statbuf;
+ long sum;
+
+ if ((lstat(filename, &statbuf)) != 0) {
+ fprintf(stdout, "du: %s: %s\n", filename, strerror(errno));
+ return 0;
}
- closedir(dir);
- print(sum, filename);
- }
- du_depth--;
- return sum;
+
+ du_depth++;
+ sum = statbuf.st_blocks;
+
+ if (S_ISDIR(statbuf.st_mode)) {
+ DIR *dir;
+ struct dirent *entry;
+
+ dir = opendir(filename);
+ if (!dir) {
+ return 0;
+ }
+ while ((entry = readdir(dir))) {
+ char newfile[PATH_MAX + 1];
+ char *name = entry->d_name;
+
+ if ((strcmp(name, "..") == 0)
+ || (strcmp(name, ".") == 0)) {
+ continue;
+ }
+
+ if (strlen(filename) + strlen(name) + 1 > PATH_MAX) {
+ fprintf(stderr, name_too_long, "du");
+ return 0;
+ }
+ sprintf(newfile, "%s/%s", filename, name);
+
+ sum += du(newfile);
+ }
+ closedir(dir);
+ print(sum, filename);
+ }
+ du_depth--;
+ return sum;
}
-int
-du_main(int argc, char **argv)
+int du_main(int argc, char **argv)
{
- int i;
- char opt;
-
- /* default behaviour */
- print = print_normal;
-
- /* parse argv[] */
- for (i = 1; i < argc; i++) {
- if (argv[i][0] == '-') {
- opt = argv[i][1];
- switch (opt) {
- case 's':
- print = print_summary;
- break;
- case 'h':
- usage(du_usage);
- break;
- default:
- fprintf(stderr, "du: invalid option -- %c\n", opt);
- usage(du_usage);
- }
- } else {
- break;
+ int i;
+ char opt;
+
+ /* default behaviour */
+ print = print_normal;
+
+ /* parse argv[] */
+ for (i = 1; i < argc; i++) {
+ if (argv[i][0] == '-') {
+ opt = argv[i][1];
+ switch (opt) {
+ case 's':
+ print = print_summary;
+ break;
+ case 'h':
+ usage(du_usage);
+ break;
+ default:
+ fprintf(stderr, "du: invalid option -- %c\n", opt);
+ usage(du_usage);
+ }
+ } else {
+ break;
+ }
}
- }
- /* go through remaining args (if any) */
- if (i >= argc) {
- du(".");
- } else {
- long sum;
- for ( ; i < argc; i++) {
- sum = du(argv[i]);
- if ((sum) && (isDirectory(argv[i], FALSE))) { print_normal(sum, argv[i]); }
+ /* go through remaining args (if any) */
+ if (i >= argc) {
+ du(".");
+ } else {
+ long sum;
+
+ for (; i < argc; i++) {
+ sum = du(argv[i]);
+ if ((sum) && (isDirectory(argv[i], FALSE))) {
+ print_normal(sum, argv[i]);
+ }
+ }
}
- }
- exit(0);
+ exit(0);
}
-/* $Id: du.c,v 1.10 2000/02/07 05:29:42 erik Exp $ */
+/* $Id: du.c,v 1.11 2000/02/08 19:58:47 erik Exp $ */
diff --git a/coreutils/head.c b/coreutils/head.c
index b80d065..82a73de 100644
--- a/coreutils/head.c
+++ b/coreutils/head.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini head implementation for busybox
*
@@ -26,83 +27,86 @@
#include <stdio.h>
const char head_usage[] =
-"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\n"
-"Options:\n"
-"\t-n NUM\t\tPrint first NUM lines instead of first 10\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\n"
-int
-head(int len, FILE *src)
+ "Options:\n" "\t-n NUM\t\tPrint first NUM lines instead of first 10\n";
+
+int head(int len, FILE * src)
{
- int i;
- char buffer[1024];
+ int i;
+ char buffer[1024];
- for (i = 0; i < len; i++) {
- fgets(buffer, 1024, src);
- if (feof(src)) { break; }
- fputs(buffer, stdout);
- }
- return 0;
+ for (i = 0; i < len; i++) {
+ fgets(buffer, 1024, src);
+ if (feof(src)) {
+ break;
+ }
+ fputs(buffer, stdout);
+ }
+ return 0;
}
/* BusyBoxed head(1) */
-int
-head_main(int argc, char **argv)
+int head_main(int argc, char **argv)
{
- char opt;
- int len = 10, tmplen, i;
+ char opt;
+ int len = 10, tmplen, i;
- /* parse argv[] */
- 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);
- default:
- fprintf(stderr, "head: invalid option -- %c\n", opt);
- usage(head_usage);
- }
- } else {
- break;
+ /* parse argv[] */
+ 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);
+ default:
+ fprintf(stderr, "head: invalid option -- %c\n", opt);
+ usage(head_usage);
+ }
+ } else {
+ break;
+ }
}
- }
- /* get rest of argv[] or stdin if nothing's left */
- if (i >= argc) {
- head(len, stdin);
+ /* get rest of argv[] or stdin if nothing's left */
+ if (i >= argc) {
+ head(len, stdin);
- } else {
- int need_headers = ((argc - i) > 1);
- for ( ; i < argc; i++) {
- FILE *src;
- src = fopen(argv[i], "r");
- if (!src) {
- fprintf(stderr,"head: %s: %s\n", argv[i], strerror(errno));
- } else {
- /* emulating GNU behaviour */
- if (need_headers) {
- fprintf(stdout, "==> %s <==\n", argv[i]);
- }
- head(len, src);
- if (i < argc - 1) {
- fprintf(stdout, "\n");
+ } else {
+ int need_headers = ((argc - i) > 1);
+
+ for (; i < argc; i++) {
+ FILE *src;
+
+ src = fopen(argv[i], "r");
+ if (!src) {
+ fprintf(stderr, "head: %s: %s\n", argv[i],
+ strerror(errno));
+ } else {
+ /* emulating GNU behaviour */
+ if (need_headers) {
+ fprintf(stdout, "==> %s <==\n", argv[i]);
+ }
+ head(len, src);
+ if (i < argc - 1) {
+ fprintf(stdout, "\n");
+ }
+ }
}
- }
}
- }
- exit(0);
+ exit(0);
}
-/* $Id: head.c,v 1.7 2000/02/07 05:29:42 erik Exp $ */
+/* $Id: head.c,v 1.8 2000/02/08 19:58:47 erik Exp $ */
diff --git a/coreutils/hostid.c b/coreutils/hostid.c
index f8d5862..9e503e5 100644
--- a/coreutils/hostid.c
+++ b/coreutils/hostid.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini hostid implementation for busybox
*
@@ -22,7 +23,8 @@
#include "internal.h"
#include <stdio.h>
-extern int hostid_main(int argc, char **argv) {
- printf ("%lx\n", gethostid());
- exit( TRUE);
+extern int hostid_main(int argc, char **argv)
+{
+ printf("%lx\n", gethostid());
+ exit(TRUE);
}
diff --git a/coreutils/length.c b/coreutils/length.c
index 2c83cdf..00e5a17 100644
--- a/coreutils/length.c
+++ b/coreutils/length.c
@@ -1,14 +1,14 @@
+/* vi: set sw=4 ts=4: */
#include "internal.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
-extern int
-length_main(int argc, char * * argv)
+extern int length_main(int argc, char **argv)
{
- if ( argc != 2 || **(argv+1) == '-' ) {
- usage("length string\n");
- }
- printf("%d\n", strlen(argv[1]));
- return( TRUE);
+ if (argc != 2 || **(argv + 1) == '-') {
+ usage("length string\n");
+ }
+ printf("%d\n", strlen(argv[1]));
+ return (TRUE);
}
diff --git a/coreutils/ln.c b/coreutils/ln.c
index f20b340..bc51cb0 100644
--- a/coreutils/ln.c
+++ b/coreutils/ln.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini ln implementation for busybox
*
@@ -30,15 +31,16 @@
#include <stdio.h>
#include <dirent.h>
#include <errno.h>
-#include <sys/param.h> /* for PATH_MAX */
+#include <sys/param.h> /* for PATH_MAX */
static const char ln_usage[] =
- "ln [OPTION] TARGET... LINK_NAME|DIRECTORY\n\n"
- "Create a link named LINK_NAME or DIRECTORY to the specified TARGET\n\n"
- "Options:\n"
- "\t-s\tmake symbolic links instead of hard links\n"
- "\t-f\tremove existing destination files\n"
- "\t-n\tno dereference symlinks - treat like normal file\n";
+ "ln [OPTION] TARGET... LINK_NAME|DIRECTORY\n\n"
+ "Create a link named LINK_NAME or DIRECTORY to the specified TARGET\n\n"
+ "Options:\n"
+ "\t-s\tmake symbolic links instead of hard links\n"
+
+ "\t-f\tremove existing destination files\n"
+ "\t-n\tno dereference symlinks - treat like normal file\n";
static int symlinkFlag = FALSE;
static int removeoldFlag = FALSE;
@@ -46,83 +48,83 @@ static int followLinks = TRUE;
extern int ln_main(int argc, char **argv)
{
- char *linkName;
- int linkIntoDirFlag;
-
- if (argc < 3) {
- usage (ln_usage);
- }
- argc--;
- argv++;
-
- /* Parse any options */
- while (**argv == '-') {
- while (*++(*argv))
- switch (**argv) {
- case 's':
- symlinkFlag = TRUE;
- break;
- case 'f':
- removeoldFlag = TRUE;
- break;
- case 'n':
- followLinks = FALSE;
- break;
- default:
- usage (ln_usage);
- }
+ char *linkName;
+ int linkIntoDirFlag;
+
+ if (argc < 3) {
+ usage(ln_usage);
+ }
argc--;
argv++;
- }
-
- linkName = argv[argc - 1];
-
- if (strlen(linkName) > PATH_MAX) {
- fprintf(stderr, name_too_long, "ln");
- exit FALSE;
- }
- linkIntoDirFlag = isDirectory(linkName, TRUE);
-
- if ((argc > 3) && !linkIntoDirFlag) {
- fprintf(stderr, not_a_directory, "ln", linkName);
- exit FALSE;
- }
+ /* Parse any options */
+ while (**argv == '-') {
+ while (*++(*argv))
+ switch (**argv) {
+ case 's':
+ symlinkFlag = TRUE;
+ break;
+ case 'f':
+ removeoldFlag = TRUE;
+ break;
+ case 'n':
+ followLinks = FALSE;
+ break;
+ default:
+ usage(ln_usage);
+ }
+ argc--;
+ argv++;
+ }
- while (argc-- >= 2) {
- char srcName[PATH_MAX + 1];
- int nChars, status;
+ linkName = argv[argc - 1];
- if (strlen(*argv) > PATH_MAX) {
- fprintf(stderr, name_too_long, "ln");
- exit FALSE;
+ if (strlen(linkName) > PATH_MAX) {
+ fprintf(stderr, name_too_long, "ln");
+ exit FALSE;
}
- if (followLinks == FALSE) {
- strcpy(srcName, *argv);
- } else {
- /* Warning! This can silently truncate if > PATH_MAX, but
- I don't think that there can be one > PATH_MAX anyway. */
- nChars = readlink(*argv, srcName, PATH_MAX);
- srcName[nChars] = '\0';
- }
+ linkIntoDirFlag = isDirectory(linkName, TRUE);
- if (removeoldFlag == TRUE) {
- status = ( unlink(linkName) && errno != ENOENT );
- if (status != 0) {
- perror(linkName);
+ if ((argc > 3) && !linkIntoDirFlag) {
+ fprintf(stderr, not_a_directory, "ln", linkName);
exit FALSE;
- }
}
- if (symlinkFlag == TRUE)
- status = symlink(*argv, linkName);
- else
- status = link(*argv, linkName);
- if (status != 0) {
- perror(linkName);
- exit FALSE;
+ while (argc-- >= 2) {
+ char srcName[PATH_MAX + 1];
+ int nChars, status;
+
+ if (strlen(*argv) > PATH_MAX) {
+ fprintf(stderr, name_too_long, "ln");
+ exit FALSE;
+ }
+
+ if (followLinks == FALSE) {
+ strcpy(srcName, *argv);
+ } else {
+ /* Warning! This can silently truncate if > PATH_MAX, but
+ I don't think that there can be one > PATH_MAX anyway. */
+ nChars = readlink(*argv, srcName, PATH_MAX);
+ srcName[nChars] = '\0';
+ }
+
+ if (removeoldFlag == TRUE) {
+ status = (unlink(linkName) && errno != ENOENT);
+ if (status != 0) {
+ perror(linkName);
+ exit FALSE;
+ }
+ }
+
+ if (symlinkFlag == TRUE)
+ status = symlink(*argv, linkName);
+ else
+ status = link(*argv, linkName);
+ if (status != 0) {
+ perror(linkName);
+ exit FALSE;
+ }
}
- }
- exit TRUE;
+ exit TRUE;
}
diff --git a/coreutils/logname.c b/coreutils/logname.c
index 5c8275a..182f40e 100644
--- a/coreutils/logname.c
+++ b/coreutils/logname.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini logname implementation for busybox
*
@@ -23,18 +24,21 @@
#include <stdio.h>
static const char logname_usage[] = "logname\n\n"
-"Print the name of the current user.\n";
-extern int logname_main(int argc, char **argv) {
+ "Print the name of the current user.\n";
+
+extern int logname_main(int argc, char **argv)
+{
char *cp;
- if (argc > 1) usage (logname_usage);
+ if (argc > 1)
+ usage(logname_usage);
- cp = getlogin ();
+ cp = getlogin();
if (cp) {
- puts (cp);
- exit (TRUE);
- }
- fprintf (stderr, "%s: no login name\n", argv[0]);
- exit (FALSE);
+ puts(cp);
+ exit(TRUE);
+ }
+ fprintf(stderr, "%s: no login name\n", argv[0]);
+ exit(FALSE);
}
diff --git a/coreutils/ls.c b/coreutils/ls.c
index 450ea18..f23c1e0 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* tiny-ls.c version 0.1.0: A minimalist 'ls'
* Copyright (C) 1996 Brian Candler <B.Candler@pobox.com>
@@ -40,18 +41,18 @@
* 1. requires lstat (BSD) - how do you do it without?
*/
-#define TERMINAL_WIDTH 80 /* use 79 if your terminal has linefold bug */
-#define COLUMN_WIDTH 14 /* default if AUTOWIDTH not defined */
-#define COLUMN_GAP 2 /* includes the file type char, if present */
+#define TERMINAL_WIDTH 80 /* use 79 if your terminal has linefold bug */
+#define COLUMN_WIDTH 14 /* default if AUTOWIDTH not defined */
+#define COLUMN_GAP 2 /* includes the file type char, if present */
#define HAS_REWINDDIR
/************************************************************************/
#include "internal.h"
#if !defined(__GLIBC__) && (__GLIBC__ >= 2) && (__GLIBC_MINOR__ >= 1)
-# include <linux/types.h>
+# include <linux/types.h>
#else
-# include <sys/types.h>
+# include <sys/types.h>
#endif
#include <sys/stat.h>
#include <stdio.h>
@@ -75,28 +76,28 @@
#endif
#define FMT_AUTO 0
-#define FMT_LONG 1 /* one record per line, extended info */
-#define FMT_SINGLE 2 /* one record per line */
-#define FMT_ROWS 3 /* print across rows */
-#define FMT_COLUMNS 3 /* fill columns (same, since we don't sort) */
+#define FMT_LONG 1 /* one record per line, extended info */
+#define FMT_SINGLE 2 /* one record per line */
+#define FMT_ROWS 3 /* print across rows */
+#define FMT_COLUMNS 3 /* fill columns (same, since we don't sort) */
#define TIME_MOD 0
#define TIME_CHANGE 1
#define TIME_ACCESS 2
-#define DISP_FTYPE 1 /* show character for file type */
-#define DISP_EXEC 2 /* show '*' if regular executable file */
-#define DISP_HIDDEN 4 /* show files starting . (except . and ..) */
-#define DISP_DOT 8 /* show . and .. */
-#define DISP_NUMERIC 16 /* numeric uid and gid */
-#define DISP_FULLTIME 32 /* show extended time display */
-#define DIR_NOLIST 64 /* show directory as itself, not contents */
-#define DISP_DIRNAME 128 /* show directory name (for internal use) */
-#define DIR_RECURSE 256 /* -R (not yet implemented) */
+#define DISP_FTYPE 1 /* show character for file type */
+#define DISP_EXEC 2 /* show '*' if regular executable file */
+#define DISP_HIDDEN 4 /* show files starting . (except . and ..) */
+#define DISP_DOT 8 /* show . and .. */
+#define DISP_NUMERIC 16 /* numeric uid and gid */
+#define DISP_FULLTIME 32 /* show extended time display */
+#define DIR_NOLIST 64 /* show directory as itself, not contents */
+#define DISP_DIRNAME 128 /* show directory name (for internal use) */
+#define DIR_RECURSE 256 /* -R (not yet implemented) */
-static unsigned char display_fmt = FMT_AUTO;
-static unsigned short opts = 0;
-static unsigned short column = 0;
+static unsigned char display_fmt = FMT_AUTO;
+static unsigned short opts = 0;
+static unsigned short column = 0;
#ifdef BB_FEATURE_AUTOWIDTH
static unsigned short terminal_width = 0, column_width = 0;
@@ -113,13 +114,14 @@ static unsigned char time_fmt = TIME_MOD;
static void writenum(long val, short minwidth)
{
- char scratch[128];
+ char scratch[128];
char *p = scratch + sizeof(scratch);
short len = 0;
short neg = (val < 0);
-
- if (neg) val = -val;
+
+ if (neg)
+ val = -val;
do
*--p = (val % 10) + '0', len++, val /= 10;
while (val);
@@ -142,8 +144,9 @@ static void newline(void)
static void tab(short col)
{
static const char spaces[] = " ";
- #define nspaces ((sizeof spaces)-1) /* null terminator! */
-
+
+#define nspaces ((sizeof spaces)-1) /* null terminator! */
+
short n = col - column;
if (n > 0) {
@@ -155,7 +158,7 @@ static void tab(short col)
/* must be 1...(sizeof spaces) left */
wr(spaces, n);
}
- #undef nspaces
+#undef nspaces
}
#ifdef BB_FEATURE_LS_FILETYPES
@@ -163,8 +166,8 @@ static char append_char(mode_t mode)
{
if (!(opts & DISP_FTYPE))
return '\0';
- if ((opts & DISP_EXEC) && S_ISREG(mode) && (mode & (S_IXUSR|S_IXGRP|S_IXOTH)))
- return '*';
+ if ((opts & DISP_EXEC) && S_ISREG(mode)
+ && (mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return '*';
return APPCHAR(mode);
}
#endif
@@ -176,89 +179,93 @@ static char append_char(mode_t mode)
**
**/
-static void list_single(const char *name, struct stat *info, const char *fullname)
+static void list_single(const char *name, struct stat *info,
+ const char *fullname)
{
char scratch[PATH_MAX + 1];
short len = strlen(name);
+
#ifdef BB_FEATURE_LS_FILETYPES
char append = append_char(info->st_mode);
#endif
-
+
if (display_fmt == FMT_LONG) {
- mode_t mode = info->st_mode;
+ mode_t mode = info->st_mode;
+
newline();
wr(modeString(mode), 10);
- column=10;
- writenum((long)info->st_nlink,(short)5);
+ column = 10;
+ writenum((long) info->st_nlink, (short) 5);
fputs(" ", stdout);
#ifdef BB_FEATURE_LS_USERNAME
if (!(opts & DISP_NUMERIC)) {
- memset ( scratch, 0, sizeof (scratch));
- my_getpwuid( scratch, info->st_uid);
+ memset(scratch, 0, sizeof(scratch));
+ my_getpwuid(scratch, info->st_uid);
if (*scratch) {
- fputs(scratch, stdout);
- if ( strlen( scratch) <= 8 )
- wr(" ", 9-strlen( scratch));
- }
- else {
- writenum((long) info->st_uid,(short)8);
+ fputs(scratch, stdout);
+ if (strlen(scratch) <= 8)
+ wr(" ", 9 - strlen(scratch));
+ } else {
+ writenum((long) info->st_uid, (short) 8);
fputs(" ", stdout);
}
} else
#endif
{
- writenum((long) info->st_uid,(short)8);
- fputs(" ", stdout);
+ writenum((long) info->st_uid, (short) 8);
+ fputs(" ", stdout);
}
#ifdef BB_FEATURE_LS_USERNAME
if (!(opts & DISP_NUMERIC)) {
- memset ( scratch, 0, sizeof (scratch));
- my_getgrgid( scratch, info->st_gid);
+ memset(scratch, 0, sizeof(scratch));
+ my_getgrgid(scratch, info->st_gid);
if (*scratch) {
- fputs(scratch, stdout);
- if ( strlen( scratch) <= 8 )
- wr(" ", 8-strlen( scratch));
- }
- else
- writenum((long) info->st_gid,(short)8);
+ fputs(scratch, stdout);
+ if (strlen(scratch) <= 8)
+ wr(" ", 8 - strlen(scratch));
+ } else
+ writenum((long) info->st_gid, (short) 8);
} else
#endif
- writenum((long) info->st_gid,(short)8);
+ writenum((long) info->st_gid, (short) 8);
//tab(26);
if (S_ISBLK(mode) || S_ISCHR(mode)) {
- writenum((long)MAJOR(info->st_rdev),(short)3);
+ writenum((long) MAJOR(info->st_rdev), (short) 3);
fputs(", ", stdout);
- writenum((long)MINOR(info->st_rdev),(short)3);
- }
- else
- writenum((long)info->st_size,(short)8);
+ writenum((long) MINOR(info->st_rdev), (short) 3);
+ } else
+ writenum((long) info->st_size, (short) 8);
fputs(" ", stdout);
//tab(32);
#ifdef BB_FEATURE_LS_TIMESTAMPS
{
time_t cal;
char *string;
-
- switch(time_fmt) {
+
+ switch (time_fmt) {
case TIME_CHANGE:
- cal=info->st_ctime; break;
+ cal = info->st_ctime;
+ break;
case TIME_ACCESS:
- cal=info->st_atime; break;
+ cal = info->st_atime;
+ break;
default:
- cal=info->st_mtime; break;
+ cal = info->st_mtime;
+ break;
}
- string=ctime(&cal);
+ string = ctime(&cal);
if (opts & DISP_FULLTIME)
- wr(string,24);
+ wr(string, 24);
else {
time_t age = time(NULL) - cal;
- wr(string+4,7); /* mmm_dd_ */
- if(age < 3600L*24*365/2 && age > -15*60)
+
+ wr(string + 4, 7); /* mmm_dd_ */
+ if (age < 3600L * 24 * 365 / 2 && age > -15 * 60)
/* hh:mm if less than 6 months old */
- wr(string+11,5);
+ wr(string + 11, 5);
else
/* _yyyy otherwise */
- wr(string+19,5);
+ wr(string + 19, 5);
}
wr(" ", 1);
}
@@ -269,7 +276,8 @@ static void list_single(const char *name, struct stat *info, const char *fullnam
if (S_ISLNK(mode)) {
wr(" -> ", 4);
len = readlink(fullname, scratch, sizeof scratch);
- if (len > 0) fwrite(scratch, 1, len, stdout);
+ if (len > 0)
+ fwrite(scratch, 1, len, stdout);
#ifdef BB_FEATURE_LS_FILETYPES
/* show type of destination */
if (opts & DISP_FTYPE) {
@@ -287,18 +295,17 @@ static void list_single(const char *name, struct stat *info, const char *fullnam
#endif
} else {
static short nexttab = 0;
-
+
/* sort out column alignment */
- if (column == 0)
- ; /* nothing to do */
+ if (column == 0); /* nothing to do */
else if (display_fmt == FMT_SINGLE)
newline();
else {
if (nexttab + column_width > terminal_width
#ifndef BB_FEATURE_AUTOWIDTH
- || nexttab + len >= terminal_width
+ || nexttab + len >= terminal_width
#endif
- )
+ )
newline();
else
tab(nexttab);
@@ -336,32 +343,33 @@ static int list_item(const char *name)
struct stat info;
DIR *dir;
struct dirent *entry;
- char fullname[MAXNAMLEN+1], *fnend;
-
+ char fullname[MAXNAMLEN + 1], *fnend;
+
if (lstat(name, &info))
goto listerr;
-
- if (!S_ISDIR(info.st_mode) ||
- (opts & DIR_NOLIST)) {
+
+ if (!S_ISDIR(info.st_mode) || (opts & DIR_NOLIST)) {
list_single(name, &info, name);
return 0;
}
/* Otherwise, it's a directory we want to list the contents of */
- if (opts & DISP_DIRNAME) { /* identify the directory */
+ if (opts & DISP_DIRNAME) { /* identify the directory */
if (column)
wr("\n\n", 2), column = 0;
wr(name, strlen(name));
wr(":\n", 2);
}
-
+
dir = opendir(name);
- if (!dir) goto listerr;
+ if (!dir)
+ goto listerr;
#ifdef BB_FEATURE_AUTOWIDTH
column_width = 0;
while ((entry = readdir(dir)) != NULL) {
short w = strlen(entry->d_name);
+
if (column_width < w)
column_width = w;
}
@@ -370,39 +378,40 @@ static int list_item(const char *name)
#else
closedir(dir);
dir = opendir(name);
- if (!dir) goto listerr;
+ if (!dir)
+ goto listerr;
#endif
#endif
/* List the contents */
-
- strcpy(fullname,name); /* *** ignore '.' by itself */
- fnend=fullname+strlen(fullname);
+
+ strcpy(fullname, name); /* *** ignore '.' by itself */
+ fnend = fullname + strlen(fullname);
if (fnend[-1] != '/')
*fnend++ = '/';
-
+
while ((entry = readdir(dir)) != NULL) {
- const char *en=entry->d_name;
+ const char *en = entry->d_name;
+
if (en[0] == '.') {
- if (!en[1] || (en[1] == '.' && !en[2])) { /* . or .. */
+ if (!en[1] || (en[1] == '.' && !en[2])) { /* . or .. */
if (!(opts & DISP_DOT))
continue;
- }
- else if (!(opts & DISP_HIDDEN))
+ } else if (!(opts & DISP_HIDDEN))
continue;
}
/* FIXME: avoid stat if not required */
strcpy(fnend, entry->d_name);
if (lstat(fullname, &info))
- goto direrr; /* (shouldn't fail) */
+ goto direrr; /* (shouldn't fail) */
list_single(entry->d_name, &info, fullname);
}
closedir(dir);
return 0;
-direrr:
- closedir(dir);
-listerr:
+ direrr:
+ closedir(dir);
+ listerr:
newline();
perror(name);
return 1;
@@ -432,50 +441,79 @@ static const char ls_usage[] = "ls [-1a"
#endif
"] [filenames...]\n";
-extern int
-ls_main(int argc, char * * argv)
+extern int ls_main(int argc, char **argv)
{
- int argi=1, i;
-
+ int argi = 1, i;
+
/* process options */
while (argi < argc && argv[argi][0] == '-') {
const char *p = &argv[argi][1];
-
- if (!*p) goto print_usage_message; /* "-" by itself not allowed */
+
+ if (!*p)
+ goto print_usage_message; /* "-" by itself not allowed */
if (*p == '-') {
- if (!p[1]) { /* "--" forces end of options */
+ if (!p[1]) { /* "--" forces end of options */
argi++;
break;
}
/* it's a long option name - we don't support them */
goto print_usage_message;
}
-
+
while (*p)
switch (*p++) {
- case 'l': display_fmt = FMT_LONG; break;
- case '1': display_fmt = FMT_SINGLE; break;
- case 'x': display_fmt = FMT_ROWS; break;
- case 'C': display_fmt = FMT_COLUMNS; break;
+ case 'l':
+ display_fmt = FMT_LONG;
+ break;
+ case '1':
+ display_fmt = FMT_SINGLE;
+ break;
+ case 'x':
+ display_fmt = FMT_ROWS;
+ break;
+ case 'C':
+ display_fmt = FMT_COLUMNS;
+ break;
#ifdef BB_FEATURE_LS_FILETYPES
- case 'p': opts |= DISP_FTYPE; break;
- case 'F': opts |= DISP_FTYPE|DISP_EXEC; break;
+ case 'p':
+ opts |= DISP_FTYPE;
+ break;
+ case 'F':
+ opts |= DISP_FTYPE | DISP_EXEC;
+ break;
#endif
- case 'A': opts |= DISP_HIDDEN; break;
- case 'a': opts |= DISP_HIDDEN|DISP_DOT; break;
- case 'n': opts |= DISP_NUMERIC; break;
- case 'd': opts |= DIR_NOLIST; break;
+ case 'A':
+ opts |= DISP_HIDDEN;
+ break;
+ case 'a':
+ opts |= DISP_HIDDEN | DISP_DOT;
+ break;
+ case 'n':
+ opts |= DISP_NUMERIC;
+ break;
+ case 'd':
+ opts |= DIR_NOLIST;
+ break;
#ifdef FEATURE_RECURSIVE
- case 'R': opts |= DIR_RECURSE; break;
+ case 'R':
+ opts |= DIR_RECURSE;
+ break;
#endif
#ifdef BB_FEATURE_LS_TIMESTAMPS
- case 'u': time_fmt = TIME_ACCESS; break;
- case 'c': time_fmt = TIME_CHANGE; break;
- case 'e': opts |= DISP_FULLTIME; break;
+ case 'u':
+ time_fmt = TIME_ACCESS;
+ break;
+ case 'c':
+ time_fmt = TIME_CHANGE;
+ break;
+ case 'e':
+ opts |= DISP_FULLTIME;
+ break;
#endif
- default: goto print_usage_message;
+ default:
+ goto print_usage_message;
}
-
+
argi++;
}
@@ -483,29 +521,30 @@ ls_main(int argc, char * * argv)
if (display_fmt == FMT_AUTO)
display_fmt = isatty(fileno(stdout)) ? FMT_COLUMNS : FMT_SINGLE;
if (argi < argc - 1)
- opts |= DISP_DIRNAME; /* 2 or more items? label directories */
+ opts |= DISP_DIRNAME; /* 2 or more items? label directories */
#ifdef BB_FEATURE_AUTOWIDTH
/* could add a -w option and/or TIOCGWINSZ call */
- if (terminal_width < 1) terminal_width = TERMINAL_WIDTH;
-
+ if (terminal_width < 1)
+ terminal_width = TERMINAL_WIDTH;
+
for (i = argi; i < argc; i++) {
int len = strlen(argv[i]);
+
if (column_width < len)
column_width = len;
}
#endif
/* process files specified, or current directory if none */
- i=0;
+ i = 0;
if (argi == argc)
i = list_item(".");
while (argi < argc)
i |= list_item(argv[argi++]);
newline();
- exit( i);
+ exit(i);
-print_usage_message:
- usage (ls_usage);
- exit( FALSE);
+ print_usage_message:
+ usage(ls_usage);
+ exit(FALSE);
}
-
diff --git a/coreutils/mkdir.c b/coreutils/mkdir.c
index 8e3f51b..70fdbdf 100644
--- a/coreutils/mkdir.c
+++ b/coreutils/mkdir.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini mkdir implementation for busybox
*
@@ -28,14 +29,15 @@
#include <stdio.h>
#include <errno.h>
-#include <sys/param.h> /* for PATH_MAX */
+#include <sys/param.h> /* for PATH_MAX */
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"
-"\t-p\tno error if existing, make parent directories as needed\n";
+ "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"
+ "\t-p\tno error if existing, make parent directories as needed\n";
static int parentFlag = FALSE;
@@ -44,71 +46,70 @@ static mode_t mode = 0777;
extern int mkdir_main(int argc, char **argv)
{
- int i = FALSE;
- argc--;
- argv++;
+ int i = FALSE;
- /* Parse any options */
- while (argc > 0 && **argv == '-') {
- while (i == FALSE && *++(*argv)) {
- switch (**argv) {
- case 'm':
- if (--argc == 0)
- usage( mkdir_usage);
- /* Find the specified modes */
- mode = 0;
- if (parse_mode(*(++argv), &mode) == FALSE ) {
- fprintf(stderr, "Unknown mode: %s\n", *argv);
- exit FALSE;
- }
- /* Set the umask for this process so it doesn't
- * screw up whatever the user just entered. */
- umask(0);
- i = TRUE;
- break;
- case 'p':
- parentFlag = TRUE;
- break;
- default:
- usage( mkdir_usage);
- }
- }
argc--;
argv++;
- }
-
- if (argc < 1) {
- usage( mkdir_usage);
- }
- while (argc > 0) {
- int status;
- struct stat statBuf;
- char buf[PATH_MAX + 1];
- if (strlen(*argv) > PATH_MAX - 1) {
- fprintf(stderr, name_too_long, "mkdir");
- exit FALSE;
- }
- strcpy (buf, *argv);
- status = stat(buf, &statBuf);
- if (parentFlag == FALSE && status != -1 && errno != ENOENT) {
- fprintf(stderr, "%s: File exists\n", buf);
- exit FALSE;
- }
- if (parentFlag == TRUE) {
- strcat( buf, "/");
- createPath(buf, mode);
+ /* Parse any options */
+ while (argc > 0 && **argv == '-') {
+ while (i == FALSE && *++(*argv)) {
+ switch (**argv) {
+ case 'm':
+ if (--argc == 0)
+ usage(mkdir_usage);
+ /* Find the specified modes */
+ mode = 0;
+ if (parse_mode(*(++argv), &mode) == FALSE) {
+ fprintf(stderr, "Unknown mode: %s\n", *argv);
+ exit FALSE;
+ }
+ /* Set the umask for this process so it doesn't
+ * screw up whatever the user just entered. */
+ umask(0);
+ i = TRUE;
+ break;
+ case 'p':
+ parentFlag = TRUE;
+ break;
+ default:
+ usage(mkdir_usage);
+ }
+ }
+ argc--;
+ argv++;
}
- else {
- if (mkdir (buf, mode) != 0 && parentFlag == FALSE) {
- perror(buf);
- exit FALSE;
- }
+
+ if (argc < 1) {
+ usage(mkdir_usage);
}
- argc--;
- argv++;
- }
- exit TRUE;
-}
+ while (argc > 0) {
+ int status;
+ struct stat statBuf;
+ char buf[PATH_MAX + 1];
+ if (strlen(*argv) > PATH_MAX - 1) {
+ fprintf(stderr, name_too_long, "mkdir");
+ exit FALSE;
+ }
+ strcpy(buf, *argv);
+ status = stat(buf, &statBuf);
+ if (parentFlag == FALSE && status != -1 && errno != ENOENT) {
+ fprintf(stderr, "%s: File exists\n", buf);
+ exit FALSE;
+ }
+ if (parentFlag == TRUE) {
+ strcat(buf, "/");
+ createPath(buf, mode);
+ } else {
+ if (mkdir(buf, mode) != 0 && parentFlag == FALSE) {
+ perror(buf);
+ exit FALSE;
+ }
+ }
+ argc--;
+ argv++;
+ }
+ exit TRUE;
+}
diff --git a/coreutils/mkfifo.c b/coreutils/mkfifo.c
index 676592a..c74402d 100644
--- a/coreutils/mkfifo.c
+++ b/coreutils/mkfifo.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini mkfifo implementation for busybox
*
@@ -26,36 +27,43 @@
#include <errno.h>
static const char mkfifo_usage[] = "mkfifo [OPTIONS] name\n\n"
-"Create the named fifo\n\n"
-"Options:\n"
-"\t-m\tcreate the fifo with the specified mode; default = a=rw-umask\n";
+ "Create the named fifo\n\n"
+
+ "Options:\n"
+ "\t-m\tcreate the fifo with the specified mode; default = a=rw-umask\n";
extern int mkfifo_main(int argc, char **argv)
{
- char *thisarg;
- mode_t mode = 0666;
- argc--;
- argv++;
+ char *thisarg;
+ mode_t mode = 0666;
+
+ argc--;
+ argv++;
- /* Parse any options */
- while (argc > 1) {
- if (**argv != '-') usage(mkfifo_usage);
- thisarg = *argv; thisarg++;
- switch (*thisarg) {
- case 'm':
- argc--; argv++;
- parse_mode(*argv, &mode);
- break;
- default:
- usage (mkfifo_usage);
- }
- argc--; argv++;
- }
- if (argc < 1) usage (mkfifo_usage);
- if (mkfifo(*argv, mode) < 0) {
- perror("mkfifo");
- exit(255);
- } else {
- exit(TRUE);
- }
+ /* Parse any options */
+ while (argc > 1) {
+ if (**argv != '-')
+ usage(mkfifo_usage);
+ thisarg = *argv;
+ thisarg++;
+ switch (*thisarg) {
+ case 'm':
+ argc--;
+ argv++;
+ parse_mode(*argv, &mode);
+ break;
+ default:
+ usage(mkfifo_usage);
+ }
+ argc--;
+ argv++;
+ }
+ if (argc < 1)
+ usage(mkfifo_usage);
+ if (mkfifo(*argv, mode) < 0) {
+ perror("mkfifo");
+ exit(255);
+ } else {
+ exit(TRUE);
+ }
}
diff --git a/coreutils/mknod.c b/coreutils/mknod.c
index 5822cd3..b11a81f 100644
--- a/coreutils/mknod.c
+++ b/coreutils/mknod.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini mknod implementation for busybox
*
@@ -28,22 +29,22 @@
#include <unistd.h>
static const char mknod_usage[] = "mknod NAME TYPE MAJOR MINOR\n\n"
-"Make block or character special files.\n\n"
-"TYPEs include:\n"
-"\tb:\tMake a block (buffered) device.\n"
-"\tc or u:\tMake a character (un-buffered) device.\n"
-"\tp:\tMake a named pipe. Major and minor are ignored for named pipes.\n";
+ "Make block or character special files.\n\n"
+ "TYPEs include:\n"
+ "\tb:\tMake a block (buffered) device.\n"
-int
-mknod_main(int argc, char** argv)
+ "\tc or u:\tMake a character (un-buffered) device.\n"
+ "\tp:\tMake a named pipe. Major and minor are ignored for named pipes.\n";
+
+int mknod_main(int argc, char **argv)
{
- mode_t mode = 0;
- dev_t dev = 0;
+ mode_t mode = 0;
+ dev_t dev = 0;
- if ( argc != 5 || **(argv+1) == '-' ) {
- usage (mknod_usage);
+ if (argc != 5 || **(argv + 1) == '-') {
+ usage(mknod_usage);
}
- switch(argv[2][0]) {
+ switch (argv[2][0]) {
case 'c':
case 'u':
mode = S_IFCHR;
@@ -55,21 +56,21 @@ mknod_main(int argc, char** argv)
mode = S_IFIFO;
break;
default:
- usage (mknod_usage);
+ usage(mknod_usage);
}
- if ( mode == S_IFCHR || mode == S_IFBLK ) {
+ if (mode == S_IFCHR || mode == S_IFBLK) {
dev = (atoi(argv[3]) << 8) | atoi(argv[4]);
- if ( argc != 5 ) {
- usage (mknod_usage);
+ if (argc != 5) {
+ usage(mknod_usage);
}
}
mode |= 0666;
- if ( mknod(argv[1], mode, dev) != 0 ) {
+ if (mknod(argv[1], mode, dev) != 0) {
perror(argv[1]);
- return( FALSE);
+ return (FALSE);
}
- return( TRUE);
+ return (TRUE);
}
diff --git a/coreutils/printf.c b/coreutils/printf.c
index 5fd5ea3..41ab2e4 100644
--- a/coreutils/printf.c
+++ b/coreutils/printf.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/* printf - format and print data
Copyright (C) 90, 91, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
@@ -42,7 +43,7 @@
to convert all of the given arguments.
David MacKenzie <djm@gnu.ai.mit.edu> */
-
+
// 19990508 Busy Boxed! Dave Cinege
@@ -84,11 +85,11 @@
#if !defined(S_ISSOCK) && defined(S_IFSOCK)
# define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
#endif
-#if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */
+#if !defined(S_ISMPB) && defined(S_IFMPB) /* V7 */
# define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB)
# define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC)
#endif
-#if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */
+#if !defined(S_ISNWK) && defined(S_IFNWK) /* HP/UX */
# define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK)
#endif
@@ -121,407 +122,358 @@
#define hextobin(c) ((c)>='a'&&(c)<='f' ? (c)-'a'+10 : (c)>='A'&&(c)<='F' ? (c)-'A'+10 : (c)-'0')
#define octtobin(c) ((c) - '0')
-static double xstrtod __P ((char *s));
-static int print_esc __P ((char *escstart));
-static int print_formatted __P ((char *format, int argc, char **argv));
-static long xstrtol __P ((char *s));
-static unsigned long xstrtoul __P ((char *s));
-static void print_direc __P ((char *start, size_t length, int field_width, int precision, char *argument));
-static void print_esc_char __P ((int c));
-static void print_esc_string __P ((char *str));
-static void verify __P ((char *s, char *end));
+static double xstrtod __P((char *s));
+static int print_esc __P((char *escstart));
+static int print_formatted __P((char *format, int argc, char **argv));
+static long xstrtol __P((char *s));
+static unsigned long xstrtoul __P((char *s));
+static void print_direc
+__P(
+
+ (char *start, size_t length, int field_width, int precision,
+ char *argument));
+static void print_esc_char __P((int c));
+static void print_esc_string __P((char *str));
+static void verify __P((char *s, char *end));
/* The value to return to the calling program. */
static int exit_status;
-static const char printf_usage[] = "printf format [argument...]\n";
+static const char printf_usage[] = "printf format [argument...]\n";
-int
-printf_main(int argc, char** argv)
+int printf_main(int argc, char **argv)
{
- char *format;
- int args_used;
-
- exit_status = 0;
- if ( argc <= 1 || **(argv+1) == '-' ) {
- usage (printf_usage);
- }
-
- format = argv[1];
- argc -= 2;
- argv += 2;
-
- do
- {
- args_used = print_formatted (format, argc, argv);
- argc -= args_used;
- argv += args_used;
- }
- while (args_used > 0 && argc > 0);
+ char *format;
+ int args_used;
+
+ exit_status = 0;
+ if (argc <= 1 || **(argv + 1) == '-') {
+ usage(printf_usage);
+ }
+
+ format = argv[1];
+ argc -= 2;
+ argv += 2;
+
+ do {
+ args_used = print_formatted(format, argc, argv);
+ argc -= args_used;
+ argv += args_used;
+ }
+ while (args_used > 0 && argc > 0);
/*
if (argc > 0)
fprintf(stderr, "excess args ignored");
*/
- exit (exit_status);
+ exit(exit_status);
}
/* Print the text in FORMAT, using ARGV (with ARGC elements) for
arguments to any `%' directives.
Return the number of elements of ARGV used. */
-static int
-print_formatted (char *format, int argc, char **argv)
+static int print_formatted(char *format, int argc, char **argv)
{
- int save_argc = argc; /* Preserve original value. */
- char *f; /* Pointer into `format'. */
- char *direc_start; /* Start of % directive. */
- size_t direc_length; /* Length of % directive. */
- int field_width; /* Arg to first '*', or -1 if none. */
- int precision; /* Arg to second '*', or -1 if none. */
-
- for (f = format; *f; ++f)
- {
- switch (*f)
- {
- case '%':
- direc_start = f++;
- direc_length = 1;
- field_width = precision = -1;
- if (*f == '%')
- {
- putchar ('%');
- break;
- }
- if (*f == 'b')
- {
- if (argc > 0)
- {
- print_esc_string (*argv);
- ++argv;
- --argc;
- }
- break;
- }
- if (strchr ("-+ #", *f))
- {
- ++f;
- ++direc_length;
- }
- if (*f == '*')
- {
- ++f;
- ++direc_length;
- if (argc > 0)
- {
- field_width = xstrtoul (*argv);
- ++argv;
- --argc;
+ int save_argc = argc; /* Preserve original value. */
+ char *f; /* Pointer into `format'. */
+ char *direc_start; /* Start of % directive. */
+ size_t direc_length; /* Length of % directive. */
+ int field_width; /* Arg to first '*', or -1 if none. */
+ int precision; /* Arg to second '*', or -1 if none. */
+
+ for (f = format; *f; ++f) {
+ switch (*f) {
+ case '%':
+ direc_start = f++;
+ direc_length = 1;
+ field_width = precision = -1;
+ if (*f == '%') {
+ putchar('%');
+ break;
+ }
+ if (*f == 'b') {
+ if (argc > 0) {
+ print_esc_string(*argv);
+ ++argv;
+ --argc;
+ }
+ break;
+ }
+ if (strchr("-+ #", *f)) {
+ ++f;
+ ++direc_length;
+ }
+ if (*f == '*') {
+ ++f;
+ ++direc_length;
+ if (argc > 0) {
+ field_width = xstrtoul(*argv);
+ ++argv;
+ --argc;
+ } else
+ field_width = 0;
+ } else
+ while (ISDIGIT(*f)) {
+ ++f;
+ ++direc_length;
+ }
+ if (*f == '.') {
+ ++f;
+ ++direc_length;
+ if (*f == '*') {
+ ++f;
+ ++direc_length;
+ if (argc > 0) {
+ precision = xstrtoul(*argv);
+ ++argv;
+ --argc;
+ } else
+ precision = 0;
+ } else
+ while (ISDIGIT(*f)) {
+ ++f;
+ ++direc_length;
+ }
+ }
+ if (*f == 'l' || *f == 'L' || *f == 'h') {
+ ++f;
+ ++direc_length;
+ }
+ /*
+ if (!strchr ("diouxXfeEgGcs", *f))
+ fprintf(stderr, "%%%c: invalid directive", *f);
+ */
+ ++direc_length;
+ if (argc > 0) {
+ print_direc(direc_start, direc_length, field_width,
+ precision, *argv);
+ ++argv;
+ --argc;
+ } else
+ print_direc(direc_start, direc_length, field_width,
+ precision, "");
+ break;
+
+ case '\\':
+ f += print_esc(f);
+ break;
+
+ default:
+ putchar(*f);
}
- else
- field_width = 0;
- }
- else
- while (ISDIGIT (*f))
- {
- ++f;
- ++direc_length;
- }
- if (*f == '.')
- {
- ++f;
- ++direc_length;
- if (*f == '*')
- {
- ++f;
- ++direc_length;
- if (argc > 0)
- {
- precision = xstrtoul (*argv);
- ++argv;
- --argc;
- }
- else
- precision = 0;
- }
- else
- while (ISDIGIT (*f))
- {
- ++f;
- ++direc_length;
- }
- }
- if (*f == 'l' || *f == 'L' || *f == 'h')
- {
- ++f;
- ++direc_length;
- }
- /*
- if (!strchr ("diouxXfeEgGcs", *f))
- fprintf(stderr, "%%%c: invalid directive", *f);
- */
- ++direc_length;
- if (argc > 0)
- {
- print_direc (direc_start, direc_length, field_width,
- precision, *argv);
- ++argv;
- --argc;
- }
- else
- print_direc (direc_start, direc_length, field_width,
- precision, "");
- break;
-
- case '\\':
- f += print_esc (f);
- break;
-
- default:
- putchar (*f);
}
- }
- return save_argc - argc;
+ return save_argc - argc;
}
/* Print a \ escape sequence starting at ESCSTART.
Return the number of characters in the escape sequence
besides the backslash. */
-static int
-print_esc (char *escstart)
+static int print_esc(char *escstart)
{
- register char *p = escstart + 1;
- int esc_value = 0; /* Value of \nnn escape. */
- int esc_length; /* Length of \nnn escape. */
-
- /* \0ooo and \xhhh escapes have maximum length of 3 chars. */
- if (*p == 'x')
- {
- for (esc_length = 0, ++p;
- esc_length < 3 && ISXDIGIT (*p);
- ++esc_length, ++p)
- esc_value = esc_value * 16 + hextobin (*p);
+ register char *p = escstart + 1;
+ int esc_value = 0; /* Value of \nnn escape. */
+ int esc_length; /* Length of \nnn escape. */
+
+ /* \0ooo and \xhhh escapes have maximum length of 3 chars. */
+ if (*p == 'x') {
+ for (esc_length = 0, ++p;
+ esc_length < 3 && ISXDIGIT(*p); ++esc_length, ++p)
+ esc_value = esc_value * 16 + hextobin(*p);
/* if (esc_length == 0)
fprintf(stderr, "missing hex in esc");
*/
- putchar (esc_value);
- }
- else if (*p == '0')
- {
- for (esc_length = 0, ++p;
- esc_length < 3 && isodigit (*p);
- ++esc_length, ++p)
- esc_value = esc_value * 8 + octtobin (*p);
- putchar (esc_value);
- }
- else if (strchr ("\"\\abcfnrtv", *p))
- print_esc_char (*p++);
+ putchar(esc_value);
+ } else if (*p == '0') {
+ for (esc_length = 0, ++p;
+ esc_length < 3 && isodigit(*p); ++esc_length, ++p)
+ esc_value = esc_value * 8 + octtobin(*p);
+ putchar(esc_value);
+ } else if (strchr("\"\\abcfnrtv", *p))
+ print_esc_char(*p++);
/* else
fprintf(stderr, "\\%c: invalid esc", *p);
*/
- return p - escstart - 1;
+ return p - escstart - 1;
}
/* Output a single-character \ escape. */
-static void
-print_esc_char (int c)
+static void print_esc_char(int c)
{
- switch (c)
- {
- case 'a': /* Alert. */
- putchar (7);
- break;
- case 'b': /* Backspace. */
- putchar (8);
- break;
- case 'c': /* Cancel the rest of the output. */
- exit (0);
- break;
- case 'f': /* Form feed. */
- putchar (12);
- break;
- case 'n': /* New line. */
- putchar (10);
- break;
- case 'r': /* Carriage return. */
- putchar (13);
- break;
- case 't': /* Horizontal tab. */
- putchar (9);
- break;
- case 'v': /* Vertical tab. */
- putchar (11);
- break;
- default:
- putchar (c);
- break;
- }
+ switch (c) {
+ case 'a': /* Alert. */
+ putchar(7);
+ break;
+ case 'b': /* Backspace. */
+ putchar(8);
+ break;
+ case 'c': /* Cancel the rest of the output. */
+ exit(0);
+ break;
+ case 'f': /* Form feed. */
+ putchar(12);
+ break;
+ case 'n': /* New line. */
+ putchar(10);
+ break;
+ case 'r': /* Carriage return. */
+ putchar(13);
+ break;
+ case 't': /* Horizontal tab. */
+ putchar(9);
+ break;
+ case 'v': /* Vertical tab. */
+ putchar(11);
+ break;
+ default:
+ putchar(c);
+ break;
+ }
}
/* Print string STR, evaluating \ escapes. */
-static void
-print_esc_string (char *str)
+static void print_esc_string(char *str)
{
- for (; *str; str++)
- if (*str == '\\')
- str += print_esc (str);
- else
- putchar (*str);
+ for (; *str; str++)
+ if (*str == '\\')
+ str += print_esc(str);
+ else
+ putchar(*str);
}
static void
-print_direc (char *start, size_t length, int field_width, int precision, char *argument)
+print_direc(char *start, size_t length, int field_width, int precision,
+ char *argument)
{
- char *p; /* Null-terminated copy of % directive. */
-
- p = xmalloc ((unsigned) (length + 1));
- strncpy (p, start, length);
- p[length] = 0;
-
- switch (p[length - 1])
- {
- case 'd':
- case 'i':
- if (field_width < 0)
- {
- if (precision < 0)
- printf (p, xstrtol (argument));
- else
- printf (p, precision, xstrtol (argument));
- }
- else
- {
- if (precision < 0)
- printf (p, field_width, xstrtol (argument));
- else
- printf (p, field_width, precision, xstrtol (argument));
- }
- break;
-
- case 'o':
- case 'u':
- case 'x':
- case 'X':
- if (field_width < 0)
- {
- if (precision < 0)
- printf (p, xstrtoul (argument));
- else
- printf (p, precision, xstrtoul (argument));
- }
- else
- {
- if (precision < 0)
- printf (p, field_width, xstrtoul (argument));
- else
- printf (p, field_width, precision, xstrtoul (argument));
- }
- break;
-
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- if (field_width < 0)
- {
- if (precision < 0)
- printf (p, xstrtod (argument));
- else
- printf (p, precision, xstrtod (argument));
- }
- else
- {
- if (precision < 0)
- printf (p, field_width, xstrtod (argument));
- else
- printf (p, field_width, precision, xstrtod (argument));
- }
- break;
-
- case 'c':
- printf (p, *argument);
- break;
-
- case 's':
- if (field_width < 0)
- {
- if (precision < 0)
- printf (p, argument);
- else
- printf (p, precision, argument);
- }
- else
- {
- if (precision < 0)
- printf (p, field_width, argument);
- else
- printf (p, field_width, precision, argument);
+ char *p; /* Null-terminated copy of % directive. */
+
+ p = xmalloc((unsigned) (length + 1));
+ strncpy(p, start, length);
+ p[length] = 0;
+
+ switch (p[length - 1]) {
+ case 'd':
+ case 'i':
+ if (field_width < 0) {
+ if (precision < 0)
+ printf(p, xstrtol(argument));
+ else
+ printf(p, precision, xstrtol(argument));
+ } else {
+ if (precision < 0)
+ printf(p, field_width, xstrtol(argument));
+ else
+ printf(p, field_width, precision, xstrtol(argument));
+ }
+ break;
+
+ case 'o':
+ case 'u':
+ case 'x':
+ case 'X':
+ if (field_width < 0) {
+ if (precision < 0)
+ printf(p, xstrtoul(argument));
+ else
+ printf(p, precision, xstrtoul(argument));
+ } else {
+ if (precision < 0)
+ printf(p, field_width, xstrtoul(argument));
+ else
+ printf(p, field_width, precision, xstrtoul(argument));
+ }
+ break;
+
+ case 'f':
+ case 'e':
+ case 'E':
+ case 'g':
+ case 'G':
+ if (field_width < 0) {
+ if (precision < 0)
+ printf(p, xstrtod(argument));
+ else
+ printf(p, precision, xstrtod(argument));
+ } else {
+ if (precision < 0)
+ printf(p, field_width, xstrtod(argument));
+ else
+ printf(p, field_width, precision, xstrtod(argument));
+ }
+ break;
+
+ case 'c':
+ printf(p, *argument);
+ break;
+
+ case 's':
+ if (field_width < 0) {
+ if (precision < 0)
+ printf(p, argument);
+ else
+ printf(p, precision, argument);
+ } else {
+ if (precision < 0)
+ printf(p, field_width, argument);
+ else
+ printf(p, field_width, precision, argument);
+ }
+ break;
}
- break;
- }
- free (p);
+ free(p);
}
-static unsigned long
-xstrtoul (char *s)
+static unsigned long xstrtoul(char *s)
{
- char *end;
- unsigned long val;
+ char *end;
+ unsigned long val;
- errno = 0;
- val = strtoul (s, &end, 0);
- verify (s, end);
- return val;
+ errno = 0;
+ val = strtoul(s, &end, 0);
+ verify(s, end);
+ return val;
}
-static long
-xstrtol (char *s)
+static long xstrtol(char *s)
{
- char *end;
- long val;
+ char *end;
+ long val;
- errno = 0;
- val = strtol (s, &end, 0);
- verify (s, end);
- return val;
+ errno = 0;
+ val = strtol(s, &end, 0);
+ verify(s, end);
+ return val;
}
-static double
-xstrtod (char *s)
+static double xstrtod(char *s)
{
- char *end;
- double val;
+ char *end;
+ double val;
- errno = 0;
- val = strtod (s, &end);
- verify (s, end);
- return val;
+ errno = 0;
+ val = strtod(s, &end);
+ verify(s, end);
+ return val;
}
-static void
-verify (char *s, char *end)
+static void verify(char *s, char *end)
{
- if (errno)
- {
- fprintf(stderr, "%s", s);
- exit_status = 1;
- }
- else if (*end)
- {
- /*
- if (s == end)
- fprintf(stderr, "%s: expected numeric", s);
- else
- fprintf(stderr, "%s: not completely converted", s);
- */
- exit_status = 1;
- }
+ if (errno) {
+ fprintf(stderr, "%s", s);
+ exit_status = 1;
+ } else if (*end) {
+ /*
+ if (s == end)
+ fprintf(stderr, "%s: expected numeric", s);
+ else
+ fprintf(stderr, "%s: not completely converted", s);
+ */
+ exit_status = 1;
+ }
}
-
diff --git a/coreutils/pwd.c b/coreutils/pwd.c
index bacabd7..0016317 100644
--- a/coreutils/pwd.c
+++ b/coreutils/pwd.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini pwd implementation for busybox
*
@@ -25,16 +26,15 @@
#include <dirent.h>
#include <sys/param.h>
-extern int
-pwd_main(int argc, char * * argv)
+extern int pwd_main(int argc, char **argv)
{
- char buf[PATH_MAX + 1];
+ char buf[PATH_MAX + 1];
- if ( getcwd(buf, sizeof(buf)) == NULL ) {
+ if (getcwd(buf, sizeof(buf)) == NULL) {
perror("get working directory");
- exit( FALSE);
+ exit(FALSE);
}
printf("%s\n", buf);
- exit( TRUE);
+ exit(TRUE);
}
diff --git a/coreutils/rm.c b/coreutils/rm.c
index ee434fb..41afeda 100644
--- a/coreutils/rm.c
+++ b/coreutils/rm.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini rm implementation for busybox
*
@@ -28,11 +29,12 @@
#include <dirent.h>
#include <errno.h>
-static const char* rm_usage = "rm [OPTION]... FILE...\n\n"
-"Remove (unlink) the FILE(s).\n\n"
-"Options:\n"
-"\t-f\t\tremove existing destinations, never prompt\n"
-"\t-r or -R\tremove the contents of directories recursively\n";
+static const char *rm_usage = "rm [OPTION]... FILE...\n\n"
+ "Remove (unlink) the FILE(s).\n\n"
+ "Options:\n"
+
+ "\t-f\t\tremove existing destinations, never prompt\n"
+ "\t-r or -R\tremove the contents of directories recursively\n";
static int recursiveFlag = FALSE;
@@ -40,63 +42,63 @@ static int forceFlag = FALSE;
static const char *srcName;
-static int fileAction(const char *fileName, struct stat* statbuf)
+static int fileAction(const char *fileName, struct stat *statbuf)
{
- if (unlink( fileName) < 0 ) {
- perror( fileName);
- return ( FALSE);
- }
- return ( TRUE);
+ if (unlink(fileName) < 0) {
+ perror(fileName);
+ return (FALSE);
+ }
+ return (TRUE);
}
-static int dirAction(const char *fileName, struct stat* statbuf)
+static int dirAction(const char *fileName, struct stat *statbuf)
{
- if (rmdir( fileName) < 0 ) {
- perror( fileName);
- return ( FALSE);
- }
- return ( TRUE);
+ if (rmdir(fileName) < 0) {
+ perror(fileName);
+ return (FALSE);
+ }
+ return (TRUE);
}
extern int rm_main(int argc, char **argv)
{
- struct stat statbuf;
+ struct stat statbuf;
- if (argc < 2) {
- usage( rm_usage);
- }
- argc--;
- argv++;
-
- /* Parse any options */
- while (**argv == '-') {
- while (*++(*argv))
- switch (**argv) {
- case 'R':
- case 'r':
- recursiveFlag = TRUE;
- break;
- case 'f':
- forceFlag = TRUE;
- break;
- default:
- usage( rm_usage);
- }
+ if (argc < 2) {
+ usage(rm_usage);
+ }
argc--;
argv++;
- }
- while (argc-- > 0) {
- srcName = *(argv++);
- if (forceFlag == TRUE && lstat(srcName, &statbuf) != 0 && errno == ENOENT) {
- /* do not reports errors for non-existent files if -f, just skip them */
+ /* Parse any options */
+ while (**argv == '-') {
+ while (*++(*argv))
+ switch (**argv) {
+ case 'R':
+ case 'r':
+ recursiveFlag = TRUE;
+ break;
+ case 'f':
+ forceFlag = TRUE;
+ break;
+ default:
+ usage(rm_usage);
+ }
+ argc--;
+ argv++;
}
- else {
- if (recursiveAction( srcName, recursiveFlag, FALSE,
- TRUE, fileAction, dirAction) == FALSE) {
- exit( FALSE);
- }
+
+ while (argc-- > 0) {
+ srcName = *(argv++);
+ if (forceFlag == TRUE && lstat(srcName, &statbuf) != 0
+ && errno == ENOENT) {
+ /* do not reports errors for non-existent files if -f, just skip them */
+ } else {
+ if (recursiveAction(srcName, recursiveFlag, FALSE,
+ TRUE, fileAction, dirAction) == FALSE) {
+ exit(FALSE);
+ }
+ }
}
- }
- exit( TRUE);
+ exit(TRUE);
}
diff --git a/coreutils/rmdir.c b/coreutils/rmdir.c
index 013fef1..f495697 100644
--- a/coreutils/rmdir.c
+++ b/coreutils/rmdir.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini rmdir implementation for busybox
*
@@ -28,15 +29,16 @@
extern int rmdir_main(int argc, char **argv)
{
- if ( argc==1 || **(argv+1) == '-' ) {
- usage( "rmdir [OPTION]... DIRECTORY...\n\nRemove the DIRECTORY(ies), if they are empty.\n");
- }
+ if (argc == 1 || **(argv + 1) == '-') {
+ usage
+ ("rmdir [OPTION]... DIRECTORY...\n\nRemove the DIRECTORY(ies), if they are empty.\n");
+ }
- while (--argc > 0) {
- if ( rmdir(*(++argv)) == -1 ) {
- fprintf(stderr, "%s: %s\n", *argv, strerror(errno));
- exit(FALSE);
+ while (--argc > 0) {
+ if (rmdir(*(++argv)) == -1) {
+ fprintf(stderr, "%s: %s\n", *argv, strerror(errno));
+ exit(FALSE);
+ }
}
- }
- exit(TRUE);
+ exit(TRUE);
}
diff --git a/coreutils/sleep.c b/coreutils/sleep.c
index bfbb78f..9687b84 100644
--- a/coreutils/sleep.c
+++ b/coreutils/sleep.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini sleep implementation for busybox
*
@@ -23,19 +24,17 @@
#include "internal.h"
#include <stdio.h>
-const char sleep_usage[] = "sleep N\n\n"
-"Pause for N seconds.\n";
+const char sleep_usage[] = "sleep N\n\n" "Pause for N seconds.\n";
-extern int
-sleep_main(int argc, char * * argv)
+extern int sleep_main(int argc, char **argv)
{
- if ( (argc < 2) || (**(argv+1) == '-') ) {
- usage( sleep_usage );
+ if ((argc < 2) || (**(argv + 1) == '-')) {
+ usage(sleep_usage);
}
- if ( sleep(atoi(*(++argv))) != 0 ) {
- perror( "sleep");
- exit (FALSE);
+ if (sleep(atoi(*(++argv))) != 0) {
+ perror("sleep");
+ exit(FALSE);
} else
- exit (TRUE);
+ exit(TRUE);
}
diff --git a/coreutils/sort.c b/coreutils/sort.c
index d529ce7..609c5e0 100644
--- a/coreutils/sort.c
+++ b/coreutils/sort.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini sort implementation for busybox
*
@@ -28,29 +29,27 @@
#include <stdio.h>
#include <errno.h>
-static const char sort_usage[] =
-"sort [OPTION]... [FILE]...\n\n"
-;
+static const char sort_usage[] = "sort [OPTION]... [FILE]...\n\n";
/* typedefs _______________________________________________________________ */
/* line node */
typedef struct Line {
- char *data; /* line data */
- struct Line *next; /* pointer to next line node */
+ char *data; /* line data */
+ struct Line *next; /* pointer to next line node */
} Line;
/* singly-linked list of lines */
typedef struct {
- int len; /* number of Lines */
- Line **sorted; /* array fed to qsort */
+ int len; /* number of Lines */
+ Line **sorted; /* array fed to qsort */
- Line *head; /* head of List */
- Line *current; /* current Line */
+ Line *head; /* head of List */
+ Line *current; /* current Line */
} List;
/* comparison function */
-typedef int (Compare)(const void *, const void *);
+typedef int (Compare) (const void *, const void *);
/* methods ________________________________________________________________ */
@@ -58,175 +57,176 @@ typedef int (Compare)(const void *, const void *);
static const int max = 1024;
/* mallocate Line */
-static Line *
-line_alloc()
+static Line *line_alloc()
{
- Line *self;
- self = malloc(1 * sizeof(Line));
- return self;
+ Line *self;
+
+ self = malloc(1 * sizeof(Line));
+ return self;
}
/* Initialize Line with string */
-static Line *
-line_init(Line *self, const char *string)
+static Line *line_init(Line * self, const char *string)
{
- self->data = malloc((strlen(string) + 1) * sizeof(char));
- if (self->data == NULL) { return NULL; }
- strcpy(self->data, string);
- self->next = NULL;
- return self;
+ self->data = malloc((strlen(string) + 1) * sizeof(char));
+
+ if (self->data == NULL) {
+ return NULL;
+ }
+ strcpy(self->data, string);
+ self->next = NULL;
+ return self;
}
/* Construct Line from FILE* */
-static Line *
-line_newFromFile(FILE *src)
+static Line *line_newFromFile(FILE * src)
{
- char buffer[max];
- Line *self;
-
- if (fgets(buffer, max, src)) {
- self = line_alloc();
- if (self == NULL) { return NULL; }
- line_init(self, buffer);
- return self;
- }
- return NULL;
+ char buffer[max];
+ Line *self;
+
+ if (fgets(buffer, max, src)) {
+ self = line_alloc();
+ if (self == NULL) {
+ return NULL;
+ }
+ line_init(self, buffer);
+ return self;
+ }
+ return NULL;
}
/* Line destructor */
-static Line *
-line_release(Line *self)
+static Line *line_release(Line * self)
{
- if (self->data) {
- free(self->data);
- free(self);
- }
- return self;
+ if (self->data) {
+ free(self->data);
+ free(self);
+ }
+ return self;
}
/* Comparison */
/* ascii order */
-static int
-compare_ascii(const void *a, const void *b)
+static int compare_ascii(const void *a, const void *b)
{
- Line **doh;
- Line *x, *y;
+ Line **doh;
+ Line *x, *y;
- doh = (Line **) a;
- x = *doh;
- doh = (Line **) b;
- y = *doh;
+ doh = (Line **) a;
+ x = *doh;
+ doh = (Line **) b;
+ y = *doh;
- // fprintf(stdout, "> %p: %s< %p: %s", x, x->data, y, y->data);
- return strcmp(x->data, y->data);
+ // fprintf(stdout, "> %p: %s< %p: %s", x, x->data, y, y->data);
+ return strcmp(x->data, y->data);
}
/* numeric order */
-static int
-compare_numeric(const void *a, const void *b)
+static int compare_numeric(const void *a, const void *b)
{
- Line **doh;
- Line *x, *y;
- int xint, yint;
+ Line **doh;
+ Line *x, *y;
+ int xint, yint;
- doh = (Line **) a;
- x = *doh;
- doh = (Line **) b;
- y = *doh;
+ doh = (Line **) a;
+ x = *doh;
+ doh = (Line **) b;
+ y = *doh;
- xint = strtoul(x->data, NULL, 10);
- yint = strtoul(y->data, NULL, 10);
+ xint = strtoul(x->data, NULL, 10);
+ yint = strtoul(y->data, NULL, 10);
- return (xint - yint);
+ return (xint - yint);
}
/* List */
/* */
-static List *
-list_init(List *self)
+static List *list_init(List * self)
{
- self->len = 0;
- self->sorted = NULL;
- self->head = NULL;
- self->current = NULL;
- return self;
+ self->len = 0;
+ self->sorted = NULL;
+ self->head = NULL;
+ self->current = NULL;
+ return self;
}
/* for simplicity, the List gains ownership of the line */
-static List *
-list_insert(List *self, Line *line)
+static List *list_insert(List * self, Line * line)
{
- if (line == NULL) { return NULL; }
-
- /* first insertion */
- if (self->head == NULL) {
- self->head = line;
- self->current = line;
-
- /* all subsequent insertions */
- } else {
- self->current->next = line;
- self->current = line;
- }
- self->len++;
- return self;
+ if (line == NULL) {
+ return NULL;
+ }
+
+ /* first insertion */
+ if (self->head == NULL) {
+ self->head = line;
+ self->current = line;
+
+ /* all subsequent insertions */
+ } else {
+ self->current->next = line;
+ self->current = line;
+ }
+ self->len++;
+ return self;
}
/* order the list according to compare() */
-static List *
-list_sort(List *self, Compare *compare)
+static List *list_sort(List * self, Compare * compare)
{
- int i;
- Line *line;
-
- /* mallocate array of Line*s */
- self->sorted = (Line **) malloc(self->len * sizeof(Line*));
- if (self->sorted == NULL) { return NULL; }
-
- /* fill array w/ List's contents */
- i = 0;
- line = self->head;
- while (line) {
- self->sorted[i++] = line;
- line = line->next;
- }
-
- /* apply qsort */
- qsort(self->sorted, self->len, sizeof(Line*), compare);
- return self;
+ int i;
+ Line *line;
+
+ /* mallocate array of Line*s */
+ self->sorted = (Line **) malloc(self->len * sizeof(Line *));
+ if (self->sorted == NULL) {
+ return NULL;
+ }
+
+ /* fill array w/ List's contents */
+ i = 0;
+ line = self->head;
+ while (line) {
+ self->sorted[i++] = line;
+ line = line->next;
+ }
+
+ /* apply qsort */
+ qsort(self->sorted, self->len, sizeof(Line *), compare);
+ return self;
}
/* precondition: list must be sorted */
-static List *
-list_writeToFile(List *self, FILE* dst)
+static List *list_writeToFile(List * self, FILE * dst)
{
- int i;
- Line **line = self->sorted;
-
- if (self->sorted == NULL) { return NULL; }
- for (i = 0; i < self->len; i++) {
- fprintf(dst, "%s", line[i]->data);
- }
- return self;
+ int i;
+ Line **line = self->sorted;
+
+ if (self->sorted == NULL) {
+ return NULL;
+ }
+ for (i = 0; i < self->len; i++) {
+ fprintf(dst, "%s", line[i]->data);
+ }
+ return self;
}
/* deallocate */
-static void
-list_release(List *self)
+static void list_release(List * self)
{
- Line *i;
- Line *die;
-
- i = self->head;
- while (i) {
- die = i;
- i = die->next;
- line_release(die);
- }
+ Line *i;
+ Line *die;
+
+ i = self->head;
+ while (i) {
+ die = i;
+ i = die->next;
+ line_release(die);
+ }
}
@@ -237,76 +237,77 @@ list_release(List *self)
* and finally print it
*/
-int
-sort_main(int argc, char **argv)
+int sort_main(int argc, char **argv)
{
- int i;
- char opt;
- List list;
- Line *l;
- Compare *compare;
-
- /* init */
- compare = compare_ascii;
- list_init(&list);
-
- /* parse argv[] */
- for (i = 1; i < argc; i++) {
- if (argv[i][0] == '-') {
- opt = argv[i][1];
- switch (opt) {
- case 'g':
- /* what's the diff between -g && -n? */
- compare = compare_numeric;
- break;
- case 'h':
- usage(sort_usage);
- break;
- case 'n':
- /* what's the diff between -g && -n? */
- compare = compare_numeric;
- break;
- case 'r':
- /* reverse */
- break;
- default:
- fprintf(stderr, "sort: invalid option -- %c\n", opt);
- usage(sort_usage);
- }
- } else {
- break;
+ int i;
+ char opt;
+ List list;
+ Line *l;
+ Compare *compare;
+
+ /* init */
+ compare = compare_ascii;
+ list_init(&list);
+
+ /* parse argv[] */
+ for (i = 1; i < argc; i++) {
+ if (argv[i][0] == '-') {
+ opt = argv[i][1];
+ switch (opt) {
+ case 'g':
+ /* what's the diff between -g && -n? */
+ compare = compare_numeric;
+ break;
+ case 'h':
+ usage(sort_usage);
+ break;
+ case 'n':
+ /* what's the diff between -g && -n? */
+ compare = compare_numeric;
+ break;
+ case 'r':
+ /* reverse */
+ break;
+ default:
+ fprintf(stderr, "sort: invalid option -- %c\n", opt);
+ usage(sort_usage);
+ }
+ } else {
+ break;
+ }
}
- }
- /* this could be factored better */
+ /* this could be factored better */
- /* work w/ stdin */
- if (i >= argc) {
- while ( (l = line_newFromFile(stdin))) {
- list_insert(&list, l);
- }
- list_sort(&list, compare);
- list_writeToFile(&list, stdout);
- list_release(&list);
-
- /* work w/ what's left in argv[] */
- } else {
- FILE *src;
-
- for ( ; i < argc; i++) {
- src = fopen(argv[i], "r");
- if (src == NULL) { break; }
- while ( (l = line_newFromFile(src))) {
- list_insert(&list, l);
- }
- fclose(src);
+ /* work w/ stdin */
+ if (i >= argc) {
+ while ((l = line_newFromFile(stdin))) {
+ list_insert(&list, l);
+ }
+ list_sort(&list, compare);
+ list_writeToFile(&list, stdout);
+ list_release(&list);
+
+ /* work w/ what's left in argv[] */
+ } else {
+ FILE *src;
+
+ for (; i < argc; i++) {
+ src = fopen(argv[i], "r");
+ if (src == NULL) {
+ break;
+ }
+ while ((l = line_newFromFile(src))) {
+ list_insert(&list, l);
+ }
+ fclose(src);
+ }
+ list_sort(&list, compare);
+ list_writeToFile(&list, stdout);
+ list_release(&list);
}
- list_sort(&list, compare);
- list_writeToFile(&list, stdout);
- list_release(&list);
- }
- exit(0);
+ exit(0);
}
-/* $Id: sort.c,v 1.10 2000/02/07 05:29:42 erik Exp $ */
+/* $Id: sort.c,v 1.11 2000/02/08 19:58:47 erik Exp $ */
diff --git a/coreutils/sync.c b/coreutils/sync.c
index 145ed1e..f8160c8 100644
--- a/coreutils/sync.c
+++ b/coreutils/sync.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini sync implementation for busybox
*
@@ -23,12 +24,10 @@
#include "internal.h"
#include <stdio.h>
-extern int
-sync_main(int argc, char * * argv)
+extern int sync_main(int argc, char **argv)
{
- if ( argc>1 && **(argv+1) == '-' ) {
- usage( "sync\n\nWrite all buffered filesystem blocks to disk.\n");
- }
- exit( sync());
+ if (argc > 1 && **(argv + 1) == '-') {
+ usage("sync\n\nWrite all buffered filesystem blocks to disk.\n");
+ }
+ exit(sync());
}
-
diff --git a/coreutils/tail.c b/coreutils/tail.c
index 0ab8f11..31705af 100644
--- a/coreutils/tail.c
+++ b/coreutils/tail.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
#include "internal.h"
/* This file contains _two_ implementations of tail. One is
* a bit more full featured, but costs 6k. The other (i.e. the
@@ -68,22 +69,23 @@ static int forever;
static int print_headers;
const char tail_usage[] =
- "tail [OPTION] [FILE]...\n\n"
- "Print last 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\n"
- "Options:\n"
- "\t-n NUM\t\tPrint last NUM lines instead of first 10\n"
- "\t-f\t\tOutput data as the file grows. This version\n"
- "\t\t\tof 'tail -f' supports only one file at a time.\n";
+ "tail [OPTION] [FILE]...\n\n"
+ "Print last 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\n"
+ "Options:\n"
+ "\t-n NUM\t\tPrint last NUM lines instead of first 10\n"
+
+ "\t-f\t\tOutput data as the file grows. This version\n"
+ "\t\t\tof 'tail -f' supports only one file at a time.\n";
static void write_header(const char *filename)
{
- static int first_file = 1;
+ static int first_file = 1;
- printf("%s==> %s <==\n", (first_file ? "" : "\n"), filename);
- first_file = 0;
+ printf("%s==> %s <==\n", (first_file ? "" : "\n"), filename);
+ first_file = 0;
}
/* Print the last N_LINES lines from the end of file FD.
@@ -97,57 +99,57 @@ static void write_header(const char *filename)
static int
file_lines(const char *filename, int fd, long int n_lines, off_t pos)
{
- char buffer[BUFSIZ];
- int bytes_read;
- int i; /* Index into `buffer' for scanning. */
-
- if (n_lines == 0)
- return 0;
+ char buffer[BUFSIZ];
+ int bytes_read;
+ int i; /* Index into `buffer' for scanning. */
- /* Set `bytes_read' to the size of the last, probably partial, buffer;
- 0 < `bytes_read' <= `BUFSIZ'. */
- bytes_read = pos % BUFSIZ;
- if (bytes_read == 0)
- bytes_read = BUFSIZ;
- /* Make `pos' a multiple of `BUFSIZ' (0 if the file is short), so that all
- reads will be on block boundaries, which might increase efficiency. */
- pos -= bytes_read;
- lseek(fd, pos, SEEK_SET);
- bytes_read = fullRead(fd, buffer, bytes_read);
- if (bytes_read == -1)
- error("read error");
-
- /* Count the incomplete line on files that don't end with a newline. */
- if (bytes_read && buffer[bytes_read - 1] != '\n')
- --n_lines;
-
- do {
- /* Scan backward, counting the newlines in this bufferfull. */
- for (i = bytes_read - 1; i >= 0; i--) {
- /* Have we counted the requested number of newlines yet? */
- if (buffer[i] == '\n' && n_lines-- == 0) {
- /* If this newline wasn't the last character in the buffer,
- print the text after it. */
- if (i != bytes_read - 1)
- XWRITE(STDOUT_FILENO, &buffer[i + 1],
- bytes_read - (i + 1));
+ if (n_lines == 0)
return 0;
- }
- }
- /* Not enough newlines in that bufferfull. */
- if (pos == 0) {
- /* Not enough lines in the file; print the entire file. */
- lseek(fd, (off_t) 0, SEEK_SET);
- return 0;
- }
- pos -= BUFSIZ;
+
+ /* Set `bytes_read' to the size of the last, probably partial, buffer;
+ 0 < `bytes_read' <= `BUFSIZ'. */
+ bytes_read = pos % BUFSIZ;
+ if (bytes_read == 0)
+ bytes_read = BUFSIZ;
+ /* Make `pos' a multiple of `BUFSIZ' (0 if the file is short), so that all
+ reads will be on block boundaries, which might increase efficiency. */
+ pos -= bytes_read;
lseek(fd, pos, SEEK_SET);
- }
- while ((bytes_read = fullRead(fd, buffer, BUFSIZ)) > 0);
- if (bytes_read == -1)
- error("read error");
+ bytes_read = fullRead(fd, buffer, bytes_read);
+ if (bytes_read == -1)
+ error("read error");
+
+ /* Count the incomplete line on files that don't end with a newline. */
+ if (bytes_read && buffer[bytes_read - 1] != '\n')
+ --n_lines;
+
+ do {
+ /* Scan backward, counting the newlines in this bufferfull. */
+ for (i = bytes_read - 1; i >= 0; i--) {
+ /* Have we counted the requested number of newlines yet? */
+ if (buffer[i] == '\n' && n_lines-- == 0) {
+ /* If this newline wasn't the last character in the buffer,
+ print the text after it. */
+ if (i != bytes_read - 1)
+ XWRITE(STDOUT_FILENO, &buffer[i + 1],
+ bytes_read - (i + 1));
+ return 0;
+ }
+ }
+ /* Not enough newlines in that bufferfull. */
+ if (pos == 0) {
+ /* Not enough lines in the file; print the entire file. */
+ lseek(fd, (off_t) 0, SEEK_SET);
+ return 0;
+ }
+ pos -= BUFSIZ;
+ lseek(fd, pos, SEEK_SET);
+ }
+ while ((bytes_read = fullRead(fd, buffer, BUFSIZ)) > 0);
+ if (bytes_read == -1)
+ error("read error");
- return 0;
+ return 0;
}
/* Print the last N_LINES lines from the end of the standard input,
@@ -157,100 +159,100 @@ file_lines(const char *filename, int fd, long int n_lines, off_t pos)
static int pipe_lines(const char *filename, int fd, long int n_lines)
{
- struct linebuffer {
- int nbytes, nlines;
- char buffer[BUFSIZ];
- struct linebuffer *next;
- };
- typedef struct linebuffer LBUFFER;
- LBUFFER *first, *last, *tmp;
- int i; /* Index into buffers. */
- int total_lines = 0; /* Total number of newlines in all buffers. */
- int errors = 0;
-
- first = last = (LBUFFER *) xmalloc(sizeof(LBUFFER));
- first->nbytes = first->nlines = 0;
- first->next = NULL;
- tmp = (LBUFFER *) xmalloc(sizeof(LBUFFER));
-
- /* Input is always read into a fresh buffer. */
- while ((tmp->nbytes = fullRead(fd, tmp->buffer, BUFSIZ)) > 0) {
- tmp->nlines = 0;
- tmp->next = NULL;
-
- /* Count the number of newlines just read. */
- for (i = 0; i < tmp->nbytes; i++)
- if (tmp->buffer[i] == '\n')
- ++tmp->nlines;
- total_lines += tmp->nlines;
-
- /* If there is enough room in the last buffer read, just append the new
- one to it. This is because when reading from a pipe, `nbytes' can
- often be very small. */
- if (tmp->nbytes + last->nbytes < BUFSIZ) {
- memcpy(&last->buffer[last->nbytes], tmp->buffer, tmp->nbytes);
- last->nbytes += tmp->nbytes;
- last->nlines += tmp->nlines;
- } else {
- /* If there's not enough room, link the new buffer onto the end of
- the list, then either free up the oldest buffer for the next
- read if that would leave enough lines, or else malloc a new one.
- Some compaction mechanism is possible but probably not
- worthwhile. */
- last = last->next = tmp;
- if (total_lines - first->nlines > n_lines) {
- tmp = first;
- total_lines -= first->nlines;
- first = first->next;
- } else
- tmp = (LBUFFER *) xmalloc(sizeof(LBUFFER));
+ struct linebuffer {
+ int nbytes, nlines;
+ char buffer[BUFSIZ];
+ struct linebuffer *next;
+ };
+ typedef struct linebuffer LBUFFER;
+ LBUFFER *first, *last, *tmp;
+ int i; /* Index into buffers. */
+ int total_lines = 0; /* Total number of newlines in all buffers. */
+ int errors = 0;
+
+ first = last = (LBUFFER *) xmalloc(sizeof(LBUFFER));
+ first->nbytes = first->nlines = 0;
+ first->next = NULL;
+ tmp = (LBUFFER *) xmalloc(sizeof(LBUFFER));
+
+ /* Input is always read into a fresh buffer. */
+ while ((tmp->nbytes = fullRead(fd, tmp->buffer, BUFSIZ)) > 0) {
+ tmp->nlines = 0;
+ tmp->next = NULL;
+
+ /* Count the number of newlines just read. */
+ for (i = 0; i < tmp->nbytes; i++)
+ if (tmp->buffer[i] == '\n')
+ ++tmp->nlines;
+ total_lines += tmp->nlines;
+
+ /* If there is enough room in the last buffer read, just append the new
+ one to it. This is because when reading from a pipe, `nbytes' can
+ often be very small. */
+ if (tmp->nbytes + last->nbytes < BUFSIZ) {
+ memcpy(&last->buffer[last->nbytes], tmp->buffer, tmp->nbytes);
+ last->nbytes += tmp->nbytes;
+ last->nlines += tmp->nlines;
+ } else {
+ /* If there's not enough room, link the new buffer onto the end of
+ the list, then either free up the oldest buffer for the next
+ read if that would leave enough lines, or else malloc a new one.
+ Some compaction mechanism is possible but probably not
+ worthwhile. */
+ last = last->next = tmp;
+ if (total_lines - first->nlines > n_lines) {
+ tmp = first;
+ total_lines -= first->nlines;
+ first = first->next;
+ } else
+ tmp = (LBUFFER *) xmalloc(sizeof(LBUFFER));
+ }
}
- }
- if (tmp->nbytes == -1)
- error("read error");
-
- free((char *) tmp);
-
- /* This prevents a core dump when the pipe contains no newlines. */
- if (n_lines == 0)
- goto free_lbuffers;
-
- /* Count the incomplete line on files that don't end with a newline. */
- if (last->buffer[last->nbytes - 1] != '\n') {
- ++last->nlines;
- ++total_lines;
- }
-
- /* Run through the list, printing lines. First, skip over unneeded
- buffers. */
- for (tmp = first; total_lines - tmp->nlines > n_lines; tmp = tmp->next)
- total_lines -= tmp->nlines;
-
- /* Find the correct beginning, then print the rest of the file. */
- if (total_lines > n_lines) {
- char *cp;
-
- /* Skip `total_lines' - `n_lines' newlines. We made sure that
- `total_lines' - `n_lines' <= `tmp->nlines'. */
- cp = tmp->buffer;
- for (i = total_lines - n_lines; i; --i)
- while (*cp++ != '\n')
- /* Do nothing. */ ;
- i = cp - tmp->buffer;
- } else
- i = 0;
- XWRITE(STDOUT_FILENO, &tmp->buffer[i], tmp->nbytes - i);
-
- for (tmp = tmp->next; tmp; tmp = tmp->next)
- XWRITE(STDOUT_FILENO, tmp->buffer, tmp->nbytes);
+ if (tmp->nbytes == -1)
+ error("read error");
+
+ free((char *) tmp);
+
+ /* This prevents a core dump when the pipe contains no newlines. */
+ if (n_lines == 0)
+ goto free_lbuffers;
+
+ /* Count the incomplete line on files that don't end with a newline. */
+ if (last->buffer[last->nbytes - 1] != '\n') {
+ ++last->nlines;
+ ++total_lines;
+ }
+
+ /* Run through the list, printing lines. First, skip over unneeded
+ buffers. */
+ for (tmp = first; total_lines - tmp->nlines > n_lines; tmp = tmp->next)
+ total_lines -= tmp->nlines;
+
+ /* Find the correct beginning, then print the rest of the file. */
+ if (total_lines > n_lines) {
+ char *cp;
+
+ /* Skip `total_lines' - `n_lines' newlines. We made sure that
+ `total_lines' - `n_lines' <= `tmp->nlines'. */
+ cp = tmp->buffer;
+ for (i = total_lines - n_lines; i; --i)
+ while (*cp++ != '\n')
+ /* Do nothing. */ ;
+ i = cp - tmp->buffer;
+ } else
+ i = 0;
+ XWRITE(STDOUT_FILENO, &tmp->buffer[i], tmp->nbytes - i);
+
+ for (tmp = tmp->next; tmp; tmp = tmp->next)
+ XWRITE(STDOUT_FILENO, tmp->buffer, tmp->nbytes);
free_lbuffers:
- while (first) {
- tmp = first->next;
- free((char *) first);
- first = tmp;
- }
- return errors;
+ while (first) {
+ tmp = first->next;
+ free((char *) first);
+ first = tmp;
+ }
+ return errors;
}
/* Display file FILENAME from the current position in FD to the end.
@@ -259,25 +261,25 @@ static int pipe_lines(const char *filename, int fd, long int n_lines)
static long dump_remainder(const char *filename, int fd)
{
- char buffer[BUFSIZ];
- int bytes_read;
- long total;
+ char buffer[BUFSIZ];
+ int bytes_read;
+ long total;
- total = 0;
+ total = 0;
output:
- while ((bytes_read = fullRead(fd, buffer, BUFSIZ)) > 0) {
- XWRITE(STDOUT_FILENO, buffer, bytes_read);
- total += bytes_read;
- }
- if (bytes_read == -1)
- error("read error");
- if (forever) {
- fflush(stdout);
- sleep(1);
- goto output;
- }
-
- return total;
+ while ((bytes_read = fullRead(fd, buffer, BUFSIZ)) > 0) {
+ XWRITE(STDOUT_FILENO, buffer, bytes_read);
+ total += bytes_read;
+ }
+ if (bytes_read == -1)
+ error("read error");
+ if (forever) {
+ fflush(stdout);
+ sleep(1);
+ goto output;
+ }
+
+ return total;
}
/* Output the last N_LINES lines of file FILENAME open for reading in FD.
@@ -285,31 +287,31 @@ static long dump_remainder(const char *filename, int fd)
static int tail_lines(const char *filename, int fd, long int n_lines)
{
- struct stat stats;
- off_t length;
-
- if (print_headers)
- write_header(filename);
-
- if (fstat(fd, &stats))
- error("fstat error");
-
- /* Use file_lines only if FD refers to a regular file with
- its file pointer positioned at beginning of file. */
- /* FIXME: adding the lseek conjunct is a kludge.
- Once there's a reasonable test suite, fix the true culprit:
- file_lines. file_lines shouldn't presume that the input
- file pointer is initially positioned to beginning of file. */
- if (S_ISREG(stats.st_mode)
- && lseek(fd, (off_t) 0, SEEK_CUR) == (off_t) 0) {
- length = lseek(fd, (off_t) 0, SEEK_END);
- if (length != 0 && file_lines(filename, fd, n_lines, length))
- return 1;
- dump_remainder(filename, fd);
- } else
- return pipe_lines(filename, fd, n_lines);
-
- return 0;
+ struct stat stats;
+ off_t length;
+
+ if (print_headers)
+ write_header(filename);
+
+ if (fstat(fd, &stats))
+ error("fstat error");
+
+ /* Use file_lines only if FD refers to a regular file with
+ its file pointer positioned at beginning of file. */
+ /* FIXME: adding the lseek conjunct is a kludge.
+ Once there's a reasonable test suite, fix the true culprit:
+ file_lines. file_lines shouldn't presume that the input
+ file pointer is initially positioned to beginning of file. */
+ if (S_ISREG(stats.st_mode)
+ && lseek(fd, (off_t) 0, SEEK_CUR) == (off_t) 0) {
+ length = lseek(fd, (off_t) 0, SEEK_END);
+ if (length != 0 && file_lines(filename, fd, n_lines, length))
+ return 1;
+ dump_remainder(filename, fd);
+ } else
+ return pipe_lines(filename, fd, n_lines);
+
+ return 0;
}
/* Display the last N_UNITS lines of file FILENAME.
@@ -318,78 +320,78 @@ static int tail_lines(const char *filename, int fd, long int n_lines)
static int tail_file(const char *filename, off_t n_units)
{
- int fd, errors;
-
- if (!strcmp(filename, "-")) {
- filename = "standard input";
- errors = tail_lines(filename, 0, (long) n_units);
- } else {
- /* Not standard input. */
- fd = open(filename, O_RDONLY);
- if (fd == -1)
- error("open error");
-
- errors = tail_lines(filename, fd, (long) n_units);
- close(fd);
- }
-
- return errors;
+ int fd, errors;
+
+ if (!strcmp(filename, "-")) {
+ filename = "standard input";
+ errors = tail_lines(filename, 0, (long) n_units);
+ } else {
+ /* Not standard input. */
+ fd = open(filename, O_RDONLY);
+ if (fd == -1)
+ error("open error");
+
+ errors = tail_lines(filename, fd, (long) n_units);
+ close(fd);
+ }
+
+ return errors;
}
extern int tail_main(int argc, char **argv)
{
- int exit_status = 0;
- int n_units = DEFAULT_N_LINES;
- int n_tmp, i;
- char opt;
-
- forever = print_headers = 0;
-
- /* parse argv[] */
- for (i = 1; i < argc; i++) {
- if (argv[i][0] == '-') {
- opt = argv[i][1];
- switch (opt) {
- case 'f':
- forever = 1;
- break;
- case 'n':
- n_tmp = 0;
- if (++i < argc)
- n_tmp = atoi(argv[i]);
- if (n_tmp < 1)
- usage(tail_usage);
- n_units = n_tmp;
- break;
- case '-':
- case 'h':
- usage(tail_usage);
- default:
- fprintf(stderr, "tail: invalid option -- %c\n", opt);
- usage(tail_usage);
- }
- } else {
- break;
+ int exit_status = 0;
+ int n_units = DEFAULT_N_LINES;
+ int n_tmp, i;
+ char opt;
+
+ forever = print_headers = 0;
+
+ /* parse argv[] */
+ for (i = 1; i < argc; i++) {
+ if (argv[i][0] == '-') {
+ opt = argv[i][1];
+ switch (opt) {
+ case 'f':
+ forever = 1;
+ break;
+ case 'n':
+ n_tmp = 0;
+ if (++i < argc)
+ n_tmp = atoi(argv[i]);
+ if (n_tmp < 1)
+ usage(tail_usage);
+ n_units = n_tmp;
+ break;
+ case '-':
+ case 'h':
+ usage(tail_usage);
+ default:
+ fprintf(stderr, "tail: invalid option -- %c\n", opt);
+ usage(tail_usage);
+ }
+ } else {
+ break;
+ }
}
- }
- if (i + 1 < argc) {
- if (forever) {
- fprintf(stderr,
- "tail: option -f is invalid with multiple files\n");
- usage(tail_usage);
+ if (i + 1 < argc) {
+ if (forever) {
+ fprintf(stderr,
+ "tail: option -f is invalid with multiple files\n");
+ usage(tail_usage);
+ }
+ print_headers = 1;
}
- print_headers = 1;
- }
- if (i >= argc) {
- exit_status |= tail_file("-", n_units);
- } else {
- for (; i < argc; i++)
- exit_status |= tail_file(argv[i], n_units);
- }
+ if (i >= argc) {
+ exit_status |= tail_file("-", n_units);
+ } else {
+ for (; i < argc; i++)
+ exit_status |= tail_file(argv[i], n_units);
+ }
- exit(exit_status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+ exit(exit_status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
@@ -441,15 +443,15 @@ extern int tail_main(int argc, char **argv)
#define NDEBUG 1
-static void detailed_error(int i, int errnum, char* fmt, ...)
+static void detailed_error(int i, int errnum, char *fmt, ...)
{
- va_list arguments;
+ va_list arguments;
- va_start(arguments, fmt);
- vfprintf(stderr, fmt, arguments);
- fprintf(stderr, "\n%s\n", strerror( errnum));
- va_end(arguments);
- exit(i);
+ va_start(arguments, fmt);
+ vfprintf(stderr, fmt, arguments);
+ fprintf(stderr, "\n%s\n", strerror(errnum));
+ va_end(arguments);
+ exit(i);
}
@@ -494,9 +496,8 @@ static int from_start;
static int print_headers;
/* When to print the filename banners. */
-enum header_mode
-{
- multiple_files, always, never
+enum header_mode {
+ multiple_files, always, never
};
/* The name this program was run with. */
@@ -506,8 +507,7 @@ char *program_name;
static int have_read_stdin;
-static const char tail_usage[] =
-"tail [OPTION]... [FILE]...\n\
+static const char tail_usage[] = "tail [OPTION]... [FILE]...\n\
\n\
Print last 10 lines of each FILE to standard output.\n\
With more than one FILE, precede each with a header giving the file name.\n\
@@ -524,15 +524,13 @@ If the first character of N (bytes or lines) is a `+', output begins with \n\
the Nth item from the start of each file, otherwise, print the last N items\n\
in the file. N bytes may be suffixed by k (x1024), b (x512), or m (1024^2).\n\n";
-static void
-write_header (const char *filename, const char *comment)
+static void write_header(const char *filename, const char *comment)
{
- static int first_file = 1;
+ static int first_file = 1;
- printf ("%s==> %s%s%s <==\n", (first_file ? "" : "\n"), filename,
- (comment ? ": " : ""),
- (comment ? comment : ""));
- first_file = 0;
+ printf("%s==> %s%s%s <==\n", (first_file ? "" : "\n"), filename,
+ (comment ? ": " : ""), (comment ? comment : ""));
+ first_file = 0;
}
/* Print the last N_LINES lines from the end of file FD.
@@ -544,67 +542,62 @@ write_header (const char *filename, const char *comment)
Return 0 if successful, 1 if an error occurred. */
static int
-file_lines (const char *filename, int fd, long int n_lines, off_t pos)
+file_lines(const char *filename, int fd, long int n_lines, off_t pos)
{
- char buffer[BUFSIZ];
- int bytes_read;
- int i; /* Index into `buffer' for scanning. */
-
- if (n_lines == 0)
- return 0;
-
- /* Set `bytes_read' to the size of the last, probably partial, buffer;
- 0 < `bytes_read' <= `BUFSIZ'. */
- bytes_read = pos % BUFSIZ;
- if (bytes_read == 0)
- bytes_read = BUFSIZ;
- /* Make `pos' a multiple of `BUFSIZ' (0 if the file is short), so that all
- reads will be on block boundaries, which might increase efficiency. */
- pos -= bytes_read;
- lseek (fd, pos, SEEK_SET);
- bytes_read = fullRead (fd, buffer, bytes_read);
- if (bytes_read == -1)
- {
- detailed_error (0, errno, "%s", filename);
- return 1;
- }
-
- /* Count the incomplete line on files that don't end with a newline. */
- if (bytes_read && buffer[bytes_read - 1] != '\n')
- --n_lines;
-
- do
- {
- /* Scan backward, counting the newlines in this bufferfull. */
- for (i = bytes_read - 1; i >= 0; i--)
- {
- /* Have we counted the requested number of newlines yet? */
- if (buffer[i] == '\n' && n_lines-- == 0)
- {
- /* If this newline wasn't the last character in the buffer,
- print the text after it. */
- if (i != bytes_read - 1)
- XWRITE (STDOUT_FILENO, &buffer[i + 1], bytes_read - (i + 1));
- return 0;
- }
+ char buffer[BUFSIZ];
+ int bytes_read;
+ int i; /* Index into `buffer' for scanning. */
+
+ if (n_lines == 0)
+ return 0;
+
+ /* Set `bytes_read' to the size of the last, probably partial, buffer;
+ 0 < `bytes_read' <= `BUFSIZ'. */
+ bytes_read = pos % BUFSIZ;
+ if (bytes_read == 0)
+ bytes_read = BUFSIZ;
+ /* Make `pos' a multiple of `BUFSIZ' (0 if the file is short), so that all
+ reads will be on block boundaries, which might increase efficiency. */
+ pos -= bytes_read;
+ lseek(fd, pos, SEEK_SET);
+ bytes_read = fullRead(fd, buffer, bytes_read);
+ if (bytes_read == -1) {
+ detailed_error(0, errno, "%s", filename);
+ return 1;
+ }
+
+ /* Count the incomplete line on files that don't end with a newline. */
+ if (bytes_read && buffer[bytes_read - 1] != '\n')
+ --n_lines;
+
+ do {
+ /* Scan backward, counting the newlines in this bufferfull. */
+ for (i = bytes_read - 1; i >= 0; i--) {
+ /* Have we counted the requested number of newlines yet? */
+ if (buffer[i] == '\n' && n_lines-- == 0) {
+ /* If this newline wasn't the last character in the buffer,
+ print the text after it. */
+ if (i != bytes_read - 1)
+ XWRITE(STDOUT_FILENO, &buffer[i + 1],
+ bytes_read - (i + 1));
+ return 0;
+ }
+ }
+ /* Not enough newlines in that bufferfull. */
+ if (pos == 0) {
+ /* Not enough lines in the file; print the entire file. */
+ lseek(fd, (off_t) 0, SEEK_SET);
+ return 0;
+ }
+ pos -= BUFSIZ;
+ lseek(fd, pos, SEEK_SET);
}
- /* Not enough newlines in that bufferfull. */
- if (pos == 0)
- {
- /* Not enough lines in the file; print the entire file. */
- lseek (fd, (off_t) 0, SEEK_SET);
- return 0;
+ while ((bytes_read = fullRead(fd, buffer, BUFSIZ)) > 0);
+ if (bytes_read == -1) {
+ detailed_error(0, errno, "%s", filename);
+ return 1;
}
- pos -= BUFSIZ;
- lseek (fd, pos, SEEK_SET);
- }
- while ((bytes_read = fullRead (fd, buffer, BUFSIZ)) > 0);
- if (bytes_read == -1)
- {
- detailed_error (0, errno, "%s", filename);
- return 1;
- }
- return 0;
+ return 0;
}
/* Print the last N_LINES lines from the end of the standard input,
@@ -612,301 +605,264 @@ file_lines (const char *filename, int fd, long int n_lines, off_t pos)
Buffer the text as a linked list of LBUFFERs, adding them as needed.
Return 0 if successful, 1 if an error occured. */
-static int
-pipe_lines (const char *filename, int fd, long int n_lines)
+static int pipe_lines(const char *filename, int fd, long int n_lines)
{
- struct linebuffer
- {
- int nbytes, nlines;
- char buffer[BUFSIZ];
- struct linebuffer *next;
- };
- typedef struct linebuffer LBUFFER;
- LBUFFER *first, *last, *tmp;
- int i; /* Index into buffers. */
- int total_lines = 0; /* Total number of newlines in all buffers. */
- int errors = 0;
-
- first = last = (LBUFFER *) xmalloc (sizeof (LBUFFER));
- first->nbytes = first->nlines = 0;
- first->next = NULL;
- tmp = (LBUFFER *) xmalloc (sizeof (LBUFFER));
-
- /* Input is always read into a fresh buffer. */
- while ((tmp->nbytes = fullRead (fd, tmp->buffer, BUFSIZ)) > 0)
- {
- tmp->nlines = 0;
- tmp->next = NULL;
-
- /* Count the number of newlines just read. */
- for (i = 0; i < tmp->nbytes; i++)
- if (tmp->buffer[i] == '\n')
- ++tmp->nlines;
- total_lines += tmp->nlines;
-
- /* If there is enough room in the last buffer read, just append the new
- one to it. This is because when reading from a pipe, `nbytes' can
- often be very small. */
- if (tmp->nbytes + last->nbytes < BUFSIZ)
- {
- memcpy (&last->buffer[last->nbytes], tmp->buffer, tmp->nbytes);
- last->nbytes += tmp->nbytes;
- last->nlines += tmp->nlines;
+ struct linebuffer {
+ int nbytes, nlines;
+ char buffer[BUFSIZ];
+ struct linebuffer *next;
+ };
+ typedef struct linebuffer LBUFFER;
+ LBUFFER *first, *last, *tmp;
+ int i; /* Index into buffers. */
+ int total_lines = 0; /* Total number of newlines in all buffers. */
+ int errors = 0;
+
+ first = last = (LBUFFER *) xmalloc(sizeof(LBUFFER));
+ first->nbytes = first->nlines = 0;
+ first->next = NULL;
+ tmp = (LBUFFER *) xmalloc(sizeof(LBUFFER));
+
+ /* Input is always read into a fresh buffer. */
+ while ((tmp->nbytes = fullRead(fd, tmp->buffer, BUFSIZ)) > 0) {
+ tmp->nlines = 0;
+ tmp->next = NULL;
+
+ /* Count the number of newlines just read. */
+ for (i = 0; i < tmp->nbytes; i++)
+ if (tmp->buffer[i] == '\n')
+ ++tmp->nlines;
+ total_lines += tmp->nlines;
+
+ /* If there is enough room in the last buffer read, just append the new
+ one to it. This is because when reading from a pipe, `nbytes' can
+ often be very small. */
+ if (tmp->nbytes + last->nbytes < BUFSIZ) {
+ memcpy(&last->buffer[last->nbytes], tmp->buffer, tmp->nbytes);
+ last->nbytes += tmp->nbytes;
+ last->nlines += tmp->nlines;
+ } else {
+ /* If there's not enough room, link the new buffer onto the end of
+ the list, then either free up the oldest buffer for the next
+ read if that would leave enough lines, or else malloc a new one.
+ Some compaction mechanism is possible but probably not
+ worthwhile. */
+ last = last->next = tmp;
+ if (total_lines - first->nlines > n_lines) {
+ tmp = first;
+ total_lines -= first->nlines;
+ first = first->next;
+ } else
+ tmp = (LBUFFER *) xmalloc(sizeof(LBUFFER));
+ }
+ }
+ if (tmp->nbytes == -1) {
+ detailed_error(0, errno, "%s", filename);
+ errors = 1;
+ free((char *) tmp);
+ goto free_lbuffers;
}
- else
- {
- /* If there's not enough room, link the new buffer onto the end of
- the list, then either free up the oldest buffer for the next
- read if that would leave enough lines, or else malloc a new one.
- Some compaction mechanism is possible but probably not
- worthwhile. */
- last = last->next = tmp;
- if (total_lines - first->nlines > n_lines)
- {
- tmp = first;
- total_lines -= first->nlines;
- first = first->next;
- }
- else
- tmp = (LBUFFER *) xmalloc (sizeof (LBUFFER));
+
+ free((char *) tmp);
+
+ /* This prevents a core dump when the pipe contains no newlines. */
+ if (n_lines == 0)
+ goto free_lbuffers;
+
+ /* Count the incomplete line on files that don't end with a newline. */
+ if (last->buffer[last->nbytes - 1] != '\n') {
+ ++last->nlines;
+ ++total_lines;
+ }
+
+ /* Run through the list, printing lines. First, skip over unneeded
+ buffers. */
+ for (tmp = first; total_lines - tmp->nlines > n_lines; tmp = tmp->next)
+ total_lines -= tmp->nlines;
+
+ /* Find the correct beginning, then print the rest of the file. */
+ if (total_lines > n_lines) {
+ char *cp;
+
+ /* Skip `total_lines' - `n_lines' newlines. We made sure that
+ `total_lines' - `n_lines' <= `tmp->nlines'. */
+ cp = tmp->buffer;
+ for (i = total_lines - n_lines; i; --i)
+ while (*cp++ != '\n')
+ /* Do nothing. */ ;
+ i = cp - tmp->buffer;
+ } else
+ i = 0;
+ XWRITE(STDOUT_FILENO, &tmp->buffer[i], tmp->nbytes - i);
+
+ for (tmp = tmp->next; tmp; tmp = tmp->next)
+ XWRITE(STDOUT_FILENO, tmp->buffer, tmp->nbytes);
+
+ free_lbuffers:
+ while (first) {
+ tmp = first->next;
+ free((char *) first);
+ first = tmp;
}
- }
- if (tmp->nbytes == -1)
- {
- detailed_error (0, errno, "%s", filename);
- errors = 1;
- free ((char *) tmp);
- goto free_lbuffers;
- }
-
- free ((char *) tmp);
-
- /* This prevents a core dump when the pipe contains no newlines. */
- if (n_lines == 0)
- goto free_lbuffers;
-
- /* Count the incomplete line on files that don't end with a newline. */
- if (last->buffer[last->nbytes - 1] != '\n')
- {
- ++last->nlines;
- ++total_lines;
- }
-
- /* Run through the list, printing lines. First, skip over unneeded
- buffers. */
- for (tmp = first; total_lines - tmp->nlines > n_lines; tmp = tmp->next)
- total_lines -= tmp->nlines;
-
- /* Find the correct beginning, then print the rest of the file. */
- if (total_lines > n_lines)
- {
- char *cp;
-
- /* Skip `total_lines' - `n_lines' newlines. We made sure that
- `total_lines' - `n_lines' <= `tmp->nlines'. */
- cp = tmp->buffer;
- for (i = total_lines - n_lines; i; --i)
- while (*cp++ != '\n')
- /* Do nothing. */ ;
- i = cp - tmp->buffer;
- }
- else
- i = 0;
- XWRITE (STDOUT_FILENO, &tmp->buffer[i], tmp->nbytes - i);
-
- for (tmp = tmp->next; tmp; tmp = tmp->next)
- XWRITE (STDOUT_FILENO, tmp->buffer, tmp->nbytes);
-
-free_lbuffers:
- while (first)
- {
- tmp = first->next;
- free ((char *) first);
- first = tmp;
- }
- return errors;
+ return errors;
}
/* Print the last N_BYTES characters from the end of pipe FD.
This is a stripped down version of pipe_lines.
Return 0 if successful, 1 if an error occurred. */
-static int
-pipe_bytes (const char *filename, int fd, off_t n_bytes)
+static int pipe_bytes(const char *filename, int fd, off_t n_bytes)
{
- struct charbuffer
- {
- int nbytes;
- char buffer[BUFSIZ];
- struct charbuffer *next;
- };
- typedef struct charbuffer CBUFFER;
- CBUFFER *first, *last, *tmp;
- int i; /* Index into buffers. */
- int total_bytes = 0; /* Total characters in all buffers. */
- int errors = 0;
-
- first = last = (CBUFFER *) xmalloc (sizeof (CBUFFER));
- first->nbytes = 0;
- first->next = NULL;
- tmp = (CBUFFER *) xmalloc (sizeof (CBUFFER));
-
- /* Input is always read into a fresh buffer. */
- while ((tmp->nbytes = fullRead (fd, tmp->buffer, BUFSIZ)) > 0)
- {
- tmp->next = NULL;
-
- total_bytes += tmp->nbytes;
- /* If there is enough room in the last buffer read, just append the new
- one to it. This is because when reading from a pipe, `nbytes' can
- often be very small. */
- if (tmp->nbytes + last->nbytes < BUFSIZ)
- {
- memcpy (&last->buffer[last->nbytes], tmp->buffer, tmp->nbytes);
- last->nbytes += tmp->nbytes;
+ struct charbuffer {
+ int nbytes;
+ char buffer[BUFSIZ];
+ struct charbuffer *next;
+ };
+ typedef struct charbuffer CBUFFER;
+ CBUFFER *first, *last, *tmp;
+ int i; /* Index into buffers. */
+ int total_bytes = 0; /* Total characters in all buffers. */
+ int errors = 0;
+
+ first = last = (CBUFFER *) xmalloc(sizeof(CBUFFER));
+ first->nbytes = 0;
+ first->next = NULL;
+ tmp = (CBUFFER *) xmalloc(sizeof(CBUFFER));
+
+ /* Input is always read into a fresh buffer. */
+ while ((tmp->nbytes = fullRead(fd, tmp->buffer, BUFSIZ)) > 0) {
+ tmp->next = NULL;
+
+ total_bytes += tmp->nbytes;
+ /* If there is enough room in the last buffer read, just append the new
+ one to it. This is because when reading from a pipe, `nbytes' can
+ often be very small. */
+ if (tmp->nbytes + last->nbytes < BUFSIZ) {
+ memcpy(&last->buffer[last->nbytes], tmp->buffer, tmp->nbytes);
+ last->nbytes += tmp->nbytes;
+ } else {
+ /* If there's not enough room, link the new buffer onto the end of
+ the list, then either free up the oldest buffer for the next
+ read if that would leave enough characters, or else malloc a new
+ one. Some compaction mechanism is possible but probably not
+ worthwhile. */
+ last = last->next = tmp;
+ if (total_bytes - first->nbytes > n_bytes) {
+ tmp = first;
+ total_bytes -= first->nbytes;
+ first = first->next;
+ } else {
+ tmp = (CBUFFER *) xmalloc(sizeof(CBUFFER));
+ }
+ }
}
- else
- {
- /* If there's not enough room, link the new buffer onto the end of
- the list, then either free up the oldest buffer for the next
- read if that would leave enough characters, or else malloc a new
- one. Some compaction mechanism is possible but probably not
- worthwhile. */
- last = last->next = tmp;
- if (total_bytes - first->nbytes > n_bytes)
- {
- tmp = first;
- total_bytes -= first->nbytes;
- first = first->next;
- }
- else
- {
- tmp = (CBUFFER *) xmalloc (sizeof (CBUFFER));
- }
+ if (tmp->nbytes == -1) {
+ detailed_error(0, errno, "%s", filename);
+ errors = 1;
+ free((char *) tmp);
+ goto free_cbuffers;
+ }
+
+ free((char *) tmp);
+
+ /* Run through the list, printing characters. First, skip over unneeded
+ buffers. */
+ for (tmp = first; total_bytes - tmp->nbytes > n_bytes; tmp = tmp->next)
+ total_bytes -= tmp->nbytes;
+
+ /* Find the correct beginning, then print the rest of the file.
+ We made sure that `total_bytes' - `n_bytes' <= `tmp->nbytes'. */
+ if (total_bytes > n_bytes)
+ i = total_bytes - n_bytes;
+ else
+ i = 0;
+ XWRITE(STDOUT_FILENO, &tmp->buffer[i], tmp->nbytes - i);
+
+ for (tmp = tmp->next; tmp; tmp = tmp->next)
+ XWRITE(STDOUT_FILENO, tmp->buffer, tmp->nbytes);
+
+ free_cbuffers:
+ while (first) {
+ tmp = first->next;
+ free((char *) first);
+ first = tmp;
}
- }
- if (tmp->nbytes == -1)
- {
- detailed_error (0, errno, "%s", filename);
- errors = 1;
- free ((char *) tmp);
- goto free_cbuffers;
- }
-
- free ((char *) tmp);
-
- /* Run through the list, printing characters. First, skip over unneeded
- buffers. */
- for (tmp = first; total_bytes - tmp->nbytes > n_bytes; tmp = tmp->next)
- total_bytes -= tmp->nbytes;
-
- /* Find the correct beginning, then print the rest of the file.
- We made sure that `total_bytes' - `n_bytes' <= `tmp->nbytes'. */
- if (total_bytes > n_bytes)
- i = total_bytes - n_bytes;
- else
- i = 0;
- XWRITE (STDOUT_FILENO, &tmp->buffer[i], tmp->nbytes - i);
-
- for (tmp = tmp->next; tmp; tmp = tmp->next)
- XWRITE (STDOUT_FILENO, tmp->buffer, tmp->nbytes);
-
-free_cbuffers:
- while (first)
- {
- tmp = first->next;
- free ((char *) first);
- first = tmp;
- }
- return errors;
+ return errors;
}
/* Skip N_BYTES characters from the start of pipe FD, and print
any extra characters that were read beyond that.
Return 1 on error, 0 if ok. */
-static int
-start_bytes (const char *filename, int fd, off_t n_bytes)
+static int start_bytes(const char *filename, int fd, off_t n_bytes)
{
- char buffer[BUFSIZ];
- int bytes_read = 0;
-
- while (n_bytes > 0 && (bytes_read = fullRead (fd, buffer, BUFSIZ)) > 0)
- n_bytes -= bytes_read;
- if (bytes_read == -1)
- {
- detailed_error (0, errno, "%s", filename);
- return 1;
- }
- else if (n_bytes < 0)
- XWRITE (STDOUT_FILENO, &buffer[bytes_read + n_bytes], -n_bytes);
- return 0;
+ char buffer[BUFSIZ];
+ int bytes_read = 0;
+
+ while (n_bytes > 0 && (bytes_read = fullRead(fd, buffer, BUFSIZ)) > 0)
+ n_bytes -= bytes_read;
+ if (bytes_read == -1) {
+ detailed_error(0, errno, "%s", filename);
+ return 1;
+ } else if (n_bytes < 0)
+ XWRITE(STDOUT_FILENO, &buffer[bytes_read + n_bytes], -n_bytes);
+ return 0;
}
/* Skip N_LINES lines at the start of file or pipe FD, and print
any extra characters that were read beyond that.
Return 1 on error, 0 if ok. */
-static int
-start_lines (const char *filename, int fd, long int n_lines)
+static int start_lines(const char *filename, int fd, long int n_lines)
{
- char buffer[BUFSIZ];
- int bytes_read = 0;
- int bytes_to_skip = 0;
-
- while (n_lines && (bytes_read = fullRead (fd, buffer, BUFSIZ)) > 0)
- {
- bytes_to_skip = 0;
- while (bytes_to_skip < bytes_read)
- if (buffer[bytes_to_skip++] == '\n' && --n_lines == 0)
- break;
- }
- if (bytes_read == -1)
- {
- detailed_error (0, errno, "%s", filename);
- return 1;
- }
- else if (bytes_to_skip < bytes_read)
- {
- XWRITE (STDOUT_FILENO, &buffer[bytes_to_skip],
- bytes_read - bytes_to_skip);
- }
- return 0;
+ char buffer[BUFSIZ];
+ int bytes_read = 0;
+ int bytes_to_skip = 0;
+
+ while (n_lines && (bytes_read = fullRead(fd, buffer, BUFSIZ)) > 0) {
+ bytes_to_skip = 0;
+ while (bytes_to_skip < bytes_read)
+ if (buffer[bytes_to_skip++] == '\n' && --n_lines == 0)
+ break;
+ }
+ if (bytes_read == -1) {
+ detailed_error(0, errno, "%s", filename);
+ return 1;
+ } else if (bytes_to_skip < bytes_read) {
+ XWRITE(STDOUT_FILENO, &buffer[bytes_to_skip],
+ bytes_read - bytes_to_skip);
+ }
+ return 0;
}
/* Display file FILENAME from the current position in FD to the end.
If `forever' is nonzero, keep reading from the end of the file
until killed. Return the number of bytes read from the file. */
-static long
-dump_remainder (const char *filename, int fd)
+static long dump_remainder(const char *filename, int fd)
{
- char buffer[BUFSIZ];
- int bytes_read;
- long total;
-
- total = 0;
-output:
- while ((bytes_read = fullRead (fd, buffer, BUFSIZ)) > 0)
- {
- XWRITE (STDOUT_FILENO, buffer, bytes_read);
- total += bytes_read;
- }
- if (bytes_read == -1)
- detailed_error (EXIT_FAILURE, errno, "%s", filename);
- if (forever)
- {
- fflush (stdout);
- sleep (1);
- goto output;
- }
- else
- {
- if (forever_multiple)
- fflush (stdout);
- }
-
- return total;
+ char buffer[BUFSIZ];
+ int bytes_read;
+ long total;
+
+ total = 0;
+ output:
+ while ((bytes_read = fullRead(fd, buffer, BUFSIZ)) > 0) {
+ XWRITE(STDOUT_FILENO, buffer, bytes_read);
+ total += bytes_read;
+ }
+ if (bytes_read == -1)
+ detailed_error(EXIT_FAILURE, errno, "%s", filename);
+ if (forever) {
+ fflush(stdout);
+ sleep(1);
+ goto output;
+ } else {
+ if (forever_multiple)
+ fflush(stdout);
+ }
+
+ return total;
}
/* Tail NFILES (>1) files forever until killed. The file names are in
@@ -916,186 +872,161 @@ output:
none of them have changed size in one iteration, we sleep for a
second and try again. We do this until the user interrupts us. */
-static void
-tail_forever (char **names, int nfiles)
+static void tail_forever(char **names, int nfiles)
{
- int last;
-
- last = -1;
-
- while (1)
- {
- int i;
- int changed;
-
- changed = 0;
- for (i = 0; i < nfiles; i++)
- {
- struct stat stats;
-
- if (file_descs[i] < 0)
- continue;
- if (fstat (file_descs[i], &stats) < 0)
- {
- detailed_error (0, errno, "%s", names[i]);
- file_descs[i] = -1;
- continue;
- }
- if (stats.st_size == file_sizes[i])
- continue;
-
- /* This file has changed size. Print out what we can, and
- then keep looping. */
-
- changed = 1;
-
- if (stats.st_size < file_sizes[i])
- {
- write_header (names[i], "file truncated");
- last = i;
- lseek (file_descs[i], stats.st_size, SEEK_SET);
- file_sizes[i] = stats.st_size;
- continue;
- }
-
- if (i != last)
- {
- if (print_headers)
- write_header (names[i], NULL);
- last = i;
- }
- file_sizes[i] += dump_remainder (names[i], file_descs[i]);
- }
+ int last;
+
+ last = -1;
+
+ while (1) {
+ int i;
+ int changed;
+
+ changed = 0;
+ for (i = 0; i < nfiles; i++) {
+ struct stat stats;
+
+ if (file_descs[i] < 0)
+ continue;
+ if (fstat(file_descs[i], &stats) < 0) {
+ detailed_error(0, errno, "%s", names[i]);
+ file_descs[i] = -1;
+ continue;
+ }
+ if (stats.st_size == file_sizes[i])
+ continue;
+
+ /* This file has changed size. Print out what we can, and
+ then keep looping. */
+
+ changed = 1;
+
+ if (stats.st_size < file_sizes[i]) {
+ write_header(names[i], "file truncated");
+ last = i;
+ lseek(file_descs[i], stats.st_size, SEEK_SET);
+ file_sizes[i] = stats.st_size;
+ continue;
+ }
+
+ if (i != last) {
+ if (print_headers)
+ write_header(names[i], NULL);
+ last = i;
+ }
+ file_sizes[i] += dump_remainder(names[i], file_descs[i]);
+ }
- /* If none of the files changed size, sleep. */
- if (! changed)
- sleep (1);
- }
+ /* If none of the files changed size, sleep. */
+ if (!changed)
+ sleep(1);
+ }
}
/* Output the last N_BYTES bytes of file FILENAME open for reading in FD.
Return 0 if successful, 1 if an error occurred. */
-static int
-tail_bytes (const char *filename, int fd, off_t n_bytes)
+static int tail_bytes(const char *filename, int fd, off_t n_bytes)
{
- struct stat stats;
-
- /* FIXME: resolve this like in dd.c. */
- /* Use fstat instead of checking for errno == ESPIPE because
- lseek doesn't work on some special files but doesn't return an
- error, either. */
- if (fstat (fd, &stats))
- {
- detailed_error (0, errno, "%s", filename);
- return 1;
- }
-
- if (from_start)
- {
- if (S_ISREG (stats.st_mode))
- lseek (fd, n_bytes, SEEK_CUR);
- else if (start_bytes (filename, fd, n_bytes))
- return 1;
- dump_remainder (filename, fd);
- }
- else
- {
- if (S_ISREG (stats.st_mode))
- {
- off_t current_pos, end_pos;
- size_t bytes_remaining;
-
- if ((current_pos = lseek (fd, (off_t) 0, SEEK_CUR)) != -1
- && (end_pos = lseek (fd, (off_t) 0, SEEK_END)) != -1)
- {
- off_t diff;
- /* Be careful here. The current position may actually be
- beyond the end of the file. */
- bytes_remaining = (diff = end_pos - current_pos) < 0 ? 0 : diff;
- }
- else
- {
- detailed_error (0, errno, "%s", filename);
- return 1;
- }
-
- if (bytes_remaining <= n_bytes)
- {
- /* From the current position to end of file, there are no
- more bytes than have been requested. So reposition the
- file pointer to the incoming current position and print
- everything after that. */
- lseek (fd, current_pos, SEEK_SET);
- }
- else
- {
- /* There are more bytes remaining than were requested.
- Back up. */
- lseek (fd, -n_bytes, SEEK_END);
- }
- dump_remainder (filename, fd);
+ struct stat stats;
+
+ /* FIXME: resolve this like in dd.c. */
+ /* Use fstat instead of checking for errno == ESPIPE because
+ lseek doesn't work on some special files but doesn't return an
+ error, either. */
+ if (fstat(fd, &stats)) {
+ detailed_error(0, errno, "%s", filename);
+ return 1;
+ }
+
+ if (from_start) {
+ if (S_ISREG(stats.st_mode))
+ lseek(fd, n_bytes, SEEK_CUR);
+ else if (start_bytes(filename, fd, n_bytes))
+ return 1;
+ dump_remainder(filename, fd);
+ } else {
+ if (S_ISREG(stats.st_mode)) {
+ off_t current_pos, end_pos;
+ size_t bytes_remaining;
+
+ if ((current_pos = lseek(fd, (off_t) 0, SEEK_CUR)) != -1
+ && (end_pos = lseek(fd, (off_t) 0, SEEK_END)) != -1) {
+ off_t diff;
+
+ /* Be careful here. The current position may actually be
+ beyond the end of the file. */
+ bytes_remaining = (diff =
+ end_pos - current_pos) < 0 ? 0 : diff;
+ } else {
+ detailed_error(0, errno, "%s", filename);
+ return 1;
+ }
+
+ if (bytes_remaining <= n_bytes) {
+ /* From the current position to end of file, there are no
+ more bytes than have been requested. So reposition the
+ file pointer to the incoming current position and print
+ everything after that. */
+ lseek(fd, current_pos, SEEK_SET);
+ } else {
+ /* There are more bytes remaining than were requested.
+ Back up. */
+ lseek(fd, -n_bytes, SEEK_END);
+ }
+ dump_remainder(filename, fd);
+ } else
+ return pipe_bytes(filename, fd, n_bytes);
}
- else
- return pipe_bytes (filename, fd, n_bytes);
- }
- return 0;
+ return 0;
}
/* Output the last N_LINES lines of file FILENAME open for reading in FD.
Return 0 if successful, 1 if an error occurred. */
-static int
-tail_lines (const char *filename, int fd, long int n_lines)
+static int tail_lines(const char *filename, int fd, long int n_lines)
{
- struct stat stats;
- off_t length;
-
- if (fstat (fd, &stats))
- {
- detailed_error (0, errno, "%s", filename);
- return 1;
- }
-
- if (from_start)
- {
- if (start_lines (filename, fd, n_lines))
- return 1;
- dump_remainder (filename, fd);
- }
- else
- {
- /* Use file_lines only if FD refers to a regular file with
- its file pointer positioned at beginning of file. */
- /* FIXME: adding the lseek conjunct is a kludge.
- Once there's a reasonable test suite, fix the true culprit:
- file_lines. file_lines shouldn't presume that the input
- file pointer is initially positioned to beginning of file. */
- if (S_ISREG (stats.st_mode)
- && lseek (fd, (off_t) 0, SEEK_CUR) == (off_t) 0)
- {
- length = lseek (fd, (off_t) 0, SEEK_END);
- if (length != 0 && file_lines (filename, fd, n_lines, length))
- return 1;
- dump_remainder (filename, fd);
+ struct stat stats;
+ off_t length;
+
+ if (fstat(fd, &stats)) {
+ detailed_error(0, errno, "%s", filename);
+ return 1;
+ }
+
+ if (from_start) {
+ if (start_lines(filename, fd, n_lines))
+ return 1;
+ dump_remainder(filename, fd);
+ } else {
+ /* Use file_lines only if FD refers to a regular file with
+ its file pointer positioned at beginning of file. */
+ /* FIXME: adding the lseek conjunct is a kludge.
+ Once there's a reasonable test suite, fix the true culprit:
+ file_lines. file_lines shouldn't presume that the input
+ file pointer is initially positioned to beginning of file. */
+ if (S_ISREG(stats.st_mode)
+ && lseek(fd, (off_t) 0, SEEK_CUR) == (off_t) 0) {
+ length = lseek(fd, (off_t) 0, SEEK_END);
+ if (length != 0 && file_lines(filename, fd, n_lines, length))
+ return 1;
+ dump_remainder(filename, fd);
+ } else
+ return pipe_lines(filename, fd, n_lines);
}
- else
- return pipe_lines (filename, fd, n_lines);
- }
- return 0;
+ return 0;
}
/* Display the last N_UNITS units of file FILENAME, open for reading
in FD.
Return 0 if successful, 1 if an error occurred. */
-static int
-tail (const char *filename, int fd, off_t n_units)
+static int tail(const char *filename, int fd, off_t n_units)
{
- if (count_lines)
- return tail_lines (filename, fd, (long) n_units);
- else
- return tail_bytes (filename, fd, n_units);
+ if (count_lines)
+ return tail_lines(filename, fd, (long) n_units);
+ else
+ return tail_bytes(filename, fd, n_units);
}
/* Display the last N_UNITS units of file FILENAME.
@@ -1103,207 +1034,183 @@ tail (const char *filename, int fd, off_t n_units)
FILENUM is this file's index in the list of files the user gave.
Return 0 if successful, 1 if an error occurred. */
-static int
-tail_file (const char *filename, off_t n_units, int filenum)
+static int tail_file(const char *filename, off_t n_units, int filenum)
{
- int fd, errors;
- struct stat stats;
-
- if (!strcmp (filename, "-"))
- {
- have_read_stdin = 1;
- filename = "standard input";
- if (print_headers)
- write_header (filename, NULL);
- errors = tail (filename, 0, n_units);
- if (forever_multiple)
- {
- if (fstat (0, &stats) < 0)
- {
- detailed_error (0, errno, "standard input");
- errors = 1;
- }
- else if (!S_ISREG (stats.st_mode))
- {
- detailed_error (0, 0,
- "standard input: cannot follow end of non-regular file");
- errors = 1;
- }
- if (errors)
- file_descs[filenum] = -1;
- else
- {
- file_descs[filenum] = 0;
- file_sizes[filenum] = stats.st_size;
- }
- }
- }
- else
- {
- /* Not standard input. */
- fd = open (filename, O_RDONLY);
- if (fd == -1)
- {
- if (forever_multiple)
- file_descs[filenum] = -1;
- detailed_error (0, errno, "%s", filename);
- errors = 1;
- }
- else
- {
- if (print_headers)
- write_header (filename, NULL);
- errors = tail (filename, fd, n_units);
- if (forever_multiple)
- {
- if (fstat (fd, &stats) < 0)
- {
- detailed_error (0, errno, "%s", filename);
- errors = 1;
- }
- else if (!S_ISREG (stats.st_mode))
- {
- detailed_error (0, 0, "%s: cannot follow end of non-regular file",
- filename);
- errors = 1;
- }
- if (errors)
- {
- close (fd);
- file_descs[filenum] = -1;
- }
- else
- {
- file_descs[filenum] = fd;
- file_sizes[filenum] = stats.st_size;
+ int fd, errors;
+ struct stat stats;
+
+ if (!strcmp(filename, "-")) {
+ have_read_stdin = 1;
+ filename = "standard input";
+ if (print_headers)
+ write_header(filename, NULL);
+ errors = tail(filename, 0, n_units);
+ if (forever_multiple) {
+ if (fstat(0, &stats) < 0) {
+ detailed_error(0, errno, "standard input");
+ errors = 1;
+ } else if (!S_ISREG(stats.st_mode)) {
+ detailed_error(0, 0,
+ "standard input: cannot follow end of non-regular file");
+ errors = 1;
+ }
+ if (errors)
+ file_descs[filenum] = -1;
+ else {
+ file_descs[filenum] = 0;
+ file_sizes[filenum] = stats.st_size;
+ }
}
- }
- else
- {
- if (close (fd))
- {
- detailed_error (0, errno, "%s", filename);
- errors = 1;
+ } else {
+ /* Not standard input. */
+ fd = open(filename, O_RDONLY);
+ if (fd == -1) {
+ if (forever_multiple)
+ file_descs[filenum] = -1;
+ detailed_error(0, errno, "%s", filename);
+ errors = 1;
+ } else {
+ if (print_headers)
+ write_header(filename, NULL);
+ errors = tail(filename, fd, n_units);
+ if (forever_multiple) {
+ if (fstat(fd, &stats) < 0) {
+ detailed_error(0, errno, "%s", filename);
+ errors = 1;
+ } else if (!S_ISREG(stats.st_mode)) {
+ detailed_error(0, 0,
+ "%s: cannot follow end of non-regular file",
+ filename);
+ errors = 1;
+ }
+ if (errors) {
+ close(fd);
+ file_descs[filenum] = -1;
+ } else {
+ file_descs[filenum] = fd;
+ file_sizes[filenum] = stats.st_size;
+ }
+ } else {
+ if (close(fd)) {
+ detailed_error(0, errno, "%s", filename);
+ errors = 1;
+ }
+ }
}
- }
}
- }
- return errors;
+ return errors;
}
-extern int
-tail_main (int argc, char **argv)
+extern int tail_main(int argc, char **argv)
{
- int stopit = 0;
- enum header_mode header_mode = multiple_files;
- int exit_status = 0;
- /* If from_start, the number of items to skip before printing; otherwise,
- the number of items at the end of the file to print. Initially, -1
- means the value has not been set. */
- off_t n_units = -1;
- int n_files;
- char **file;
-
- program_name = argv[0];
- have_read_stdin = 0;
- count_lines = 1;
- forever = forever_multiple = from_start = print_headers = 0;
-
- /* Parse any options */
- //fprintf(stderr, "argc=%d, argv=%s\n", argc, *argv);
- while (--argc > 0 && ( **(++argv) == '-' || **argv == '+' )) {
- if (**argv == '+') {
- from_start = 1;
+ int stopit = 0;
+ enum header_mode header_mode = multiple_files;
+ int exit_status = 0;
+
+ /* If from_start, the number of items to skip before printing; otherwise,
+ the number of items at the end of the file to print. Initially, -1
+ means the value has not been set. */
+ off_t n_units = -1;
+ int n_files;
+ char **file;
+
+ program_name = argv[0];
+ have_read_stdin = 0;
+ count_lines = 1;
+ forever = forever_multiple = from_start = print_headers = 0;
+
+ /* Parse any options */
+ //fprintf(stderr, "argc=%d, argv=%s\n", argc, *argv);
+ while (--argc > 0 && (**(++argv) == '-' || **argv == '+')) {
+ if (**argv == '+') {
+ from_start = 1;
+ }
+ stopit = 0;
+ while (stopit == 0 && *(++(*argv))) {
+ switch (**argv) {
+ case 'c':
+ count_lines = 0;
+
+ if (--argc < 1) {
+ usage(tail_usage);
+ }
+ n_units = getNum(*(++argv));
+ stopit = 1;
+ break;
+
+ case 'f':
+ forever = 1;
+ break;
+
+ case 'n':
+ count_lines = 1;
+
+ if (--argc < 1) {
+ usage(tail_usage);
+ }
+ n_units = atol(*(++argv));
+ stopit = 1;
+ break;
+
+ case 'q':
+ header_mode = never;
+ break;
+
+ case 'v':
+ header_mode = always;
+ break;
+
+ default:
+ usage(tail_usage);
+ }
+ }
+ }
+
+
+ if (n_units == -1)
+ n_units = DEFAULT_N_LINES;
+
+ /* To start printing with item N_UNITS from the start of the file, skip
+ N_UNITS - 1 items. `tail +0' is actually meaningless, but for Unix
+ compatibility it's treated the same as `tail +1'. */
+ if (from_start) {
+ if (n_units)
+ --n_units;
}
- stopit = 0;
- while (stopit == 0 && *(++(*argv))) {
- switch (**argv) {
- case 'c':
- count_lines = 0;
-
- if (--argc < 1) {
- usage(tail_usage);
- }
- n_units = getNum(*(++argv));
- stopit = 1;
- break;
-
- case 'f':
- forever = 1;
- break;
-
- case 'n':
- count_lines = 1;
-
- if (--argc < 1) {
- usage(tail_usage);
- }
- n_units = atol(*(++argv));
- stopit = 1;
- break;
-
- case 'q':
- header_mode = never;
- break;
-
- case 'v':
- header_mode = always;
- break;
-
- default:
- usage (tail_usage);
- }
+
+ n_files = argc;
+ file = argv;
+
+ if (n_files > 1 && forever) {
+ forever_multiple = 1;
+ forever = 0;
+ file_descs = (int *) xmalloc(n_files * sizeof(int));
+
+ file_sizes = (off_t *) xmalloc(n_files * sizeof(off_t));
}
- }
-
-
- if (n_units == -1)
- n_units = DEFAULT_N_LINES;
-
- /* To start printing with item N_UNITS from the start of the file, skip
- N_UNITS - 1 items. `tail +0' is actually meaningless, but for Unix
- compatibility it's treated the same as `tail +1'. */
- if (from_start)
- {
- if (n_units)
- --n_units;
- }
-
- n_files = argc;
- file = argv;
-
- if (n_files > 1 && forever)
- {
- forever_multiple = 1;
- forever = 0;
- file_descs = (int *) xmalloc (n_files * sizeof (int));
- file_sizes = (off_t *) xmalloc (n_files * sizeof (off_t));
- }
-
- if (header_mode == always
- || (header_mode == multiple_files && n_files > 1))
- print_headers = 1;
-
- if (n_files == 0)
- {
- exit_status |= tail_file ("-", n_units, 0);
- }
- else
- {
- int i;
- for (i = 0; i < n_files; i++)
- exit_status |= tail_file (file[i], n_units, i);
-
- if (forever_multiple)
- tail_forever (file, n_files);
- }
-
- if (have_read_stdin && close (0) < 0)
- detailed_error (EXIT_FAILURE, errno, "-");
- if (fclose (stdout) == EOF)
- detailed_error (EXIT_FAILURE, errno, "write error");
- exit (exit_status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+
+ if (header_mode == always
+ || (header_mode == multiple_files && n_files > 1))
+ print_headers = 1;
+
+ if (n_files == 0) {
+ exit_status |= tail_file("-", n_units, 0);
+ } else {
+ int i;
+
+ for (i = 0; i < n_files; i++)
+ exit_status |= tail_file(file[i], n_units, i);
+
+ if (forever_multiple)
+ tail_forever(file, n_files);
+ }
+
+ if (have_read_stdin && close(0) < 0)
+ detailed_error(EXIT_FAILURE, errno, "-");
+ if (fclose(stdout) == EOF)
+ detailed_error(EXIT_FAILURE, errno, "write error");
+ exit(exit_status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
}
diff --git a/coreutils/tee.c b/coreutils/tee.c
index 4c5c691..2f746f9 100644
--- a/coreutils/tee.c
+++ b/coreutils/tee.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini tee implementation for busybox
*
@@ -25,102 +26,100 @@
#include <stdio.h>
static const char tee_usage[] =
- "tee [OPTION]... [FILE]...\n\n"
- "Copy standard input to each FILE, and also to standard output.\n\n"
- "Options:\n"
- "\t-a\tappend to the given FILEs, do not overwrite\n"
+ "tee [OPTION]... [FILE]...\n\n"
+ "Copy standard input to each FILE, and also to standard output.\n\n"
+ "Options:\n" "\t-a\tappend to the given FILEs, do not overwrite\n"
#if 0
- "\t-i\tignore interrupt signals\n"
+ "\t-i\tignore interrupt signals\n"
#endif
- ;
+;
/* FileList _______________________________________________________________ */
#define FL_MAX 1024
static FILE *FileList[FL_MAX];
-static int FL_end;
+static int FL_end;
+
+typedef void (FL_Function) (FILE * file, char c);
-typedef void (FL_Function)(FILE *file, char c);
-
/* apply a function to everything in FileList */
-static void
-FL_apply(FL_Function *f, char c)
+static void FL_apply(FL_Function * f, char c)
{
- int i;
- for (i = 0; i <= FL_end; i++) {
- f(FileList[i], c);
- }
+ int i;
+
+ for (i = 0; i <= FL_end; i++) {
+ f(FileList[i], c);
+ }
}
/* FL_Function for writing to files*/
-static void
-tee_fwrite(FILE *file, char c)
+static void tee_fwrite(FILE * file, char c)
{
- fputc(c, file);
+ fputc(c, file);
}
/* FL_Function for closing files */
-static void
-tee_fclose(FILE *file, char c)
+static void tee_fclose(FILE * file, char c)
{
- fclose(file);
+ fclose(file);
}
/* ________________________________________________________________________ */
/* BusyBoxed tee(1) */
-int
-tee_main(int argc, char **argv)
+int tee_main(int argc, char **argv)
{
- int i;
- char c;
- char opt;
- char opt_fopen[2] = "w";
- FILE *file;
-
- /* parse argv[] */
- for (i = 1; i < argc; i++) {
- if (argv[i][0] == '-') {
- opt = argv[i][1];
- switch (opt) {
- case 'a':
- opt_fopen[0] = 'a';
- break;
+ int i;
+ char c;
+ char opt;
+ char opt_fopen[2] = "w";
+ FILE *file;
+
+ /* parse argv[] */
+ for (i = 1; i < argc; i++) {
+ if (argv[i][0] == '-') {
+ opt = argv[i][1];
+ switch (opt) {
+ case 'a':
+ opt_fopen[0] = 'a';
+ break;
#if 0
- case 'i':
- fprintf(stderr, "ignore interrupt not implemented\n");
- break;
+ case 'i':
+ fprintf(stderr, "ignore interrupt not implemented\n");
+ break;
#endif
- default:
- usage(tee_usage);
- }
- } else {
- break;
+ default:
+ usage(tee_usage);
+ }
+ } else {
+ break;
+ }
}
- }
-
- /* init FILE pointers */
- FL_end = 0;
- FileList[0] = stdout;
- for ( ; i < argc; i++) {
- /* add a file to FileList */
- file = fopen(argv[i], opt_fopen);
- if (!file) { continue; }
- if (FL_end < FL_MAX) {
- FileList[++FL_end] = file;
+
+ /* init FILE pointers */
+ FL_end = 0;
+ FileList[0] = stdout;
+ for (; i < argc; i++) {
+ /* add a file to FileList */
+ file = fopen(argv[i], opt_fopen);
+ if (!file) {
+ continue;
+ }
+ if (FL_end < FL_MAX) {
+ FileList[++FL_end] = file;
+ }
}
- }
- /* read and redirect */
- while ((c = (char) getchar()) && (!feof(stdin))) {
- FL_apply(tee_fwrite, c);
- }
+ /* read and redirect */
+ while ((c = (char) getchar()) && (!feof(stdin))) {
+ FL_apply(tee_fwrite, c);
+ }
- /* clean up */
- FL_apply(tee_fclose, 0);
- exit(0);
+ /* clean up */
+ FL_apply(tee_fclose, 0);
+ exit(0);
}
-/* $Id: tee.c,v 1.5 2000/02/07 05:29:42 erik Exp $ */
+/* $Id: tee.c,v 1.6 2000/02/08 19:58:47 erik Exp $ */
diff --git a/coreutils/touch.c b/coreutils/touch.c
index d2d3e94..a0f21ac 100644
--- a/coreutils/touch.c
+++ b/coreutils/touch.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini touch implementation for busybox
*
@@ -31,56 +32,50 @@
static const char touch_usage[] = "touch [-c] file [file ...]\n\n"
-"Update the last-modified date on the given file[s].\n";
+ "Update the last-modified date on the given file[s].\n";
-extern int
-touch_main(int argc, char **argv)
-{
- int fd;
- int create=TRUE;
- if (argc < 2) {
- usage( touch_usage);
- }
- argc--;
- argv++;
+extern int touch_main(int argc, char **argv)
+{
+ int fd;
+ int create = TRUE;
- /* Parse options */
- while (**argv == '-') {
- while (*++(*argv)) switch (**argv) {
- case 'c':
- create = FALSE;
- break;
- default:
- usage( touch_usage);
- exit( FALSE);
+ if (argc < 2) {
+ usage(touch_usage);
}
argc--;
argv++;
- }
- fd = open (*argv, (create==FALSE)? O_RDWR : O_RDWR | O_CREAT, 0644);
- if (fd < 0 ) {
- if (create==FALSE && errno == ENOENT)
- exit( TRUE);
- else {
- perror("touch");
- exit( FALSE);
+ /* Parse options */
+ while (**argv == '-') {
+ while (*++(*argv))
+ switch (**argv) {
+ case 'c':
+ create = FALSE;
+ break;
+ default:
+ usage(touch_usage);
+ exit(FALSE);
+ }
+ argc--;
+ argv++;
}
- }
- close( fd);
- if (utime (*argv, NULL)) {
- perror("touch");
- exit( FALSE);
- }
- else
- exit( TRUE);
-}
-
-
-
-
-
+ fd = open(*argv, (create == FALSE) ? O_RDWR : O_RDWR | O_CREAT, 0644);
+ if (fd < 0) {
+ if (create == FALSE && errno == ENOENT)
+ exit(TRUE);
+ else {
+ perror("touch");
+ exit(FALSE);
+ }
+ }
+ close(fd);
+ if (utime(*argv, NULL)) {
+ perror("touch");
+ exit(FALSE);
+ } else
+ exit(TRUE);
+}
diff --git a/coreutils/tty.c b/coreutils/tty.c
index 83abaff..8ac1c1f 100644
--- a/coreutils/tty.c
+++ b/coreutils/tty.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini tty implementation for busybox
*
@@ -24,19 +25,23 @@
#include <sys/types.h>
static const char tty_usage[] = "tty\n\n"
-"Print the file name of the terminal connected to standard input.\n"
-"\t-s\tprint nothing, only return an exit status\n";
+ "Print the file name of the terminal connected to standard input.\n"
-extern int tty_main(int argc, char **argv) {
+ "\t-s\tprint nothing, only return an exit status\n";
+
+extern int tty_main(int argc, char **argv)
+{
char *tty;
if (argc > 1) {
- if (argv[1][0] != '-' || argv[1][1] != 's') usage (tty_usage);
- }
- else {
- tty = ttyname (0);
- if (tty) puts (tty);
- else puts ("not a tty");
+ if (argv[1][0] != '-' || argv[1][1] != 's')
+ usage(tty_usage);
+ } else {
+ tty = ttyname(0);
+ if (tty)
+ puts(tty);
+ else
+ puts("not a tty");
}
- exit (isatty (0) ? TRUE : FALSE);
+ exit(isatty(0) ? TRUE : FALSE);
}
diff --git a/coreutils/uname.c b/coreutils/uname.c
index 9083edb..9a1cb80 100644
--- a/coreutils/uname.c
+++ b/coreutils/uname.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/* uname -- print system information
Copyright (C) 1989-1999 Free Software Foundation, Inc.
@@ -41,16 +42,17 @@
static const char uname_usage[] =
- "uname [OPTION]...\n\n"
- "Print certain system information. With no OPTION, same as -s.\n\n"
- "Options:\n"
- "\t-a\tprint all information\n"
- "\t-m\tthe machine (hardware) type\n"
- "\t-n\tprint the machine's network node hostname\n"
- "\t-r\tprint the operating system release\n"
- "\t-s\tprint the operating system name\n"
- "\t-p\tprint the host processor type\n"
- "\t-v\tprint the operating system version\n";
+ "uname [OPTION]...\n\n"
+ "Print certain system information. With no OPTION, same as -s.\n\n"
+ "Options:\n"
+ "\t-a\tprint all information\n"
+ "\t-m\tthe machine (hardware) type\n"
+ "\t-n\tprint the machine's network node hostname\n"
+ "\t-r\tprint the operating system release\n"
+ "\t-s\tprint the operating system name\n"
+
+ "\t-p\tprint the host processor type\n"
+ "\t-v\tprint the operating system version\n";
static void print_element(unsigned int mask, char *element);
@@ -80,77 +82,78 @@ static unsigned char toprint;
int uname_main(int argc, char **argv)
{
- struct utsname name;
- char processor[256];
+ struct utsname name;
+ char processor[256];
+
#if defined(__sparc__) && defined(__linux__)
- char *fake_sparc = getenv("FAKE_SPARC");
+ char *fake_sparc = getenv("FAKE_SPARC");
#endif
- toprint = 0;
-
- /* Parse any options */
- //fprintf(stderr, "argc=%d, argv=%s\n", argc, *argv);
- while (--argc > 0 && **(++argv) == '-') {
- while (*(++(*argv))) {
- switch (**argv) {
- case 's':
- toprint |= PRINT_SYSNAME;
- break;
- case 'n':
- toprint |= PRINT_NODENAME;
- break;
- case 'r':
- toprint |= PRINT_RELEASE;
- break;
- case 'v':
- toprint |= PRINT_VERSION;
- break;
- case 'm':
- toprint |= PRINT_MACHINE;
- break;
- case 'p':
- toprint |= PRINT_PROCESSOR;
- break;
- case 'a':
- toprint = (PRINT_SYSNAME | PRINT_NODENAME | PRINT_RELEASE |
- PRINT_PROCESSOR | PRINT_VERSION |
- PRINT_MACHINE);
- break;
- default:
- usage(uname_usage);
- }
+ toprint = 0;
+
+ /* Parse any options */
+ //fprintf(stderr, "argc=%d, argv=%s\n", argc, *argv);
+ while (--argc > 0 && **(++argv) == '-') {
+ while (*(++(*argv))) {
+ switch (**argv) {
+ case 's':
+ toprint |= PRINT_SYSNAME;
+ break;
+ case 'n':
+ toprint |= PRINT_NODENAME;
+ break;
+ case 'r':
+ toprint |= PRINT_RELEASE;
+ break;
+ case 'v':
+ toprint |= PRINT_VERSION;
+ break;
+ case 'm':
+ toprint |= PRINT_MACHINE;
+ break;
+ case 'p':
+ toprint |= PRINT_PROCESSOR;
+ break;
+ case 'a':
+ toprint = (PRINT_SYSNAME | PRINT_NODENAME | PRINT_RELEASE |
+ PRINT_PROCESSOR | PRINT_VERSION |
+ PRINT_MACHINE);
+ break;
+ default:
+ usage(uname_usage);
+ }
+ }
}
- }
- if (toprint == 0)
- toprint = PRINT_SYSNAME;
+ if (toprint == 0)
+ toprint = PRINT_SYSNAME;
- if (uname(&name) == -1)
- perror("cannot get system name");
+ if (uname(&name) == -1)
+ perror("cannot get system name");
#if defined (HAVE_SYSINFO) && defined (SI_ARCHITECTURE)
- if (sysinfo(SI_ARCHITECTURE, processor, sizeof(processor)) == -1)
- perror("cannot get processor type");
+ if (sysinfo(SI_ARCHITECTURE, processor, sizeof(processor)) == -1)
+ perror("cannot get processor type");
}
#else
- strcpy(processor, "unknown");
+ strcpy(processor, "unknown");
#endif
#if defined(__sparc__) && defined(__linux__)
- if (fake_sparc != NULL
- && (fake_sparc[0] == 'y'
- || fake_sparc[0] == 'Y')) strcpy(name.machine, "sparc");
+ if (fake_sparc != NULL
+ && (fake_sparc[0] == 'y'
+ || fake_sparc[0] == 'Y')) strcpy(name.machine, "sparc");
#endif
- print_element(PRINT_SYSNAME, name.sysname);
- print_element(PRINT_NODENAME, name.nodename);
- print_element(PRINT_RELEASE, name.release);
- print_element(PRINT_VERSION, name.version);
- print_element(PRINT_MACHINE, name.machine);
- print_element(PRINT_PROCESSOR, processor);
+ print_element(PRINT_SYSNAME, name.sysname);
+ print_element(PRINT_NODENAME, name.nodename);
+ print_element(PRINT_RELEASE, name.release);
+ print_element(PRINT_VERSION, name.version);
+ print_element(PRINT_MACHINE, name.machine);
+ print_element(PRINT_PROCESSOR, processor);
- exit(TRUE);
+ exit(TRUE);
}
/* If the name element set in MASK is selected for printing in `toprint',
@@ -159,8 +162,8 @@ int uname_main(int argc, char **argv)
static void print_element(unsigned int mask, char *element)
{
- if (toprint & mask) {
- toprint &= ~mask;
- printf("%s%c", element, toprint ? ' ' : '\n');
- }
+ if (toprint & mask) {
+ toprint &= ~mask;
+ printf("%s%c", element, toprint ? ' ' : '\n');
+ }
}
diff --git a/coreutils/uniq.c b/coreutils/uniq.c
index 965d290..1e41eaa 100644
--- a/coreutils/uniq.c
+++ b/coreutils/uniq.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini uniq implementation for busybox
*
@@ -27,119 +28,116 @@
#include <errno.h>
static const char uniq_usage[] =
-"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"
-"\t-h\tdisplay this help and exit\n"
-"\n"
-"A field is a run of whitespace, then non-whitespace characters.\n"
-"Fields are skipped before chars.\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"
+ "\t-h\tdisplay this help and exit\n"
+
+ "\n"
+ "A field is a run of whitespace, then non-whitespace characters.\n"
+ "Fields are skipped before chars.\n";
/* max chars in line */
#define UNIQ_MAX 4096
-typedef void (Print)(FILE *, const char *);
+typedef void (Print) (FILE *, const char *);
-typedef int (Decide)(const char *, const char *);
+typedef int (Decide) (const char *, const char *);
/* container for two lines to be compared */
typedef struct {
- char *a;
- char *b;
- int recurrence;
- FILE *in;
- FILE *out;
- void *func;
+ char *a;
+ char *b;
+ int recurrence;
+ FILE *in;
+ FILE *out;
+ void *func;
} Subject;
/* set up all the variables of a uniq operation */
-static Subject *
-subject_init(Subject *self, FILE *in, FILE *out, void *func)
+static Subject *subject_init(Subject * self, FILE * in, FILE * out,
+ void *func)
{
- self->a = NULL;
- self->b = NULL;
- self->in = in;
- self->out = out;
- self->func = func;
- self->recurrence = 0;
- return self;
+ self->a = NULL;
+ self->b = NULL;
+ self->in = in;
+ self->out = out;
+ self->func = func;
+ self->recurrence = 0;
+ return self;
}
/* point a and b to the appropriate lines;
* count the recurrences (if any) of a string;
*/
-static Subject *
-subject_next(Subject *self)
+static Subject *subject_next(Subject * self)
{
- /* tmp line holders */
- static char line[2][UNIQ_MAX];
- static int alternator = 0;
-
- if (fgets(line[alternator], UNIQ_MAX, self->in)) {
- self->a = self->b;
- self->b = line[alternator];
- alternator ^= 1;
- return self;
- }
+ /* tmp line holders */
+ static char line[2][UNIQ_MAX];
+ static int alternator = 0;
+
+ if (fgets(line[alternator], UNIQ_MAX, self->in)) {
+ self->a = self->b;
+ self->b = line[alternator];
+ alternator ^= 1;
+ return self;
+ }
- return NULL;
+ return NULL;
}
-static Subject *
-subject_last(Subject *self)
+static Subject *subject_last(Subject * self)
{
- self->a = self->b;
- self->b = NULL;
- return self;
+ self->a = self->b;
+ self->b = NULL;
+ return self;
}
-static Subject *
-subject_study(Subject *self)
+static Subject *subject_study(Subject * self)
{
- if (self->a == NULL) {
- return self;
- }
- if (self->b == NULL) {
- fprintf(self->out, "%s", self->a);
+ if (self->a == NULL) {
+ return self;
+ }
+ if (self->b == NULL) {
+ fprintf(self->out, "%s", self->a);
+ return self;
+ }
+ if (strcmp(self->a, self->b) == 0) {
+ self->recurrence++;
+ } else {
+ fprintf(self->out, "%s", self->a);
+ self->recurrence = 0;
+ }
return self;
- }
- if (strcmp(self->a, self->b) == 0) {
- self->recurrence++;
- } else {
- fprintf(self->out, "%s", self->a);
- self->recurrence = 0;
- }
- return self;
}
static int
-set_file_pointers(int schema, FILE **in, FILE **out, char **argv)
+set_file_pointers(int schema, FILE ** in, FILE ** out, char **argv)
{
- switch (schema) {
+ switch (schema) {
case 0:
- *in = stdin;
- *out = stdout;
- break;
+ *in = stdin;
+ *out = stdout;
+ break;
case 1:
- *in = fopen(argv[0], "r");
- *out = stdout;
- break;
+ *in = fopen(argv[0], "r");
+ *out = stdout;
+ break;
case 2:
- *in = fopen(argv[0], "r");
- *out = fopen(argv[1], "w");
- break;
- }
- if (*in == NULL) {
- fprintf(stderr, "uniq: %s: %s\n", argv[0], strerror(errno));
- return errno;
- }
- if (*out == NULL) {
- fprintf(stderr, "uniq: %s: %s\n", argv[1], strerror(errno));
- return errno;
- }
- return 0;
+ *in = fopen(argv[0], "r");
+ *out = fopen(argv[1], "w");
+ break;
+ }
+ if (*in == NULL) {
+ fprintf(stderr, "uniq: %s: %s\n", argv[0], strerror(errno));
+ return errno;
+ }
+ if (*out == NULL) {
+ fprintf(stderr, "uniq: %s: %s\n", argv[1], strerror(errno));
+ return errno;
+ }
+ return 0;
}
@@ -152,45 +150,44 @@ set_file_pointers(int schema, FILE **in, FILE **out, char **argv)
/* it seems like GNU/uniq only takes one or two files as an option */
/* ________________________________________________________________________ */
-int
-uniq_main(int argc, char **argv)
+int uniq_main(int argc, char **argv)
{
- int i;
- char opt;
- FILE *in, *out;
- Subject s;
-
- /* parse argv[] */
- for (i = 1; i < argc; i++) {
- if (argv[i][0] == '-') {
- opt = argv[i][1];
- switch (opt) {
- case '-':
- case 'h':
- usage(uniq_usage);
- default:
- usage(uniq_usage);
- }
- } else {
- break;
+ int i;
+ char opt;
+ FILE *in, *out;
+ Subject s;
+
+ /* parse argv[] */
+ for (i = 1; i < argc; i++) {
+ if (argv[i][0] == '-') {
+ opt = argv[i][1];
+ switch (opt) {
+ case '-':
+ case 'h':
+ usage(uniq_usage);
+ default:
+ usage(uniq_usage);
+ }
+ } else {
+ break;
+ }
}
- }
- /* 0 src: stdin; dst: stdout */
- /* 1 src: file; dst: stdout */
- /* 2 src: file; dst: file */
- if (set_file_pointers((argc - 1), &in, &out, &argv[i])) {
- exit(1);
- }
+ /* 0 src: stdin; dst: stdout */
+ /* 1 src: file; dst: stdout */
+ /* 2 src: file; dst: file */
+ if (set_file_pointers((argc - 1), &in, &out, &argv[i])) {
+ exit(1);
+ }
- subject_init(&s, in, out, NULL);
- while (subject_next(&s)) {
+ subject_init(&s, in, out, NULL);
+ while (subject_next(&s)) {
+ subject_study(&s);
+ }
+ subject_last(&s);
subject_study(&s);
- }
- subject_last(&s);
- subject_study(&s);
- exit(0);
+ exit(0);
}
-/* $Id: uniq.c,v 1.6 2000/02/07 05:29:42 erik Exp $ */
+/* $Id: uniq.c,v 1.7 2000/02/08 19:58:47 erik Exp $ */
diff --git a/coreutils/wc.c b/coreutils/wc.c
index e69f0d8..8004e62 100644
--- a/coreutils/wc.c
+++ b/coreutils/wc.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini wc implementation for busybox
*
@@ -23,78 +24,82 @@
#include <stdio.h>
static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n"
-"Print line, word, and byte counts for each FILE, and a total line if\n"
-"more than one FILE is specified. With no FILE, read standard input.\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-w\tprint the word counts\n";
+ "Print line, word, and byte counts for each FILE, and a total line if\n"
+ "more than one FILE is specified. With no FILE, read standard input.\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-w\tprint the word counts\n";
static int total_lines, total_words, total_chars, max_length;
static int print_lines, print_words, print_chars, print_length;
-void print_counts (int lines, int words, int chars, int length,
- const char *name) {
+void print_counts(int lines, int words, int chars, int length,
+ const char *name)
+{
char const *space = "";
+
if (print_lines) {
- printf ("%7d", lines);
+ printf("%7d", lines);
space = " ";
}
if (print_words) {
- printf ("%s%7d", space, words);
+ printf("%s%7d", space, words);
space = " ";
}
if (print_chars) {
- printf ("%s%7d", space, chars);
+ printf("%s%7d", space, chars);
space = " ";
}
if (print_length)
- printf ("%s%7d", space, length);
+ printf("%s%7d", space, length);
if (*name)
- printf (" %s", name);
- putchar ('\n');
+ printf(" %s", name);
+ putchar('\n');
}
-static void wc_file(FILE *file, const char *name)
+static void wc_file(FILE * file, const char *name)
{
int lines, words, chars, length;
int in_word = 0, linepos = 0;
int c;
+
lines = words = chars = length = 0;
while ((c = getc(file)) != EOF) {
chars++;
switch (c) {
- case '\n':
- lines++;
- case '\r':
- case '\f':
- if (linepos > length)
- length = linepos;
- linepos = 0;
- goto word_separator;
- case '\t':
- linepos += 8 - (linepos % 8);
- goto word_separator;
- case ' ':
- linepos++;
- case '\v':
- word_separator:
- if (in_word) {
- in_word = 0;
- words++;
- }
- break;
- default:
- linepos++;
- in_word = 1;
- break;
+ case '\n':
+ lines++;
+ case '\r':
+ case '\f':
+ if (linepos > length)
+ length = linepos;
+ linepos = 0;
+ goto word_separator;
+ case '\t':
+ linepos += 8 - (linepos % 8);
+ goto word_separator;
+ case ' ':
+ linepos++;
+ case '\v':
+ word_separator:
+ if (in_word) {
+ in_word = 0;
+ words++;
+ }
+ break;
+ default:
+ linepos++;
+ in_word = 1;
+ break;
}
}
if (linepos > length)
length = linepos;
if (in_word)
words++;
- print_counts (lines, words, chars, length, name);
+ print_counts(lines, words, chars, length, name);
total_lines += lines;
total_words += words;
total_chars += chars;
@@ -104,28 +109,30 @@ static void wc_file(FILE *file, const char *name)
fflush(stdout);
}
-int wc_main(int argc, char **argv) {
+int wc_main(int argc, char **argv)
+{
FILE *file;
+
total_lines = total_words = total_chars = max_length = 0;
print_lines = print_words = print_chars = print_length = 0;
while (--argc && **(++argv) == '-') {
while (*++(*argv))
switch (**argv) {
- case 'c':
- print_chars = 1;
- break;
- case 'l':
- print_lines = 1;
- break;
- case 'L':
- print_length = 1;
- break;
- case 'w':
- print_words = 1;
- break;
- default:
- usage (wc_usage);
+ case 'c':
+ print_chars = 1;
+ break;
+ case 'l':
+ print_lines = 1;
+ break;
+ case 'L':
+ print_length = 1;
+ break;
+ case 'w':
+ print_words = 1;
+ break;
+ default:
+ usage(wc_usage);
}
}
@@ -135,16 +142,14 @@ int wc_main(int argc, char **argv) {
if (argc == 0) {
wc_file(stdin, "");
exit(TRUE);
- }
- else if (argc == 1) {
+ } else if (argc == 1) {
file = fopen(*argv, "r");
if (file == NULL) {
perror(*argv);
exit(FALSE);
}
wc_file(file, *argv);
- }
- else {
+ } else {
while (argc-- > 0 && *argv != '\0' && strlen(*argv)) {
file = fopen(*argv, "r");
if (file == NULL) {
@@ -154,8 +159,8 @@ int wc_main(int argc, char **argv) {
wc_file(file, *argv);
argv++;
}
- print_counts (total_lines, total_words, total_chars,
- max_length, "total");
+ print_counts(total_lines, total_words, total_chars,
+ max_length, "total");
}
exit(TRUE);
}
diff --git a/coreutils/whoami.c b/coreutils/whoami.c
index 7fd5d01..3677c2f 100644
--- a/coreutils/whoami.c
+++ b/coreutils/whoami.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini whoami implementation for busybox
*
@@ -24,21 +25,25 @@
#include <pwd.h>
static const char whoami_usage[] = "whoami\n\n"
-"Print the user name associated with the current effective user id.\n"
-"Same as id -un.\n";
+ "Print the user name associated with the current effective user id.\n"
-extern int whoami_main(int argc, char **argv) {
+ "Same as id -un.\n";
+
+extern int whoami_main(int argc, char **argv)
+{
struct passwd *pw;
uid_t uid;
- if (argc > 1) usage (whoami_usage);
+ if (argc > 1)
+ usage(whoami_usage);
- uid = geteuid ();
- pw = getpwuid (uid);
+ uid = geteuid();
+ pw = getpwuid(uid);
if (pw) {
- puts (pw->pw_name);
- exit (TRUE);
- }
- fprintf (stderr, "%s: cannot find username for UID %u\n", argv[0], (unsigned) uid);
- exit (FALSE);
+ puts(pw->pw_name);
+ exit(TRUE);
+ }
+ fprintf(stderr, "%s: cannot find username for UID %u\n", argv[0],
+ (unsigned) uid);
+ exit(FALSE);
}
diff --git a/coreutils/yes.c b/coreutils/yes.c
index 96d6257..ac67845 100644
--- a/coreutils/yes.c
+++ b/coreutils/yes.c
@@ -1,3 +1,4 @@
+/* vi: set sw=4 ts=4: */
/*
* Mini yes implementation for busybox
*
@@ -22,19 +23,22 @@
#include "internal.h"
#include <stdio.h>
-extern int yes_main(int argc, char **argv) {
+extern int yes_main(int argc, char **argv)
+{
int i;
+
if (argc == 1)
while (1)
- if (puts ("y") == EOF) {
- perror ("yes");
+ if (puts("y") == EOF) {
+ perror("yes");
exit(FALSE);
}
while (1)
for (i = 1; i < argc; i++)
- if (fputs (argv[i], stdout) == EOF || putchar (i == argc - 1 ? '\n' : ' ') == EOF) {
- perror ("yes");
+ if (fputs(argv[i], stdout) == EOF
+ || putchar(i == argc - 1 ? '\n' : ' ') == EOF) {
+ perror("yes");
exit(FALSE);
}
exit(TRUE);