* may copy or modify Sun RPC without charge, but are not authorized
* to license or distribute it to anyone else except as part of a product or
* program developed by the user.
- *
+ *
* SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
+ *
* Sun RPC is provided with no support and without any obligation on the
* part of Sun Microsystems, Inc. to assist in its use, correction,
* modification or enhancement.
- *
+ *
* SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
* INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
* OR ANY PART THEREOF.
- *
+ *
* In no event will Sun Microsystems, Inc. be liable for any lost revenue
* or profits or other special, indirect and consequential damages, even if
* Sun has been advised of the possibility of such damages.
- *
+ *
* Sun Microsystems, Inc.
* 2550 Garcia Avenue
* Mountain View, California 94043
#include <afsconfig.h>
#include <afs/param.h>
-RCSID("$Header$");
-
#ifndef NeXT
+#ifndef KERNEL
+# include <roken.h>
+#endif
+
+#include "rx.h"
+
/*
* xdr_array.c, Generic XDR routines impelmentation.
*
* arrays. See xdr.h for more info on the interface to xdr.
*/
-#ifdef KERNEL
+#if defined(KERNEL) && !defined(UKERNEL)
+
#include <sys/param.h>
#ifdef AFS_LINUX20_ENV
#include "h/string.h"
#define bzero(A,C) memset((A), 0, (C))
#endif
#else
+#ifndef AFS_DARWIN90_ENV
#include <sys/systm.h>
+#endif
#endif /* AFS_LINUX20_ENV */
#else
#include <stdio.h>
+#include <string.h>
#endif
#include "xdr.h"
* elsize is the size (in bytes) of each element, and elproc is the
* xdr procedure to call to handle each element of the array.
*/
-/*
+/*
caddr_t *addrp; * array pointer *
u_int *sizep; * number of elements *
u_int maxsize; * max numberof elements *
xdrproc_t elproc; * xdr routine to handle each element *
*/
-bool_t xdr_array(register XDR *xdrs, caddr_t *addrp, u_int *sizep,
- u_int maxsize, u_int elsize, xdrproc_t elproc)
+bool_t
+xdr_array(XDR * xdrs, caddr_t * addrp, u_int * sizep, u_int maxsize,
+ u_int elsize, xdrproc_t elproc)
{
- register u_int i;
- register caddr_t target = *addrp;
- register u_int c; /* the actual element count */
- register bool_t stat = TRUE;
- register u_int nodesize;
+ u_int i;
+ caddr_t target = *addrp;
+ u_int c; /* the actual element count */
+ bool_t stat = TRUE;
+ u_int nodesize;
- i = ((~0) >> 1) / elsize;
- if (maxsize > i) maxsize = i;
+ /* FIXME: this does not look correct: MSVC 6 computes -1 / elsize here */
+ i = ((~0) >> 1) / elsize;
+ if (maxsize > i)
+ maxsize = i;
- /* like strings, arrays are really counted arrays */
- if (! xdr_u_int(xdrs, sizep)) {
- return (FALSE);
- }
- c = *sizep;
- if ((c > maxsize) && (xdrs->x_op != XDR_FREE)) {
+ /* like strings, arrays are really counted arrays */
+ if (!xdr_u_int(xdrs, sizep)) {
+ return (FALSE);
+ }
+ c = *sizep;
+ if ((c > maxsize) && (xdrs->x_op != XDR_FREE)) {
+ return (FALSE);
+ }
+ nodesize = c * elsize;
+
+ /*
+ * if we are deserializing, we may need to allocate an array.
+ * We also save time by checking for a null array if we are freeing.
+ */
+ if (target == NULL)
+ switch (xdrs->x_op) {
+ case XDR_DECODE:
+ if (c == 0)
+ return (TRUE);
+ *addrp = target = (caddr_t)osi_alloc(nodesize);
+ if (target == NULL) {
return (FALSE);
- }
- nodesize = c * elsize;
-
- /*
- * if we are deserializing, we may need to allocate an array.
- * We also save time by checking for a null array if we are freeing.
- */
- if (target == NULL)
- switch (xdrs->x_op) {
- case XDR_DECODE:
- if (c == 0)
- return (TRUE);
- *addrp = target = osi_alloc(nodesize);
- if (target == NULL) {
- return (FALSE);
- }
- memset(target, 0, (u_int)nodesize);
- break;
-
- case XDR_FREE:
- return (TRUE);
- }
-
- /*
- * now we xdr each element of array
- */
- for (i = 0; (i < c) && stat; i++) {
- stat = (*elproc)(xdrs, target, LASTUNSIGNED);
- target += elsize;
- }
+ }
+ memset(target, 0, (u_int) nodesize);
+ break;
+
+ case XDR_FREE:
+ return (TRUE);
- /*
- * the array may need freeing
- */
- if (xdrs->x_op == XDR_FREE) {
- osi_free(*addrp, nodesize);
- *addrp = NULL;
+ case XDR_ENCODE:
+ break;
}
- return (stat);
+
+ /*
+ * now we xdr each element of array
+ */
+ for (i = 0; (i < c) && stat; i++) {
+ stat = (*elproc) (xdrs, target, LASTUNSIGNED);
+ target += elsize;
+ }
+
+ /*
+ * the array may need freeing
+ */
+ if (xdrs->x_op == XDR_FREE) {
+ osi_free(*addrp, nodesize);
+ *addrp = NULL;
+ }
+ return (stat);
}
#endif /* NeXT */