summaryrefslogtreecommitdiff
path: root/libc/inet/getservice.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2003-12-28 08:25:16 +0000
committerEric Andersen <andersen@codepoet.org>2003-12-28 08:25:16 +0000
commite5104517c1812dbee65e0994650e92e8d99dc9c0 (patch)
tree9d05533ddc20ed9a3957c38b296cd6b2d1ba1e6a /libc/inet/getservice.c
parentd984dbc675b5d8e66db2372fd3e8ea1bd7e653dc (diff)
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
Diffstat (limited to 'libc/inet/getservice.c')
-rw-r--r--libc/inet/getservice.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libc/inet/getservice.c b/libc/inet/getservice.c
index ee408dfab..fb22ff95a 100644
--- a/libc/inet/getservice.c
+++ b/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;