summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/librpc/xdr.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/dietlibc/librpc/xdr.c')
-rw-r--r--mdk-stage1/dietlibc/librpc/xdr.c116
1 files changed, 78 insertions, 38 deletions
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