1dfdcada3SDoug Rabson /* $NetBSD: xdr.c,v 1.22 2000/07/06 03:10:35 christos Exp $ */ 2dfdcada3SDoug Rabson 3dfdcada3SDoug Rabson /* 4dfdcada3SDoug Rabson * Sun RPC is a product of Sun Microsystems, Inc. and is provided for 5dfdcada3SDoug Rabson * unrestricted use provided that this legend is included on all tape 6dfdcada3SDoug Rabson * media and as a part of the software program in whole or part. Users 7dfdcada3SDoug Rabson * may copy or modify Sun RPC without charge, but are not authorized 8dfdcada3SDoug Rabson * to license or distribute it to anyone else except as part of a product or 9dfdcada3SDoug Rabson * program developed by the user. 10dfdcada3SDoug Rabson * 11dfdcada3SDoug Rabson * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE 12dfdcada3SDoug Rabson * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR 13dfdcada3SDoug Rabson * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE. 14dfdcada3SDoug Rabson * 15dfdcada3SDoug Rabson * Sun RPC is provided with no support and without any obligation on the 16dfdcada3SDoug Rabson * part of Sun Microsystems, Inc. to assist in its use, correction, 17dfdcada3SDoug Rabson * modification or enhancement. 18dfdcada3SDoug Rabson * 19dfdcada3SDoug Rabson * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 20dfdcada3SDoug Rabson * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC 21dfdcada3SDoug Rabson * OR ANY PART THEREOF. 22dfdcada3SDoug Rabson * 23dfdcada3SDoug Rabson * In no event will Sun Microsystems, Inc. be liable for any lost revenue 24dfdcada3SDoug Rabson * or profits or other special, indirect and consequential damages, even if 25dfdcada3SDoug Rabson * Sun has been advised of the possibility of such damages. 26dfdcada3SDoug Rabson * 27dfdcada3SDoug Rabson * Sun Microsystems, Inc. 28dfdcada3SDoug Rabson * 2550 Garcia Avenue 29dfdcada3SDoug Rabson * Mountain View, California 94043 30dfdcada3SDoug Rabson */ 31dfdcada3SDoug Rabson 32dfdcada3SDoug Rabson #if defined(LIBC_SCCS) && !defined(lint) 33dfdcada3SDoug Rabson static char *sccsid2 = "@(#)xdr.c 1.35 87/08/12"; 34dfdcada3SDoug Rabson static char *sccsid = "@(#)xdr.c 2.1 88/07/29 4.0 RPCSRC"; 35dfdcada3SDoug Rabson #endif 36dfdcada3SDoug Rabson #include <sys/cdefs.h> 37dfdcada3SDoug Rabson __FBSDID("$FreeBSD$"); 38dfdcada3SDoug Rabson 39dfdcada3SDoug Rabson /* 40dfdcada3SDoug Rabson * xdr.c, Generic XDR routines implementation. 41dfdcada3SDoug Rabson * 42dfdcada3SDoug Rabson * Copyright (C) 1986, Sun Microsystems, Inc. 43dfdcada3SDoug Rabson * 44dfdcada3SDoug Rabson * These are the "generic" xdr routines used to serialize and de-serialize 45dfdcada3SDoug Rabson * most common data items. See xdr.h for more info on the interface to 46dfdcada3SDoug Rabson * xdr. 47dfdcada3SDoug Rabson */ 48dfdcada3SDoug Rabson 49dfdcada3SDoug Rabson #include <sys/param.h> 50dfdcada3SDoug Rabson #include <sys/systm.h> 51dfdcada3SDoug Rabson #include <sys/kernel.h> 52dfdcada3SDoug Rabson #include <sys/malloc.h> 53dfdcada3SDoug Rabson 54*6448ec89SXin LI #include <rpc/rpc.h> 55*6448ec89SXin LI #include <rpc/rpc_com.h> 56dfdcada3SDoug Rabson #include <rpc/types.h> 57dfdcada3SDoug Rabson #include <rpc/xdr.h> 58dfdcada3SDoug Rabson 59dfdcada3SDoug Rabson typedef quad_t longlong_t; /* ANSI long long type */ 60dfdcada3SDoug Rabson typedef u_quad_t u_longlong_t; /* ANSI unsigned long long type */ 61dfdcada3SDoug Rabson 62dfdcada3SDoug Rabson /* 63dfdcada3SDoug Rabson * constants specific to the xdr "protocol" 64dfdcada3SDoug Rabson */ 65dfdcada3SDoug Rabson #define XDR_FALSE ((long) 0) 66dfdcada3SDoug Rabson #define XDR_TRUE ((long) 1) 67dfdcada3SDoug Rabson 68dfdcada3SDoug Rabson /* 69dfdcada3SDoug Rabson * for unit alignment 70dfdcada3SDoug Rabson */ 71dfdcada3SDoug Rabson static const char xdr_zero[BYTES_PER_XDR_UNIT] = { 0, 0, 0, 0 }; 72dfdcada3SDoug Rabson 73dfdcada3SDoug Rabson /* 74dfdcada3SDoug Rabson * Free a data structure using XDR 75dfdcada3SDoug Rabson * Not a filter, but a convenient utility nonetheless 76dfdcada3SDoug Rabson */ 77dfdcada3SDoug Rabson void 78dfdcada3SDoug Rabson xdr_free(xdrproc_t proc, void *objp) 79dfdcada3SDoug Rabson { 80dfdcada3SDoug Rabson XDR x; 81dfdcada3SDoug Rabson 82dfdcada3SDoug Rabson x.x_op = XDR_FREE; 83dfdcada3SDoug Rabson (*proc)(&x, objp); 84dfdcada3SDoug Rabson } 85dfdcada3SDoug Rabson 86dfdcada3SDoug Rabson /* 87dfdcada3SDoug Rabson * XDR nothing 88dfdcada3SDoug Rabson */ 89dfdcada3SDoug Rabson bool_t 90dfdcada3SDoug Rabson xdr_void(void) 91dfdcada3SDoug Rabson { 92dfdcada3SDoug Rabson 93dfdcada3SDoug Rabson return (TRUE); 94dfdcada3SDoug Rabson } 95dfdcada3SDoug Rabson 96dfdcada3SDoug Rabson 97dfdcada3SDoug Rabson /* 98dfdcada3SDoug Rabson * XDR integers 99dfdcada3SDoug Rabson */ 100dfdcada3SDoug Rabson bool_t 101dfdcada3SDoug Rabson xdr_int(XDR *xdrs, int *ip) 102dfdcada3SDoug Rabson { 103dfdcada3SDoug Rabson long l; 104dfdcada3SDoug Rabson 105dfdcada3SDoug Rabson switch (xdrs->x_op) { 106dfdcada3SDoug Rabson 107dfdcada3SDoug Rabson case XDR_ENCODE: 108dfdcada3SDoug Rabson l = (long) *ip; 109dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, &l)); 110dfdcada3SDoug Rabson 111dfdcada3SDoug Rabson case XDR_DECODE: 112dfdcada3SDoug Rabson if (!XDR_GETLONG(xdrs, &l)) { 113dfdcada3SDoug Rabson return (FALSE); 114dfdcada3SDoug Rabson } 115dfdcada3SDoug Rabson *ip = (int) l; 116dfdcada3SDoug Rabson return (TRUE); 117dfdcada3SDoug Rabson 118dfdcada3SDoug Rabson case XDR_FREE: 119dfdcada3SDoug Rabson return (TRUE); 120dfdcada3SDoug Rabson } 121dfdcada3SDoug Rabson /* NOTREACHED */ 122dfdcada3SDoug Rabson return (FALSE); 123dfdcada3SDoug Rabson } 124dfdcada3SDoug Rabson 125dfdcada3SDoug Rabson /* 126dfdcada3SDoug Rabson * XDR unsigned integers 127dfdcada3SDoug Rabson */ 128dfdcada3SDoug Rabson bool_t 129dfdcada3SDoug Rabson xdr_u_int(XDR *xdrs, u_int *up) 130dfdcada3SDoug Rabson { 131dfdcada3SDoug Rabson u_long l; 132dfdcada3SDoug Rabson 133dfdcada3SDoug Rabson switch (xdrs->x_op) { 134dfdcada3SDoug Rabson 135dfdcada3SDoug Rabson case XDR_ENCODE: 136dfdcada3SDoug Rabson l = (u_long) *up; 137dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, (long *)&l)); 138dfdcada3SDoug Rabson 139dfdcada3SDoug Rabson case XDR_DECODE: 140dfdcada3SDoug Rabson if (!XDR_GETLONG(xdrs, (long *)&l)) { 141dfdcada3SDoug Rabson return (FALSE); 142dfdcada3SDoug Rabson } 143dfdcada3SDoug Rabson *up = (u_int) l; 144dfdcada3SDoug Rabson return (TRUE); 145dfdcada3SDoug Rabson 146dfdcada3SDoug Rabson case XDR_FREE: 147dfdcada3SDoug Rabson return (TRUE); 148dfdcada3SDoug Rabson } 149dfdcada3SDoug Rabson /* NOTREACHED */ 150dfdcada3SDoug Rabson return (FALSE); 151dfdcada3SDoug Rabson } 152dfdcada3SDoug Rabson 153dfdcada3SDoug Rabson 154dfdcada3SDoug Rabson /* 155dfdcada3SDoug Rabson * XDR long integers 156dfdcada3SDoug Rabson * same as xdr_u_long - open coded to save a proc call! 157dfdcada3SDoug Rabson */ 158dfdcada3SDoug Rabson bool_t 159dfdcada3SDoug Rabson xdr_long(XDR *xdrs, long *lp) 160dfdcada3SDoug Rabson { 161dfdcada3SDoug Rabson switch (xdrs->x_op) { 162dfdcada3SDoug Rabson case XDR_ENCODE: 163dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, lp)); 164dfdcada3SDoug Rabson case XDR_DECODE: 165dfdcada3SDoug Rabson return (XDR_GETLONG(xdrs, lp)); 166dfdcada3SDoug Rabson case XDR_FREE: 167dfdcada3SDoug Rabson return (TRUE); 168dfdcada3SDoug Rabson } 169dfdcada3SDoug Rabson /* NOTREACHED */ 170dfdcada3SDoug Rabson return (FALSE); 171dfdcada3SDoug Rabson } 172dfdcada3SDoug Rabson 173dfdcada3SDoug Rabson /* 174dfdcada3SDoug Rabson * XDR unsigned long integers 175dfdcada3SDoug Rabson * same as xdr_long - open coded to save a proc call! 176dfdcada3SDoug Rabson */ 177dfdcada3SDoug Rabson bool_t 178dfdcada3SDoug Rabson xdr_u_long(XDR *xdrs, u_long *ulp) 179dfdcada3SDoug Rabson { 180dfdcada3SDoug Rabson switch (xdrs->x_op) { 181dfdcada3SDoug Rabson case XDR_ENCODE: 182dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, (long *)ulp)); 183dfdcada3SDoug Rabson case XDR_DECODE: 184dfdcada3SDoug Rabson return (XDR_GETLONG(xdrs, (long *)ulp)); 185dfdcada3SDoug Rabson case XDR_FREE: 186dfdcada3SDoug Rabson return (TRUE); 187dfdcada3SDoug Rabson } 188dfdcada3SDoug Rabson /* NOTREACHED */ 189dfdcada3SDoug Rabson return (FALSE); 190dfdcada3SDoug Rabson } 191dfdcada3SDoug Rabson 192dfdcada3SDoug Rabson 193dfdcada3SDoug Rabson /* 194dfdcada3SDoug Rabson * XDR 32-bit integers 195dfdcada3SDoug Rabson * same as xdr_uint32_t - open coded to save a proc call! 196dfdcada3SDoug Rabson */ 197dfdcada3SDoug Rabson bool_t 198dfdcada3SDoug Rabson xdr_int32_t(XDR *xdrs, int32_t *int32_p) 199dfdcada3SDoug Rabson { 200dfdcada3SDoug Rabson long l; 201dfdcada3SDoug Rabson 202dfdcada3SDoug Rabson switch (xdrs->x_op) { 203dfdcada3SDoug Rabson 204dfdcada3SDoug Rabson case XDR_ENCODE: 205dfdcada3SDoug Rabson l = (long) *int32_p; 206dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, &l)); 207dfdcada3SDoug Rabson 208dfdcada3SDoug Rabson case XDR_DECODE: 209dfdcada3SDoug Rabson if (!XDR_GETLONG(xdrs, &l)) { 210dfdcada3SDoug Rabson return (FALSE); 211dfdcada3SDoug Rabson } 212dfdcada3SDoug Rabson *int32_p = (int32_t) l; 213dfdcada3SDoug Rabson return (TRUE); 214dfdcada3SDoug Rabson 215dfdcada3SDoug Rabson case XDR_FREE: 216dfdcada3SDoug Rabson return (TRUE); 217dfdcada3SDoug Rabson } 218dfdcada3SDoug Rabson /* NOTREACHED */ 219dfdcada3SDoug Rabson return (FALSE); 220dfdcada3SDoug Rabson } 221dfdcada3SDoug Rabson 222dfdcada3SDoug Rabson /* 223dfdcada3SDoug Rabson * XDR unsigned 32-bit integers 224dfdcada3SDoug Rabson * same as xdr_int32_t - open coded to save a proc call! 225dfdcada3SDoug Rabson */ 226dfdcada3SDoug Rabson bool_t 227dfdcada3SDoug Rabson xdr_uint32_t(XDR *xdrs, uint32_t *uint32_p) 228dfdcada3SDoug Rabson { 229dfdcada3SDoug Rabson u_long l; 230dfdcada3SDoug Rabson 231dfdcada3SDoug Rabson switch (xdrs->x_op) { 232dfdcada3SDoug Rabson 233dfdcada3SDoug Rabson case XDR_ENCODE: 234dfdcada3SDoug Rabson l = (u_long) *uint32_p; 235dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, (long *)&l)); 236dfdcada3SDoug Rabson 237dfdcada3SDoug Rabson case XDR_DECODE: 238dfdcada3SDoug Rabson if (!XDR_GETLONG(xdrs, (long *)&l)) { 239dfdcada3SDoug Rabson return (FALSE); 240dfdcada3SDoug Rabson } 241dfdcada3SDoug Rabson *uint32_p = (uint32_t) l; 242dfdcada3SDoug Rabson return (TRUE); 243dfdcada3SDoug Rabson 244dfdcada3SDoug Rabson case XDR_FREE: 245dfdcada3SDoug Rabson return (TRUE); 246dfdcada3SDoug Rabson } 247dfdcada3SDoug Rabson /* NOTREACHED */ 248dfdcada3SDoug Rabson return (FALSE); 249dfdcada3SDoug Rabson } 250dfdcada3SDoug Rabson 251dfdcada3SDoug Rabson 252dfdcada3SDoug Rabson /* 253dfdcada3SDoug Rabson * XDR short integers 254dfdcada3SDoug Rabson */ 255dfdcada3SDoug Rabson bool_t 256dfdcada3SDoug Rabson xdr_short(XDR *xdrs, short *sp) 257dfdcada3SDoug Rabson { 258dfdcada3SDoug Rabson long l; 259dfdcada3SDoug Rabson 260dfdcada3SDoug Rabson switch (xdrs->x_op) { 261dfdcada3SDoug Rabson 262dfdcada3SDoug Rabson case XDR_ENCODE: 263dfdcada3SDoug Rabson l = (long) *sp; 264dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, &l)); 265dfdcada3SDoug Rabson 266dfdcada3SDoug Rabson case XDR_DECODE: 267dfdcada3SDoug Rabson if (!XDR_GETLONG(xdrs, &l)) { 268dfdcada3SDoug Rabson return (FALSE); 269dfdcada3SDoug Rabson } 270dfdcada3SDoug Rabson *sp = (short) l; 271dfdcada3SDoug Rabson return (TRUE); 272dfdcada3SDoug Rabson 273dfdcada3SDoug Rabson case XDR_FREE: 274dfdcada3SDoug Rabson return (TRUE); 275dfdcada3SDoug Rabson } 276dfdcada3SDoug Rabson /* NOTREACHED */ 277dfdcada3SDoug Rabson return (FALSE); 278dfdcada3SDoug Rabson } 279dfdcada3SDoug Rabson 280dfdcada3SDoug Rabson /* 281dfdcada3SDoug Rabson * XDR unsigned short integers 282dfdcada3SDoug Rabson */ 283dfdcada3SDoug Rabson bool_t 284dfdcada3SDoug Rabson xdr_u_short(XDR *xdrs, u_short *usp) 285dfdcada3SDoug Rabson { 286dfdcada3SDoug Rabson u_long l; 287dfdcada3SDoug Rabson 288dfdcada3SDoug Rabson switch (xdrs->x_op) { 289dfdcada3SDoug Rabson 290dfdcada3SDoug Rabson case XDR_ENCODE: 291dfdcada3SDoug Rabson l = (u_long) *usp; 292dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, (long *)&l)); 293dfdcada3SDoug Rabson 294dfdcada3SDoug Rabson case XDR_DECODE: 295dfdcada3SDoug Rabson if (!XDR_GETLONG(xdrs, (long *)&l)) { 296dfdcada3SDoug Rabson return (FALSE); 297dfdcada3SDoug Rabson } 298dfdcada3SDoug Rabson *usp = (u_short) l; 299dfdcada3SDoug Rabson return (TRUE); 300dfdcada3SDoug Rabson 301dfdcada3SDoug Rabson case XDR_FREE: 302dfdcada3SDoug Rabson return (TRUE); 303dfdcada3SDoug Rabson } 304dfdcada3SDoug Rabson /* NOTREACHED */ 305dfdcada3SDoug Rabson return (FALSE); 306dfdcada3SDoug Rabson } 307dfdcada3SDoug Rabson 308dfdcada3SDoug Rabson 309dfdcada3SDoug Rabson /* 310dfdcada3SDoug Rabson * XDR 16-bit integers 311dfdcada3SDoug Rabson */ 312dfdcada3SDoug Rabson bool_t 313dfdcada3SDoug Rabson xdr_int16_t(XDR *xdrs, int16_t *int16_p) 314dfdcada3SDoug Rabson { 315dfdcada3SDoug Rabson long l; 316dfdcada3SDoug Rabson 317dfdcada3SDoug Rabson switch (xdrs->x_op) { 318dfdcada3SDoug Rabson 319dfdcada3SDoug Rabson case XDR_ENCODE: 320dfdcada3SDoug Rabson l = (long) *int16_p; 321dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, &l)); 322dfdcada3SDoug Rabson 323dfdcada3SDoug Rabson case XDR_DECODE: 324dfdcada3SDoug Rabson if (!XDR_GETLONG(xdrs, &l)) { 325dfdcada3SDoug Rabson return (FALSE); 326dfdcada3SDoug Rabson } 327dfdcada3SDoug Rabson *int16_p = (int16_t) l; 328dfdcada3SDoug Rabson return (TRUE); 329dfdcada3SDoug Rabson 330dfdcada3SDoug Rabson case XDR_FREE: 331dfdcada3SDoug Rabson return (TRUE); 332dfdcada3SDoug Rabson } 333dfdcada3SDoug Rabson /* NOTREACHED */ 334dfdcada3SDoug Rabson return (FALSE); 335dfdcada3SDoug Rabson } 336dfdcada3SDoug Rabson 337dfdcada3SDoug Rabson /* 338dfdcada3SDoug Rabson * XDR unsigned 16-bit integers 339dfdcada3SDoug Rabson */ 340dfdcada3SDoug Rabson bool_t 341dfdcada3SDoug Rabson xdr_uint16_t(XDR *xdrs, uint16_t *uint16_p) 342dfdcada3SDoug Rabson { 343dfdcada3SDoug Rabson u_long l; 344dfdcada3SDoug Rabson 345dfdcada3SDoug Rabson switch (xdrs->x_op) { 346dfdcada3SDoug Rabson 347dfdcada3SDoug Rabson case XDR_ENCODE: 348dfdcada3SDoug Rabson l = (u_long) *uint16_p; 349dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, (long *)&l)); 350dfdcada3SDoug Rabson 351dfdcada3SDoug Rabson case XDR_DECODE: 352dfdcada3SDoug Rabson if (!XDR_GETLONG(xdrs, (long *)&l)) { 353dfdcada3SDoug Rabson return (FALSE); 354dfdcada3SDoug Rabson } 355dfdcada3SDoug Rabson *uint16_p = (uint16_t) l; 356dfdcada3SDoug Rabson return (TRUE); 357dfdcada3SDoug Rabson 358dfdcada3SDoug Rabson case XDR_FREE: 359dfdcada3SDoug Rabson return (TRUE); 360dfdcada3SDoug Rabson } 361dfdcada3SDoug Rabson /* NOTREACHED */ 362dfdcada3SDoug Rabson return (FALSE); 363dfdcada3SDoug Rabson } 364dfdcada3SDoug Rabson 365dfdcada3SDoug Rabson 366dfdcada3SDoug Rabson /* 367dfdcada3SDoug Rabson * XDR a char 368dfdcada3SDoug Rabson */ 369dfdcada3SDoug Rabson bool_t 370dfdcada3SDoug Rabson xdr_char(XDR *xdrs, char *cp) 371dfdcada3SDoug Rabson { 372dfdcada3SDoug Rabson int i; 373dfdcada3SDoug Rabson 374dfdcada3SDoug Rabson i = (*cp); 375dfdcada3SDoug Rabson if (!xdr_int(xdrs, &i)) { 376dfdcada3SDoug Rabson return (FALSE); 377dfdcada3SDoug Rabson } 378dfdcada3SDoug Rabson *cp = i; 379dfdcada3SDoug Rabson return (TRUE); 380dfdcada3SDoug Rabson } 381dfdcada3SDoug Rabson 382dfdcada3SDoug Rabson /* 383dfdcada3SDoug Rabson * XDR an unsigned char 384dfdcada3SDoug Rabson */ 385dfdcada3SDoug Rabson bool_t 386dfdcada3SDoug Rabson xdr_u_char(XDR *xdrs, u_char *cp) 387dfdcada3SDoug Rabson { 388dfdcada3SDoug Rabson u_int u; 389dfdcada3SDoug Rabson 390dfdcada3SDoug Rabson u = (*cp); 391dfdcada3SDoug Rabson if (!xdr_u_int(xdrs, &u)) { 392dfdcada3SDoug Rabson return (FALSE); 393dfdcada3SDoug Rabson } 394dfdcada3SDoug Rabson *cp = u; 395dfdcada3SDoug Rabson return (TRUE); 396dfdcada3SDoug Rabson } 397dfdcada3SDoug Rabson 398dfdcada3SDoug Rabson /* 399dfdcada3SDoug Rabson * XDR booleans 400dfdcada3SDoug Rabson */ 401dfdcada3SDoug Rabson bool_t 402dfdcada3SDoug Rabson xdr_bool(XDR *xdrs, bool_t *bp) 403dfdcada3SDoug Rabson { 404dfdcada3SDoug Rabson long lb; 405dfdcada3SDoug Rabson 406dfdcada3SDoug Rabson switch (xdrs->x_op) { 407dfdcada3SDoug Rabson 408dfdcada3SDoug Rabson case XDR_ENCODE: 409dfdcada3SDoug Rabson lb = *bp ? XDR_TRUE : XDR_FALSE; 410dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, &lb)); 411dfdcada3SDoug Rabson 412dfdcada3SDoug Rabson case XDR_DECODE: 413dfdcada3SDoug Rabson if (!XDR_GETLONG(xdrs, &lb)) { 414dfdcada3SDoug Rabson return (FALSE); 415dfdcada3SDoug Rabson } 416dfdcada3SDoug Rabson *bp = (lb == XDR_FALSE) ? FALSE : TRUE; 417dfdcada3SDoug Rabson return (TRUE); 418dfdcada3SDoug Rabson 419dfdcada3SDoug Rabson case XDR_FREE: 420dfdcada3SDoug Rabson return (TRUE); 421dfdcada3SDoug Rabson } 422dfdcada3SDoug Rabson /* NOTREACHED */ 423dfdcada3SDoug Rabson return (FALSE); 424dfdcada3SDoug Rabson } 425dfdcada3SDoug Rabson 426dfdcada3SDoug Rabson /* 427dfdcada3SDoug Rabson * XDR enumerations 428dfdcada3SDoug Rabson */ 429dfdcada3SDoug Rabson bool_t 430dfdcada3SDoug Rabson xdr_enum(XDR *xdrs, enum_t *ep) 431dfdcada3SDoug Rabson { 432dfdcada3SDoug Rabson enum sizecheck { SIZEVAL }; /* used to find the size of an enum */ 433dfdcada3SDoug Rabson 434dfdcada3SDoug Rabson /* 435dfdcada3SDoug Rabson * enums are treated as ints 436dfdcada3SDoug Rabson */ 437dfdcada3SDoug Rabson /* LINTED */ if (sizeof (enum sizecheck) == sizeof (long)) { 438dfdcada3SDoug Rabson return (xdr_long(xdrs, (long *)(void *)ep)); 439dfdcada3SDoug Rabson } else /* LINTED */ if (sizeof (enum sizecheck) == sizeof (int)) { 440dfdcada3SDoug Rabson return (xdr_int(xdrs, (int *)(void *)ep)); 441dfdcada3SDoug Rabson } else /* LINTED */ if (sizeof (enum sizecheck) == sizeof (short)) { 442dfdcada3SDoug Rabson return (xdr_short(xdrs, (short *)(void *)ep)); 443dfdcada3SDoug Rabson } else { 444dfdcada3SDoug Rabson return (FALSE); 445dfdcada3SDoug Rabson } 446dfdcada3SDoug Rabson } 447dfdcada3SDoug Rabson 448dfdcada3SDoug Rabson /* 449dfdcada3SDoug Rabson * XDR opaque data 450dfdcada3SDoug Rabson * Allows the specification of a fixed size sequence of opaque bytes. 451dfdcada3SDoug Rabson * cp points to the opaque object and cnt gives the byte length. 452dfdcada3SDoug Rabson */ 453dfdcada3SDoug Rabson bool_t 454dfdcada3SDoug Rabson xdr_opaque(XDR *xdrs, caddr_t cp, u_int cnt) 455dfdcada3SDoug Rabson { 456dfdcada3SDoug Rabson u_int rndup; 457dfdcada3SDoug Rabson static int crud[BYTES_PER_XDR_UNIT]; 458dfdcada3SDoug Rabson 459dfdcada3SDoug Rabson /* 460dfdcada3SDoug Rabson * if no data we are done 461dfdcada3SDoug Rabson */ 462dfdcada3SDoug Rabson if (cnt == 0) 463dfdcada3SDoug Rabson return (TRUE); 464dfdcada3SDoug Rabson 465dfdcada3SDoug Rabson /* 466dfdcada3SDoug Rabson * round byte count to full xdr units 467dfdcada3SDoug Rabson */ 468dfdcada3SDoug Rabson rndup = cnt % BYTES_PER_XDR_UNIT; 469dfdcada3SDoug Rabson if (rndup > 0) 470dfdcada3SDoug Rabson rndup = BYTES_PER_XDR_UNIT - rndup; 471dfdcada3SDoug Rabson 472dfdcada3SDoug Rabson if (xdrs->x_op == XDR_DECODE) { 473dfdcada3SDoug Rabson if (!XDR_GETBYTES(xdrs, cp, cnt)) { 474dfdcada3SDoug Rabson return (FALSE); 475dfdcada3SDoug Rabson } 476dfdcada3SDoug Rabson if (rndup == 0) 477dfdcada3SDoug Rabson return (TRUE); 478dfdcada3SDoug Rabson return (XDR_GETBYTES(xdrs, (caddr_t)(void *)crud, rndup)); 479dfdcada3SDoug Rabson } 480dfdcada3SDoug Rabson 481dfdcada3SDoug Rabson if (xdrs->x_op == XDR_ENCODE) { 482dfdcada3SDoug Rabson if (!XDR_PUTBYTES(xdrs, cp, cnt)) { 483dfdcada3SDoug Rabson return (FALSE); 484dfdcada3SDoug Rabson } 485dfdcada3SDoug Rabson if (rndup == 0) 486dfdcada3SDoug Rabson return (TRUE); 487dfdcada3SDoug Rabson return (XDR_PUTBYTES(xdrs, xdr_zero, rndup)); 488dfdcada3SDoug Rabson } 489dfdcada3SDoug Rabson 490dfdcada3SDoug Rabson if (xdrs->x_op == XDR_FREE) { 491dfdcada3SDoug Rabson return (TRUE); 492dfdcada3SDoug Rabson } 493dfdcada3SDoug Rabson 494dfdcada3SDoug Rabson return (FALSE); 495dfdcada3SDoug Rabson } 496dfdcada3SDoug Rabson 497dfdcada3SDoug Rabson /* 498dfdcada3SDoug Rabson * XDR counted bytes 499dfdcada3SDoug Rabson * *cpp is a pointer to the bytes, *sizep is the count. 500dfdcada3SDoug Rabson * If *cpp is NULL maxsize bytes are allocated 501dfdcada3SDoug Rabson */ 502dfdcada3SDoug Rabson bool_t 503dfdcada3SDoug Rabson xdr_bytes(XDR *xdrs, char **cpp, u_int *sizep, u_int maxsize) 504dfdcada3SDoug Rabson { 505dfdcada3SDoug Rabson char *sp = *cpp; /* sp is the actual string pointer */ 506dfdcada3SDoug Rabson u_int nodesize; 507*6448ec89SXin LI bool_t ret, allocated = FALSE; 508dfdcada3SDoug Rabson 509dfdcada3SDoug Rabson /* 510dfdcada3SDoug Rabson * first deal with the length since xdr bytes are counted 511dfdcada3SDoug Rabson */ 512dfdcada3SDoug Rabson if (! xdr_u_int(xdrs, sizep)) { 513dfdcada3SDoug Rabson return (FALSE); 514dfdcada3SDoug Rabson } 515dfdcada3SDoug Rabson nodesize = *sizep; 516dfdcada3SDoug Rabson if ((nodesize > maxsize) && (xdrs->x_op != XDR_FREE)) { 517dfdcada3SDoug Rabson return (FALSE); 518dfdcada3SDoug Rabson } 519dfdcada3SDoug Rabson 520dfdcada3SDoug Rabson /* 521dfdcada3SDoug Rabson * now deal with the actual bytes 522dfdcada3SDoug Rabson */ 523dfdcada3SDoug Rabson switch (xdrs->x_op) { 524dfdcada3SDoug Rabson 525dfdcada3SDoug Rabson case XDR_DECODE: 526dfdcada3SDoug Rabson if (nodesize == 0) { 527dfdcada3SDoug Rabson return (TRUE); 528dfdcada3SDoug Rabson } 529dfdcada3SDoug Rabson if (sp == NULL) { 530dfdcada3SDoug Rabson *cpp = sp = mem_alloc(nodesize); 531*6448ec89SXin LI allocated = TRUE; 532dfdcada3SDoug Rabson } 533dfdcada3SDoug Rabson if (sp == NULL) { 534dfdcada3SDoug Rabson printf("xdr_bytes: out of memory"); 535dfdcada3SDoug Rabson return (FALSE); 536dfdcada3SDoug Rabson } 537dfdcada3SDoug Rabson /* FALLTHROUGH */ 538dfdcada3SDoug Rabson 539dfdcada3SDoug Rabson case XDR_ENCODE: 540*6448ec89SXin LI ret = xdr_opaque(xdrs, sp, nodesize); 541*6448ec89SXin LI if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) { 542*6448ec89SXin LI if (allocated == TRUE) { 543*6448ec89SXin LI mem_free(sp, nodesize); 544*6448ec89SXin LI *cpp = NULL; 545*6448ec89SXin LI } 546*6448ec89SXin LI } 547*6448ec89SXin LI return (ret); 548dfdcada3SDoug Rabson 549dfdcada3SDoug Rabson case XDR_FREE: 550dfdcada3SDoug Rabson if (sp != NULL) { 551dfdcada3SDoug Rabson mem_free(sp, nodesize); 552dfdcada3SDoug Rabson *cpp = NULL; 553dfdcada3SDoug Rabson } 554dfdcada3SDoug Rabson return (TRUE); 555dfdcada3SDoug Rabson } 556dfdcada3SDoug Rabson /* NOTREACHED */ 557dfdcada3SDoug Rabson return (FALSE); 558dfdcada3SDoug Rabson } 559dfdcada3SDoug Rabson 560dfdcada3SDoug Rabson /* 561dfdcada3SDoug Rabson * Implemented here due to commonality of the object. 562dfdcada3SDoug Rabson */ 563dfdcada3SDoug Rabson bool_t 564dfdcada3SDoug Rabson xdr_netobj(XDR *xdrs, struct netobj *np) 565dfdcada3SDoug Rabson { 566dfdcada3SDoug Rabson 567dfdcada3SDoug Rabson return (xdr_bytes(xdrs, &np->n_bytes, &np->n_len, MAX_NETOBJ_SZ)); 568dfdcada3SDoug Rabson } 569dfdcada3SDoug Rabson 570dfdcada3SDoug Rabson /* 571dfdcada3SDoug Rabson * XDR a descriminated union 572dfdcada3SDoug Rabson * Support routine for discriminated unions. 573dfdcada3SDoug Rabson * You create an array of xdrdiscrim structures, terminated with 574dfdcada3SDoug Rabson * an entry with a null procedure pointer. The routine gets 575dfdcada3SDoug Rabson * the discriminant value and then searches the array of xdrdiscrims 576dfdcada3SDoug Rabson * looking for that value. It calls the procedure given in the xdrdiscrim 577dfdcada3SDoug Rabson * to handle the discriminant. If there is no specific routine a default 578dfdcada3SDoug Rabson * routine may be called. 579dfdcada3SDoug Rabson * If there is no specific or default routine an error is returned. 580dfdcada3SDoug Rabson */ 581dfdcada3SDoug Rabson bool_t 582dfdcada3SDoug Rabson xdr_union(XDR *xdrs, 583dfdcada3SDoug Rabson enum_t *dscmp, /* enum to decide which arm to work on */ 584dfdcada3SDoug Rabson char *unp, /* the union itself */ 585dfdcada3SDoug Rabson const struct xdr_discrim *choices, /* [value, xdr proc] for each arm */ 586dfdcada3SDoug Rabson xdrproc_t dfault) /* default xdr routine */ 587dfdcada3SDoug Rabson { 588dfdcada3SDoug Rabson enum_t dscm; 589dfdcada3SDoug Rabson 590dfdcada3SDoug Rabson /* 591dfdcada3SDoug Rabson * we deal with the discriminator; it's an enum 592dfdcada3SDoug Rabson */ 593dfdcada3SDoug Rabson if (! xdr_enum(xdrs, dscmp)) { 594dfdcada3SDoug Rabson return (FALSE); 595dfdcada3SDoug Rabson } 596dfdcada3SDoug Rabson dscm = *dscmp; 597dfdcada3SDoug Rabson 598dfdcada3SDoug Rabson /* 599dfdcada3SDoug Rabson * search choices for a value that matches the discriminator. 600dfdcada3SDoug Rabson * if we find one, execute the xdr routine for that value. 601dfdcada3SDoug Rabson */ 602dfdcada3SDoug Rabson for (; choices->proc != NULL_xdrproc_t; choices++) { 603dfdcada3SDoug Rabson if (choices->value == dscm) 604dfdcada3SDoug Rabson return ((*(choices->proc))(xdrs, unp)); 605dfdcada3SDoug Rabson } 606dfdcada3SDoug Rabson 607dfdcada3SDoug Rabson /* 608dfdcada3SDoug Rabson * no match - execute the default xdr routine if there is one 609dfdcada3SDoug Rabson */ 610dfdcada3SDoug Rabson return ((dfault == NULL_xdrproc_t) ? FALSE : 611dfdcada3SDoug Rabson (*dfault)(xdrs, unp)); 612dfdcada3SDoug Rabson } 613dfdcada3SDoug Rabson 614dfdcada3SDoug Rabson 615dfdcada3SDoug Rabson /* 616dfdcada3SDoug Rabson * Non-portable xdr primitives. 617dfdcada3SDoug Rabson * Care should be taken when moving these routines to new architectures. 618dfdcada3SDoug Rabson */ 619dfdcada3SDoug Rabson 620dfdcada3SDoug Rabson 621dfdcada3SDoug Rabson /* 622dfdcada3SDoug Rabson * XDR null terminated ASCII strings 623dfdcada3SDoug Rabson * xdr_string deals with "C strings" - arrays of bytes that are 624dfdcada3SDoug Rabson * terminated by a NULL character. The parameter cpp references a 625dfdcada3SDoug Rabson * pointer to storage; If the pointer is null, then the necessary 626dfdcada3SDoug Rabson * storage is allocated. The last parameter is the max allowed length 627dfdcada3SDoug Rabson * of the string as specified by a protocol. 628dfdcada3SDoug Rabson */ 629dfdcada3SDoug Rabson bool_t 630dfdcada3SDoug Rabson xdr_string(XDR *xdrs, char **cpp, u_int maxsize) 631dfdcada3SDoug Rabson { 632dfdcada3SDoug Rabson char *sp = *cpp; /* sp is the actual string pointer */ 633dfdcada3SDoug Rabson u_int size; 634dfdcada3SDoug Rabson u_int nodesize; 635*6448ec89SXin LI bool_t ret, allocated = FALSE; 636dfdcada3SDoug Rabson 637dfdcada3SDoug Rabson /* 638dfdcada3SDoug Rabson * first deal with the length since xdr strings are counted-strings 639dfdcada3SDoug Rabson */ 640dfdcada3SDoug Rabson switch (xdrs->x_op) { 641dfdcada3SDoug Rabson case XDR_FREE: 642dfdcada3SDoug Rabson if (sp == NULL) { 643dfdcada3SDoug Rabson return(TRUE); /* already free */ 644dfdcada3SDoug Rabson } 645dfdcada3SDoug Rabson /* FALLTHROUGH */ 646dfdcada3SDoug Rabson case XDR_ENCODE: 647dfdcada3SDoug Rabson size = strlen(sp); 648dfdcada3SDoug Rabson break; 649dfdcada3SDoug Rabson case XDR_DECODE: 650dfdcada3SDoug Rabson break; 651dfdcada3SDoug Rabson } 652dfdcada3SDoug Rabson if (! xdr_u_int(xdrs, &size)) { 653dfdcada3SDoug Rabson return (FALSE); 654dfdcada3SDoug Rabson } 655dfdcada3SDoug Rabson if (size > maxsize) { 656dfdcada3SDoug Rabson return (FALSE); 657dfdcada3SDoug Rabson } 658dfdcada3SDoug Rabson nodesize = size + 1; 659dfdcada3SDoug Rabson 660dfdcada3SDoug Rabson /* 661dfdcada3SDoug Rabson * now deal with the actual bytes 662dfdcada3SDoug Rabson */ 663dfdcada3SDoug Rabson switch (xdrs->x_op) { 664dfdcada3SDoug Rabson 665dfdcada3SDoug Rabson case XDR_DECODE: 666dfdcada3SDoug Rabson if (nodesize == 0) { 667dfdcada3SDoug Rabson return (TRUE); 668dfdcada3SDoug Rabson } 669*6448ec89SXin LI if (sp == NULL) { 670dfdcada3SDoug Rabson *cpp = sp = mem_alloc(nodesize); 671*6448ec89SXin LI allocated = TRUE; 672*6448ec89SXin LI } 673dfdcada3SDoug Rabson if (sp == NULL) { 674dfdcada3SDoug Rabson printf("xdr_string: out of memory"); 675dfdcada3SDoug Rabson return (FALSE); 676dfdcada3SDoug Rabson } 677dfdcada3SDoug Rabson sp[size] = 0; 678dfdcada3SDoug Rabson /* FALLTHROUGH */ 679dfdcada3SDoug Rabson 680dfdcada3SDoug Rabson case XDR_ENCODE: 681*6448ec89SXin LI ret = xdr_opaque(xdrs, sp, size); 682*6448ec89SXin LI if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) { 683*6448ec89SXin LI if (allocated == TRUE) { 684*6448ec89SXin LI mem_free(sp, nodesize); 685*6448ec89SXin LI *cpp = NULL; 686*6448ec89SXin LI } 687*6448ec89SXin LI } 688*6448ec89SXin LI return (ret); 689dfdcada3SDoug Rabson 690dfdcada3SDoug Rabson case XDR_FREE: 691dfdcada3SDoug Rabson mem_free(sp, nodesize); 692dfdcada3SDoug Rabson *cpp = NULL; 693dfdcada3SDoug Rabson return (TRUE); 694dfdcada3SDoug Rabson } 695dfdcada3SDoug Rabson /* NOTREACHED */ 696dfdcada3SDoug Rabson return (FALSE); 697dfdcada3SDoug Rabson } 698dfdcada3SDoug Rabson 699dfdcada3SDoug Rabson /* 700dfdcada3SDoug Rabson * Wrapper for xdr_string that can be called directly from 701dfdcada3SDoug Rabson * routines like clnt_call 702dfdcada3SDoug Rabson */ 703dfdcada3SDoug Rabson bool_t 704dfdcada3SDoug Rabson xdr_wrapstring(XDR *xdrs, char **cpp) 705dfdcada3SDoug Rabson { 706*6448ec89SXin LI return xdr_string(xdrs, cpp, RPC_MAXDATASIZE); 707dfdcada3SDoug Rabson } 708dfdcada3SDoug Rabson 709dfdcada3SDoug Rabson /* 710dfdcada3SDoug Rabson * NOTE: xdr_hyper(), xdr_u_hyper(), xdr_longlong_t(), and xdr_u_longlong_t() 711dfdcada3SDoug Rabson * are in the "non-portable" section because they require that a `long long' 712dfdcada3SDoug Rabson * be a 64-bit type. 713dfdcada3SDoug Rabson * 714dfdcada3SDoug Rabson * --thorpej@netbsd.org, November 30, 1999 715dfdcada3SDoug Rabson */ 716dfdcada3SDoug Rabson 717dfdcada3SDoug Rabson /* 718dfdcada3SDoug Rabson * XDR 64-bit integers 719dfdcada3SDoug Rabson */ 720dfdcada3SDoug Rabson bool_t 721dfdcada3SDoug Rabson xdr_int64_t(XDR *xdrs, int64_t *llp) 722dfdcada3SDoug Rabson { 723dfdcada3SDoug Rabson u_long ul[2]; 724dfdcada3SDoug Rabson 725dfdcada3SDoug Rabson switch (xdrs->x_op) { 726dfdcada3SDoug Rabson case XDR_ENCODE: 727dfdcada3SDoug Rabson ul[0] = (u_long)((uint64_t)*llp >> 32) & 0xffffffff; 728dfdcada3SDoug Rabson ul[1] = (u_long)((uint64_t)*llp) & 0xffffffff; 729dfdcada3SDoug Rabson if (XDR_PUTLONG(xdrs, (long *)&ul[0]) == FALSE) 730dfdcada3SDoug Rabson return (FALSE); 731dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, (long *)&ul[1])); 732dfdcada3SDoug Rabson case XDR_DECODE: 733dfdcada3SDoug Rabson if (XDR_GETLONG(xdrs, (long *)&ul[0]) == FALSE) 734dfdcada3SDoug Rabson return (FALSE); 735dfdcada3SDoug Rabson if (XDR_GETLONG(xdrs, (long *)&ul[1]) == FALSE) 736dfdcada3SDoug Rabson return (FALSE); 737dfdcada3SDoug Rabson *llp = (int64_t) 738dfdcada3SDoug Rabson (((uint64_t)ul[0] << 32) | ((uint64_t)ul[1])); 739dfdcada3SDoug Rabson return (TRUE); 740dfdcada3SDoug Rabson case XDR_FREE: 741dfdcada3SDoug Rabson return (TRUE); 742dfdcada3SDoug Rabson } 743dfdcada3SDoug Rabson /* NOTREACHED */ 744dfdcada3SDoug Rabson return (FALSE); 745dfdcada3SDoug Rabson } 746dfdcada3SDoug Rabson 747dfdcada3SDoug Rabson 748dfdcada3SDoug Rabson /* 749dfdcada3SDoug Rabson * XDR unsigned 64-bit integers 750dfdcada3SDoug Rabson */ 751dfdcada3SDoug Rabson bool_t 752dfdcada3SDoug Rabson xdr_uint64_t(XDR *xdrs, uint64_t *ullp) 753dfdcada3SDoug Rabson { 754dfdcada3SDoug Rabson u_long ul[2]; 755dfdcada3SDoug Rabson 756dfdcada3SDoug Rabson switch (xdrs->x_op) { 757dfdcada3SDoug Rabson case XDR_ENCODE: 758dfdcada3SDoug Rabson ul[0] = (u_long)(*ullp >> 32) & 0xffffffff; 759dfdcada3SDoug Rabson ul[1] = (u_long)(*ullp) & 0xffffffff; 760dfdcada3SDoug Rabson if (XDR_PUTLONG(xdrs, (long *)&ul[0]) == FALSE) 761dfdcada3SDoug Rabson return (FALSE); 762dfdcada3SDoug Rabson return (XDR_PUTLONG(xdrs, (long *)&ul[1])); 763dfdcada3SDoug Rabson case XDR_DECODE: 764dfdcada3SDoug Rabson if (XDR_GETLONG(xdrs, (long *)&ul[0]) == FALSE) 765dfdcada3SDoug Rabson return (FALSE); 766dfdcada3SDoug Rabson if (XDR_GETLONG(xdrs, (long *)&ul[1]) == FALSE) 767dfdcada3SDoug Rabson return (FALSE); 768dfdcada3SDoug Rabson *ullp = (uint64_t) 769dfdcada3SDoug Rabson (((uint64_t)ul[0] << 32) | ((uint64_t)ul[1])); 770dfdcada3SDoug Rabson return (TRUE); 771dfdcada3SDoug Rabson case XDR_FREE: 772dfdcada3SDoug Rabson return (TRUE); 773dfdcada3SDoug Rabson } 774dfdcada3SDoug Rabson /* NOTREACHED */ 775dfdcada3SDoug Rabson return (FALSE); 776dfdcada3SDoug Rabson } 777dfdcada3SDoug Rabson 778dfdcada3SDoug Rabson 779dfdcada3SDoug Rabson /* 780dfdcada3SDoug Rabson * XDR hypers 781dfdcada3SDoug Rabson */ 782dfdcada3SDoug Rabson bool_t 783dfdcada3SDoug Rabson xdr_hyper(XDR *xdrs, longlong_t *llp) 784dfdcada3SDoug Rabson { 785dfdcada3SDoug Rabson 786dfdcada3SDoug Rabson /* 787dfdcada3SDoug Rabson * Don't bother open-coding this; it's a fair amount of code. Just 788dfdcada3SDoug Rabson * call xdr_int64_t(). 789dfdcada3SDoug Rabson */ 790dfdcada3SDoug Rabson return (xdr_int64_t(xdrs, (int64_t *)llp)); 791dfdcada3SDoug Rabson } 792dfdcada3SDoug Rabson 793dfdcada3SDoug Rabson 794dfdcada3SDoug Rabson /* 795dfdcada3SDoug Rabson * XDR unsigned hypers 796dfdcada3SDoug Rabson */ 797dfdcada3SDoug Rabson bool_t 798dfdcada3SDoug Rabson xdr_u_hyper(XDR *xdrs, u_longlong_t *ullp) 799dfdcada3SDoug Rabson { 800dfdcada3SDoug Rabson 801dfdcada3SDoug Rabson /* 802dfdcada3SDoug Rabson * Don't bother open-coding this; it's a fair amount of code. Just 803dfdcada3SDoug Rabson * call xdr_uint64_t(). 804dfdcada3SDoug Rabson */ 805dfdcada3SDoug Rabson return (xdr_uint64_t(xdrs, (uint64_t *)ullp)); 806dfdcada3SDoug Rabson } 807dfdcada3SDoug Rabson 808dfdcada3SDoug Rabson 809dfdcada3SDoug Rabson /* 810dfdcada3SDoug Rabson * XDR longlong_t's 811dfdcada3SDoug Rabson */ 812dfdcada3SDoug Rabson bool_t 813dfdcada3SDoug Rabson xdr_longlong_t(XDR *xdrs, longlong_t *llp) 814dfdcada3SDoug Rabson { 815dfdcada3SDoug Rabson 816dfdcada3SDoug Rabson /* 817dfdcada3SDoug Rabson * Don't bother open-coding this; it's a fair amount of code. Just 818dfdcada3SDoug Rabson * call xdr_int64_t(). 819dfdcada3SDoug Rabson */ 820dfdcada3SDoug Rabson return (xdr_int64_t(xdrs, (int64_t *)llp)); 821dfdcada3SDoug Rabson } 822dfdcada3SDoug Rabson 823dfdcada3SDoug Rabson 824dfdcada3SDoug Rabson /* 825dfdcada3SDoug Rabson * XDR u_longlong_t's 826dfdcada3SDoug Rabson */ 827dfdcada3SDoug Rabson bool_t 828dfdcada3SDoug Rabson xdr_u_longlong_t(XDR *xdrs, u_longlong_t *ullp) 829dfdcada3SDoug Rabson { 830dfdcada3SDoug Rabson 831dfdcada3SDoug Rabson /* 832dfdcada3SDoug Rabson * Don't bother open-coding this; it's a fair amount of code. Just 833dfdcada3SDoug Rabson * call xdr_uint64_t(). 834dfdcada3SDoug Rabson */ 835dfdcada3SDoug Rabson return (xdr_uint64_t(xdrs, (uint64_t *)ullp)); 836dfdcada3SDoug Rabson } 837