Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Move the basic part of XDR to common/include/rpc and common/...



details:   https://anonhg.NetBSD.org/src/rev/0c3a5bbbfa7b
branches:  trunk
changeset: 451791:0c3a5bbbfa7b
user:      hannken <hannken%NetBSD.org@localhost>
date:      Tue Jun 04 15:07:55 2019 +0000

description:
Move the basic part of XDR to common/include/rpc and common/lib/libc/rpc.

No functional change intended.

diffstat:

 common/include/rpc/Makefile     |    8 +
 common/include/rpc/types.h      |  107 ++++
 common/include/rpc/xdr.h        |  370 +++++++++++++++
 common/lib/libc/Makefile.inc    |    4 +-
 common/lib/libc/rpc/xdr.c       |  972 ++++++++++++++++++++++++++++++++++++++++
 common/lib/libc/rpc/xdr_array.c |  163 ++++++
 common/lib/libc/rpc/xdr_mem.c   |  263 ++++++++++
 include/Makefile                |    3 +-
 include/rpc/Makefile            |    4 +-
 include/rpc/types.h             |  107 ----
 include/rpc/xdr.h               |  370 ---------------
 lib/libc/rpc/xdr.c              |  972 ----------------------------------------
 lib/libc/rpc/xdr_array.c        |  163 ------
 lib/libc/rpc/xdr_mem.c          |  263 ----------
 14 files changed, 1889 insertions(+), 1880 deletions(-)

diffs (truncated from 3850 to 300 lines):

