Generic __longjmp.c.
[kopensolaris-gnu/glibc.git] / resolv / res_data.c
index 968f820..1beea1d 100644 (file)
@@ -39,8 +39,6 @@ static const char rcsid[] = "$BINDId: res_data.c,v 8.17 1999/10/13 17:11:31 vixi
 #include <string.h>
 #include <unistd.h>
 
-#undef _res
-
 const char *_res_opcodes[] = {
        "QUERY",
        "IQUERY",
@@ -59,9 +57,10 @@ const char *_res_opcodes[] = {
        "ZONEINIT",
        "ZONEREF",
 };
+libresolv_hidden_data_def (_res_opcodes)
 
 #ifdef BIND_UPDATE
-const char *_res_sectioncodes[] = {
+const char *_res_sectioncodes[] attribute_hidden = {
        "ZONE",
        "PREREQUISITES",
        "UPDATE",
@@ -71,9 +70,9 @@ const char *_res_sectioncodes[] = {
 
 #ifndef __BIND_NOSTATIC
 #ifdef _LIBC
-extern struct __res_state _res;
-#else
 /* The definition has been moved to res_libc.c.  */
+#else
+#undef _res
 struct __res_state _res
 # if defined(__BIND_RES_TEXT)
        = { RES_TIMEOUT, }      /* Motorola, et al. */
@@ -140,14 +139,16 @@ void
 fp_query(const u_char *msg, FILE *file) {
        fp_nquery(msg, PACKETSZ, file);
 }
+libresolv_hidden_def (fp_query)
 
 void
 fp_nquery(const u_char *msg, int len, FILE *file) {
-       if ((_res.options & RES_INIT) == 0 && res_init() == -1)
+       if (__res_maybe_init (&_res, 0) == -1)
                return;
 
        res_pquery(&_res, msg, len, file);
 }
+libresolv_hidden_def (fp_nquery)
 
 int
 res_mkquery(int op,                    /* opcode of query */
@@ -159,7 +160,7 @@ res_mkquery(int op,                 /* opcode of query */
            u_char *buf,                /* buffer to put query */
            int buflen)                 /* size of buffer */
 {
-       if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
+       if (__res_maybe_init (&_res, 1) == -1) {
                RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
                return (-1);
        }
@@ -171,7 +172,7 @@ res_mkquery(int op,                 /* opcode of query */
 #ifdef BIND_UPDATE
 int
 res_mkupdate(ns_updrec *rrecp_in, u_char *buf, int buflen) {
-       if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
+       if (__res_maybe_init (&_res, 1) == -1) {
                RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
                return (-1);
        }
@@ -186,7 +187,7 @@ res_query(const char *name, /* domain name */
          u_char *answer,       /* buffer to put answer */
          int anslen)           /* size of answer buffer */
 {
-       if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
+       if (__res_maybe_init (&_res, 1) == -1) {
                RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
                return (-1);
        }
@@ -205,12 +206,12 @@ res_send_setrhook(res_send_rhook hook) {
 
 int
 res_isourserver(const struct sockaddr_in *inp) {
-       return (res_ourserver_p((const struct sockaddr_in6 *) &_res, inp));
+       return (res_ourserver_p(&_res, (const struct sockaddr_in6 *) inp));
 }
 
 int
 res_send(const u_char *buf, int buflen, u_char *ans, int anssiz) {
-       if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
+       if (__res_maybe_init (&_res, 1) == -1) {
                /* errno should have been set by res_init() in this case. */
                return (-1);
        }
@@ -223,7 +224,7 @@ int
 res_sendsigned(const u_char *buf, int buflen, ns_tsig_key *key,
               u_char *ans, int anssiz)
 {
-       if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
+       if (__res_maybe_init (&_res, 1) == -1) {
                /* errno should have been set by res_init() in this case. */
                return (-1);
        }
@@ -245,13 +246,15 @@ res_close(void) {
        if ((_res.options & RES_INIT) == 0)
          return;
 #endif
-       res_nclose(&_res);
+       /* We don't free the name server addresses because we never
+          did it and it would be done implicitly on shutdown.  */
+       __res_iclose(&_res, false);
 }
 
 #ifdef BIND_UPDATE
 int
 res_update(ns_updrec *rrecp_in) {
-       if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
+       if (__res_maybe_init (&_res, 1) == -1) {
                RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
                return (-1);
        }
@@ -266,7 +269,7 @@ res_search(const char *name,        /* domain name */
           u_char *answer,      /* buffer to put answer */
           int anslen)          /* size of answer */
 {
-       if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
+       if (__res_maybe_init (&_res, 1) == -1) {
                RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
                return (-1);
        }
@@ -281,7 +284,7 @@ res_querydomain(const char *name,
                u_char *answer,         /* buffer to put answer */
                int anslen)             /* size of answer */
 {
-       if ((_res.options & RES_INIT) == 0 && res_init() == -1) {
+       if (__res_maybe_init (&_res, 1) == -1) {
                RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
                return (-1);
        }
@@ -297,6 +300,7 @@ hostalias(const char *name) {
 
        return (res_hostalias(&_res, name, abuf, sizeof abuf));
 }
+libresolv_hidden_def (hostalias)
 
 #ifdef ultrix
 int