is now u_int, not int.
(struct XDR.x_handy): Now u_int, not int.
* sunrpc/xdr_mem.c: Include <limits.h>.
(xdrmem_getlong, xdrmem_putlong, xdrmem_getbytes, xdrmem_putbytes,
xdrmem_inline, xdrmem_getint32, xdrmem_putint32):
x_handy is now unsigned, not signed.
Do not decrement x_handy if no change is made.
(xdrmem_setpos): Check for int overflow.
* sunrpc/xdr_sizeof.c (x_inline): 2nd arg is now unsigned.
(xdr_sizeof): Remove cast that is now unnecessary, now that
x_handy is unsigned.
+2002-12-13 Paul Eggert <eggert@twinsun.com>
+
+ * sunrpc/rpc/xdr.h (struct XDR.xdr_ops.x_inline): 2nd arg
+ is now u_int, not int.
+ (struct XDR.x_handy): Now u_int, not int.
+ * sunrpc/xdr_mem.c: Include <limits.h>.
+ (xdrmem_getlong, xdrmem_putlong, xdrmem_getbytes, xdrmem_putbytes,
+ xdrmem_inline, xdrmem_getint32, xdrmem_putint32):
+ x_handy is now unsigned, not signed.
+ Do not decrement x_handy if no change is made.
+ (xdrmem_setpos): Check for int overflow.
+ * sunrpc/xdr_sizeof.c (x_inline): 2nd arg is now unsigned.
+ (xdr_sizeof): Remove cast that is now unnecessary, now that
+ x_handy is unsigned.
+
2002-12-15 Art Haas <ahaas@airmail.net>
* iconv/gconv_conf.c: Convert GCC extension initializer syntax to C99.
/* returns bytes off from beginning */
bool_t (*x_setpostn) (XDR *__xdrs, u_int __pos);
/* lets you reposition the stream */
- int32_t *(*x_inline) (XDR *__xdrs, int __len);
+ int32_t *(*x_inline) (XDR *__xdrs, u_int __len);
/* buf quick ptr to buffered data */
void (*x_destroy) (XDR *__xdrs);
/* free privates of this xdr_stream */
caddr_t x_public; /* users' data */
caddr_t x_private; /* pointer to private data */
caddr_t x_base; /* private used for position info */
- int x_handy; /* extra private word */
+ u_int x_handy; /* extra private word */
};
/*
*/
#include <string.h>
+#include <limits.h>
#include <rpc/rpc.h>
static bool_t xdrmem_getlong (XDR *, long *);
static bool_t
xdrmem_getlong (XDR *xdrs, long *lp)
{
- if ((xdrs->x_handy -= 4) < 0)
+ if (xdrs->x_handy < 4)
return FALSE;
+ xdrs->x_handy -= 4;
*lp = (int32_t) ntohl ((*((int32_t *) (xdrs->x_private))));
xdrs->x_private += 4;
return TRUE;
static bool_t
xdrmem_putlong (XDR *xdrs, const long *lp)
{
- if ((xdrs->x_handy -= 4) < 0)
+ if (xdrs->x_handy < 4)
return FALSE;
+ xdrs->x_handy -= 4;
*(int32_t *) xdrs->x_private = htonl (*lp);
xdrs->x_private += 4;
return TRUE;
static bool_t
xdrmem_getbytes (XDR *xdrs, caddr_t addr, u_int len)
{
- if ((xdrs->x_handy -= len) < 0)
+ if (xdrs->x_handy < len)
return FALSE;
+ xdrs->x_handy -= len;
memcpy (addr, xdrs->x_private, len);
xdrs->x_private += len;
return TRUE;
static bool_t
xdrmem_putbytes (XDR *xdrs, const char *addr, u_int len)
{
- if ((xdrs->x_handy -= len) < 0)
+ if (xdrs->x_handy < len)
return FALSE;
+ xdrs->x_handy -= len;
memcpy (xdrs->x_private, addr, len);
xdrs->x_private += len;
return TRUE;
caddr_t newaddr = xdrs->x_base + pos;
caddr_t lastaddr = xdrs->x_private + xdrs->x_handy;
- if ((long) newaddr > (long) lastaddr)
+ if ((long) newaddr > (long) lastaddr
+ || (UINT_MAX < LONG_MAX
+ && (long) UINT_MAX < (long) lastaddr - (long) newaddr))
return FALSE;
xdrs->x_private = newaddr;
xdrs->x_handy = (long) lastaddr - (long) newaddr;
{
int32_t *buf = 0;
- if (xdrs->x_handy >= len)
+ if (xdrs->x_handy >= (u_int) len)
{
xdrs->x_handy -= len;
buf = (int32_t *) xdrs->x_private;
static bool_t
xdrmem_getint32 (XDR *xdrs, int32_t *ip)
{
- if ((xdrs->x_handy -= 4) < 0)
+ if (xdrs->x_handy < 4)
return FALSE;
+ xdrs->x_handy -= 4;
*ip = ntohl ((*((int32_t *) (xdrs->x_private))));
xdrs->x_private += 4;
return TRUE;
static bool_t
xdrmem_putint32 (XDR *xdrs, const int32_t *ip)
{
- if ((xdrs->x_handy -= 4) < 0)
+ if (xdrs->x_handy < 4)
return FALSE;
+ xdrs->x_handy -= 4;
*(int32_t *) xdrs->x_private = htonl (*ip);
xdrs->x_private += 4;
return TRUE;
}
static int32_t *
-x_inline (XDR *xdrs, int len)
+x_inline (XDR *xdrs, u_int len)
{
if (len == 0)
return NULL;
if (xdrs->x_op != XDR_ENCODE)
return NULL;
- if (len < (int) (long int) xdrs->x_base)
+ if (len < (u_int) (long int) xdrs->x_base)
{
/* x_private was already allocated */
xdrs->x_handy += len;
stat = func (&x, data);
if (x.x_private)
free (x.x_private);
- return stat == TRUE ? (unsigned) x.x_handy : 0;
+ return stat == TRUE ? x.x_handy : 0;
}