X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=coreutils%2Ftail.c;h=48abc4b847c7460b278fc5b0ae89a34c2a6f9118;hb=101a470068a62a70489797a3fdfa5084af80106e;hp=b18064a38c086ba8b1db5574e9b35269ebcd8670;hpb=c7bda1ce659294d6e22c06e087f6f265983c7578;p=oweals%2Fbusybox.git diff --git a/coreutils/tail.c b/coreutils/tail.c index b18064a38..48abc4b84 100644 --- a/coreutils/tail.c +++ b/coreutils/tail.c @@ -4,20 +4,7 @@ * * Copyright (C) 2001 by Matt Kraai * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ /* BB_AUDIT SUSv3 compliant (need fancy for -c) */ @@ -53,11 +40,7 @@ static const struct suffix_mult tail_suffixes[] = { { NULL, 0 } }; -static int status -#if EXIT_SUCCESS != 0 - = EXIT_SUCCESS /* If it is 0 (paranoid check), let bss initialize it. */ -#endif - ; +static int status; static void tail_xprint_header(const char *fmt, const char *filename) { @@ -79,7 +62,13 @@ static void tail_xbb_full_write(const char *buf, size_t len) static ssize_t tail_read(int fd, char *buf, size_t count) { ssize_t r; + off_t current,end; + struct stat sbuf; + end = current = lseek(fd, 0, SEEK_CUR); + if (!fstat(fd, &sbuf)) + end = sbuf.st_size; + lseek(fd, end < current ? 0 : current, SEEK_SET); if ((r = safe_read(fd, buf, count)) < 0) { bb_perror_msg("read"); status = EXIT_FAILURE; @@ -90,7 +79,7 @@ static ssize_t tail_read(int fd, char *buf, size_t count) static const char tail_opts[] = "fn:c:" -#ifdef CONFIG_FEATURE_FANCY_TAIL +#if ENABLE_FEATURE_FANCY_TAIL "qs:v" #endif ; @@ -115,6 +104,7 @@ int tail_main(int argc, char **argv) char *s, *buf; const char *fmt; +#if !ENABLE_DEBUG_YANK_SUSv2 || ENABLE_FEATURE_FANCY_TAIL /* Allow legacy syntax of an initial numeric option without -n. */ if (argc >=2 && ((argv[1][0] == '+') || ((argv[1][0] == '-') /* && (isdigit)(argv[1][1]) */ @@ -124,6 +114,7 @@ int tail_main(int argc, char **argv) optarg = argv[1]; goto GET_COUNT; } +#endif while ((opt = getopt(argc, argv, tail_opts)) > 0) { switch (opt) { @@ -134,7 +125,9 @@ int tail_main(int argc, char **argv) count_bytes = 1; /* FALLS THROUGH */ case 'n': +#if !ENABLE_DEBUG_YANK_SUSv2 || ENABLE_FEATURE_FANCY_TAIL GET_COUNT: +#endif count = bb_xgetlarg10_sfx(optarg, tail_suffixes); /* Note: Leading whitespace is an error trapped above. */ if (*optarg == '+') { @@ -146,7 +139,7 @@ int tail_main(int argc, char **argv) count = -count; } break; -#ifdef CONFIG_FEATURE_FANCY_TAIL +#if ENABLE_FEATURE_FANCY_TAIL case 'q': header_threshhold = INT_MAX; break; @@ -228,6 +221,7 @@ int tail_main(int argc, char **argv) buf = tailbuf; taillen = 0; seen = 1; + newline = 0; while ((nread = tail_read(fds[i], buf, tailbufsize-taillen)) > 0) { if (from_top) {