[Midnightbsd-cvs] src [11331] trunk/usr.bin/tail: update tail
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Wed Jul 4 20:57:51 EDT 2018
Revision: 11331
http://svnweb.midnightbsd.org/src/?rev=11331
Author: laffer1
Date: 2018-07-04 20:57:51 -0400 (Wed, 04 Jul 2018)
Log Message:
-----------
update tail
Modified Paths:
--------------
trunk/usr.bin/tail/Makefile
trunk/usr.bin/tail/extern.h
trunk/usr.bin/tail/forward.c
trunk/usr.bin/tail/misc.c
trunk/usr.bin/tail/read.c
trunk/usr.bin/tail/reverse.c
trunk/usr.bin/tail/tail.1
trunk/usr.bin/tail/tail.c
Added Paths:
-----------
trunk/usr.bin/tail/tests/
trunk/usr.bin/tail/tests/Makefile
trunk/usr.bin/tail/tests/tail_test.sh
Property Changed:
----------------
trunk/usr.bin/tail/tail.1
Modified: trunk/usr.bin/tail/Makefile
===================================================================
--- trunk/usr.bin/tail/Makefile 2018-07-05 00:56:10 UTC (rev 11330)
+++ trunk/usr.bin/tail/Makefile 2018-07-05 00:57:51 UTC (rev 11331)
@@ -1,7 +1,14 @@
# $MidnightBSD$
+# $FreeBSD: stable/10/usr.bin/tail/Makefile 314425 2017-02-28 22:18:05Z asomers $
# @(#)Makefile 8.1 (Berkeley) 6/6/93
+.include <bsd.own.mk>
+
PROG= tail
SRCS= forward.c misc.c read.c reverse.c tail.c
+.if ${MK_TESTS} != "no"
+SUBDIR+= tests
+.endif
+
.include <bsd.prog.mk>
Modified: trunk/usr.bin/tail/extern.h
===================================================================
--- trunk/usr.bin/tail/extern.h 2018-07-05 00:56:10 UTC (rev 11330)
+++ trunk/usr.bin/tail/extern.h 2018-07-05 00:57:51 UTC (rev 11331)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -28,7 +29,7 @@
*
* @(#)extern.h 8.1 (Berkeley) 6/6/93
*
- * $MidnightBSD$
+ * $FreeBSD: stable/10/usr.bin/tail/extern.h 251565 2013-06-09 08:06:26Z jh $
*/
#define WR(p, size) do { \
@@ -67,5 +68,6 @@
void oerr(void);
int mapprint(struct mapinfo *, off_t, off_t);
int maparound(struct mapinfo *, off_t);
+void printfn(const char *, int);
extern int Fflag, fflag, qflag, rflag, rval, no_files;
Modified: trunk/usr.bin/tail/forward.c
===================================================================
--- trunk/usr.bin/tail/forward.c 2018-07-05 00:56:10 UTC (rev 11330)
+++ trunk/usr.bin/tail/forward.c 2018-07-05 00:57:51 UTC (rev 11331)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -32,7 +33,7 @@
#include <sys/cdefs.h>
-__MBSDID("$MidnightBSD$");
+__FBSDID("$FreeBSD: stable/10/usr.bin/tail/forward.c 251565 2013-06-09 08:06:26Z jh $");
#ifndef lint
static const char sccsid[] = "@(#)forward.c 8.1 (Berkeley) 6/6/93";
@@ -66,9 +67,9 @@
#define USE_KQUEUE 1
#define ADD_EVENTS 2
-struct kevent *ev;
-int action = USE_SLEEP;
-int kq;
+static struct kevent *ev;
+static int action = USE_SLEEP;
+static int kq;
static const file_info_t *last;
@@ -243,7 +244,7 @@
while ((ch = getc(file->fp)) != EOF) {
if (last != file && no_files > 1) {
if (!qflag)
- (void)printf("\n==> %s <==\n", file->file_name);
+ printfn(file->file_name, 1);
last = file;
}
if (putchar(ch) == EOF)
@@ -320,7 +321,7 @@
active = 1;
n++;
if (no_files > 1 && !qflag)
- (void)printf("\n==> %s <==\n", file->file_name);
+ printfn(file->file_name, 1);
forward(file->fp, file->file_name, style, off, &file->st);
if (Fflag && fileno(file->fp) != STDIN_FILENO)
n++;
Modified: trunk/usr.bin/tail/misc.c
===================================================================
--- trunk/usr.bin/tail/misc.c 2018-07-05 00:56:10 UTC (rev 11330)
+++ trunk/usr.bin/tail/misc.c 2018-07-05 00:57:51 UTC (rev 11331)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -32,7 +33,7 @@
#include <sys/cdefs.h>
-__MBSDID("$MidnightBSD$");
+__FBSDID("$FreeBSD: stable/10/usr.bin/tail/misc.c 251565 2013-06-09 08:06:26Z jh $");
#ifndef lint
static const char sccsid[] = "@(#)misc.c 8.1 (Berkeley) 6/6/93";
@@ -113,3 +114,17 @@
return (0);
}
+
+/*
+ * Print the file name without stdio buffering.
+ */
+void
+printfn(const char *fn, int print_nl)
+{
+
+ if (print_nl)
+ WR("\n", 1);
+ WR("==> ", 4);
+ WR(fn, strlen(fn));
+ WR(" <==\n", 5);
+}
Modified: trunk/usr.bin/tail/read.c
===================================================================
--- trunk/usr.bin/tail/read.c 2018-07-05 00:56:10 UTC (rev 11330)
+++ trunk/usr.bin/tail/read.c 2018-07-05 00:57:51 UTC (rev 11331)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -32,7 +33,7 @@
#include <sys/cdefs.h>
-__MBSDID("$MidnightBSD$");
+__FBSDID("$FreeBSD: stable/10/usr.bin/tail/read.c 245184 2013-01-08 22:14:45Z delphij $");
#ifndef lint
static const char sccsid[] = "@(#)read.c 8.1 (Berkeley) 6/6/93";
@@ -143,9 +144,8 @@
char *p, *sp;
int blen, cnt, recno, wrap;
- if ((llines = malloc(off * sizeof(*llines))) == NULL)
- err(1, "malloc");
- bzero(llines, off * sizeof(*llines));
+ if ((llines = calloc(off, sizeof(*llines))) == NULL)
+ err(1, "calloc");
p = sp = NULL;
blen = cnt = recno = wrap = 0;
rc = 0;
Modified: trunk/usr.bin/tail/reverse.c
===================================================================
--- trunk/usr.bin/tail/reverse.c 2018-07-05 00:56:10 UTC (rev 11330)
+++ trunk/usr.bin/tail/reverse.c 2018-07-05 00:57:51 UTC (rev 11331)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -37,9 +38,10 @@
#endif
#include <sys/cdefs.h>
-__MBSDID("$MidnightBSD$");
+__FBSDID("$FreeBSD: stable/10/usr.bin/tail/reverse.c 332610 2018-04-16 16:42:16Z asomers $");
#include <sys/param.h>
+#include <sys/queue.h>
#include <sys/stat.h>
#include <sys/mman.h>
@@ -117,6 +119,7 @@
map.start = NULL;
map.mapoff = map.maxoff = size;
map.fd = fileno(fp);
+ map.maplen = 0;
/*
* Last char is special, ignore whether newline or not. Note that
@@ -168,12 +171,12 @@
ierr(fn);
}
-typedef struct bf {
- struct bf *next;
- struct bf *prev;
- int len;
- char *l;
-} BF;
+#define BSZ (128 * 1024)
+typedef struct bfelem {
+ TAILQ_ENTRY(bfelem) entries;
+ size_t len;
+ char l[BSZ];
+} bfelem_t;
/*
* r_buf -- display a non-regular file in reverse order by line.
@@ -188,58 +191,44 @@
static void
r_buf(FILE *fp, const char *fn)
{
- BF *mark, *tl, *tr;
- int ch, len, llen;
+ struct bfelem *tl, *first = NULL;
+ size_t llen;
char *p;
- off_t enomem;
+ off_t enomem = 0;
+ TAILQ_HEAD(bfhead, bfelem) head;
- tl = NULL;
-#define BSZ (128 * 1024)
- for (mark = NULL, enomem = 0;;) {
+ TAILQ_INIT(&head);
+
+ while (!feof(fp)) {
+ size_t len;
+
/*
* Allocate a new block and link it into place in a doubly
* linked list. If out of memory, toss the LRU block and
* keep going.
*/
- if (enomem || (tl = malloc(sizeof(BF))) == NULL ||
- (tl->l = malloc(BSZ)) == NULL) {
- if (!mark)
+ while ((tl = malloc(sizeof(bfelem_t))) == NULL) {
+ first = TAILQ_FIRST(&head);
+ if (TAILQ_EMPTY(&head))
err(1, "malloc");
- tl = enomem ? tl->next : mark;
- enomem += tl->len;
- } else if (mark) {
- tl->next = mark;
- tl->prev = mark->prev;
- mark->prev->next = tl;
- mark->prev = tl;
- } else {
- mark = tl;
- mark->next = mark->prev = mark;
+ enomem += first->len;
+ TAILQ_REMOVE(&head, first, entries);
+ free(first);
}
+ TAILQ_INSERT_TAIL(&head, tl, entries);
/* Fill the block with input data. */
- for (p = tl->l, len = 0;
- len < BSZ && (ch = getc(fp)) != EOF; ++len)
- *p++ = ch;
-
- if (ferror(fp)) {
- ierr(fn);
- return;
+ len = 0;
+ while ((!feof(fp)) && len < BSZ) {
+ p = tl->l + len;
+ len += fread(p, 1, BSZ - len, fp);
+ if (ferror(fp)) {
+ ierr(fn);
+ return;
+ }
}
- /*
- * If no input data for this block and we tossed some data,
- * recover it.
- */
- if (!len && enomem) {
- enomem -= tl->len;
- tl = tl->prev;
- break;
- }
-
tl->len = len;
- if (ch == EOF)
- break;
}
if (enomem) {
@@ -248,37 +237,49 @@
}
/*
- * Step through the blocks in the reverse order read. The last char
- * is special, ignore whether newline or not.
+ * Now print the lines in reverse order
+ * Outline:
+ * Scan backward for "\n",
+ * print forward to the end of the buffers
+ * free any buffers that start after the "\n" just found
+ * Loop
*/
- for (mark = tl;;) {
- for (p = tl->l + (len = tl->len) - 1, llen = 0; len--;
- --p, ++llen)
- if (*p == '\n') {
- if (llen) {
+ tl = TAILQ_LAST(&head, bfhead);
+ first = TAILQ_FIRST(&head);
+ while (tl != NULL) {
+ struct bfelem *temp;
+
+ for (p = tl->l + tl->len - 1, llen = 0; p >= tl->l;
+ --p, ++llen) {
+ int start = (tl == first && p == tl->l);
+
+ if ((*p == '\n') || start) {
+ struct bfelem *tr;
+
+ if (llen && start && *p != '\n')
+ WR(p, llen + 1);
+ else if (llen) {
WR(p + 1, llen);
- llen = 0;
+ if (start && *p == '\n')
+ WR(p, 1);
}
- if (tl == mark)
- continue;
- for (tr = tl->next; tr->len; tr = tr->next) {
- WR(tr->l, tr->len);
- tr->len = 0;
- if (tr == mark)
- break;
+ tr = TAILQ_NEXT(tl, entries);
+ llen = 0;
+ if (tr != NULL) {
+ TAILQ_FOREACH_FROM_SAFE(tr, &head,
+ entries, temp) {
+ if (tr->len)
+ WR(&tr->l, tr->len);
+ TAILQ_REMOVE(&head, tr,
+ entries);
+ free(tr);
+ }
}
}
+ }
tl->len = llen;
- if ((tl = tl->prev) == mark)
- break;
+ tl = TAILQ_PREV(tl, bfhead, entries);
}
- tl = tl->next;
- if (tl->len) {
- WR(tl->l, tl->len);
- tl->len = 0;
- }
- while ((tl = tl->next)->len) {
- WR(tl->l, tl->len);
- tl->len = 0;
- }
+ TAILQ_REMOVE(&head, first, entries);
+ free(first);
}
Modified: trunk/usr.bin/tail/tail.1
===================================================================
--- trunk/usr.bin/tail/tail.1 2018-07-05 00:56:10 UTC (rev 11330)
+++ trunk/usr.bin/tail/tail.1 2018-07-05 00:57:51 UTC (rev 11331)
@@ -1,3 +1,4 @@
+.\" $MidnightBSD$
.\" Copyright (c) 1980, 1990, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
@@ -29,9 +30,9 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)tail.1 8.1 (Berkeley) 6/6/93
-.\" $MidnightBSD$
+.\" $FreeBSD: stable/10/usr.bin/tail/tail.1 248414 2013-03-17 06:57:25Z joel $
.\"
-.Dd June 5, 2009
+.Dd March 16, 2013
.Dt TAIL 1
.Os
.Sh NAME
@@ -147,6 +148,17 @@
flag is specified.
.Sh EXIT STATUS
.Ex -std
+.Sh EXAMPLES
+To display the last 500 lines of the file
+.Ar foo :
+.Pp
+.Dl $ tail -n 500 foo
+.Pp
+Keep
+.Pa /var/log/messages
+open, displaying to the standard output anything appended to the file:
+.Pp
+.Dl $ tail -f /var/log/messages
.Sh SEE ALSO
.Xr cat 1 ,
.Xr head 1 ,
Property changes on: trunk/usr.bin/tail/tail.1
___________________________________________________________________
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Modified: trunk/usr.bin/tail/tail.c
===================================================================
--- trunk/usr.bin/tail/tail.c 2018-07-05 00:56:10 UTC (rev 11330)
+++ trunk/usr.bin/tail/tail.c 2018-07-05 00:57:51 UTC (rev 11331)
@@ -1,3 +1,4 @@
+/* $MidnightBSD$ */
/*-
* Copyright (c) 1991, 1993
* The Regents of the University of California. All rights reserved.
@@ -32,7 +33,7 @@
#include <sys/cdefs.h>
-__MBSDID("$MidnightBSD$");
+__FBSDID("$FreeBSD: stable/10/usr.bin/tail/tail.c 251565 2013-06-09 08:06:26Z jh $");
#ifndef lint
static const char copyright[] =
@@ -58,7 +59,7 @@
int Fflag, fflag, qflag, rflag, rval, no_files;
-file_info_t *files;
+static file_info_t *files;
static void obsolete(char **);
static void usage(void);
@@ -203,10 +204,8 @@
continue;
}
if (argc > 1 && !qflag) {
- (void)printf("%s==> %s <==\n",
- first ? "" : "\n", fn);
+ printfn(fn, !first);
first = 0;
- (void)fflush(stdout);
}
if (rflag)
Added: trunk/usr.bin/tail/tests/Makefile
===================================================================
--- trunk/usr.bin/tail/tests/Makefile (rev 0)
+++ trunk/usr.bin/tail/tests/Makefile 2018-07-05 00:57:51 UTC (rev 11331)
@@ -0,0 +1,8 @@
+# $MidnightBSD$
+# $FreeBSD: stable/10/usr.bin/tail/tests/Makefile 311895 2017-01-10 20:43:32Z asomers $
+
+PACKAGE= tests
+
+ATF_TESTS_SH= tail_test
+
+.include <bsd.test.mk>
Property changes on: trunk/usr.bin/tail/tests/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/usr.bin/tail/tests/tail_test.sh
===================================================================
--- trunk/usr.bin/tail/tests/tail_test.sh (rev 0)
+++ trunk/usr.bin/tail/tests/tail_test.sh 2018-07-05 00:57:51 UTC (rev 11331)
@@ -0,0 +1,278 @@
+# Copyright (c) 2016 Alan Somers
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+# $FreeBSD: stable/10/usr.bin/tail/tests/tail_test.sh 332610 2018-04-16 16:42:16Z asomers $
+# $MidnightBSD$
+
+atf_test_case empty_r
+empty_r_head()
+{
+ atf_set "descr" "Reverse an empty file"
+}
+empty_r_body()
+{
+ touch infile expectfile
+ tail -r infile > outfile
+ tail -r < infile > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+atf_test_case file_r
+file_r_head()
+{
+ atf_set "descr" "Reverse a file"
+}
+file_r_body()
+{
+ cat > infile <<HERE
+This is the first line
+This is the second line
+This is the third line
+HERE
+ cat > expectfile << HERE
+This is the third line
+This is the second line
+This is the first line
+HERE
+ tail -r infile > outfile
+ tail -r < infile > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+atf_test_case file_rn2
+file_rn2_head()
+{
+ atf_set "descr" "Reverse the last two lines of a file"
+}
+file_rn2_body()
+{
+ cat > infile <<HERE
+This is the first line
+This is the second line
+This is the third line
+HERE
+ cat > expectfile << HERE
+This is the third line
+This is the second line
+HERE
+ tail -rn2 infile > outfile
+ tail -rn2 < infile > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+# Regression test for PR 222671
+# https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=222671
+atf_test_case pipe_leading_newline_r
+pipe_leading_newline_r_head()
+{
+ atf_set "descr" "Reverse a pipe whose first character is a newline"
+}
+pipe_leading_newline_r_body()
+{
+ cat > expectfile << HERE
+3
+2
+1
+
+HERE
+ printf '\n1\n2\n3\n' | tail -r > outfile
+ printf '\n1\n2\n3\n' | tail -r > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+atf_test_case file_rc28
+file_rc28_head()
+{
+ atf_set "descr" "Reverse a file and display the last 28 characters"
+}
+file_rc28_body()
+{
+ cat > infile <<HERE
+This is the first line
+This is the second line
+This is the third line
+HERE
+ cat > expectfile << HERE
+This is the third line
+line
+HERE
+ tail -rc28 infile > outfile
+ tail -rc28 < infile > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+atf_test_case file_rc28
+file_rc28_head()
+{
+ atf_set "descr" "Reverse a file and display the last 28 characters"
+}
+file_rc28_body()
+{
+ cat > infile <<HERE
+This is the first line
+This is the second line
+This is the third line
+HERE
+ cat > expectfile << HERE
+This is the third line
+line
+HERE
+ tail -rc28 infile > outfile
+ tail -rc28 < infile > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+atf_test_case longfile_r
+longfile_r_head()
+{
+ atf_set "descr" "Reverse a long file"
+}
+longfile_r_body()
+{
+ jot -w "%0511d" 1030 0 > infile
+ jot -w "%0511d" 1030 1029 0 -1 > expectfile
+ tail -r infile > outfile
+ tail -r < infile > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+atf_test_case longfile_r_enomem
+longfile_r_enomem_head()
+{
+ atf_set "descr" "Reverse a file that's too long to store in RAM"
+}
+longfile_r_enomem_body()
+{
+ # When we reverse a file that's too long for RAM, tail should drop the
+ # first part and just print what it can. We'll check that the last
+ # part is ok
+ {
+ ulimit -v 32768 || atf_skip "Can't adjust ulimit"
+ jot -w "%01023d" 32768 0 | tail -r > outfile ;
+ }
+ if [ "$?" -ne 1 ]; then
+ atf_skip "Didn't get ENOMEM. Adjust test parameters"
+ fi
+ # We don't know how much of the input we dropped. So just check that
+ # the first ten lines of tail's output are the same as the last ten of
+ # the input
+ jot -w "%01023d" 10 32767 0 -1 > expectfile
+ head -n 10 outfile > outtrunc
+ diff expectfile outtrunc
+ atf_check cmp expectfile outtrunc
+}
+
+atf_test_case longfile_r_longlines
+longfile_r_longlines_head()
+{
+ atf_set "descr" "Reverse a long file with extremely long lines"
+}
+longfile_r_longlines_body()
+{
+ jot -s " " -w "%07d" 18000 0 > infile
+ jot -s " " -w "%07d" 18000 18000 >> infile
+ jot -s " " -w "%07d" 18000 36000 >> infile
+ jot -s " " -w "%07d" 18000 36000 > expectfile
+ jot -s " " -w "%07d" 18000 18000 >> expectfile
+ jot -s " " -w "%07d" 18000 0 >> expectfile
+ tail -r infile > outfile
+ tail -r < infile > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+atf_test_case longfile_rc135782
+longfile_rc135782_head()
+{
+ atf_set "descr" "Reverse a long file and print the last 135,782 bytes"
+}
+longfile_rc135782_body()
+{
+ jot -w "%063d" 9000 0 > infile
+ jot -w "%063d" 2121 8999 0 -1 > expectfile
+ echo "0000000000000000000000000000000006878" >> expectfile
+ tail -rc135782 infile > outfile
+ tail -rc135782 < infile > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+atf_test_case longfile_rc145782_longlines
+longfile_rc145782_longlines_head()
+{
+ atf_set "descr" "Reverse a long file with extremely long lines and print the last 145,782 bytes"
+}
+longfile_rc145782_longlines_body()
+{
+ jot -s " " -w "%07d" 18000 0 > infile
+ jot -s " " -w "%07d" 18000 18000 >> infile
+ jot -s " " -w "%07d" 18000 36000 >> infile
+ jot -s " " -w "%07d" 18000 36000 > expectfile
+ echo -n "35777 " >> expectfile
+ jot -s " " -w "%07d" 222 35778 >> expectfile
+ tail -rc145782 infile > outfile
+ tail -rc145782 < infile > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+atf_test_case longfile_rn2500
+longfile_rn2500_head()
+{
+ atf_set "descr" "Reverse a long file and print the last 2,500 lines"
+}
+longfile_rn2500_body()
+{
+ jot -w "%063d" 9000 0 > infile
+ jot -w "%063d" 2500 8999 0 -1 > expectfile
+ tail -rn2500 infile > outfile
+ tail -rn2500 < infile > outpipe
+ atf_check cmp expectfile outfile
+ atf_check cmp expectfile outpipe
+}
+
+
+atf_init_test_cases()
+{
+ atf_add_test_case empty_r
+ atf_add_test_case file_r
+ atf_add_test_case file_rc28
+ atf_add_test_case file_rn2
+ atf_add_test_case pipe_leading_newline_r
+ # The longfile tests are designed to exercise behavior in r_buf(),
+ # which operates on 128KB blocks
+ atf_add_test_case longfile_r
+ atf_add_test_case longfile_r_enomem
+ atf_add_test_case longfile_r_longlines
+ atf_add_test_case longfile_rc135782
+ atf_add_test_case longfile_rc145782_longlines
+ atf_add_test_case longfile_rn2500
+}
Property changes on: trunk/usr.bin/tail/tests/tail_test.sh
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
More information about the Midnightbsd-cvs
mailing list