]> git.neil.brown.name Git - TABS.git/blob - database/db_decode.c
Terminal Alocation and Booking System - June 2006
[TABS.git] / database / db_decode.c
1 #include        "db_header.h"
2
3 /* these routines are to un XDR structures.  There are two forms */
4  /* provided, a plain for a gdbm data structure, and an opaque for */
5  /* data delivered across the network */
6
7 bool_t datum_decode (datum * content, void * data, xdrproc_t xdr_fn )
8 {
9         XDR xdrs;
10         xdrmem_create(&xdrs, content->dptr,content->dsize, XDR_DECODE);
11         return (xdr_fn(&xdrs, data)) ;
12 }
13
14 bool_t item_decode (item * val, void *data, xdrproc_t xdr_fn)
15 {
16         XDR xdrs;
17     
18         xdrmem_create(&xdrs, val->item_val,val->item_len, XDR_DECODE);
19         return (xdr_fn(&xdrs, data));
20 }
21
22 static char *buf = NULL;
23 static int bufsize = 0;
24
25 bool_t item_encode(item * val, void * data, xdrproc_t xdr_fn)
26 {
27         XDR xdrs;
28         if (buf == NULL)
29         {
30                 buf = malloc(bufsize = 16384);
31         }
32         xdrmem_create(&xdrs, buf, bufsize-1024, XDR_ENCODE);
33         while (!xdr_fn(&xdrs, data))
34         {
35                 free(buf);
36                 buf = malloc(bufsize += 8192);
37                 xdrmem_create(&xdrs, buf, bufsize-1024, XDR_ENCODE);
38         }
39     
40         val->item_val = buf;
41         val->item_len = XDR_GETPOS(&xdrs);
42         return TRUE;
43 }
44
45 bool_t datum_encode(datum * val, void * data, xdrproc_t xdr_fn)
46 {
47         XDR xdrs;
48         if (buf == NULL)
49         {
50                 buf = malloc(bufsize = 16384);
51         }
52         xdrmem_create(&xdrs, buf, bufsize, XDR_ENCODE);
53         while (!xdr_fn(&xdrs, data))
54         {
55                 free(buf);
56                 buf = malloc(bufsize += 8192);
57                 xdrmem_create(&xdrs, buf, bufsize, XDR_ENCODE);
58         }
59     
60         val->dptr = buf;
61         val->dsize = XDR_GETPOS(&xdrs);
62         return TRUE;
63 }