> Index: head.c
> ===================================================================
> RCS file: /cvs/src/usr.bin/head/head.c,v
> retrieving revision 1.17
> diff -u -p -r1.17 head.c
> --- head.c 7 Oct 2014 19:38:57 -0000 1.17
> +++ head.c 7 Oct 2014 21:16:43 -0000
> @@ -48,6 +48,7 @@ static void usage(void);
> int
> main(int argc, char *argv[])
> {
> + FILE *fp;
> long cnt;
> int ch, firsttime;
> long linecnt = 10;
> @@ -81,13 +82,13 @@ main(int argc, char *argv[])
> errx(1, "line count %s: %s", errstr, p);
> }
>
> - /* setlinebuf(stdout); */
> for (firsttime = 1; ; firsttime = 0) {
> if (!*argv) {
> if (!firsttime)
> exit(status);
> + fp = stdin;
> } else {
> - if (!freopen(*argv, "r", stdin)) {
> + if ((fp = fopen(*argv, "r")) == NULL) {
> warn("%s", *argv++);
> status = 1;
> continue;
> @@ -99,10 +100,11 @@ main(int argc, char *argv[])
> }
> ++argv;
> }
> - for (cnt = linecnt; cnt && !feof(stdin); --cnt)
> - while ((ch = getchar()) != EOF)
> + for (cnt = linecnt; cnt && !feof(fp); --cnt)
> + while ((ch = getc(fp)) != EOF)
> if (putchar(ch) == '\n')
> break;
> + fclose(fp);
> }
> /*NOTREACHED*/
> }
>
Nice fix! Seems correct to me.
cheers,
natano