From de47eb59bb829423b1d0f47ba13099073999b3cb Mon Sep 17 00:00:00 2001 From: Nicolas Planel Date: Wed, 29 Oct 2003 16:07:11 +0000 Subject: Corporate Server 2.1.1 release --- mdk-stage1/dietlibc/librpc/xdr.c | 116 ++++++++++++++++++++++++++------------- 1 file changed, 78 insertions(+), 38 deletions(-) (limited to 'mdk-stage1/dietlibc/librpc/xdr.c') diff --git a/mdk-stage1/dietlibc/librpc/xdr.c b/mdk-stage1/dietlibc/librpc/xdr.c index 864b47dea..8849dde7a 100644 --- a/mdk-stage1/dietlibc/librpc/xdr.c +++ b/mdk-stage1/dietlibc/librpc/xdr.c @@ -52,7 +52,7 @@ static char sccsid[] = "@(#)xdr.c 1.35 87/08/12"; */ #define XDR_FALSE ((long) 0) #define XDR_TRUE ((long) 1) -#define LASTUNSIGNED ((u_int) 0-1) +#define LASTUNSIGNED ((unsigned int) 0-1) /* * for unit alignment @@ -76,7 +76,7 @@ void xdr_free(xdrproc_t proc, char* objp) */ bool_t xdr_void( /* xdrs, addr */ ) /* XDR *xdrs; */ - /* caddr_t addr; */ + /* char* addr; */ { return (TRUE); @@ -87,17 +87,25 @@ bool_t xdr_void( /* xdrs, addr */ ) */ bool_t xdr_int(XDR* xdrs, int* ip) { - -#ifdef lint - (void) (xdr_short(xdrs, (short *) ip)); - return (xdr_long(xdrs, (long *) ip)); -#else if (sizeof(int) == sizeof(long)) { return (xdr_long(xdrs, (long *) ip)); + } else if (sizeof(int) < sizeof(long)) { + long l; + switch (xdrs->x_op) { + case XDR_ENCODE: + l = (long) *ip; + return XDR_PUTLONG(xdrs, &l); + case XDR_DECODE: + if (!XDR_GETLONG(xdrs, &l)) + return FALSE; + *ip = (int) l; + case XDR_FREE: + return TRUE; + } + return FALSE; } else { return (xdr_short(xdrs, (short *) ip)); } -#endif } /* @@ -105,17 +113,25 @@ bool_t xdr_int(XDR* xdrs, int* ip) */ bool_t xdr_u_int(XDR* xdrs, unsigned int* up) { - -#ifdef lint - (void) (xdr_short(xdrs, (short *) up)); - return (xdr_u_long(xdrs, (u_long *) up)); -#else - if (sizeof(u_int) == sizeof(u_long)) { - return (xdr_u_long(xdrs, (u_long *) up)); + if (sizeof(unsigned int) == sizeof(unsigned long)) { + return (xdr_u_long(xdrs, (unsigned long *) up)); + } else if (sizeof(unsigned int) < sizeof(unsigned long)) { + unsigned long l; + switch (xdrs->x_op) { + case XDR_ENCODE: + l = (unsigned long) *up; + return XDR_PUTLONG(xdrs, &l); + case XDR_DECODE: + if (!XDR_GETLONG(xdrs, &l)) + return FALSE; + *up = (unsigned int) l; + case XDR_FREE: + return TRUE; + } + return FALSE; } else { return (xdr_short(xdrs, (short *) up)); } -#endif } /* @@ -125,7 +141,9 @@ bool_t xdr_u_int(XDR* xdrs, unsigned int* up) bool_t xdr_long(XDR* xdrs, long* lp) { - if (xdrs->x_op == XDR_ENCODE) + if (xdrs->x_op == XDR_ENCODE + && (sizeof(int32_t) == sizeof(long) + || (int32_t) *lp == *lp)) return (XDR_PUTLONG(xdrs, lp)); if (xdrs->x_op == XDR_DECODE) @@ -144,12 +162,25 @@ bool_t xdr_long(XDR* xdrs, long* lp) bool_t xdr_u_long(XDR* xdrs, unsigned long* ulp) { - if (xdrs->x_op == XDR_DECODE) - return (XDR_GETLONG(xdrs, (long *) ulp)); - if (xdrs->x_op == XDR_ENCODE) + if (xdrs->x_op == XDR_DECODE) { + long l; + if (XDR_GETLONG(xdrs, &l) == FALSE) + return FALSE; + *ulp = (uint32_t) l; + return TRUE; + } + + if (xdrs->x_op == XDR_ENCODE) { + if (sizeof(uint32_t) != sizeof(unsigned long) + && (uint32_t) *ulp != *ulp) + return FALSE; + return (XDR_PUTLONG(xdrs, (long *) ulp)); + } + if (xdrs->x_op == XDR_FREE) return (TRUE); + return (FALSE); } @@ -184,19 +215,19 @@ bool_t xdr_short(XDR* xdrs, short* sp) */ bool_t xdr_u_short(XDR* xdrs, unsigned short* usp) { - u_long l; + unsigned long l; switch (xdrs->x_op) { case XDR_ENCODE: - l = (u_long) * usp; + l = (unsigned long) * usp; return (XDR_PUTLONG(xdrs, &l)); case XDR_DECODE: if (!XDR_GETLONG(xdrs, &l)) { return (FALSE); } - *usp = (u_short) l; + *usp = (unsigned short) l; return (TRUE); case XDR_FREE: @@ -226,7 +257,7 @@ bool_t xdr_char(XDR* xdrs, char* cp) */ bool_t xdr_u_char(XDR* xdrs, unsigned char* cp) { - u_int u; + unsigned int u; u = (*cp); if (!xdr_u_int(xdrs, &u)) { @@ -271,7 +302,6 @@ bool_t xdr_enum(xdrs, ep) XDR *xdrs; enum_t *ep; { -#ifndef lint enum sizecheck { SIZEVAL }; /* used to find the size of an enum */ /* @@ -279,15 +309,25 @@ enum_t *ep; */ if (sizeof(enum sizecheck) == sizeof(long)) { return (xdr_long(xdrs, (long *) ep)); + } else if (sizeof(enum sizecheck) == sizeof(int)) { + long l; + switch (xdrs->x_op) { + case XDR_ENCODE: + l = *ep; + return XDR_PUTLONG(xdrs, &l); + case XDR_DECODE: + if (!XDR_GETLONG(xdrs, &l)) + return FALSE; + *ep = l; + case XDR_FREE: + return TRUE; + } + return FALSE; } else if (sizeof(enum sizecheck) == sizeof(short)) { return (xdr_short(xdrs, (short *) ep)); } else { return (FALSE); } -#else - (void) (xdr_short(xdrs, (short *) ep)); - return (xdr_long(xdrs, (long *) ep)); -#endif } /* @@ -297,10 +337,10 @@ enum_t *ep; */ bool_t xdr_opaque(xdrs, cp, cnt) register XDR *xdrs; -caddr_t cp; -register u_int cnt; +char* cp; +register unsigned int cnt; { - register u_int rndup; + register unsigned int rndup; static char crud[BYTES_PER_XDR_UNIT]; /* @@ -349,11 +389,11 @@ register u_int cnt; bool_t xdr_bytes(xdrs, cpp, sizep, maxsize) register XDR *xdrs; char **cpp; -register u_int *sizep; -u_int maxsize; +register unsigned int *sizep; +unsigned int maxsize; { register char *sp = *cpp; /* sp is the actual string pointer */ - register u_int nodesize; + register unsigned int nodesize; /* * first deal with the length since xdr bytes are counted @@ -465,11 +505,11 @@ bool_t xdr_union(XDR* xdrs, enum_t* dscmp, char* unp, const struct xdr_discrim* bool_t xdr_string(xdrs, cpp, maxsize) register XDR *xdrs; char **cpp; -u_int maxsize; +unsigned int maxsize; { register char *sp = *cpp; /* sp is the actual string pointer */ - u_int size; - u_int nodesize; + unsigned int size; + unsigned int nodesize; /* * first deal with the length since xdr strings are counted-strings -- cgit v1.2.1