#include <sys/types.h>
#include <sys/syslog.h>
#include <stdio.h>
#include <rpc/types.h>
#include <rpc/xdr.h>
#include <memory.h>
#include "db_index_entry_c.h"
#include "db_table_c.h"
#include "xdr_nullptr.h"
bool_t
xdr_db_index_entry(XDR *xdrs, db_index_entry *objp)
{
bool_t more_data;
db_index_entry *ep = objp;
db_index_entry *loc;
db_index_entry *freeptr = NULL;
for (;;) {
if (!xdr_u_long(xdrs, &ep->hashval))
return (FALSE);
if (!xdr_pointer(xdrs, (char **)&ep->key, sizeof (item),
(xdrproc_t)xdr_item))
return (FALSE);
if (!xdr_entryp(xdrs, &ep->location))
return (FALSE);
if (!xdr_nullptr(xdrs, &ep->next_result))
return (FALSE);
more_data = (ep->next != NULL);
if (! xdr_bool(xdrs, &more_data))
return (FALSE);
if (! more_data) {
ep->next = NULL;
break;
}
loc = ep->next;
switch (xdrs->x_op) {
case XDR_DECODE:
if (loc == NULL) {
ep->next = loc = (db_index_entry *)
mem_alloc(sizeof (db_index_entry));
if (loc == NULL) {
syslog(LOG_ERR,
"xdr_db_index_entry: mem_alloc failed");
return (FALSE);
}
memset(loc, 0, sizeof (db_index_entry));
}
break;
case XDR_FREE:
if (freeptr != NULL) {
mem_free(freeptr, sizeof (db_index_entry));
} else
ep->next = NULL;
freeptr = loc;
break;
}
if (loc == NULL)
break;
ep = loc;
}
if ((freeptr != NULL) && (xdrs->x_op == XDR_FREE)) {
mem_free(freeptr, sizeof (db_index_entry));
}
return (TRUE);
}
bool_t
xdr_db_index_entry_p(XDR *xdrs, db_index_entry_p *objp)
{
if (!xdr_pointer(xdrs, (char **)objp, sizeof (db_index_entry),
(xdrproc_t)xdr_db_index_entry))
return (FALSE);
return (TRUE);
}
bool_t
xdr_db_free_entry(XDR *xdrs, db_free_entry *objp)
{
bool_t more_data;
db_free_entry *ep = objp;
db_free_entry *loc;
db_free_entry *freeptr = NULL;
for (;;) {
if (!xdr_entryp(xdrs, &ep->where))
return (FALSE);
more_data = (ep->next != NULL);
if (! xdr_bool(xdrs, &more_data))
return (FALSE);
if (! more_data) {
ep->next = NULL;
break;
}
loc = ep->next;
switch (xdrs->x_op) {
case XDR_DECODE:
if (loc == NULL) {
ep->next = loc = (db_free_entry *)
mem_alloc(sizeof (db_free_entry));
if (loc == NULL) {
syslog(LOG_ERR,
"db_free_entry: mem_alloc failed");
return (FALSE);
}
memset(loc, 0, sizeof (db_free_entry));
}
break;
case XDR_FREE:
if (freeptr != NULL) {
mem_free(freeptr, sizeof (db_free_entry));
} else
ep->next = NULL;
freeptr = loc;
break;
}
if (loc == NULL)
break;
ep = loc;
}
if ((freeptr != NULL) && (xdrs->x_op == XDR_FREE)) {
mem_free(freeptr, sizeof (db_free_entry));
}
return (TRUE);
}