X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=retrieval%2Fd1_handle.c;h=541ee84a081bcb8c8994033d4f308f8457635a75;hb=aeec32da5e13c9f46062d07ac3c16582dbd479c8;hp=966eaae0f0bf8ebac13997f944450a263c7cf145;hpb=d9ee01635f03f9095a66f71b73580560d48798e8;p=yaz-moved-to-github.git diff --git a/retrieval/d1_handle.c b/retrieval/d1_handle.c index 966eaae..541ee84 100644 --- a/retrieval/d1_handle.c +++ b/retrieval/d1_handle.c @@ -1,29 +1,8 @@ /* - * Copyright (c) 1995-1999, 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.6 1999-11-30 13:47:12 adam - * Improved installation. Moved header files to include/yaz. - * - * Revision 1.5 1999/08/27 09:40:32 adam - * Renamed logf function to yaz_log. Removed VC++ project files. - * - * Revision 1.4 1998/05/18 13:07:05 adam - * Changed the way attribute sets are handled by the retriaval module. - * Extended Explain conversion / schema. - * Modified server and client to work with ASN.1 compiled protocol handlers. - * - * Revision 1.3 1998/02/11 11:53:35 adam - * Changed code so that it compiles as C++. - * - * 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.8 2002-04-05 12:46:07 adam Exp $ */ #include @@ -35,6 +14,7 @@ struct data1_handle_info { WRBUF wrbuf; char *tab_path; + char *tab_root; char *read_buf; int read_len; @@ -54,6 +34,7 @@ data1_handle data1_create (void) if (!p) return NULL; p->tab_path = NULL; + p->tab_root = NULL; p->wrbuf = wrbuf_alloc(); p->read_buf = NULL; p->read_len = 0; @@ -87,6 +68,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) @@ -117,16 +100,18 @@ char **data1_get_map_buf (data1_handle dp, int **lenp) 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 = (char *)xmalloc (strlen(p)+1); - strcpy (dp->tab_path, 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_root = xstrdup (p); } const char *data1_get_tabpath (data1_handle dp) @@ -134,3 +119,14 @@ 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); +}