#include <utime.h>
#include "alloc/malloc.h"
-#include "alloc/reallocf.h"
#include "atoi/getnum.h"
#include "commonio.h"
#include "defines.h"
}
#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;
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) {
return 0;
}
+
/*
* Sort given db according to cmp function (usually compares uids)
*/
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