diff -r 9ca0b28ce2ce -r 0c3a5bbbfa7b common/include/rpc/Makefile
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/common/include/rpc/Makefile       Tue Jun 04 15:07:55 2019 +0000
@@ -0,0 +1,8 @@
+#      $NetBSD: Makefile,v 1.1 2019/06/04 15:07:55 hannken Exp $
+#
+
+INCS=  types.h xdr.h
+
+INCSDIR=       /usr/include/rpc
+
+.include <bsd.prog.mk>
diff -r 9ca0b28ce2ce -r 0c3a5bbbfa7b common/include/rpc/types.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/common/include/rpc/types.h        Tue Jun 04 15:07:55 2019 +0000
@@ -0,0 +1,107 @@
+/*     $NetBSD: types.h,v 1.1 2019/06/04 15:07:55 hannken Exp $        */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ * 
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ * 
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ * 
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ * 
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ * 
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)types.h 1.18 87/07/24 SMI
+ *     @(#)types.h     2.3 88/08/15 4.0 RPCSRC
+ */
+
+/*
+ * Rpc additions to <sys/types.h>
+ */
+#ifndef _RPC_TYPES_H_
+#define _RPC_TYPES_H_
+
+#include <sys/types.h>
+
+typedef int32_t bool_t;
+typedef int32_t enum_t;
+
+typedef uint32_t rpcprog_t;
+typedef uint32_t rpcvers_t;
+typedef uint32_t rpcproc_t;
+typedef uint32_t rpcprot_t;
+typedef uint32_t rpcport_t;
+typedef   int32_t rpc_inline_t;
+
+#define __dontcare__   -1
+
+#ifndef FALSE
+#      define FALSE    (0)
+#endif
+#ifndef TRUE
+#      define TRUE     (1)
+#endif
+#ifndef NULL
+#      define NULL     0
+#endif
+
+#define mem_alloc(bsize)       calloc((size_t)1, bsize)
+#define mem_free(ptr, bsize)   free(ptr)
+
+#include <sys/time.h>
+#include <netconfig.h>
+
+/*
+ * The netbuf structure is defined here, because NetBSD only uses it inside
+ * the RPC code. It's in <xti.h> on SVR4, but it would be confusing to
+ * have an xti.h, since NetBSD does not support XTI/TLI.
+ */
+
+/*
+ * The netbuf structure is used for transport-independent address storage.
+ */
+struct netbuf {
+       unsigned int maxlen;
+       unsigned int len;
+       void *buf;
+};
+
+/*
+ * The format of the addres and options arguments of the XTI t_bind call.
+ * Only provided for compatibility, it should not be used.
+ */
+
+struct t_bind {
+       struct netbuf   addr;
+       unsigned int    qlen;
+};
+
+/*
+ * Internal library and rpcbind use. This is not an exported interface, do
+ * not use.
+ */
+struct __rpc_sockinfo {
+       int si_af; 
+       int si_proto;
+       int si_socktype;
+       int si_alen;
+};
+
+#endif /* !_RPC_TYPES_H_ */
diff -r 9ca0b28ce2ce -r 0c3a5bbbfa7b common/include/rpc/xdr.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/common/include/rpc/xdr.h  Tue Jun 04 15:07:55 2019 +0000
@@ -0,0 +1,370 @@
+/*     $NetBSD: xdr.h,v 1.1 2019/06/04 15:07:55 hannken Exp $  */
+
+/*
+ * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
+ * unrestricted use provided that this legend is included on all tape
+ * media and as a part of the software program in whole or part.  Users
+ * may copy or modify Sun RPC without charge, but are not authorized
+ * to license or distribute it to anyone else except as part of a product or
+ * program developed by the user.
+ * 
+ * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
+ * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
+ * 
+ * Sun RPC is provided with no support and without any obligation on the
+ * part of Sun Microsystems, Inc. to assist in its use, correction,
+ * modification or enhancement.
+ * 
+ * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
+ * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
+ * OR ANY PART THEREOF.
+ * 
+ * In no event will Sun Microsystems, Inc. be liable for any lost revenue
+ * or profits or other special, indirect and consequential damages, even if
+ * Sun has been advised of the possibility of such damages.
+ * 
+ * Sun Microsystems, Inc.
+ * 2550 Garcia Avenue
+ * Mountain View, California  94043
+ *
+ *     from: @(#)xdr.h 1.19 87/04/22 SMI
+ *     @(#)xdr.h       2.2 88/07/29 4.0 RPCSRC
+ */
+
+/*
+ * xdr.h, External Data Representation Serialization Routines.
+ *
+ * Copyright (C) 1984, Sun Microsystems, Inc.
+ */
+
+#ifndef _RPC_XDR_H_
+#define _RPC_XDR_H_
+#include <sys/cdefs.h>
+
+/*
+ * XDR provides a conventional way for converting between C data
+ * types and an external bit-string representation.  Library supplied
+ * routines provide for the conversion on built-in C data types.  These
+ * routines and utility routines defined here are used to help implement
+ * a type encode/decode routine for each user-defined type.
+ *
+ * Each data type provides a single procedure which takes two arguments:
+ *
+ *     bool_t
+ *     xdrproc(xdrs, argresp)
+ *             XDR *xdrs;
+ *             <type> *argresp;
+ *
+ * xdrs is an instance of a XDR handle, to which or from which the data
+ * type is to be converted.  argresp is a pointer to the structure to be
+ * converted.  The XDR handle contains an operation field which indicates
+ * which of the operations (ENCODE, DECODE * or FREE) is to be performed.
+ *
+ * XDR_DECODE may allocate space if the pointer argresp is null.  This
+ * data can be freed with the XDR_FREE operation.
+ *
+ * We write only one procedure per data type to make it easy
+ * to keep the encode and decode procedures for a data type consistent.
+ * In many cases the same code performs all operations on a user defined type,
+ * because all the hard work is done in the component type routines.
+ * decode as a series of calls on the nested data types.
+ */
+
+/*
+ * Xdr operations.  XDR_ENCODE causes the type to be encoded into the
+ * stream.  XDR_DECODE causes the type to be extracted from the stream.
+ * XDR_FREE can be used to release the space allocated by an XDR_DECODE
+ * request.
+ */
+enum xdr_op {
+       XDR_ENCODE=0,
+       XDR_DECODE=1,
+       XDR_FREE=2
+};
+
+/*
+ * This is the number of bytes per unit of external data.
+ */
+#define BYTES_PER_XDR_UNIT     (4)
+#define RNDUP(x)  ((((x) + BYTES_PER_XDR_UNIT - 1) / BYTES_PER_XDR_UNIT) \
+                   * BYTES_PER_XDR_UNIT)
+
+/*
+ * The XDR handle.
+ * Contains operation which is being applied to the stream,
+ * an operations vector for the paticular implementation (e.g. see xdr_mem.c),
+ * and two private fields for the use of the particular impelementation.
+ */
+typedef struct __rpc_xdr {
+       enum xdr_op     x_op;           /* operation; fast additional param */
+       const struct xdr_ops {
+               /* get a long from underlying stream */
+               bool_t  (*x_getlong)(struct __rpc_xdr *, long *);
+               /* put a long to " */
+               bool_t  (*x_putlong)(struct __rpc_xdr *, const long *);
+               /* get some bytes from " */
+               bool_t  (*x_getbytes)(struct __rpc_xdr *, char *, unsigned int);
+               /* put some bytes to " */
+               bool_t  (*x_putbytes)(struct __rpc_xdr *, const char *,
+                                       unsigned int);
+               /* returns bytes off from beginning */
+               unsigned (*x_getpostn)(struct __rpc_xdr *);
+               /* lets you reposition the stream */
+               bool_t  (*x_setpostn)(struct __rpc_xdr *, unsigned int);
+               /* buf quick ptr to buffered data */
+               int32_t *(*x_inline)(struct __rpc_xdr *, unsigned int);
+               /* free privates of this xdr_stream */
+               void    (*x_destroy)(struct __rpc_xdr *);
+               bool_t  (*x_control)(struct __rpc_xdr *, int, void *);
+       } *x_ops;
+       char *          x_public;       /* users' data */
+       void *          x_private;      /* pointer to private data */
+       char *          x_base;         /* private used for position info */
+       unsigned int    x_handy;        /* extra private word */
+} XDR;
+
+/*
+ * A xdrproc_t exists for each data type which is to be encoded or decoded.
+ *
+ * The second argument to the xdrproc_t is a pointer to an opaque pointer.
+ * The opaque pointer generally points to a structure of the data type
+ * to be decoded.  If this pointer is 0, then the type routines should
+ * allocate dynamic storage of the appropriate size and return it.
+ */
+typedef        bool_t (*xdrproc_t)(XDR *, const void *); 
+
+/*
+ * Operations defined on a XDR handle
+ *
+ * XDR         *xdrs;
+ * long                *longp;
+ * char *       addr;
+ * unsigned     len;
+ * unsigned     pos;
+ */
+#define XDR_GETLONG(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
+#define xdr_getlong(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_getlong)(xdrs, longp)
+
+#define XDR_PUTLONG(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
+#define xdr_putlong(xdrs, longp)                       \
+       (*(xdrs)->x_ops->x_putlong)(xdrs, longp)
+
+static __inline int
+xdr_getint32(XDR *xdrs, int32_t *ip)
+{
+       long l;
+
+       if (!xdr_getlong(xdrs, &l))
+               return 0;
+       *ip = (int32_t)l;
+       return 1;
+}
+
+static __inline int
+xdr_putint32(XDR *xdrs, int32_t *ip)
+{
+       long l;
+
+       l = (long)*ip;
+       return xdr_putlong(xdrs, &l);



Home | Main Index | Thread Index | Old Index