summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libc/inet/resolv.c2
-rw-r--r--test/.gitignore5
-rw-r--r--test/Test.mak2
-rw-r--r--test/inet/Makefile.in8
-rw-r--r--test/inet/tst-res.c42
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;
+}
+