Mercurial > hg > toybox
changeset 445:2c47a9c0c619
Cleanups for head.
author | Rob Landley <rob@landley.net> |
---|---|
date | Thu, 09 Feb 2012 06:36:42 -0600 |
parents | d3ca5e15e457 |
children | b51faa4fe8e6 |
files | toys/head.c |
diffstat | 1 files changed, 9 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/toys/head.c Mon Feb 06 17:35:59 2012 -0800 +++ b/toys/head.c Thu Feb 09 06:36:42 2012 -0600 @@ -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 @@ 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 @@ } 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); }