diff options
-rw-r--r-- | libc/inet/resolv.c | 2 | ||||
-rw-r--r-- | test/.gitignore | 5 | ||||
-rw-r--r-- | test/Test.mak | 2 | ||||
-rw-r--r-- | test/inet/Makefile.in | 8 | ||||
-rw-r--r-- | test/inet/tst-res.c | 42 |
5 files changed, 54 insertions, 5 deletions
diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c index 769b65ffa..b557b097d 100644 --- a/libc/inet/resolv.c +++ b/libc/inet/resolv.c @@ -3536,7 +3536,7 @@ __res_iclose(res_state statp) struct __res_state * rp = statp; __UCLIBC_MUTEX_LOCK(__resolv_lock); if (rp == NULL) - rp = __resp; + rp = __res_state(); __close_nameservers(); __res_sync = NULL; #ifdef __UCLIBC_HAS_IPV6__ diff --git a/test/.gitignore b/test/.gitignore index ec04628d7..85161daf4 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -40,6 +40,8 @@ dlopen/test[1-3] dlopen/testscope inet/bug-if1 inet/gethost_r-align +inet/gethostid +inet/getnetent inet/if_nameindex inet/tst-aton inet/tst-ether_aton @@ -47,9 +49,8 @@ inet/tst-ethers inet/tst-ethers-line inet/tst-network inet/tst-ntoa +inet/tst-res inet/tst-sock-nonblock -inet/gethostid -inet/getnetent librt/shmtest locale/bug-iconv-trans locale/bug-usesetlocale diff --git a/test/Test.mak b/test/Test.mak index 76332fa47..ee43a0fcd 100644 --- a/test/Test.mak +++ b/test/Test.mak @@ -109,7 +109,7 @@ $(G_TARGETS): $(U_TARGET_SRCS) $(MAKE_SRCS) $(Q)$(HOSTCC) $(filter-out $(HOST_CFLAGS-OMIT-$(patsubst %_glibc,%,$@)),$(HOST_CFLAGS)) \ $(CFLAGS_$(notdir $(CURDIR))) $(CFLAGS_$(patsubst %_glibc,%,$@)) \ -c $(patsubst %_glibc,%,$@).c -o $@.o - $(Q)$(HOSTCC) $(HOST_LDFLAGS) $@.o -o $@ $(EXTRA_LDFLAGS) $(LDFLAGS_$(patsubst %_glibc,%,$@)) + $(Q)$(HOSTCC) $(HOST_LDFLAGS) $@.o -o $@ $(EXTRA_LDFLAGS) $(LDFLAGS_$(patsubst %_glibc,%,$@)) $(LDFLAGS_$@) shell_%: diff --git a/test/inet/Makefile.in b/test/inet/Makefile.in index 0710d3d71..2c84729bf 100644 --- a/test/inet/Makefile.in +++ b/test/inet/Makefile.in @@ -7,5 +7,11 @@ TESTS_DISABLED := bug-if1 gethost_r-align gethostid if_nameindex tst-aton \ endif ifeq ($(UCLIBC_HAS_SOCKET)$(UCLIBC_HAS_IPV4)$(UCLIBC_HAS_IPV6),) -TESTS_DISABLED := tst-ether_aton tst-ethers tst-ethers-line +TESTS_DISABLED += tst-ether_aton tst-ethers tst-ethers-line +endif + +ifeq ($(UCLIBC_HAS_RESOLVER_SUPPORT),) +TESTS_DISABLED += tst-res +else +LDFLAGS_tst-res_glibc := -lresolv # assume it's glibc or somebody with that lib endif diff --git a/test/inet/tst-res.c b/test/inet/tst-res.c new file mode 100644 index 000000000..ad9de789e --- /dev/null +++ b/test/inet/tst-res.c @@ -0,0 +1,42 @@ +#include <stdlib.h> +#include <assert.h> +#include <sys/types.h> +#include <netinet/in.h> +#include <arpa/nameser.h> +#include <resolv.h> +#include <netdb.h> + +int main(int argc, char **argv) +{ + int r; + struct __res_state state; + + r = res_ninit(&state); + if (r) { + herror("ninit"); + abort(); + } + r = res_init(); + if (r) { + herror("init"); + abort(); + } + + res_close(); +#ifdef __UCLIBC__ + /* assume there is at least one resolver configured */ + assert (state._u._ext.nscount > 0); +#else + assert (state._u._ext.nscount == 0); +#endif + assert (state.options & RES_INIT); + res_nclose(&state); +#ifdef __UCLIBC__ + /* We wipe the whole thing */ + assert ((state.options & RES_INIT) == 0); +#endif + assert (state._u._ext.nscount == 0); + + return 0; +} + |