On Thu, Dec 19, 2024 at 11:59:35AM +0100, git_AT_suckless.org wrote:
> commit 83182aa959b2100ea0cf6766e6ef3a553877a710
> Author: Elie Le Vaillant <eolien55_AT_disroot.org>
> AuthorDate: Fri Dec 6 10:37:44 2024 +0100
> Commit: Roberto E. Vargas Caballero <k0ga_AT_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
> _AT_@ -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
Received on Thu Dec 19 2024 - 22:09:02 CET