[hackers] [sbase] head: remove useless buffering || Elie Le Vaillant

From: <git_AT_suckless.org>
Date: Thu, 19 Dec 2024 11:59:35 +0100 (CET)

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.

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);
 }
Received on Thu Dec 19 2024 - 11:59:35 CET

This archive was generated by hypermail 2.3.0 : Thu Dec 19 2024 - 12:00:47 CET