Module Name:    src
Committed By:   christos
Date:           Thu Jun 19 15:09:07 UTC 2014

Modified Files:
        src/lib/libc/net: ethers.c

Log Message:
use fparseln() instead of fgetln() for consistency (this was the last fgetln()
using parser in net/.
cVS: ----------------------------------------------------------------------


To generate a diff of this commit:
cvs rdiff -u -r1.23 -r1.24 src/lib/libc/net/ethers.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/net/ethers.c
diff -u src/lib/libc/net/ethers.c:1.23 src/lib/libc/net/ethers.c:1.24
--- src/lib/libc/net/ethers.c:1.23	Tue Mar 20 13:44:18 2012
+++ src/lib/libc/net/ethers.c	Thu Jun 19 11:09:07 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: ethers.c,v 1.23 2012/03/20 17:44:18 matt Exp $	*/
+/*	$NetBSD: ethers.c,v 1.24 2014/06/19 15:09:07 christos Exp $	*/
 
 /* 
  * ethers(3N) a la Sun.
@@ -9,7 +9,7 @@
 
 #include <sys/cdefs.h>
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: ethers.c,v 1.23 2012/03/20 17:44:18 matt Exp $");
+__RCSID("$NetBSD: ethers.c,v 1.24 2014/06/19 15:09:07 christos Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
@@ -83,17 +83,14 @@ ether_ntohost(char *hostname, const stru
 {
 	FILE *f; 
 	char *p;
-	size_t len;
 	struct ether_addr try;
-#ifdef YP
-	char trybuf[sizeof "xx:xx:xx:xx:xx:xx"];
-	int trylen;
-#endif
 
 	_DIAGASSERT(hostname != NULL);
 	_DIAGASSERT(e != NULL);
 
 #ifdef YP
+	char trybuf[sizeof "xx:xx:xx:xx:xx:xx"];
+	int trylen;
 	trylen = snprintf(trybuf, sizeof trybuf, "%x:%x:%x:%x:%x:%x", 
 	    e->ether_addr_octet[0], e->ether_addr_octet[1],
 	    e->ether_addr_octet[2], e->ether_addr_octet[3],
@@ -103,13 +100,14 @@ ether_ntohost(char *hostname, const stru
 	f = fopen(_PATH_ETHERS, "r");
 	if (f == NULL)
 		return -1;
-	while ((p = fgetln(f, &len)) != NULL) {
-		if (p[len - 1] != '\n')
-			continue;		/* skip lines w/o \n */
-		p[--len] = '\0';
+	for (p = NULL;;) {
+		free(p);
+		p = fparseln(f, NULL, NULL, NULL, FPARSELN_UNESCALL);
+		if (p == NULL)
+			break;
 #ifdef YP
 		/* A + in the file means try YP now.  */
-		if (len == 1 && *p == '+') {
+		if (strcmp(p, "+") == 0) {
 			char *ypbuf, *ypdom;
 			int ypbuflen;
 
@@ -118,24 +116,25 @@ ether_ntohost(char *hostname, const stru
 			if (yp_match(ypdom, "ethers.byaddr", trybuf,
 			    trylen, &ypbuf, &ypbuflen))
 				continue;
-			if (ether_line(ypbuf, &try, hostname) == 0) {
-				free(ypbuf);
-				(void)fclose(f);
-				return 0;
-			}
+			ypbuflen = ether_line(ypbuf, &try, hostname);
 			free(ypbuf);
+			if (ypbuflen == 0)
+				goto done;
 			continue;
 		}
 #endif
 		if (ether_line(p, &try, hostname) == 0 &&
-		    memcmp(&try, e, sizeof try) == 0) {
-			(void)fclose(f);
-			return 0;
-		}     
+		    memcmp(&try, e, sizeof try) == 0)
+			goto done;
 	}
+	free(p);
 	(void)fclose(f);
 	errno = ENOENT;
 	return -1;
+done:
+	free(p);
+	(void)fclose(f);
+	return 0;
 }
 
 int
@@ -143,7 +142,6 @@ ether_hostton(const char *hostname, stru
 {
 	FILE *f;
 	char *p;
-	size_t len;
 	char try[MAXHOSTNAMELEN + 1];
 #ifdef YP
 	int hostlen = (int)strlen(hostname);
@@ -153,16 +151,17 @@ ether_hostton(const char *hostname, stru
 	_DIAGASSERT(e != NULL);
 
 	f = fopen(_PATH_ETHERS, "r");
-	if (f==NULL)
+	if (f == NULL)
 		return -1;
 
-	while ((p = fgetln(f, &len)) != NULL) {
-		if (p[len - 1] != '\n')
-			continue;		/* skip lines w/o \n */
-		p[--len] = '\0';
+	for (p = NULL;;) {
+		free(p);
+		p = fparseln(f, NULL, NULL, NULL, FPARSELN_UNESCALL);
+		if (p == NULL)
+			break;
 #ifdef YP
 		/* A + in the file means try YP now.  */
-		if (len == 1 && *p == '+') {
+		if (strcmp(p, "+") == 0) {
 			char *ypbuf, *ypdom;
 			int ypbuflen;
 
@@ -171,23 +170,24 @@ ether_hostton(const char *hostname, stru
 			if (yp_match(ypdom, "ethers.byname", hostname, hostlen,
 			    &ypbuf, &ypbuflen))
 				continue;
-			if (ether_line(ypbuf, e, try) == 0) {
-				free(ypbuf);
-				(void)fclose(f);
-				return 0;
-			}
+			ypbuflen = ether_line(ypbuf, e, try);
 			free(ypbuf);
+			if (ypbuflen == 0)
+				goto done;
 			continue;
 		}
 #endif
-		if (ether_line(p, e, try) == 0 && strcmp(hostname, try) == 0) {
-			(void)fclose(f);
-			return 0;
-		}
+		if (ether_line(p, e, try) == 0 && strcmp(hostname, try) == 0)
+			goto done;
 	}
+	free(p);
 	(void)fclose(f);
 	errno = ENOENT;
 	return -1;
+done:
+	free(p);
+	(void)fclose(f);
+	return 0;
 }
 
 int

Reply via email to