data1 part of zebra
[idzebra-moved-to-github.git] / data1 / d1_handle.c
1 /*
2  * Copyright (c) 1995-2002, Index Data.
3  * See the file LICENSE for details.
4  *
5  * $Id: d1_handle.c,v 1.1 2002-10-22 12:53:33 adam Exp $
6  */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10
11 #include <yaz/log.h>
12 #include <data1.h>
13
14 struct data1_handle_info {
15     WRBUF wrbuf;
16     char *tab_path;
17     char *tab_root;
18
19     char *read_buf;
20     int read_len;
21
22     data1_absyn_cache absyn_cache;
23     data1_attset_cache attset_cache;
24
25     char *map_buf;
26     int map_len;
27
28     NMEM mem;
29     int flags;
30 };
31
32 data1_handle data1_create (void)
33 {
34     return data1_createx(0);
35 }
36
37 data1_handle data1_createx (int flags)
38 {
39     data1_handle p = (data1_handle)xmalloc (sizeof(*p));
40     if (!p)
41         return NULL;
42     p->tab_path = NULL;
43     p->tab_root = NULL;
44     p->wrbuf = wrbuf_alloc();
45     p->read_buf = NULL;
46     p->read_len = 0;
47     p->map_buf = NULL;
48     p->map_len = 0;
49     p->absyn_cache = NULL;
50     p->attset_cache = NULL;
51     p->mem = nmem_create ();
52     p->flags = flags;
53     return p;
54 }
55
56 NMEM data1_nmem_get (data1_handle dh)
57 {
58     return dh->mem;
59 }
60
61 data1_absyn_cache *data1_absyn_cache_get (data1_handle dh)
62 {
63     return &dh->absyn_cache;
64 }
65
66 data1_attset_cache *data1_attset_cache_get (data1_handle dh)
67 {
68     return &dh->attset_cache;
69 }
70
71 void data1_destroy (data1_handle dh)
72 {
73     if (!dh)
74         return;
75     wrbuf_free (dh->wrbuf, 1);
76     if (dh->tab_path)
77         xfree (dh->tab_path);
78     if (dh->tab_root)
79         xfree (dh->tab_root);
80     if (dh->read_buf)
81         xfree (dh->read_buf);
82     if (dh->map_buf)
83         xfree (dh->map_buf);
84     nmem_destroy (dh->mem);
85     
86     xfree (dh);
87 }
88
89 WRBUF data1_get_wrbuf (data1_handle dp)
90 {
91     return dp->wrbuf;
92 }
93
94 char **data1_get_read_buf (data1_handle dp, int **lenp)
95 {
96     *lenp = &dp->read_len;
97     yaz_log (LOG_DEBUG, "data1_get_read_buf lenp=%u", **lenp);
98     return &dp->read_buf;
99 }
100
101 char **data1_get_map_buf (data1_handle dp, int **lenp)
102 {
103     *lenp = &dp->map_len;
104     yaz_log (LOG_DEBUG, "data1_get_map_buf lenp=%u", **lenp);
105     return &dp->map_buf;
106 }
107
108 void data1_set_tabpath (data1_handle dp, const char *p)
109 {
110     xfree (dp->tab_path);
111     dp->tab_path = NULL;
112     if (p)
113         dp->tab_path = xstrdup (p);
114 }
115
116 void data1_set_tabroot (data1_handle dp, const char *p)
117 {
118     xfree (dp->tab_root);
119     dp->tab_root = NULL;
120     if (p)
121         dp->tab_root = xstrdup (p);
122 }
123
124 const char *data1_get_tabpath (data1_handle dp)
125 {
126     return dp->tab_path;
127 }
128
129 const char *data1_get_tabroot (data1_handle dp)
130 {
131     return dp->tab_root;
132 }
133
134 FILE *data1_path_fopen (data1_handle dh, const char *file, const char *mode)
135 {
136     const char *path = data1_get_tabpath(dh);
137     const char *root = data1_get_tabroot(dh);
138     return yaz_fopen (path, file, "r", root);
139 }
140
141 int data1_is_xmlmode(data1_handle dh)
142 {
143     return dh->flags & DATA1_FLAG_XML;
144 }