--- dietlibc-0.12.orig/librpc/xdr_mem.c +++ dietlibc-0.12/librpc/xdr_mem.c @@ -48,13 +48,13 @@ #include #include -static bool_t xdrmem_getlong(); -static bool_t xdrmem_putlong(); +static bool_t xdrmem_getlong(XDR*, long*); +static bool_t xdrmem_putlong(XDR*, const long*); static bool_t xdrmem_getbytes(); static bool_t xdrmem_putbytes(); static unsigned int xdrmem_getpos(); static bool_t xdrmem_setpos(); -static int32_t *xdrmem_inline(); +static int32_t *xdrmem_inline(XDR*, unsigned int); static void xdrmem_destroy(); static struct xdr_ops xdrmem_ops = { @@ -94,54 +94,41 @@ register XDR *xdrs; long *lp; { + if (xdrs->x_handy < 4) return FALSE; + xdrs->x_handy -= 4; - if ((xdrs->x_handy -= sizeof(long)) < 0) - return (FALSE); - - *lp = (long) ntohl((unsigned long) (*((long *) (xdrs->x_private)))); - xdrs->x_private += sizeof(long); - - return (TRUE); + *lp = (int32_t) ntohl((*((int32_t *) (xdrs->x_private)))); + xdrs->x_private += 4; + return TRUE; } -static bool_t xdrmem_putlong(xdrs, lp) -register XDR *xdrs; -long *lp; +static bool_t xdrmem_putlong(XDR* xdrs, const long* lp) { + if (xdrs->x_handy < 4) return FALSE; + xdrs->x_handy -= 4; - if ((xdrs->x_handy -= sizeof(long)) < 0) - return (FALSE); - - *(long *) xdrs->x_private = (long) htonl((unsigned long) (*lp)); - xdrs->x_private += sizeof(long); + *(int32_t *) xdrs->x_private = htonl(*lp); + xdrs->x_private += sizeof(long); - return (TRUE); + return (TRUE); } -static bool_t xdrmem_getbytes(xdrs, addr, len) -register XDR *xdrs; -char* addr; -register unsigned int len; +static bool_t xdrmem_getbytes(XDR* xdrs, char* addr, unsigned int len) { - - if ((xdrs->x_handy -= len) < 0) - return (FALSE); - memmove(addr, xdrs->x_private, len); - xdrs->x_private += len; - return (TRUE); + if (xdrs->x_handy < len) return FALSE; + xdrs->x_handy -= len; + memmove(addr, xdrs->x_private, len); + xdrs->x_private += len; + return TRUE; } -static bool_t xdrmem_putbytes(xdrs, addr, len) -register XDR *xdrs; -char* addr; -register unsigned int len; +static bool_t xdrmem_putbytes(XDR* xdrs, char* addr, unsigned int len) { - - if ((xdrs->x_handy -= len) < 0) - return (FALSE); - memmove(xdrs->x_private, addr, len); - xdrs->x_private += len; - return (TRUE); + if (xdrs->x_handy < len) return FALSE; + xdrs->x_handy -= len; + memmove(xdrs->x_private, addr, len); + xdrs->x_private += len; + return (TRUE); } static unsigned int xdrmem_getpos(xdrs) @@ -155,19 +142,19 @@ register XDR *xdrs; unsigned int pos; { - register char* newaddr = xdrs->x_base + pos; - register char* lastaddr = xdrs->x_private + xdrs->x_handy; + register char* newaddr = xdrs->x_base + pos; + register char* lastaddr = xdrs->x_private + xdrs->x_handy; - if ((long) newaddr > (long) lastaddr) - return (FALSE); - xdrs->x_private = newaddr; - xdrs->x_handy = (int) lastaddr - (int) newaddr; - return (TRUE); + if ((long) newaddr > (long) lastaddr || (long)newaddr<(long)xdrs->x_base) + return (FALSE); + xdrs->x_private = newaddr; + xdrs->x_handy = (int) lastaddr - (int) newaddr; + return (TRUE); } static int32_t *xdrmem_inline(xdrs, len) register XDR *xdrs; -int len; +unsigned int len; { int32_t *buf = 0; --- dietlibc-0.12.orig/librpc/xdr_rec.c +++ dietlibc-0.12/librpc/xdr_rec.c @@ -458,9 +458,7 @@ return (FALSE); } -static int32_t *xdrrec_inline(xdrs, len) -register XDR *xdrs; -int len; +static int32_t *xdrrec_inline(XDR* xdrs, unsigned int len) { register RECSTREAM *rstrm = (RECSTREAM *) xdrs->x_private; int32_t *buf = NULL; --- dietlibc-0.12.orig/librpc/xdr_stdio.c +++ dietlibc-0.12/librpc/xdr_stdio.c @@ -169,9 +169,7 @@ FALSE : TRUE); } -static int32_t *xdrstdio_inline(xdrs, len) -XDR *xdrs; -unsigned int len; +static int32_t *xdrstdio_inline(XDR* xdrs, unsigned int len) { /* --- dietlibc-0.12.orig/include/rpc/xdr.h +++ dietlibc-0.12/include/rpc/xdr.h @@ -126,7 +126,7 @@ /* returns bytes off from beginning */ bool_t (*x_setpostn) (XDR *__xdrs, unsigned int __pos); /* lets you reposition the stream */ - int32_t *(*x_inline) (XDR *__xdrs, int __len); + int32_t *(*x_inline) (XDR *__xdrs, unsigned int __len); /* buf quick ptr to buffered data */ void (*x_destroy) (XDR *__xdrs); /* free privates of this xdr_stream */ @@ -139,7 +139,7 @@ char* x_public; /* users' data */ char* x_private; /* pointer to private data */ char* x_base; /* private used for position info */ - int x_handy; /* extra private word */ + unsigned int x_handy; /* extra private word */ }; /*