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

Reply via email to