diff options
author | Rob Landley <rob@landley.net> | 2012-02-09 06:36:42 -0600 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2012-02-09 06:36:42 -0600 |
commit | 0d3961f2d3cfe3eeecdd4ffb5e601b5058537570 (patch) | |
tree | 80b420ecb9918cc6f272cd8fefce6fe5c265a094 /toys/head.c | |
parent | 41a2130487e6096ec9f3cecbfc90f4c2d0169ec1 (diff) | |
download | toybox-0d3961f2d3cfe3eeecdd4ffb5e601b5058537570.tar.gz |
Cleanups for head.
Diffstat (limited to 'toys/head.c')
-rw-r--r-- | toys/head.c | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/toys/head.c b/toys/head.c index 8f0baa24..87fbe62a 100644 --- a/toys/head.c +++ b/toys/head.c @@ -6,13 +6,14 @@ * * See http://www.opengroup.org/onlinepubs/009695399/utilities/head.html -USE_HEAD(NEWTOY(head, "n#", TOYFLAG_BIN)) +USE_HEAD(NEWTOY(head, "n#<0=10", TOYFLAG_BIN)) config HEAD bool "head" default y help usage: head [-n number] [file...] + Copy first lines from files to stdout. If no files listed, copy from stdin. Filename "-" is a synonym for stdin. @@ -34,11 +35,11 @@ static void do_head(int fd, char *name) if (toys.optc > 1) { // Print an extra newline for all but the first file - if (TT.file_no++ > 0) printf("\n"); - printf("==> %s <==\n", name); + if (TT.file_no++) printf("\n"); + xprintf("==> %s <==\n", name); } - for (;lines>0;) { + while (lines) { len = read(fd, toybuf, size); if (len<0) { perror_msg("%s",name); @@ -46,17 +47,14 @@ static void do_head(int fd, char *name) } if (len<1) break; - for(i=0; i<len; i++) { - if (toybuf[i] == '\n' && --lines < 1) break; - } - xwrite(1, toybuf, i+1); + for(i=0; i<len;) + if (toybuf[i++] == '\n' && !--lines) break; + + xwrite(1, toybuf, i); } } void head_main(void) { - if (!toys.optflags) TT.lines = 10; - if (TT.lines < 0) perror_exit("Invalid number of lines."); - TT.file_no = 0; loopfiles(toys.optargs, do_head); } |