1
2 /*
3 * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
4 *
5 * Openvision retains the copyright to derivative works of
6 * this source code. Do *NOT* create a derivative of this
7 * source code before consulting with your legal department.
8 * Do *NOT* integrate *ANY* of this source code into another
9 * product before consulting with your legal department.
10 *
11 * For further information, read the top-level Openvision
12 * copyright which is contained in the top-level MIT Kerberos
13 * copyright.
14 *
15 * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
16 *
17 */
18
19
20 /* @(#)xdr_mem.c 2.1 88/07/29 4.0 RPCSRC */
21 /*
22 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
23 * unrestricted use provided that this legend is included on all tape
24 * media and as a part of the software program in whole or part. Users
25 * may copy or modify Sun RPC without charge, but are not authorized
26 * to license or distribute it to anyone else except as part of a product or
27 * program developed by the user.
28 *
29 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
30 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
31 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
32 *
33 * Sun RPC is provided with no support and without any obligation on the
34 * part of Sun Microsystems, Inc. to assist in its use, correction,
35 * modification or enhancement.
36 *
37 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
38 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
39 * OR ANY PART THEREOF.
40 *
41 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
42 * or profits or other special, indirect and consequential damages, even if
43 * Sun has been advised of the possibility of such damages.
44 *
45 * Sun Microsystems, Inc.
46 * 2550 Garcia Avenue
47 * Mountain View, California 94043
48 */
49 #if !defined(lint) && defined(SCCSIDS)
50 static char sccsid[] = "@(#)xdr_mem.c 1.19 87/08/11 Copyr 1984 Sun Micro";
51 #endif
52
53 /*
54 * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved.
55 *
56 */
57
58 #include "admin.h"
59 #include <rpc/types.h>
60 #include <rpc/xdr.h>
61 #include <dyn/dyn.h>
62
63 /* Solaris Kerberos - 116 resync */
64 static bool_t xdralloc_putlong();
65 static bool_t xdralloc_putbytes();
66 static unsigned int xdralloc_getpos();
67 static rpc_inline_t * xdralloc_inline();
68 static void xdralloc_destroy();
69 static bool_t xdralloc_notsup_getlong();
70 static bool_t xdralloc_notsup_getbytes();
71 static bool_t xdralloc_notsup_setpos();
72 static struct xdr_ops xdralloc_ops = {
73 xdralloc_notsup_getlong,
74 xdralloc_putlong,
75 xdralloc_notsup_getbytes,
76 xdralloc_putbytes,
77 xdralloc_getpos,
78 xdralloc_notsup_setpos,
79 xdralloc_inline,
80 xdralloc_destroy,
81 };
82
83 /*
84 * The procedure xdralloc_create initializes a stream descriptor for a
85 * memory buffer.
86 */
xdralloc_create(XDR * xdrs,enum xdr_op op)87 void xdralloc_create(XDR *xdrs, enum xdr_op op)
88 {
89 xdrs->x_op = op;
90 xdrs->x_ops = &xdralloc_ops;
91 xdrs->x_private = (caddr_t) DynCreate(sizeof(char), -4);
92 /* not allowed to fail */
93 }
94
xdralloc_getdata(XDR * xdrs)95 caddr_t xdralloc_getdata(XDR *xdrs)
96 {
97 return (caddr_t) DynGet((DynObject) xdrs->x_private, 0);
98 }
99
xdralloc_release(XDR * xdrs)100 void xdralloc_release(XDR *xdrs)
101 {
102 DynRelease((DynObject) xdrs->x_private);
103 }
104
xdralloc_destroy(XDR * xdrs)105 static void xdralloc_destroy(XDR *xdrs)
106 {
107 DynDestroy((DynObject) xdrs->x_private);
108 }
109
xdralloc_notsup_getlong(register XDR * xdrs,long * lp)110 static bool_t xdralloc_notsup_getlong(
111 register XDR *xdrs,
112 long *lp)
113 {
114 return FALSE;
115 }
116
xdralloc_putlong(register XDR * xdrs,long * lp)117 static bool_t xdralloc_putlong(
118 register XDR *xdrs,
119 long *lp)
120 {
121 int l = htonl((uint32_t) *lp); /* XXX need bounds checking */
122
123 /* XXX assumes sizeof(int)==4 */
124 if (DynInsert((DynObject) xdrs->x_private,
125 DynSize((DynObject) xdrs->x_private), &l,
126 sizeof(int)) != DYN_OK)
127 return FALSE;
128 return (TRUE);
129 }
130
131
xdralloc_notsup_getbytes(register XDR * xdrs,caddr_t addr,register unsigned int len)132 static bool_t xdralloc_notsup_getbytes(
133 register XDR *xdrs,
134 caddr_t addr,
135 register unsigned int len)
136 {
137 return FALSE;
138 }
139
140
xdralloc_putbytes(register XDR * xdrs,caddr_t addr,register unsigned int len)141 static bool_t xdralloc_putbytes(
142 register XDR *xdrs,
143 caddr_t addr,
144 register unsigned int len)
145 {
146 if (DynInsert((DynObject) xdrs->x_private,
147 DynSize((DynObject) xdrs->x_private),
148 addr, (int) len) != DYN_OK)
149 return FALSE;
150 return TRUE;
151 }
152
xdralloc_getpos(XDR * xdrs)153 static unsigned int xdralloc_getpos(XDR *xdrs)
154 {
155 return DynSize((DynObject) xdrs->x_private);
156 }
157
xdralloc_notsup_setpos(register XDR * xdrs,unsigned int lp)158 static bool_t xdralloc_notsup_setpos(
159 register XDR *xdrs,
160 unsigned int lp)
161 {
162 return FALSE;
163 }
164
165
166
xdralloc_inline(register XDR * xdrs,int len)167 static rpc_inline_t *xdralloc_inline(
168 register XDR *xdrs,
169 int len)
170 {
171 return (rpc_inline_t *) 0;
172 }
173