libc/xdr: Sync xdr_sizeof.c with FreeBSD and add it to the build.
authorSascha Wildner <saw@online.de>
Thu, 30 Jul 2015 22:21:20 +0000 (00:21 +0200)
committerSascha Wildner <saw@online.de>
Thu, 30 Jul 2015 22:21:31 +0000 (00:21 +0200)
FreeBSD did so too after our last upgrade. Shouldn't hurt.

include/rpc/xdr.h
lib/libc/xdr/Makefile.inc
lib/libc/xdr/Symbol.map
lib/libc/xdr/xdr.3
lib/libc/xdr/xdr_sizeof.c

index 83b8a59..2f8af6e 100644 (file)
@@ -29,7 +29,6 @@
  *     from: @(#)xdr.h 2.2 88/07/29 4.0 RPCSRC
  * $NetBSD: xdr.h,v 1.19 2000/07/17 05:00:45 matt Exp $
  * $FreeBSD: src/include/rpc/xdr.h,v 1.23 2003/03/07 13:19:40 nectar Exp $
- * $DragonFly: src/include/rpc/xdr.h,v 1.3 2003/11/14 01:01:50 dillon Exp $
  */
 
 /*
@@ -320,6 +319,7 @@ extern bool_t       xdr_hyper(XDR *, quad_t *);
 extern bool_t  xdr_u_hyper(XDR *, u_quad_t *);
 extern bool_t  xdr_longlong_t(XDR *, quad_t *);
 extern bool_t  xdr_u_longlong_t(XDR *, u_quad_t *);
+extern unsigned long xdr_sizeof(xdrproc_t, void *);
 __END_DECLS
 
 /*
index 08f6d58..02e6672 100644 (file)
@@ -6,7 +6,7 @@
 CMAPS+=        ${.CURDIR}/xdr/Symbol.map
 
 SRCS+= xdr.c xdr_array.c xdr_float.c xdr_mem.c \
-       xdr_rec.c xdr_reference.c xdr_stdio.c
+       xdr_rec.c xdr_reference.c xdr_sizeof.c xdr_stdio.c
 
 .if ${LIB} == "c"
 MAN+=  xdr.3
@@ -44,6 +44,7 @@ MLINKS+=      rpc_xdr.3 xdr_accepted_reply.3 \
                xdr.3 xdr_reference.3 \
                xdr.3 xdr_setpos.3 \
                xdr.3 xdr_short.3 \
+               xdr.3 xdr_sizeof.3 \
                xdr.3 xdrstdio_create.3 \
                xdr.3 xdr_string.3 \
                xdr.3 xdr_u_char.3 \
index 3482346..af83b61 100644 (file)
@@ -44,6 +44,10 @@ DF402.0 {
     xdrstdio_create;
 };
 
+DF404.0 {
+    xdr_sizeof;
+};
+
 DFprivate_1.0 {
     __xdrrec_getrec;
     __xdrrec_setnonblock;
index 84ab038..00f6484 100644 (file)
@@ -1,7 +1,7 @@
 .\" @(#)xdr.3n 2.2 88/08/03 4.0 RPCSRC; from 1.16 88/03/14 SMI
 .\" $FreeBSD: src/lib/libc/xdr/xdr.3,v 1.17 2005/11/24 07:12:01 ru Exp $
 .\"
-.Dd April 23, 2009
+.Dd July 30, 2015
 .Dt XDR 3
 .Os
 .Sh NAME
@@ -32,6 +32,7 @@
 .Nm xdr_reference ,
 .Nm xdr_setpos ,
 .Nm xdr_short ,
+.Nm xdr_sizeof ,
 .Nm xdrstdio_create ,
 .Nm xdr_string ,
 .Nm xdr_u_char ,
@@ -574,6 +575,18 @@ A filter primitive that translates between C
 integers and their external representations.
 This routine returns one if it succeeds, zero otherwise.
 .Pp
+.It Xo
+.Ft unsigned long
+.Xc
+.It Xo
+.Fn xdr_sizeof "xdrproc_t func" "void *data"
+.Xc
+.Pp
+This routine returns the amount of memory required to encode
+.Fa data
+using filter
+.Fa func .
+.Pp
 .It Li "#ifdef _STDIO_H_"
 .It Li "/* XDR using stdio library */"
 .It Xo
index bb8c5b0..6e13f7f 100644 (file)
@@ -1,39 +1,39 @@
-/*
- * 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.
+/*-
+ * Copyright (c) 2010, Oracle America, Inc.
  *
- * 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.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
  *
- * 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.
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ *       copyright notice, this list of conditions and the following
+ *       disclaimer in the documentation and/or other materials
+ *       provided with the distribution.
+ *     * Neither the name of the "Oracle America, Inc." nor the names of its
+ *       contributors may be used to endorse or promote products derived
+ *       from this software without specific prior written permission.
  *
- * 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.
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ *   FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ *   COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ *   INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ *   DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ *   GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ *   INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ *   WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California  94043
- *
- * $FreeBSD: src/lib/libc/xdr/xdr_sizeof.c,v 1.5 2003/03/07 13:19:40 nectar Exp $
+ * $FreeBSD: head/lib/libc/xdr/xdr_sizeof.c 283835 2015-05-31 19:09:24Z rodrigc $
  */
 
 /*
  * xdr_sizeof.c
  *
- * Copyright 1990 Sun Microsystems, Inc.
- *
  * General purpose routine to see how much space something will use
  * when serialized using XDR.
  */
@@ -47,7 +47,7 @@
 
 /* ARGSUSED */
 static bool_t
-x_putlong(XDR *xdrs, long *longp __unused)
+x_putlong(XDR *xdrs, const long *longp __unused)
 {
        xdrs->x_handy += BYTES_PER_XDR_UNIT;
        return (TRUE);
@@ -55,7 +55,7 @@ x_putlong(XDR *xdrs, long *longp __unused)
 
 /* ARGSUSED */
 static bool_t
-x_putbytes(XDR *xdrs, char *bp __unused, u_int len)
+x_putbytes(XDR *xdrs, const char *bp __unused, u_int len)
 {
        xdrs->x_handy += len;
        return (TRUE);
@@ -84,7 +84,7 @@ x_inline(XDR *xdrs, u_int len)
        if (xdrs->x_op != XDR_ENCODE) {
                return (NULL);
        }
-       if (len < (u_int)xdrs->x_base) {
+       if (len < (u_int)(uintptr_t)xdrs->x_base) {
                /* x_private was already allocated */
                xdrs->x_handy += len;
                return ((int32_t *) xdrs->x_private);
@@ -96,7 +96,7 @@ x_inline(XDR *xdrs, u_int len)
                        xdrs->x_base = 0;
                        return (NULL);
                }
-               xdrs->x_base = (caddr_t) len;
+               xdrs->x_base = (caddr_t)(uintptr_t)len;
                xdrs->x_handy += len;
                return ((int32_t *) xdrs->x_private);
        }