On Thu, Dec 19, 2024 at 11:59:35AM +0100, g...@suckless.org wrote: > commit 83182aa959b2100ea0cf6766e6ef3a553877a710 > Author: Elie Le Vaillant <eolie...@disroot.org> > AuthorDate: Fri Dec 6 10:37:44 2024 +0100 > Commit: Roberto E. Vargas Caballero <k...@shike2.com> > CommitDate: Thu Dec 19 11:58:49 2024 +0100 > > head: remove useless buffering > > getline isn't useful here, because we just need to read then output > lines. We do not need anything more complex than counting '\n's, so > we shouldn't use a buffer like we currently do. >
>From a simplicity standpoint you're right, but this might also have performance implications. Was this tested? > diff --git a/head.c b/head.c > index ae550c0..230ad21 100644 > --- a/head.c > +++ b/head.c > @@ -9,15 +9,16 @@ > static void > head(FILE *fp, const char *fname, size_t n) > { > - char *buf = NULL; > - size_t i = 0, size = 0; > - ssize_t len; > + int c; > + size_t i = 0; > > - while (i < n && (len = getline(&buf, &size, fp)) > 0) { > - fwrite(buf, 1, len, stdout); > - i += (len && (buf[len - 1] == '\n')); > + while (i < n && (c = fgetc(fp)) != EOF) { > + if (putchar(c) == EOF) > + eprintf("fputc:"); > + if (c == '\n') > + i++; > } > - free(buf); > + > if (ferror(fp)) > eprintf("getline %s:", fname); > } > -- Kind regards, Hiltjo