From 7cc61258b3b66c62b0828fdaa234ee8ae2fee2dc Mon Sep 17 00:00:00 2001 From: millert <> Date: Mon, 16 Mar 1998 05:07:02 +0000 Subject: Use fgetln(3) instead of fgets(3) so we can easily recognize lines that are too long and ignore them instead of corrupting later entries. --- src/lib/libc/net/getnetent.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) (limited to 'src/lib/libc/net/getnetent.c') diff --git a/src/lib/libc/net/getnetent.c b/src/lib/libc/net/getnetent.c index e40fb50c0f..8f618a1d5e 100644 --- a/src/lib/libc/net/getnetent.c +++ b/src/lib/libc/net/getnetent.c @@ -32,7 +32,7 @@ */ #if defined(LIBC_SCCS) && !defined(lint) -static char rcsid[] = "$OpenBSD: getnetent.c,v 1.7 1997/04/24 08:37:09 tholo Exp $"; +static char rcsid[] = "$OpenBSD: getnetent.c,v 1.8 1998/03/16 05:06:57 millert Exp $"; #endif /* LIBC_SCCS and not lint */ #include @@ -75,21 +75,24 @@ endnetent() struct netent * getnetent() { - char *p; - register char *cp, **q; + char *p, *cp, **q; + size_t len; if (netf == NULL && (netf = fopen(_PATH_NETWORKS, "r" )) == NULL) return (NULL); again: - p = fgets(line, BUFSIZ, netf); - if (p == NULL) + if ((p = fgetln(netf, &len)) == NULL) return (NULL); - if (*p == '#') + if (p[len-1] == '\n') + len--; + if (len >= sizeof(line) || len == 0) goto again; - cp = strpbrk(p, "#\n"); - if (cp == NULL) + p = memcpy(line, p, len); + line[len] = '\0'; + if (*p == '#') goto again; - *cp = '\0'; + if ((cp = strchr(p, '#')) != NULL) + *cp = '\0'; net.n_name = p; if (strlen(net.n_name) >= MAXHOSTNAMELEN-1) net.n_name[MAXHOSTNAMELEN-1] = '\0'; -- cgit v1.2.3-55-g6feb