Browse Source

Fix a really dumb bug introduced in version 1.4 of this file (a patch for ipv6
support) which could cause things like EOF and read errors while reading
/etc/services to always return a TRY_AGAIN. The perl test suite would alloc a
larger buffer and try again until all memory was exhausted. When we get a read
error, or EOF, it means we didn't get what we wanted, and so we should return
an error. Doing so fixes the failing perl 5.8.2 test.
-Erik

Eric Andersen 21 years ago
parent
commit
e5104517c1
1 changed files with 3 additions and 1 deletions
  1. 3 1
      libc/inet/getservice.c

+ 3 - 1
libc/inet/getservice.c

@@ -163,12 +163,14 @@ int getservent_r(struct servent * result_buf,
 
     if (servf == NULL && (servf = fopen(_PATH_SERVICES, "r" )) == NULL) {
 	UNLOCK;
+	errno=EIO;
 	return errno;
     }
 again:
     if ((p = fgets(line, BUFSIZ, servf)) == NULL) {
 	UNLOCK;
-	return TRY_AGAIN;
+	errno=EIO;
+	return errno;
     }
     if (*p == '#')
 	goto again;