summary refs log tree commit diff
path: root/nss/getXXbyYY_r.c
diff options
context:
space:
mode:
authorAndreas Jaeger <aj@suse.de>2002-11-10 11:06:36 +0000
committerAndreas Jaeger <aj@suse.de>2002-11-10 11:06:36 +0000
commitfb776f3ef3b2b7eaf7e92305b8b2dc480f31f3ff (patch)
treeb6d3b7b6350601fbb8f6cbf8f820d25c0ab59cdb /nss/getXXbyYY_r.c
parent55c303acb873e478540042612f1028139454d4a4 (diff)
downloadglibc-fb776f3ef3b2b7eaf7e92305b8b2dc480f31f3ff.tar.gz
glibc-fb776f3ef3b2b7eaf7e92305b8b2dc480f31f3ff.tar.xz
glibc-fb776f3ef3b2b7eaf7e92305b8b2dc480f31f3ff.zip
* nss/getXXent.c (GETFUNC_NAME): Use union type to avoid strict
aliasing problem. 
* nss/getXXbyYY_r.c (INTERNAL): Likewise. 
* nss/getnssent_r.c (__nss_getent_r): Likewise. 
(__nss_setent): Likewise. 
(__nss_getent_r): Likewise. 
* inet/getnetgrent_r.c (innetgr): Likewise. 
(__internal_setnetgrent_reuse): Likewise. 
(internal_getnetgrent_r): Likewise. 
* inet/ether_hton.c (ether_hostton): Likewise. 
* inet/ether_ntoh.c (ether_ntohost): Likewise. 
* sunrpc/netname.c (netname2user): Likewise. 
* sunrpc/publickey.c (getpublickey): Likewise. 
(getsecretkey): Likewise.
Diffstat (limited to 'nss/getXXbyYY_r.c')
-rw-r--r--nss/getXXbyYY_r.c45
1 files changed, 25 insertions, 20 deletions
diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c
index ca81cf4c8f..5bb28f7141 100644
--- a/nss/getXXbyYY_r.c
+++ b/nss/getXXbyYY_r.c
@@ -32,30 +32,30 @@
 #endif
 /*******************************************************************\
 |* Here we assume several symbols to be defined:		   *|
-|* 								   *|
+|*								   *|
 |* LOOKUP_TYPE   - the return type of the function		   *|
-|* 								   *|
+|*								   *|
 |* FUNCTION_NAME - name of the non-reentrant function		   *|
-|* 								   *|
+|*								   *|
 |* DATABASE_NAME - name of the database the function accesses	   *|
 |*		   (e.g., host, services, ...)			   *|
-|* 								   *|
+|*								   *|
 |* ADD_PARAMS    - additional parameter, can vary in number	   *|
-|* 								   *|
+|*								   *|
 |* ADD_VARIABLES - names of additional parameter		   *|
-|* 								   *|
+|*								   *|
 |* Optionally the following vars can be defined:		   *|
-|* 								   *|
+|*								   *|
 |* NEED_H_ERRNO  - an extra parameter will be passed to point to   *|
 |*		   the global `h_errno' variable.		   *|
-|* 								   *|
+|*								   *|
 |* NEED__RES     - the global _res variable might be used so we	   *|
-|* 		   will have to initialize it if necessary	   *|
-|* 								   *|
+|*		   will have to initialize it if necessary	   *|
+|*								   *|
 |* PREPROCESS    - code run before anything else		   *|
-|* 								   *|
+|*								   *|
 |* POSTPROCESS   - code run after the lookup			   *|
-|* 								   *|
+|*								   *|
 \*******************************************************************/
 
 /* To make the real sources a bit prettier.  */
@@ -130,7 +130,12 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
   static service_user *startp;
   static lookup_function start_fct;
   service_user *nip;
-  lookup_function fct;
+  union
+  {
+    lookup_function l;
+    void *ptr;
+  } fct;
+
   int no_more;
   enum nss_status status = NSS_STATUS_UNAVAIL;
 #ifdef USE_NSCD
@@ -175,13 +180,13 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
 
   if (startp == NULL)
     {
-      no_more = DB_LOOKUP_FCT (&nip, REENTRANT_NAME_STRING, (void **) &fct);
+      no_more = DB_LOOKUP_FCT (&nip, REENTRANT_NAME_STRING, &fct.ptr);
       if (no_more)
 	startp = (service_user *) -1l;
       else
 	{
 	  startp = nip;
-	  start_fct = fct;
+	  start_fct = fct.l;
 
 #ifdef NEED__RES
 	  /* The resolver code will really be used so we have to
@@ -201,7 +206,7 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
     }
   else
     {
-      fct = start_fct;
+      fct.l = start_fct;
       no_more = (nip = startp) == (service_user *) -1l;
     }
 
@@ -211,8 +216,8 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
       any_service = true;
 #endif
 
-      status = DL_CALL_FCT (fct, (ADD_VARIABLES, resbuf, buffer, buflen,
-				   &errno H_ERRNO_VAR));
+      status = DL_CALL_FCT (fct.l, (ADD_VARIABLES, resbuf, buffer, buflen,
+				    &errno H_ERRNO_VAR));
 
       /* The status is NSS_STATUS_TRYAGAIN and errno is ERANGE the
 	 provided buffer is too small.  In this case we should give
@@ -227,7 +232,7 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
 	break;
 
       no_more = __nss_next (&nip, REENTRANT_NAME_STRING,
-			    (void **) &fct, status, 0);
+			    &fct.ptr, status, 0);
     }
 
 #ifdef HANDLE_DIGITS_DOTS
@@ -262,7 +267,7 @@ OLD (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
 		      size_t buflen, LOOKUP_TYPE **result H_ERRNO_PARM)
 {
   int ret = INTERNAL (REENTRANT_NAME) (ADD_VARIABLES, resbuf, buffer,
-  				       buflen, result H_ERRNO_VAR);
+				       buflen, result H_ERRNO_VAR);
 
   if (ret != 0)
     ret = -1;