diff options
Diffstat (limited to 'toys')
-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); } |