]> andersk Git - nss_nonlocal.git/blobdiff - walk_nss.h
Switch from __nss_next API to __nss_next2 API
[nss_nonlocal.git] / walk_nss.h
index 93af177121ff0ae4d2791de003153729cd2c5b2f..0e45d5b0e7d74dc89a7db135d394ebd66d863254 100644 (file)
@@ -24,8 +24,9 @@
  */
 
 {
-    static service_user *startp = NULL;
-    static void *fct_start = NULL;
+    static bool initialized = false;
+    static service_user *startp;
+    static void *fct_start;
 
     service_user *nip;
     union {
     } fct;
     int old_errno = errno;
 
-    if (fct_start == NULL &&
-       w.lookup(&startp, w.fct_name, &fct_start) != 0) {
-       *w.status = NSS_STATUS_UNAVAIL;
-       goto walk_nss_out;
+    if (!initialized) {
+       if (w.lookup2(&startp, w.fct_name, NULL, &fct_start) != 0) {
+           *w.status = NSS_STATUS_UNAVAIL;
+           goto walk_nss_out;
+       }
+       __sync_synchronize();
+       initialized = true;
     }
 
     nip = startp;
@@ -75,7 +79,8 @@
            }
            goto walk_nss_morebuf;
        }
-    } while (__nss_next(&nip, w.fct_name, &fct.ptr, *w.status, 0) == 0);
+    } while (__nss_next2(&nip, w.fct_name, NULL, &fct.ptr, *w.status,
+                        w.all_values) == 0);
 
     if (w.buf != NULL && *w.status != NSS_STATUS_SUCCESS) {
        free(*w.buf);
This page took 0.10514 seconds and 4 git commands to generate.