]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
lib/: Use getline(3) instead of its pattern
authorAlejandro Colomar <alx@kernel.org>
Mon, 22 Jul 2024 11:46:32 +0000 (13:46 +0200)
committerSerge Hallyn <serge@hallyn.com>
Sat, 6 Dec 2025 01:23:18 +0000 (19:23 -0600)
Signed-off-by: Alejandro Colomar <alx@kernel.org>
lib/commonio.c
lib/shadow/gshadow/fgetsgent.c

index cd18560f69bc32a4944e9dcbaf954e077e157c55..3115acd211f144f814e2c0247f599c809626ff40 100644 (file)
@@ -24,7 +24,6 @@
 #include <utime.h>
 
 #include "alloc/malloc.h"
-#include "alloc/reallocf.h"
 #include "atoi/getnum.h"
 #include "commonio.h"
 #include "defines.h"
@@ -568,11 +567,9 @@ static void add_one_entry_nis (struct commonio_db *db,
 }
 #endif                         /* KEEP_NIS_AT_END */
 
-/* Initial buffer size, as well as increment if not sufficient
-   (for reading very long lines in group files).  */
-#define BUFLEN 4096
 
-int commonio_open (struct commonio_db *db, int mode)
+int
+commonio_open(struct commonio_db *db, int mode)
 {
        char *buf;
        char *line;
@@ -634,28 +631,12 @@ int commonio_open (struct commonio_db *db, int mode)
                return 0;
        }
 
-       buflen = BUFLEN;
-       buf = MALLOC(buflen, char);
-       if (NULL == buf)
-               goto cleanup_errno;
-
-       while (fgets(buf, buflen, db->fp) != NULL) {
+       buf = NULL;
+       while (getline(&buf, &buflen, db->fp) != -1) {
                struct commonio_entry  *p;
 
-               while (   (strrchr (buf, '\n') == NULL)
-                      && (feof (db->fp) == 0)) {
-                       size_t len;
-
-                       buflen += BUFLEN;
-                       buf = REALLOCF(buf, buflen, char);
-                       if (NULL == buf)
-                               goto cleanup_errno;
-
-                       len = strlen (buf);
-                       if (fgets(buf + len, buflen - len, db->fp) == NULL)
-                               goto cleanup_buf;
-               }
-               stpsep(buf, "\n");
+               if (stpsep(buf, "\n") == NULL)
+                       goto cleanup_buf;
 
                line = strdup (buf);
                if (NULL == line) {
@@ -716,6 +697,7 @@ int commonio_open (struct commonio_db *db, int mode)
        return 0;
 }
 
+
 /*
  * Sort given db according to cmp function (usually compares uids)
  */
index 91cc520004fa65ddaccb7e328286a578cd940a00..56345d5eaa7aa2d2ca528bc774e50d30955dd068 100644 (file)
@@ -37,39 +37,15 @@ fgetsgent(FILE *fp)
        static size_t buflen = 0;
        static char *buf = NULL;
 
-       char *cp;
-
-       if (0 == buflen) {
-               buf = MALLOC(BUFSIZ, char);
-               if (NULL == buf) {
-                       return NULL;
-               }
-               buflen = BUFSIZ;
-       }
-
        if (NULL == fp) {
                return NULL;
        }
 
-       if (fgets(buf, buflen, fp) == NULL)
+       if (getline(&buf, &buflen, fp) == -1)
+               return NULL;
+       if (stpsep(buf, "\n") == NULL)
                return NULL;
 
-       while (   (strrchr(buf, '\n') == NULL)
-              && (feof (fp) == 0)) {
-               size_t len;
-
-               cp = REALLOC(buf, buflen * 2, char);
-               if (NULL == cp) {
-                       return NULL;
-               }
-               buf = cp;
-               buflen *= 2;
-
-               len = strlen (buf);
-               if (fgets(&buf[len], buflen - len, fp) == NULL)
-                       return NULL;
-       }
-       stpsep(buf, "\n");
        return sgetsgent(buf);
 }
 #endif