X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=retrieval%2Fd1_handle.c;h=51cf97131844d8dbdd626564a6a6cc5835cac349;hb=5b690aebb8dc2d05cad8f668de8fd821a1c231fa;hp=062b4ad0826fb32aa811b4f3fdbf5fe649abf73c;hpb=0eb2cd457af935a98a1ae9d3b3cbb7c83cf3e368;p=yaz-moved-to-github.git diff --git a/retrieval/d1_handle.c b/retrieval/d1_handle.c index 062b4ad..51cf971 100644 --- a/retrieval/d1_handle.c +++ b/retrieval/d1_handle.c @@ -1,51 +1,55 @@ /* - * Copyright (c) 1995-1997, Index Data. + * Copyright (c) 1995-2002, Index Data. * See the file LICENSE for details. - * Sebastian Hammer, Adam Dickmeiss - * - * $Log: d1_handle.c,v $ - * Revision 1.2 1997-09-30 11:50:04 adam - * Added handler data1_get_map_buf that is used by data1_nodetomarc. - * - * Revision 1.1 1997/09/17 12:28:24 adam - * Introduced new 'global' data1 handle. * + * $Id: d1_handle.c,v 1.9 2002-07-29 20:04:08 adam Exp $ */ #include #include -#include -#include +#include +#include struct data1_handle_info { WRBUF wrbuf; char *tab_path; + char *tab_root; char *read_buf; int read_len; data1_absyn_cache absyn_cache; + data1_attset_cache attset_cache; char *map_buf; int map_len; NMEM mem; + int flags; }; data1_handle data1_create (void) { - data1_handle p = xmalloc (sizeof(*p)); + return data1_createx(0); +} + +data1_handle data1_createx (int flags) +{ + data1_handle p = (data1_handle)xmalloc (sizeof(*p)); if (!p) return NULL; p->tab_path = NULL; + p->tab_root = NULL; p->wrbuf = wrbuf_alloc(); p->read_buf = NULL; p->read_len = 0; p->map_buf = NULL; p->map_len = 0; p->absyn_cache = NULL; + p->attset_cache = NULL; p->mem = nmem_create (); + p->flags = flags; return p; } @@ -59,6 +63,11 @@ data1_absyn_cache *data1_absyn_cache_get (data1_handle dh) return &dh->absyn_cache; } +data1_attset_cache *data1_attset_cache_get (data1_handle dh) +{ + return &dh->attset_cache; +} + void data1_destroy (data1_handle dh) { if (!dh) @@ -66,6 +75,8 @@ void data1_destroy (data1_handle dh) wrbuf_free (dh->wrbuf, 1); if (dh->tab_path) xfree (dh->tab_path); + if (dh->tab_root) + xfree (dh->tab_root); if (dh->read_buf) xfree (dh->read_buf); if (dh->map_buf) @@ -83,29 +94,31 @@ WRBUF data1_get_wrbuf (data1_handle dp) char **data1_get_read_buf (data1_handle dp, int **lenp) { *lenp = &dp->read_len; - logf (LOG_DEBUG, "data1_get_read_buf lenp=%u", **lenp); + yaz_log (LOG_DEBUG, "data1_get_read_buf lenp=%u", **lenp); return &dp->read_buf; } char **data1_get_map_buf (data1_handle dp, int **lenp) { *lenp = &dp->map_len; - logf (LOG_DEBUG, "data1_get_map_buf lenp=%u", **lenp); + yaz_log (LOG_DEBUG, "data1_get_map_buf lenp=%u", **lenp); return &dp->map_buf; } void data1_set_tabpath (data1_handle dp, const char *p) { - if (dp->tab_path) - { - xfree (dp->tab_path); - dp->tab_path = NULL; - } + xfree (dp->tab_path); + dp->tab_path = NULL; + if (p) + dp->tab_path = xstrdup (p); +} + +void data1_set_tabroot (data1_handle dp, const char *p) +{ + xfree (dp->tab_root); + dp->tab_root = NULL; if (p) - { - dp->tab_path = xmalloc (strlen(p)+1); - strcpy (dp->tab_path, p); - } + dp->tab_root = xstrdup (p); } const char *data1_get_tabpath (data1_handle dp) @@ -113,3 +126,19 @@ const char *data1_get_tabpath (data1_handle dp) return dp->tab_path; } +const char *data1_get_tabroot (data1_handle dp) +{ + return dp->tab_root; +} + +FILE *data1_path_fopen (data1_handle dh, const char *file, const char *mode) +{ + const char *path = data1_get_tabpath(dh); + const char *root = data1_get_tabroot(dh); + return yaz_fopen (path, file, "r", root); +} + +int data1_is_xmlmode(data1_handle dh) +{ + return dh->flags & DATA1_FLAG_XML; +}