Merge branch 'linux-libspl' into refs/top-bases/linux-zfs-branch

This commit is contained in:
Brian Behlendorf 2009-03-12 15:15:10 -07:00
commit 4e4fbfe52c
4 changed files with 94 additions and 67 deletions

View File

@ -19,6 +19,7 @@ libspl_la_SOURCES = \
${top_srcdir}/lib/libspl/strlcpy.c \
${top_srcdir}/lib/libspl/strnlen.c \
${top_srcdir}/lib/libspl/zone.c \
${top_srcdir}/lib/libspl/xdr.c \
${top_srcdir}/lib/libspl/asm-${target_cpu}/atomic.S \
${top_srcdir}/lib/libspl/include/sys/list.h \
${top_srcdir}/lib/libspl/include/sys/list_impl.h

View File

@ -1,6 +1,7 @@
noinst_HEADERS = *.h
noinst_HEADERS += ia32/sys/*.h
noinst_HEADERS += sys/*.h
noinst_HEADERS += sys/fm/*.h
noinst_HEADERS += sys/sysevent/*.h
noinst_HEADERS += tsol/*.h
pkginclude_HEADERS = *.h
pkginclude_HEADERS += ia32/sys/*.h
pkginclude_HEADERS += rpc/*.h
pkginclude_HEADERS += sys/*.h
pkginclude_HEADERS += sys/fm/*.h
pkginclude_HEADERS += sys/sysevent/*.h
pkginclude_HEADERS += tsol/*.h

View File

@ -18,16 +18,13 @@
* 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 */
/*
*
* 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.
*/
@ -37,26 +34,16 @@
#include_next <rpc/xdr.h>
/*
* Strangely, my glibc version (2.3.6) doesn't have xdr_control(), so
* we have to hack it in here (source taken from OpenSolaris).
* By the way, it is assumed the xdrmem implementation is used.
*/
#define xdr_control(a,b,c) xdrmem_control(a,b,c)
/*
* These are XDR control operators
*/
#define XDR_GET_BYTES_AVAIL 1
struct xdr_bytesrec {
typedef struct xdr_bytesrec {
bool_t xc_is_last_record;
size_t xc_num_avail;
};
typedef struct xdr_bytesrec xdr_bytesrec;
} xdr_bytesrec_t;
/*
* These are the request arguments to XDR_CONTROL.
@ -73,46 +60,6 @@ typedef struct xdr_bytesrec xdr_bytesrec;
#define XDR_RDMAGET 4
#define XDR_RDMASET 5
/* FIXME: probably doesn't work */
static bool_t
xdrmem_control(XDR *xdrs, int request, void *info)
{
xdr_bytesrec *xptr;
int32_t *int32p;
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);
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);
}
extern bool_t xdr_control(XDR *xdrs, int request, void *info);
#endif

78
lib/libspl/xdr.c Normal file
View File

@ -0,0 +1,78 @@
/*
* 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);
}