diff options
Diffstat (limited to 'lib/libspl')
-rw-r--r-- | lib/libspl/Makefile.am | 1 | ||||
-rw-r--r-- | lib/libspl/include/rpc/Makefile.am | 1 | ||||
-rw-r--r-- | lib/libspl/include/rpc/types.h | 32 | ||||
-rw-r--r-- | lib/libspl/include/rpc/xdr.h | 43 | ||||
-rw-r--r-- | lib/libspl/xdr.c | 78 |
5 files changed, 26 insertions, 129 deletions
diff --git a/lib/libspl/Makefile.am b/lib/libspl/Makefile.am index a56944623..afd64fcca 100644 --- a/lib/libspl/Makefile.am +++ b/lib/libspl/Makefile.am @@ -29,7 +29,6 @@ USER_C = \ strnlen.c \ timestamp.c \ zone.c \ - xdr.c \ include/sys/list.h \ include/sys/list_impl.h diff --git a/lib/libspl/include/rpc/Makefile.am b/lib/libspl/include/rpc/Makefile.am index 7a29aba73..78ee5a29e 100644 --- a/lib/libspl/include/rpc/Makefile.am +++ b/lib/libspl/include/rpc/Makefile.am @@ -1,4 +1,3 @@ libspldir = $(includedir)/libspl/rpc libspl_HEADERS = \ - $(top_srcdir)/lib/libspl/include/rpc/types.h \ $(top_srcdir)/lib/libspl/include/rpc/xdr.h diff --git a/lib/libspl/include/rpc/types.h b/lib/libspl/include/rpc/types.h deleted file mode 100644 index aa9901fd1..000000000 --- a/lib/libspl/include/rpc/types.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License (the "License"). - * You may not use this file except in compliance with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - */ -/* - * Copyright 2010 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ - -#ifndef LIBSPL_RPC_TYPES_H -#define LIBSPL_RPC_TYPES_H - -#include_next <rpc/types.h> -#include <sys/kmem.h> - -#endif /* LIBSPL_RPC_TYPES_H */ diff --git a/lib/libspl/include/rpc/xdr.h b/lib/libspl/include/rpc/xdr.h index 99500d657..3c7c53fcc 100644 --- a/lib/libspl/include/rpc/xdr.h +++ b/lib/libspl/include/rpc/xdr.h @@ -32,11 +32,20 @@ #ifndef LIBSPL_RPC_XDR_H #define LIBSPL_RPC_XDR_H -#include_next <rpc/xdr.h> - /* - * These are XDR control operators + * When available prefer libtirpc for xdr functionality. This library is + * mandatory when compiling with musl libc because it does not provide xdr. */ +#if defined(HAVE_LIBTIRPC) + +#include <tirpc/rpc/xdr.h> +#ifdef xdr_control +#undef xdr_control +#endif + +#else +#include_next <rpc/xdr.h> +#endif /* HAVE_LIBTIRPC */ #define XDR_GET_BYTES_AVAIL 1 @@ -46,20 +55,20 @@ typedef struct xdr_bytesrec { } xdr_bytesrec_t; /* - * These are the request arguments to XDR_CONTROL. - * - * XDR_PEEK - returns the contents of the next XDR unit on the XDR stream. - * XDR_SKIPBYTES - skips the next N bytes in the XDR stream. - * XDR_RDMAGET - for xdr implementation over RDMA, gets private flags from - * the XDR stream being moved over RDMA - * XDR_RDMANOCHUNK - for xdr implementaion over RDMA, sets private flags in - * the XDR stream moving over RDMA. + * This functionality is not required and is disabled in user space. */ -#define XDR_PEEK 2 -#define XDR_SKIPBYTES 3 -#define XDR_RDMAGET 4 -#define XDR_RDMASET 5 +static inline bool_t +xdr_control(XDR *xdrs, int request, void *info) +{ + xdr_bytesrec_t *xptr; -extern bool_t xdr_control(XDR *xdrs, int request, void *info); + ASSERT3U(request, ==, XDR_GET_BYTES_AVAIL); -#endif + xptr = (xdr_bytesrec_t *)info; + xptr->xc_is_last_record = TRUE; + xptr->xc_num_avail = xdrs->x_handy; + + return (TRUE); +} + +#endif /* LIBSPL_RPC_XDR_H */ diff --git a/lib/libspl/xdr.c b/lib/libspl/xdr.c deleted file mode 100644 index 288a338a1..000000000 --- a/lib/libspl/xdr.c +++ /dev/null @@ -1,78 +0,0 @@ -/* - * CDDL HEADER START - * - * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. - * - * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE - * or http://www.opensolaris.org/os/licensing. - * See the License for the specific language governing permissions - * and limitations under the License. - * - * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENSOLARIS.LICENSE. - * If applicable, add the following below this CDDL HEADER, with the - * fields enclosed by brackets "[]" replaced with your own identifying - * information: Portions Copyright [yyyy] [name of copyright owner] - * - * CDDL HEADER END - * - * Copyright 2005 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T - * All Rights Reserved - * - * Portions of this source code were derived from Berkeley 4.3 BSD - * under license from the Regents of the University of California. - */ - -#include <rpc/xdr.h> - -/* - * As of glibc-2.5-25 there is not support for xdr_control(). The - * xdrmem implementation from OpenSolaris is used here. - * - * FIXME: Not well tested it may not work as expected. - */ -bool_t -xdr_control(XDR *xdrs, int request, void *info) -{ - xdr_bytesrec_t *xptr; - int32_t *int32p; - int len; - - switch (request) { - case XDR_GET_BYTES_AVAIL: - xptr = (xdr_bytesrec_t *)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); - int32p = (int32_t *)info; - *int32p = (int32_t)ntohl((uint32_t) - (*((int32_t *)(xdrs->x_private)))); - return (TRUE); - - case XDR_SKIPBYTES: - /* - * Skip the next N bytes in the XDR stream. - */ - int32p = (int32_t *)info; - len = RNDUP((int)(*int32p)); - if ((xdrs->x_handy -= len) < 0) - return (FALSE); - xdrs->x_private += len; - return (TRUE); - - } - return (FALSE); -} |