#include <unistd.h>
#include <string.h>
#include <getopt.h>
-#include "internal.h"
+#include "busybox.h"
#define STDIN "standard input"
#define LINES 0
static off_t units=0;
-int tail_stream(int fd)
+static int tail_stream(int fd)
{
ssize_t startpoint;
ssize_t endpoint=0;
ssize_t f_size=0;
bs=BUFSIZ;
- line=malloc(bs);
+ line=xmalloc(bs);
while(1) {
bytes_read=read(fd,line,bs);
if(bytes_read<=0)
break;
- buffer=realloc(buffer,f_size+bytes_read);
+ buffer=xrealloc(buffer,f_size+bytes_read);
memcpy(&buffer[f_size],line,bytes_read);
filelocation=f_size+=bytes_read;
}
void add_file(char *name)
{
++n_files;
- files = realloc(files, n_files);
- files[n_files - 1] = (char *) malloc(strlen(name) + 1);
+ files = xrealloc(files, n_files);
+ files[n_files - 1] = (char *) xmalloc(strlen(name) + 1);
strcpy(files[n_files - 1], name);
}
-void checknumbers(const char* name)
-{
- int test=atoi(name);
- if(test){
- units=test;
- if(units<0)
- units=units-1;
- } else {
- fatalError("Unrecognised number '%s'\n", name);
- }
-}
-
int tail_main(int argc, char **argv)
{
int show_headers = 1;
opterr = 0;
- while ((opt=getopt(argc,argv,"c:fhn:s:q:v123456789+")) >0) {
+ while ((opt=getopt(argc,argv,"c:fhn:s:q:v")) >0) {
switch (opt) {
- case '1':case '2':case '3':case '4':case '5':
- case '6':case '7':case '8':case '9':case '0':
- checknumbers(argv[optind-1]);
- break;
-
#ifndef BB_FEATURE_SIMPLE_TAIL
case 'c':
unit_type = BYTES;
else
break;
}else {
- if (*argv[optind] == '+') {
- checknumbers(argv[optind]);
- }
- else if (!strcmp(argv[optind], "-")) {
+ if (!strcmp(argv[optind], "-")) {
add_file(STDIN);
} else {
add_file(argv[optind]);
units=-11;
if(units>0)
units--;
- fd=malloc(sizeof(int)*n_files);
+ fd=xmalloc(sizeof(int)*n_files);
if (n_files == 1)
#ifndef BB_FEATURE_SIMPLE_TAIL
if (!verbose)
#endif
show_headers = 0;
- buffer=malloc(BUFSIZ);
+ buffer=xmalloc(BUFSIZ);
for (test = 0; test < n_files; test++) {
if (show_headers)
printf("==> %s <==\n", files[test]);