Changed bb_regcomp to xregcomp and #if 0'ed out destroy_cmd_strs in sed.c
[oweals/busybox.git] / tail.c
diff --git a/tail.c b/tail.c
index 315eee1885b5f5e4d2c92b975fc1417bcc65d641..3189d204f47c8c0061337d586099c8feda6d2d25 100644 (file)
--- a/tail.c
+++ b/tail.c
@@ -47,6 +47,9 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <ctype.h>
+#define BB_DECLARE_EXTERN
+#define bb_need_help
+#include "messages.c"
 
 
 #define XWRITE(fd, buffer, n_bytes)                                    \
@@ -70,15 +73,18 @@ 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"
+       "tail [OPTION] [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+       "\nPrint 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";
+       "\t\t\tof 'tail -f' supports only one file at a time.\n"
+#endif
+       ;
 
 
 static void write_header(const char *filename)
@@ -330,7 +336,7 @@ static int tail_file(const char *filename, off_t n_units)
                /* Not standard input.  */
                fd = open(filename, O_RDONLY);
                if (fd == -1)
-                       fatalError("open error");
+                       perror(filename);
 
                errors = tail_lines(filename, fd, (long) n_units);
                close(fd);
@@ -368,8 +374,10 @@ extern int tail_main(int argc, char **argv)
                        case 'h':
                                usage(tail_usage);
                        default:
-                               fprintf(stderr, "tail: invalid option -- %c\n", opt);
-                               usage(tail_usage);
+                               if ((n_units = atoi(&argv[i][1])) < 1) {
+                                       fprintf(stderr, "tail: invalid option -- %c\n", opt);
+                                       usage(tail_usage);
+                               }
                        }
                } else {
                        break;
@@ -392,7 +400,7 @@ extern int tail_main(int argc, char **argv)
                        exit_status |= tail_file(argv[i], n_units);
        }
 
-       exit(exit_status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
+       return(exit_status == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }
 
 
@@ -510,9 +518,9 @@ char *program_name;
 static int have_read_stdin;
 
 
-static const char tail_usage[] = "tail [OPTION]... [FILE]...\n\
-\n\
-Print last 10 lines of each FILE to standard output.\n\
+static const char tail_usage[] = "tail [OPTION]... [FILE]...\n"
+#ifndef BB_FEATURE_TRIVIAL_HELP
+"\nPrint 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\
 With no FILE, or when FILE is -, read standard input.\n\
 \n\
@@ -521,11 +529,12 @@ With no FILE, or when FILE is -, read standard input.\n\
   -n=N            output the last N lines, instead of last 10\n\
   -q              never output headers giving file names\n\
   -v              always output headers giving file names\n\
-  --help          display this help and exit\n\
 \n\
 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";
+in the file.  N bytes may be suffixed by k (x1024), b (x512), or m (1024^2).\n"
+#endif
+;
 
 static void write_header(const char *filename, const char *comment)
 {