diff --git a/lib/commonio.c b/lib/commonio.c index 73f7674b8..a6133247a 100644 --- a/lib/commonio.c +++ b/lib/commonio.c @@ -24,7 +24,6 @@ #include #include "alloc/malloc.h" -#include "alloc/reallocf.h" #include "atoi/getnum.h" #include "commonio.h" #include "defines.h" @@ -571,11 +570,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; @@ -637,28 +634,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) { @@ -720,6 +701,7 @@ int commonio_open (struct commonio_db *db, int mode) return 0; } + /* * Sort given db according to cmp function (usually compares uids) */ diff --git a/lib/gshadow.c b/lib/gshadow.c index 6faa3dfed..4fcbb227d 100644 --- a/lib/gshadow.c +++ b/lib/gshadow.c @@ -129,6 +129,7 @@ void endsgent (void) return &sgroup; } + /* * fgetsgent - convert next line in stream to (struct sgrp) * @@ -136,47 +137,25 @@ void endsgent (void) * converts it to a (struct sgrp). NULL is returned on EOF. */ -/*@observer@*//*@null@*/struct sgrp *fgetsgent (/*@null@*/FILE * fp) +/*@observer@*//*@null@*/struct sgrp * +fgetsgent(/*@null@*/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)); } + /* * getsgent - get a single shadow group entry */