annotate toys/posix/tail.c @ 674:7e846e281e38

New build infrastructure to generate FLAG_ macros and TT alias, #define FOR_commandname before #including toys.h to trigger it. Rename DEFINE_GLOBALS() to just GLOBALS() (because I could never remember if it was DECLARE_GLOBALS). Convert existing commands to use new infrastructure, and replace optflag constants with FLAG_ macros where appropriate.
author Rob Landley <rob@landley.net>
date Mon, 08 Oct 2012 00:02:30 -0500
parents 6df4ccc0acbe
children 786841fdb1e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
1 /* vi: set sw=4 ts=4:
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
2 *
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
3 * tail.c - copy last lines from input to stdout.
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
4 *
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
5 * Copyright 2012 Timothy Elliott <tle@holymonkey.com>
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
6 *
656
6df4ccc0acbe Regularize command headers, update links to standards documents.
Rob Landley <rob@landley.net>
parents: 653
diff changeset
7 * See http://opengroup.org/onlinepubs/9699919799/utilities/tail.html
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
8
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
9 USE_TAIL(NEWTOY(tail, "fc-n-", TOYFLAG_BIN))
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
10
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
11 config TAIL
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
12 bool "tail"
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
13 default y
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
14 help
504
a497beb97eee Add "-" type to optargs and teach tail.c to use it. Tighten up help text, use xzalloc() and xputc() as appropriate.
Rob Landley <rob@landley.net>
parents: 495
diff changeset
15 usage: tail [-n|c number] [-f] [file...]
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
16
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
17 Copy last lines from files to stdout. If no files listed, copy from
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
18 stdin. Filename "-" is a synonym for stdin.
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
19
504
a497beb97eee Add "-" type to optargs and teach tail.c to use it. Tighten up help text, use xzalloc() and xputc() as appropriate.
Rob Landley <rob@landley.net>
parents: 495
diff changeset
20 -n output the last X lines (default 10), +X counts from start.
a497beb97eee Add "-" type to optargs and teach tail.c to use it. Tighten up help text, use xzalloc() and xputc() as appropriate.
Rob Landley <rob@landley.net>
parents: 495
diff changeset
21 -c output the last X bytes, +X counts from start
a497beb97eee Add "-" type to optargs and teach tail.c to use it. Tighten up help text, use xzalloc() and xputc() as appropriate.
Rob Landley <rob@landley.net>
parents: 495
diff changeset
22 -f follow file, waiting for more data to be appended
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
23
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
24 config TAIL_SEEK
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
25 bool "tail seek support"
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
26 default y
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
27 depends on TAIL
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
28 help
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
29 This version uses lseek, which is faster on large files.
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
30 */
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
31
674
7e846e281e38 New build infrastructure to generate FLAG_ macros and TT alias, #define FOR_commandname before #including toys.h to trigger it. Rename DEFINE_GLOBALS() to just GLOBALS() (because I could never remember if it was DECLARE_GLOBALS). Convert existing commands to use new infrastructure, and replace optflag constants with FLAG_ macros where appropriate.
Rob Landley <rob@landley.net>
parents: 656
diff changeset
32 #define FOR_tail
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
33 #include "toys.h"
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
34
674
7e846e281e38 New build infrastructure to generate FLAG_ macros and TT alias, #define FOR_commandname before #including toys.h to trigger it. Rename DEFINE_GLOBALS() to just GLOBALS() (because I could never remember if it was DECLARE_GLOBALS). Convert existing commands to use new infrastructure, and replace optflag constants with FLAG_ macros where appropriate.
Rob Landley <rob@landley.net>
parents: 656
diff changeset
35 GLOBALS(
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
36 long lines;
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
37 long bytes;
504
a497beb97eee Add "-" type to optargs and teach tail.c to use it. Tighten up help text, use xzalloc() and xputc() as appropriate.
Rob Landley <rob@landley.net>
parents: 495
diff changeset
38
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
39 int file_no;
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
40 )
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
41
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
42 struct line_list {
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
43 struct line_list *next, *prev;
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
44 char *data;
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
45 int len;
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
46 };
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
47
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
48 static struct line_list *get_chunk(int fd, int len)
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
49 {
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
50 struct line_list *line = xmalloc(sizeof(struct line_list)+len);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
51
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
52 line->data = ((char *)line) + sizeof(struct line_list);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
53 line->len = readall(fd, line->data, len);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
54
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
55 if (line->len < 1) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
56 free(line);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
57 return 0;
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
58 }
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
59
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
60 return line;
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
61 }
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
62
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
63 static void dump_chunk(void *ptr)
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
64 {
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
65 struct line_list *list = ptr;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
66 xwrite(1, list->data, list->len);
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
67 free(list);
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
68 }
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
69
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
70 // Reading through very large files is slow. Using lseek can speed things
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
71 // up a lot, but isn't applicable to all input (cat | tail).
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
72 // Note: bytes and lines are negative here.
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
73 static int try_lseek(int fd, long bytes, long lines)
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
74 {
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
75 struct line_list *list = 0, *temp;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
76 int flag = 0, chunk = sizeof(toybuf);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
77 ssize_t pos = lseek(fd, 0, SEEK_END);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
78
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
79 // If lseek() doesn't work on this stream, return now.
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
80 if (pos<0) return 0;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
81
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
82 // Seek to the right spot, output data from there.
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
83 if (bytes) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
84 if (lseek(fd, bytes, SEEK_END)<0) lseek(fd, 0, SEEK_SET);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
85 xsendfile(fd, 1);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
86 return 1;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
87 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
88
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
89 // Read from end to find enough lines, then output them.
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
90
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
91 bytes = pos;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
92 while (lines && pos) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
93 int offset;
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
94
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
95 // Read in next chunk from end of file
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
96 if (chunk>pos) chunk = pos;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
97 pos -= chunk;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
98 if (pos != lseek(fd, pos, SEEK_SET)) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
99 perror_msg("seek failed");
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
100 break;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
101 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
102 if (!(temp = get_chunk(fd, chunk))) break;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
103 if (list) list->next = temp;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
104 list = temp;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
105
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
106 // Count newlines in this chunk.
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
107 offset = list->len;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
108 while (offset--) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
109 // If the last line ends with a newline, that one doesn't count.
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
110 if (!flag) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
111 flag++;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
112
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
113 continue;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
114 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
115
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
116 // Start outputting data right after newline
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
117 if (list->data[offset] == '\n' && !++lines) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
118 offset++;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
119 list->data += offset;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
120 list->len -= offset;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
121
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
122 break;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
123 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
124 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
125 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
126
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
127 // Output stored data
624
1e8b9acdafeb Genericize llist code a bit: rename llist_free() to llist_traverse(), and no longer accept NULL as a synonym for free.
Rob Landley <rob@landley.net>
parents: 619
diff changeset
128 llist_traverse(list, dump_chunk);
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
129
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
130 // In case of -f
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
131 lseek(fd, bytes, SEEK_SET);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
132 return 1;
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
133 }
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
134
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
135 // Called for each file listed on command line, and/or stdin
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
136 static void do_tail(int fd, char *name)
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
137 {
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
138 long bytes = TT.bytes, lines = TT.lines;
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
139
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
140 if (toys.optc > 1) {
504
a497beb97eee Add "-" type to optargs and teach tail.c to use it. Tighten up help text, use xzalloc() and xputc() as appropriate.
Rob Landley <rob@landley.net>
parents: 495
diff changeset
141 if (TT.file_no++) xputc('\n');
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
142 xprintf("==> %s <==\n", name);
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
143 }
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
144
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
145 // Are we measuring from the end of the file?
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
146
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
147 if (bytes<0 || lines<0) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
148 struct line_list *list = 0, *new;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
149
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
150 // The slow codepath is always needed, and can handle all input,
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
151 // so make lseek support optional.
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
152 if (CFG_TAIL_SEEK && try_lseek(fd, bytes, lines));
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
153
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
154 // Read data until we run out, keep a trailing buffer
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
155 else for (;;) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
156 int len, count;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
157 char *try;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
158
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
159 if (!(new = get_chunk(fd, sizeof(toybuf)))) break;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
160 // append in order
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
161 dlist_add_nomalloc((struct double_list **)&list,
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
162 (struct double_list *)new);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
163
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
164 // Measure new chunk, discarding extra data from buffer
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
165 len = new->len;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
166 try = new->data;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
167 for (count=0; count<len; count++) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
168 if ((toys.optflags & FLAG_c) && bytes) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
169 bytes++;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
170 continue;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
171 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
172
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
173 if (lines) {
619
47edfc1a4983 - Do not abort testing after running the sort tests
Elie De Brauwer <eliedebrauwer@gmail.com>
parents: 540
diff changeset
174 if(try[count] != '\n' && count != len-1) continue;
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
175 if (lines<0) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
176 if (!++lines) ++lines;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
177 continue;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
178 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
179 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
180
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
181 // Time to discard data; given that bytes and lines were
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
182 // nonzero coming in, we can't discard too much if we're
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
183 // measuring right.
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
184 do {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
185 char c = *(list->data++);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
186 if (!(--list->len)) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
187 struct line_list *next = list->next;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
188 list->prev->next = next;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
189 list->next->prev = list->prev;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
190 free(list);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
191 list = next;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
192 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
193 if (c == '\n') break;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
194 } while (lines);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
195 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
196 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
197
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
198 // Output/free the buffer.
624
1e8b9acdafeb Genericize llist code a bit: rename llist_free() to llist_traverse(), and no longer accept NULL as a synonym for free.
Rob Landley <rob@landley.net>
parents: 619
diff changeset
199 llist_traverse(list, dump_chunk);
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
200
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
201 // Measuring from the beginning of the file.
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
202 } else for (;;) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
203 int len, offset = 0;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
204
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
205 // Error while reading does not exit. Error writing does.
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
206 len = read(fd, toybuf, sizeof(toybuf));
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
207 if (len<1) break;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
208 while (bytes > 1 || lines > 1) {
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
209 bytes--;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
210 if (toybuf[offset++] == '\n') lines--;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
211 if (offset >= len) break;
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
212 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
213 if (offset<len) xwrite(1, toybuf+offset, len-offset);
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
214 }
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
215
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
216 // -f support: cache name/descriptor
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
217 }
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
218
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
219 void tail_main(void)
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
220 {
504
a497beb97eee Add "-" type to optargs and teach tail.c to use it. Tighten up help text, use xzalloc() and xputc() as appropriate.
Rob Landley <rob@landley.net>
parents: 495
diff changeset
221 // if nothing specified, default -n to -10
a497beb97eee Add "-" type to optargs and teach tail.c to use it. Tighten up help text, use xzalloc() and xputc() as appropriate.
Rob Landley <rob@landley.net>
parents: 495
diff changeset
222 if (!(toys.optflags&(FLAG_n|FLAG_c))) TT.lines = -10;
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
223
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
224 loopfiles(toys.optargs, do_tail);
540
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
225
c2f39708a4c4 Redo tail to use optargs and optionally support lseek. Add support to optargs and llist.c, plus add a test suite entry. Still no -f support though.
Rob Landley <rob@landley.net>
parents: 504
diff changeset
226 // do -f stuff
494
eebfb11e84db Add tail.
Timothy Elliott <tle@holymonkey.com>
parents:
diff changeset
227 }