[BACK]Return to res_init.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libc / resolv

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/lib/libc/resolv/res_init.c between version 1.31 and 1.32

version 1.31, 2017/04/19 22:21:07 version 1.32, 2021/09/30 12:35:55
Line 190  res_ninit(res_state statp) {
Line 190  res_ninit(res_state statp) {
         return (__res_vinit(statp, 0));          return (__res_vinit(statp, 0));
 }  }
   
   static int
   __res_kqinit(res_state statp)
   {
           struct kevent kc;
           struct __res_state_ext *ext = statp->_u._ext.ext;
   
           ext->kq = kqueue1(O_CLOEXEC);
           ext->kqpid = getpid();
           EV_SET(&kc, ext->resfd, EVFILT_VNODE,
               EV_ADD|EV_ENABLE|EV_CLEAR, NOTE_DELETE|NOTE_WRITE| NOTE_EXTEND|
               NOTE_ATTRIB|NOTE_LINK|NOTE_RENAME|NOTE_REVOKE, 0, 0);
           (void)kevent(ext->kq, &kc, 1, NULL, 0, &ts);
           return ext->kq;
   }
   
 /*% This function has to be reachable by res_data.c but not publically. */  /*% This function has to be reachable by res_data.c but not publically. */
 int  int
 __res_vinit(res_state statp, int preinit) {  __res_vinit(res_state statp, int preinit) {
Line 346  __res_vinit(res_state statp, int preinit
Line 361  __res_vinit(res_state statp, int preinit
         nserv = 0;          nserv = 0;
         if ((fp = fopen(__res_conf_name, "re")) != NULL) {          if ((fp = fopen(__res_conf_name, "re")) != NULL) {
             struct stat st;              struct stat st;
             struct kevent kc;  
   
             /* read the config file */              /* read the config file */
             while (fgets(buf, (int)sizeof(buf), fp) != NULL) {              while (fgets(buf, (int)sizeof(buf), fp) != NULL) {
Line 500  __res_vinit(res_state statp, int preinit
Line 514  __res_vinit(res_state statp, int preinit
             if (fstat(statp->_u._ext.ext->resfd, &st) != -1)              if (fstat(statp->_u._ext.ext->resfd, &st) != -1)
                     __res_conf_time = statp->_u._ext.ext->res_conf_time =                      __res_conf_time = statp->_u._ext.ext->res_conf_time =
                         st.st_mtimespec;                          st.st_mtimespec;
             statp->_u._ext.ext->kq = kqueue1(O_CLOEXEC);              __res_kqinit(statp);
             EV_SET(&kc, statp->_u._ext.ext->resfd, EVFILT_VNODE,  
                 EV_ADD|EV_ENABLE|EV_CLEAR, NOTE_DELETE|NOTE_WRITE| NOTE_EXTEND|  
                 NOTE_ATTRIB|NOTE_LINK|NOTE_RENAME|NOTE_REVOKE, 0, 0);  
             (void)kevent(statp->_u._ext.ext->kq, &kc, 1, NULL, 0, &ts);  
         } else {          } else {
             statp->_u._ext.ext->kq = -1;              statp->_u._ext.ext->kq = -1;
             statp->_u._ext.ext->resfd = -1;              statp->_u._ext.ext->resfd = -1;
Line 573  res_check(res_state statp, struct timesp
Line 583  res_check(res_state statp, struct timesp
                 struct kevent ke;                  struct kevent ke;
                 if (statp->_u._ext.ext->kq == -1)                  if (statp->_u._ext.ext->kq == -1)
                         goto out;                          goto out;
                   if (statp->_u._ext.ext->kqpid != getpid() &&
                       __res_kqinit(statp) == -1)
                           goto out;
   
                 switch (kevent(statp->_u._ext.ext->kq, NULL, 0, &ke, 1, &ts)) {                  switch (kevent(statp->_u._ext.ext->kq, NULL, 0, &ke, 1, &ts)) {
                 case 0:                  case 0:
Line 812  res_nclose(res_state statp)
Line 825  res_nclose(res_state statp)
 void  void
 res_ndestroy(res_state statp)  res_ndestroy(res_state statp)
 {  {
           struct __res_state_ext *ext = statp->_u._ext.ext;
         res_nclose(statp);          res_nclose(statp);
         if (statp->_u._ext.ext != NULL) {          if (ext != NULL) {
                 if (statp->_u._ext.ext->kq != -1)                  if (ext->kq != -1 && ext->kqpid == getpid())
                         (void)close(statp->_u._ext.ext->kq);                          (void)close(ext->kq);
                 if (statp->_u._ext.ext->resfd != -1)                  if (ext->resfd != -1)
                         (void)close(statp->_u._ext.ext->resfd);                          (void)close(ext->resfd);
                 free(statp->_u._ext.ext);                  free(ext);
                 statp->_u._ext.ext = NULL;                  statp->_u._ext.ext = NULL;
         }          }
         if (statp->_rnd != NULL) {          if (statp->_rnd != NULL) {

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.32

CVSweb <webmaster@jp.NetBSD.org>