mirror of git://sourceware.org/git/glibc.git
nss: Clean up function pointer/void * unions
All our targets support casts between function pointers and void *, so we might as well use them. This change was largely auto-generated, with the following prompts. @getXXbyYY_r.c Remove the use of the `fct` union and replace it by pointer casts. Apply the same change to ether_* getnetgrent_r getnssent_r netname publickey . Do not use explicit `*` in function pointer calls. Replace `(*((lookup_function) fct))` and similar with `((lookup_function) fct)`. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
6463953fec
commit
a025a9deef
|
|
@ -30,24 +30,21 @@ int
|
||||||
ether_hostton (const char *hostname, struct ether_addr *addr)
|
ether_hostton (const char *hostname, struct ether_addr *addr)
|
||||||
{
|
{
|
||||||
nss_action_list nip;
|
nss_action_list nip;
|
||||||
union
|
void *fct;
|
||||||
{
|
|
||||||
lookup_function f;
|
|
||||||
void *ptr;
|
|
||||||
} fct;
|
|
||||||
int no_more;
|
int no_more;
|
||||||
enum nss_status status = NSS_STATUS_UNAVAIL;
|
enum nss_status status = NSS_STATUS_UNAVAIL;
|
||||||
struct etherent etherent;
|
struct etherent etherent;
|
||||||
|
|
||||||
no_more = __nss_ethers_lookup2 (&nip, "gethostton_r", NULL, &fct.ptr);
|
no_more = __nss_ethers_lookup2 (&nip, "gethostton_r", NULL, &fct);
|
||||||
|
|
||||||
while (no_more == 0)
|
while (no_more == 0)
|
||||||
{
|
{
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
|
|
||||||
status = (*fct.f) (hostname, ðerent, buffer, sizeof buffer, &errno);
|
status = ((lookup_function) fct) (hostname, ðerent, buffer,
|
||||||
|
sizeof buffer, &errno);
|
||||||
|
|
||||||
no_more = __nss_next2 (&nip, "gethostton_r", NULL, &fct.ptr, status, 0);
|
no_more = __nss_next2 (&nip, "gethostton_r", NULL, &fct, status, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status == NSS_STATUS_SUCCESS)
|
if (status == NSS_STATUS_SUCCESS)
|
||||||
|
|
|
||||||
|
|
@ -31,24 +31,21 @@ int
|
||||||
ether_ntohost (char *hostname, const struct ether_addr *addr)
|
ether_ntohost (char *hostname, const struct ether_addr *addr)
|
||||||
{
|
{
|
||||||
nss_action_list nip;
|
nss_action_list nip;
|
||||||
union
|
void *fct;
|
||||||
{
|
|
||||||
lookup_function f;
|
|
||||||
void *ptr;
|
|
||||||
} fct;
|
|
||||||
int no_more;
|
int no_more;
|
||||||
enum nss_status status = NSS_STATUS_UNAVAIL;
|
enum nss_status status = NSS_STATUS_UNAVAIL;
|
||||||
struct etherent etherent;
|
struct etherent etherent;
|
||||||
|
|
||||||
no_more = __nss_ethers_lookup2 (&nip, "getntohost_r", NULL, &fct.ptr);
|
no_more = __nss_ethers_lookup2 (&nip, "getntohost_r", NULL, &fct);
|
||||||
|
|
||||||
while (no_more == 0)
|
while (no_more == 0)
|
||||||
{
|
{
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
|
|
||||||
status = (*fct.f) (addr, ðerent, buffer, sizeof buffer, &errno);
|
status = ((lookup_function) fct) (addr, ðerent, buffer,
|
||||||
|
sizeof buffer, &errno);
|
||||||
|
|
||||||
no_more = __nss_next2 (&nip, "getntohost_r", NULL, &fct.ptr, status, 0);
|
no_more = __nss_next2 (&nip, "getntohost_r", NULL, &fct, status, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status == NSS_STATUS_SUCCESS)
|
if (status == NSS_STATUS_SUCCESS)
|
||||||
|
|
|
||||||
|
|
@ -189,11 +189,7 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
|
||||||
LOOKUP_TYPE mergegrp;
|
LOOKUP_TYPE mergegrp;
|
||||||
char *mergebuf = NULL;
|
char *mergebuf = NULL;
|
||||||
char *endptr = NULL;
|
char *endptr = NULL;
|
||||||
union
|
void *fct;
|
||||||
{
|
|
||||||
lookup_function l;
|
|
||||||
void *ptr;
|
|
||||||
} fct;
|
|
||||||
int no_more, err;
|
int no_more, err;
|
||||||
enum nss_status status = NSS_STATUS_UNAVAIL;
|
enum nss_status status = NSS_STATUS_UNAVAIL;
|
||||||
#ifdef USE_NSCD
|
#ifdef USE_NSCD
|
||||||
|
|
@ -258,7 +254,7 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
no_more = DB_LOOKUP_FCT (&nip, REENTRANT_NAME_STRING,
|
no_more = DB_LOOKUP_FCT (&nip, REENTRANT_NAME_STRING,
|
||||||
REENTRANT2_NAME_STRING, &fct.ptr);
|
REENTRANT2_NAME_STRING, &fct);
|
||||||
|
|
||||||
while (no_more == 0)
|
while (no_more == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -266,8 +262,9 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
|
||||||
any_service = true;
|
any_service = true;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
status = DL_CALL_FCT (fct.l, (ADD_VARIABLES, resbuf, buffer, buflen,
|
status = DL_CALL_FCT (((lookup_function) fct),
|
||||||
&errno H_ERRNO_VAR EXTRA_VARIABLES));
|
(ADD_VARIABLES, resbuf, buffer, buflen,
|
||||||
|
&errno H_ERRNO_VAR EXTRA_VARIABLES));
|
||||||
|
|
||||||
/* The status is NSS_STATUS_TRYAGAIN and errno is ERANGE the
|
/* The status is NSS_STATUS_TRYAGAIN and errno is ERANGE the
|
||||||
provided buffer is too small. In this case we should give
|
provided buffer is too small. In this case we should give
|
||||||
|
|
@ -337,7 +334,7 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
|
||||||
}
|
}
|
||||||
|
|
||||||
no_more = __nss_next2 (&nip, REENTRANT_NAME_STRING,
|
no_more = __nss_next2 (&nip, REENTRANT_NAME_STRING,
|
||||||
REENTRANT2_NAME_STRING, &fct.ptr, status, 0);
|
REENTRANT2_NAME_STRING, &fct, status, 0);
|
||||||
}
|
}
|
||||||
free (mergebuf);
|
free (mergebuf);
|
||||||
mergebuf = NULL;
|
mergebuf = NULL;
|
||||||
|
|
|
||||||
|
|
@ -85,11 +85,7 @@ static int
|
||||||
__internal_setnetgrent_reuse (const char *group, struct __netgrent *datap,
|
__internal_setnetgrent_reuse (const char *group, struct __netgrent *datap,
|
||||||
int *errnop)
|
int *errnop)
|
||||||
{
|
{
|
||||||
union
|
void *fct;
|
||||||
{
|
|
||||||
enum nss_status (*f) (const char *, struct __netgrent *);
|
|
||||||
void *ptr;
|
|
||||||
} fct;
|
|
||||||
enum nss_status status = NSS_STATUS_UNAVAIL;
|
enum nss_status status = NSS_STATUS_UNAVAIL;
|
||||||
struct name_list *new_elem;
|
struct name_list *new_elem;
|
||||||
|
|
||||||
|
|
@ -97,16 +93,18 @@ __internal_setnetgrent_reuse (const char *group, struct __netgrent *datap,
|
||||||
endnetgrent_hook (datap);
|
endnetgrent_hook (datap);
|
||||||
|
|
||||||
/* Cycle through all the services and run their setnetgrent functions. */
|
/* Cycle through all the services and run their setnetgrent functions. */
|
||||||
int no_more = setup (&fct.ptr, &datap->nip);
|
int no_more = setup (&fct, &datap->nip);
|
||||||
while (! no_more)
|
while (! no_more)
|
||||||
{
|
{
|
||||||
assert (datap->data == NULL);
|
assert (datap->data == NULL);
|
||||||
|
|
||||||
/* Ignore status, we force check in `__nss_next2'. */
|
/* Ignore status, we force check in `__nss_next2'. */
|
||||||
status = DL_CALL_FCT (*fct.f, (group, datap));
|
status = DL_CALL_FCT (((enum nss_status (*) (const char *,
|
||||||
|
struct __netgrent *)) fct),
|
||||||
|
(group, datap));
|
||||||
|
|
||||||
nss_action_list old_nip = datap->nip;
|
nss_action_list old_nip = datap->nip;
|
||||||
no_more = __nss_next2 (&datap->nip, "setnetgrent", NULL, &fct.ptr,
|
no_more = __nss_next2 (&datap->nip, "setnetgrent", NULL, &fct,
|
||||||
status, 0);
|
status, 0);
|
||||||
|
|
||||||
if (status == NSS_STATUS_SUCCESS && ! no_more)
|
if (status == NSS_STATUS_SUCCESS && ! no_more)
|
||||||
|
|
@ -372,11 +370,7 @@ innetgr (const char *netgroup, const char *host, const char *user,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
union
|
void *setfct;
|
||||||
{
|
|
||||||
enum nss_status (*f) (const char *, struct __netgrent *);
|
|
||||||
void *ptr;
|
|
||||||
} setfct;
|
|
||||||
void (*endfct) (struct __netgrent *);
|
void (*endfct) (struct __netgrent *);
|
||||||
int (*getfct) (struct __netgrent *, char *, size_t, int *);
|
int (*getfct) (struct __netgrent *, char *, size_t, int *);
|
||||||
struct __netgrent entry;
|
struct __netgrent entry;
|
||||||
|
|
@ -391,14 +385,16 @@ innetgr (const char *netgroup, const char *host, const char *user,
|
||||||
the work during one walk through the service list. */
|
the work during one walk through the service list. */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
int no_more = setup (&setfct.ptr, &entry.nip);
|
int no_more = setup (&setfct, &entry.nip);
|
||||||
while (! no_more)
|
while (! no_more)
|
||||||
{
|
{
|
||||||
assert (entry.data == NULL);
|
assert (entry.data == NULL);
|
||||||
|
|
||||||
/* Open netgroup. */
|
/* Open netgroup. */
|
||||||
enum nss_status status = DL_CALL_FCT (*setfct.f,
|
enum nss_status status
|
||||||
(current_group, &entry));
|
= DL_CALL_FCT (((enum nss_status (*) (const char *,
|
||||||
|
struct __netgrent *))
|
||||||
|
setfct), (current_group, &entry));
|
||||||
|
|
||||||
if (status == NSS_STATUS_SUCCESS
|
if (status == NSS_STATUS_SUCCESS
|
||||||
&& (getfct = __nss_lookup_function (entry.nip, "getnetgrent_r"))
|
&& (getfct = __nss_lookup_function (entry.nip, "getnetgrent_r"))
|
||||||
|
|
@ -474,7 +470,7 @@ innetgr (const char *netgroup, const char *host, const char *user,
|
||||||
|
|
||||||
/* Look for the next service. */
|
/* Look for the next service. */
|
||||||
no_more = __nss_next2 (&entry.nip, "setnetgrent", NULL,
|
no_more = __nss_next2 (&entry.nip, "setnetgrent", NULL,
|
||||||
&setfct.ptr, status, 0);
|
&setfct, status, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result == 0 && entry.needed_groups != NULL)
|
if (result == 0 && entry.needed_groups != NULL)
|
||||||
|
|
|
||||||
|
|
@ -53,11 +53,7 @@ __nss_setent (const char *func_name, db_lookup_function lookup_fct,
|
||||||
nss_action_list *last_nip, int stayopen, int *stayopen_tmp,
|
nss_action_list *last_nip, int stayopen, int *stayopen_tmp,
|
||||||
int res)
|
int res)
|
||||||
{
|
{
|
||||||
union
|
void *fct;
|
||||||
{
|
|
||||||
setent_function f;
|
|
||||||
void *ptr;
|
|
||||||
} fct;
|
|
||||||
int no_more;
|
int no_more;
|
||||||
|
|
||||||
struct resolv_context *res_ctx = NULL;
|
struct resolv_context *res_ctx = NULL;
|
||||||
|
|
@ -73,7 +69,7 @@ __nss_setent (const char *func_name, db_lookup_function lookup_fct,
|
||||||
|
|
||||||
/* Cycle through the services and run their `setXXent' functions until
|
/* Cycle through the services and run their `setXXent' functions until
|
||||||
we find an available service. */
|
we find an available service. */
|
||||||
no_more = setup (func_name, lookup_fct, &fct.ptr, nip,
|
no_more = setup (func_name, lookup_fct, &fct, nip,
|
||||||
startp, 1);
|
startp, 1);
|
||||||
while (! no_more)
|
while (! no_more)
|
||||||
{
|
{
|
||||||
|
|
@ -81,9 +77,9 @@ __nss_setent (const char *func_name, db_lookup_function lookup_fct,
|
||||||
enum nss_status status;
|
enum nss_status status;
|
||||||
|
|
||||||
if (stayopen_tmp)
|
if (stayopen_tmp)
|
||||||
status = DL_CALL_FCT (fct.f, (*stayopen_tmp));
|
status = DL_CALL_FCT (((setent_function) fct), (*stayopen_tmp));
|
||||||
else
|
else
|
||||||
status = DL_CALL_FCT (fct.f, (0));
|
status = DL_CALL_FCT (((setent_function) fct), (0));
|
||||||
|
|
||||||
|
|
||||||
/* This is a special-case. When [SUCCESS=merge] is in play,
|
/* This is a special-case. When [SUCCESS=merge] is in play,
|
||||||
|
|
@ -95,7 +91,7 @@ __nss_setent (const char *func_name, db_lookup_function lookup_fct,
|
||||||
if (nss_next_action (*nip, status) == NSS_ACTION_MERGE)
|
if (nss_next_action (*nip, status) == NSS_ACTION_MERGE)
|
||||||
no_more = 1;
|
no_more = 1;
|
||||||
else
|
else
|
||||||
no_more = __nss_next2 (nip, func_name, NULL, &fct.ptr, status, 0);
|
no_more = __nss_next2 (nip, func_name, NULL, &fct, status, 0);
|
||||||
|
|
||||||
if (is_last_nip)
|
if (is_last_nip)
|
||||||
*last_nip = *nip;
|
*last_nip = *nip;
|
||||||
|
|
@ -113,11 +109,7 @@ __nss_endent (const char *func_name, db_lookup_function lookup_fct,
|
||||||
nss_action_list *nip, nss_action_list *startp,
|
nss_action_list *nip, nss_action_list *startp,
|
||||||
nss_action_list *last_nip, int res)
|
nss_action_list *last_nip, int res)
|
||||||
{
|
{
|
||||||
union
|
void *fct;
|
||||||
{
|
|
||||||
endent_function f;
|
|
||||||
void *ptr;
|
|
||||||
} fct;
|
|
||||||
int no_more;
|
int no_more;
|
||||||
|
|
||||||
struct resolv_context *res_ctx = NULL;
|
struct resolv_context *res_ctx = NULL;
|
||||||
|
|
@ -132,17 +124,17 @@ __nss_endent (const char *func_name, db_lookup_function lookup_fct,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cycle through all the services and run their endXXent functions. */
|
/* Cycle through all the services and run their endXXent functions. */
|
||||||
no_more = setup (func_name, lookup_fct, &fct.ptr, nip, startp, 1);
|
no_more = setup (func_name, lookup_fct, &fct, nip, startp, 1);
|
||||||
while (! no_more)
|
while (! no_more)
|
||||||
{
|
{
|
||||||
/* Ignore status, we force check in __NSS_NEXT. */
|
/* Ignore status, we force check in __NSS_NEXT. */
|
||||||
DL_CALL_FCT (fct.f, ());
|
DL_CALL_FCT (((endent_function) fct), ());
|
||||||
|
|
||||||
if (*nip == *last_nip)
|
if (*nip == *last_nip)
|
||||||
/* We have processed all services which were used. */
|
/* We have processed all services which were used. */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
no_more = __nss_next2 (nip, func_name, NULL, &fct.ptr, 0, 1);
|
no_more = __nss_next2 (nip, func_name, NULL, &fct, 0, 1);
|
||||||
}
|
}
|
||||||
*last_nip = *nip = NULL;
|
*last_nip = *nip = NULL;
|
||||||
|
|
||||||
|
|
@ -159,11 +151,7 @@ __nss_getent_r (const char *getent_func_name,
|
||||||
void *resbuf, char *buffer, size_t buflen,
|
void *resbuf, char *buffer, size_t buflen,
|
||||||
void **result, int *h_errnop)
|
void **result, int *h_errnop)
|
||||||
{
|
{
|
||||||
union
|
void *fct;
|
||||||
{
|
|
||||||
getent_function f;
|
|
||||||
void *ptr;
|
|
||||||
} fct;
|
|
||||||
int no_more;
|
int no_more;
|
||||||
enum nss_status status;
|
enum nss_status status;
|
||||||
|
|
||||||
|
|
@ -185,13 +173,13 @@ __nss_getent_r (const char *getent_func_name,
|
||||||
/* Run through available functions, starting with the same function last
|
/* Run through available functions, starting with the same function last
|
||||||
run. We will repeat each function as long as it succeeds, and then go
|
run. We will repeat each function as long as it succeeds, and then go
|
||||||
on to the next service action. */
|
on to the next service action. */
|
||||||
no_more = setup (getent_func_name, lookup_fct, &fct.ptr, nip,
|
no_more = setup (getent_func_name, lookup_fct, &fct, nip,
|
||||||
startp, 0);
|
startp, 0);
|
||||||
while (! no_more)
|
while (! no_more)
|
||||||
{
|
{
|
||||||
int is_last_nip = *nip == *last_nip;
|
int is_last_nip = *nip == *last_nip;
|
||||||
|
|
||||||
status = DL_CALL_FCT (fct.f,
|
status = DL_CALL_FCT (((getent_function) fct),
|
||||||
(resbuf, buffer, buflen, &errno, &h_errno));
|
(resbuf, buffer, buflen, &errno, &h_errno));
|
||||||
|
|
||||||
/* The status is NSS_STATUS_TRYAGAIN and errno is ERANGE the
|
/* The status is NSS_STATUS_TRYAGAIN and errno is ERANGE the
|
||||||
|
|
@ -216,7 +204,7 @@ __nss_getent_r (const char *getent_func_name,
|
||||||
&& nss_next_action (*nip, status) == NSS_ACTION_MERGE)
|
&& nss_next_action (*nip, status) == NSS_ACTION_MERGE)
|
||||||
no_more = 1;
|
no_more = 1;
|
||||||
else
|
else
|
||||||
no_more = __nss_next2 (nip, getent_func_name, NULL, &fct.ptr,
|
no_more = __nss_next2 (nip, getent_func_name, NULL, &fct,
|
||||||
status, 0);
|
status, 0);
|
||||||
|
|
||||||
if (is_last_nip)
|
if (is_last_nip)
|
||||||
|
|
@ -225,20 +213,16 @@ __nss_getent_r (const char *getent_func_name,
|
||||||
if (! no_more)
|
if (! no_more)
|
||||||
{
|
{
|
||||||
/* Call the `setXXent' function. This wasn't done before. */
|
/* Call the `setXXent' function. This wasn't done before. */
|
||||||
union
|
void *sfct;
|
||||||
{
|
|
||||||
setent_function f;
|
|
||||||
void *ptr;
|
|
||||||
} sfct;
|
|
||||||
|
|
||||||
no_more = __nss_lookup (nip, setent_func_name, NULL, &sfct.ptr);
|
no_more = __nss_lookup (nip, setent_func_name, NULL, &sfct);
|
||||||
|
|
||||||
if (! no_more)
|
if (! no_more)
|
||||||
{
|
{
|
||||||
if (stayopen_tmp)
|
if (stayopen_tmp)
|
||||||
status = DL_CALL_FCT (sfct.f, (*stayopen_tmp));
|
status = DL_CALL_FCT (((setent_function) sfct), (*stayopen_tmp));
|
||||||
else
|
else
|
||||||
status = DL_CALL_FCT (sfct.f, (0));
|
status = DL_CALL_FCT (((setent_function) sfct), (0));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
status = NSS_STATUS_NOTFOUND;
|
status = NSS_STATUS_NOTFOUND;
|
||||||
|
|
|
||||||
|
|
@ -157,21 +157,18 @@ netname2user (const char *netname, uid_t * uidp, gid_t * gidp,
|
||||||
int *gidlenp, gid_t * gidlist)
|
int *gidlenp, gid_t * gidlist)
|
||||||
{
|
{
|
||||||
nss_action_list nip;
|
nss_action_list nip;
|
||||||
union
|
void *fct;
|
||||||
{
|
|
||||||
netname2user_function f;
|
|
||||||
void *ptr;
|
|
||||||
} fct;
|
|
||||||
enum nss_status status = NSS_STATUS_UNAVAIL;
|
enum nss_status status = NSS_STATUS_UNAVAIL;
|
||||||
int no_more;
|
int no_more;
|
||||||
|
|
||||||
no_more = __nss_publickey_lookup2 (&nip, "netname2user", NULL, &fct.ptr);
|
no_more = __nss_publickey_lookup2 (&nip, "netname2user", NULL, &fct);
|
||||||
|
|
||||||
while (!no_more)
|
while (!no_more)
|
||||||
{
|
{
|
||||||
status = (*fct.f) (netname, uidp, gidp, gidlenp, gidlist);
|
status = ((netname2user_function) fct) (netname, uidp, gidp, gidlenp,
|
||||||
|
gidlist);
|
||||||
|
|
||||||
no_more = __nss_next2 (&nip, "netname2user", NULL, &fct.ptr, status, 0);
|
no_more = __nss_next2 (&nip, "netname2user", NULL, &fct, status, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status == NSS_STATUS_SUCCESS;
|
return status == NSS_STATUS_SUCCESS;
|
||||||
|
|
|
||||||
|
|
@ -34,21 +34,17 @@ int
|
||||||
getpublickey (const char *name, char *key)
|
getpublickey (const char *name, char *key)
|
||||||
{
|
{
|
||||||
nss_action_list nip;
|
nss_action_list nip;
|
||||||
union
|
void *fct;
|
||||||
{
|
|
||||||
public_function f;
|
|
||||||
void *ptr;
|
|
||||||
} fct;
|
|
||||||
enum nss_status status = NSS_STATUS_UNAVAIL;
|
enum nss_status status = NSS_STATUS_UNAVAIL;
|
||||||
int no_more;
|
int no_more;
|
||||||
|
|
||||||
no_more = __nss_publickey_lookup2 (&nip, "getpublickey", NULL, &fct.ptr);
|
no_more = __nss_publickey_lookup2 (&nip, "getpublickey", NULL, &fct);
|
||||||
|
|
||||||
while (! no_more)
|
while (! no_more)
|
||||||
{
|
{
|
||||||
status = (*fct.f) (name, key, &errno);
|
status = ((public_function) fct) (name, key, &errno);
|
||||||
|
|
||||||
no_more = __nss_next2 (&nip, "getpublickey", NULL, &fct.ptr, status, 0);
|
no_more = __nss_next2 (&nip, "getpublickey", NULL, &fct, status, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status == NSS_STATUS_SUCCESS;
|
return status == NSS_STATUS_SUCCESS;
|
||||||
|
|
@ -60,21 +56,17 @@ int
|
||||||
getsecretkey (const char *name, char *key, const char *passwd)
|
getsecretkey (const char *name, char *key, const char *passwd)
|
||||||
{
|
{
|
||||||
nss_action_list nip;
|
nss_action_list nip;
|
||||||
union
|
void *fct;
|
||||||
{
|
|
||||||
secret_function f;
|
|
||||||
void *ptr;
|
|
||||||
} fct;
|
|
||||||
enum nss_status status = NSS_STATUS_UNAVAIL;
|
enum nss_status status = NSS_STATUS_UNAVAIL;
|
||||||
int no_more;
|
int no_more;
|
||||||
|
|
||||||
no_more = __nss_publickey_lookup2 (&nip, "getsecretkey", NULL, &fct.ptr);
|
no_more = __nss_publickey_lookup2 (&nip, "getsecretkey", NULL, &fct);
|
||||||
|
|
||||||
while (! no_more)
|
while (! no_more)
|
||||||
{
|
{
|
||||||
status = (*fct.f) (name, key, passwd, &errno);
|
status = ((secret_function) fct) (name, key, passwd, &errno);
|
||||||
|
|
||||||
no_more = __nss_next2 (&nip, "getsecretkey", NULL, &fct.ptr, status, 0);
|
no_more = __nss_next2 (&nip, "getsecretkey", NULL, &fct, status, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status == NSS_STATUS_SUCCESS;
|
return status == NSS_STATUS_SUCCESS;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue