MFdevbranch 192944
- add FreeBSD implementation of xdrmem_control needed by zfs - have zfs define xdr_ops using FreeBSD's definition - remove solaris xdr files from zfs compile
This commit is contained in:
parent
48369f7cc0
commit
c334d2d544
@ -121,6 +121,7 @@ typedef struct XDR {
|
|||||||
* Changes must be reviewed by Solaris File Sharing
|
* Changes must be reviewed by Solaris File Sharing
|
||||||
* Changes must be communicated to contract-2003-523@sun.com
|
* Changes must be communicated to contract-2003-523@sun.com
|
||||||
*/
|
*/
|
||||||
|
#ifndef __FreeBSD__
|
||||||
struct xdr_ops {
|
struct xdr_ops {
|
||||||
#ifdef __STDC__
|
#ifdef __STDC__
|
||||||
#if !defined(_KERNEL)
|
#if !defined(_KERNEL)
|
||||||
@ -168,6 +169,28 @@ struct xdr_ops {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#else /* FreeBSD */
|
||||||
|
struct xdr_ops {
|
||||||
|
/* get a long from underlying stream */
|
||||||
|
bool_t (*x_getint32)(struct XDR *, int32_t *);
|
||||||
|
/* put a long to " */
|
||||||
|
bool_t (*x_putint32)(struct XDR *, const int32_t *);
|
||||||
|
/* get some bytes from " */
|
||||||
|
bool_t (*x_getbytes)(struct XDR *, char *, u_int);
|
||||||
|
/* put some bytes to " */
|
||||||
|
bool_t (*x_putbytes)(struct XDR *, const char *, u_int);
|
||||||
|
/* returns bytes off from beginning */
|
||||||
|
u_int (*x_getpostn)(struct XDR *);
|
||||||
|
/* lets you reposition the stream */
|
||||||
|
bool_t (*x_setpostn)(struct XDR *, u_int);
|
||||||
|
/* buf quick ptr to buffered data */
|
||||||
|
int32_t *(*x_inline)(struct XDR *, u_int);
|
||||||
|
/* free privates of this xdr_stream */
|
||||||
|
void (*x_destroy)(struct XDR *);
|
||||||
|
bool_t (*x_control)(struct XDR *, int, void *);
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Operations defined on a XDR handle
|
* Operations defined on a XDR handle
|
||||||
*
|
*
|
||||||
|
@ -44,10 +44,10 @@ SRCS+= list.c
|
|||||||
SRCS+= nvpair_alloc_system.c
|
SRCS+= nvpair_alloc_system.c
|
||||||
SRCS+= taskq.c
|
SRCS+= taskq.c
|
||||||
|
|
||||||
.PATH: ${SUNW}/uts/common/rpc
|
#.PATH: ${SUNW}/uts/common/rpc
|
||||||
SRCS+= opensolaris_xdr.c
|
#SRCS+= opensolaris_xdr.c
|
||||||
SRCS+= opensolaris_xdr_array.c
|
#SRCS+= opensolaris_xdr_array.c
|
||||||
SRCS+= opensolaris_xdr_mem.c
|
#SRCS+= opensolaris_xdr_mem.c
|
||||||
|
|
||||||
.PATH: ${SUNW}/uts/common/zmod
|
.PATH: ${SUNW}/uts/common/zmod
|
||||||
SRCS+= adler32.c
|
SRCS+= adler32.c
|
||||||
|
@ -337,6 +337,22 @@ struct netobj {
|
|||||||
typedef struct netobj netobj;
|
typedef struct netobj netobj;
|
||||||
extern bool_t xdr_netobj(XDR *, struct netobj *);
|
extern bool_t xdr_netobj(XDR *, struct netobj *);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These are XDR control operators
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define XDR_GET_BYTES_AVAIL 1
|
||||||
|
#define XDR_PEEK 2
|
||||||
|
#define XDR_SKIPBYTES 3
|
||||||
|
|
||||||
|
struct xdr_bytesrec {
|
||||||
|
bool_t xc_is_last_record;
|
||||||
|
size_t xc_num_avail;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct xdr_bytesrec xdr_bytesrec;
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* These are the public routines for the various implementations of
|
* These are the public routines for the various implementations of
|
||||||
* xdr streams.
|
* xdr streams.
|
||||||
|
@ -66,7 +66,8 @@ static u_int xdrmem_getpos(XDR *);
|
|||||||
static bool_t xdrmem_setpos(XDR *, u_int);
|
static bool_t xdrmem_setpos(XDR *, u_int);
|
||||||
static int32_t *xdrmem_inline_aligned(XDR *, u_int);
|
static int32_t *xdrmem_inline_aligned(XDR *, u_int);
|
||||||
static int32_t *xdrmem_inline_unaligned(XDR *, u_int);
|
static int32_t *xdrmem_inline_unaligned(XDR *, u_int);
|
||||||
|
static bool_t xdrmem_control(XDR *xdrs, int request, void *info);
|
||||||
|
|
||||||
static const struct xdr_ops xdrmem_ops_aligned = {
|
static const struct xdr_ops xdrmem_ops_aligned = {
|
||||||
xdrmem_getlong_aligned,
|
xdrmem_getlong_aligned,
|
||||||
xdrmem_putlong_aligned,
|
xdrmem_putlong_aligned,
|
||||||
@ -75,7 +76,8 @@ static const struct xdr_ops xdrmem_ops_aligned = {
|
|||||||
xdrmem_getpos,
|
xdrmem_getpos,
|
||||||
xdrmem_setpos,
|
xdrmem_setpos,
|
||||||
xdrmem_inline_aligned,
|
xdrmem_inline_aligned,
|
||||||
xdrmem_destroy
|
xdrmem_destroy,
|
||||||
|
xdrmem_control
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct xdr_ops xdrmem_ops_unaligned = {
|
static const struct xdr_ops xdrmem_ops_unaligned = {
|
||||||
@ -86,7 +88,8 @@ static const struct xdr_ops xdrmem_ops_unaligned = {
|
|||||||
xdrmem_getpos,
|
xdrmem_getpos,
|
||||||
xdrmem_setpos,
|
xdrmem_setpos,
|
||||||
xdrmem_inline_unaligned,
|
xdrmem_inline_unaligned,
|
||||||
xdrmem_destroy
|
xdrmem_destroy,
|
||||||
|
xdrmem_control
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -228,3 +231,45 @@ xdrmem_inline_unaligned(XDR *xdrs, u_int len)
|
|||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool_t
|
||||||
|
xdrmem_control(XDR *xdrs, int request, void *info)
|
||||||
|
{
|
||||||
|
xdr_bytesrec *xptr;
|
||||||
|
int32_t *l;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
switch (request) {
|
||||||
|
|
||||||
|
case XDR_GET_BYTES_AVAIL:
|
||||||
|
xptr = (xdr_bytesrec *)info;
|
||||||
|
xptr->xc_is_last_record = TRUE;
|
||||||
|
xptr->xc_num_avail = xdrs->x_handy;
|
||||||
|
return (TRUE);
|
||||||
|
|
||||||
|
case XDR_PEEK:
|
||||||
|
/*
|
||||||
|
* Return the next 4 byte unit in the XDR stream.
|
||||||
|
*/
|
||||||
|
if (xdrs->x_handy < sizeof (int32_t))
|
||||||
|
return (FALSE);
|
||||||
|
l = (int32_t *)info;
|
||||||
|
*l = (int32_t)ntohl((uint32_t)
|
||||||
|
(*((int32_t *)(xdrs->x_private))));
|
||||||
|
return (TRUE);
|
||||||
|
|
||||||
|
case XDR_SKIPBYTES:
|
||||||
|
/*
|
||||||
|
* Skip the next N bytes in the XDR stream.
|
||||||
|
*/
|
||||||
|
l = (int32_t *)info;
|
||||||
|
len = RNDUP((int)(*l));
|
||||||
|
if (xdrs->x_handy < len)
|
||||||
|
return (FALSE);
|
||||||
|
xdrs->x_handy -= len;
|
||||||
|
xdrs->x_private = (char *)xdrs->x_private + len;
|
||||||
|
return (TRUE);
|
||||||
|
|
||||||
|
}
|
||||||
|
return (FALSE);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user