This fixes issue introduced by 72e1a1ce186c39f07282398e2af9eb0253e60f15

This should also fix the following testcase to exit with error rather
than cause an endless loop.

int main(void) {
        if (getservbyname("non-existing", "udp") == NULL)
                err(1, "getservbyname");
        return 0;
}

Reported by Pirmin Walthert
http://lists.uclibc.org/pipermail/uclibc/2010-August/044277.html

Signed-off-by: Natanael Copa <natanael.c...@gmail.com>
---
 libc/inet/getservice.c |    5 ++---
 1 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/libc/inet/getservice.c b/libc/inet/getservice.c
index 1532df9..ccf9816 100644
--- a/libc/inet/getservice.c
+++ b/libc/inet/getservice.c
@@ -69,7 +69,7 @@ int getservent_r(struct servent *result_buf,
        char **serv_aliases;
        char **tok = NULL;
        const size_t aliaslen = sizeof(*serv_aliases) * MAXALIASES;
-       int ret = ENOENT;
+       int ret = ERANGE;
 
        *result = NULL;
        if (buflen < aliaslen
@@ -77,7 +77,7 @@ int getservent_r(struct servent *result_buf,
                goto DONE_NOUNLOCK;
 
        __UCLIBC_MUTEX_LOCK(mylock);
-
+       ret = ENOENT;
        if (servp == NULL)
                setservent(serv_stayopen);
        if (servp == NULL)
@@ -88,7 +88,6 @@ int getservent_r(struct servent *result_buf,
        servp->line_len = buflen - aliaslen;
        /* <name>[[:space:]]<port>/<proto>[[:space:]][<aliases>] */
        if (!config_read(servp, &tok, MAXALIASES, 3, "# \t/", PARSE_NORMAL)) {
-               ret = ERANGE;
                goto DONE;
        }
        result_buf->s_name = *(tok++);
-- 
1.7.2.3

_______________________________________________
uClibc mailing list
uClibc@uclibc.org
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to