diff options
author | Eric Andersen <andersen@codepoet.org> | 2003-12-28 08:25:16 +0000 |
---|---|---|
committer | Eric Andersen <andersen@codepoet.org> | 2003-12-28 08:25:16 +0000 |
commit | e5104517c1812dbee65e0994650e92e8d99dc9c0 (patch) | |
tree | 9d05533ddc20ed9a3957c38b296cd6b2d1ba1e6a /libc/inet/getservice.c | |
parent | d984dbc675b5d8e66db2372fd3e8ea1bd7e653dc (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.c | 4 |
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; |