5910 libnisdb won't build with modern GCC
[unleashed.git] / usr / src / lib / libnisdb / db_index_entry_c.c
blobf1ea9e6921637925f22393a9553d2d34b4c8e1cc
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License"). You may not use this file except in compliance
7 * with the License.
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
20 * CDDL HEADER END
24 * Copyright 2015 Gary Mills
28 * This is a non-recursive version of XDR routine used for db_index_entry
29 * type.
32 #include <sys/types.h>
33 #include <sys/syslog.h>
34 #include <stdio.h>
35 #include <rpc/types.h>
36 #include <rpc/xdr.h>
37 #include <memory.h>
38 #include "db_index_entry_c.h"
39 #include "db_table_c.h"
40 #include "xdr_nullptr.h"
42 bool_t
43 xdr_db_index_entry(xdrs, objp)
44 register XDR *xdrs;
45 db_index_entry *objp;
47 bool_t more_data;
48 register db_index_entry *ep = objp;
49 register db_index_entry *loc;
50 register db_index_entry *freeptr = NULL;
52 for (;;) {
53 if (!xdr_u_long(xdrs, &ep->hashval))
54 return (FALSE);
55 if (!xdr_pointer(xdrs, (char **)&ep->key, sizeof (item),
56 (xdrproc_t) xdr_item))
57 return (FALSE);
58 if (!xdr_entryp(xdrs, &ep->location))
59 return (FALSE);
60 if (!xdr_nullptr(xdrs, &ep->next_result))
61 return (FALSE);
64 * The following code replaces the call to
65 * xdr_pointer(
66 * xdrs,
67 * (char **)&ep->next,
68 * sizeof (db_index_entry),
69 * (xdrproc_t) xdr_db_index_entry))
71 * It's a modified version of xdr_refer.c from the rpc library:
72 * @(#)xdr_refer.c 1.8 92/07/20 SMI
77 * the following assignment to more_data is only useful when
78 * encoding and freeing. When decoding, more_data will be
79 * filled by the xdr_bool() routine.
81 more_data = (ep->next != NULL);
82 if (! xdr_bool(xdrs, &more_data))
83 return (FALSE);
84 if (! more_data) {
85 ep->next = NULL;
86 break;
89 loc = ep->next;
92 switch (xdrs->x_op) {
93 case XDR_DECODE:
94 if (loc == NULL) {
95 ep->next = loc = (db_index_entry *)
96 mem_alloc(sizeof (db_index_entry));
97 if (loc == NULL) {
98 syslog(LOG_ERR,
99 "xdr_db_index_entry: mem_alloc failed");
100 return (FALSE);
102 memset(loc, 0, sizeof (db_index_entry));
104 break;
105 case XDR_FREE:
106 if (freeptr != NULL) {
107 mem_free(freeptr, sizeof (db_index_entry));
108 } else
109 ep->next = NULL;
110 freeptr = loc;
111 break;
114 if (loc == NULL)
115 break;
116 ep = loc;
117 } /* for loop */
119 if ((freeptr != NULL) && (xdrs->x_op == XDR_FREE)) {
120 mem_free(freeptr, sizeof (db_index_entry));
123 return (TRUE);
127 bool_t
128 xdr_db_index_entry_p(xdrs, objp)
129 register XDR *xdrs;
130 db_index_entry_p *objp;
133 if (!xdr_pointer(xdrs, (char **)objp, sizeof (db_index_entry),
134 (xdrproc_t) xdr_db_index_entry))
135 return (FALSE);
136 return (TRUE);
141 bool_t
142 xdr_db_free_entry(xdrs, objp)
143 register XDR *xdrs;
144 db_free_entry *objp;
146 bool_t more_data;
147 register db_free_entry *ep = objp;
148 register db_free_entry *loc;
149 register db_free_entry *freeptr = NULL;
151 for (;;) {
152 if (!xdr_entryp(xdrs, &ep->where))
153 return (FALSE);
156 * The following code replaces the call to
157 * xdr_pointer(
158 * xdrs,
159 * (char **)&ep->next,
160 * sizeof (db_free_entry),
161 * (xdrproc_t) xdr_db_free_entry))
163 * It's a modified version of xdr_refer.c from the rpc library:
164 * @(#)xdr_refer.c 1.8 92/07/20 SMI
169 * the following assignment to more_data is only useful when
170 * encoding and freeing. When decoding, more_data will be
171 * filled by the xdr_bool() routine.
173 more_data = (ep->next != NULL);
174 if (! xdr_bool(xdrs, &more_data))
175 return (FALSE);
176 if (! more_data) {
177 ep->next = NULL;
178 break;
181 loc = ep->next;
184 switch (xdrs->x_op) {
185 case XDR_DECODE:
186 if (loc == NULL) {
187 ep->next = loc = (db_free_entry *)
188 mem_alloc(sizeof (db_free_entry));
189 if (loc == NULL) {
190 syslog(LOG_ERR,
191 "db_free_entry: mem_alloc failed");
192 return (FALSE);
194 memset(loc, 0, sizeof (db_free_entry));
196 break;
197 case XDR_FREE:
198 if (freeptr != NULL) {
199 mem_free(freeptr, sizeof (db_free_entry));
200 } else
201 ep->next = NULL;
202 freeptr = loc;
203 break;
206 if (loc == NULL)
207 break;
208 ep = loc;
209 } /* for loop */
211 if ((freeptr != NULL) && (xdrs->x_op == XDR_FREE)) {
212 mem_free(freeptr, sizeof (db_free_entry));
214 return (TRUE);