X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=blobdiff_plain;ds=sidebyside;f=recctrl%2Frecctrl.c;h=a19874feb711cd6ab064cb20d31f238ada63b0a9;hb=108519e957961eea3ecf05bb064fac6f3d7db7ad;hp=2870cf36ef505268c484ce8272970bbddc2f25e3;hpb=8ee402d79e37344b08c2b54ad45b50e8327a6c03;p=idzebra-moved-to-github.git diff --git a/recctrl/recctrl.c b/recctrl/recctrl.c index 2870cf3..a19874f 100644 --- a/recctrl/recctrl.c +++ b/recctrl/recctrl.c @@ -1,4 +1,4 @@ -/* $Id: recctrl.c,v 1.7 2004-09-27 10:44:50 adam Exp $ +/* $Id: recctrl.c,v 1.14 2004-11-29 21:55:28 adam Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -28,7 +28,7 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #include -#include +#include struct recTypeClass { RecType recType; @@ -48,6 +48,27 @@ struct recTypes { struct recTypeInstance *entries; }; +#ifdef IDZEBRA_STATIC_TEXT + extern RecType idzebra_filter_text[]; +#endif +#ifdef IDZEBRA_STATIC_GRS_XML +#if HAVE_EXPAT_H + extern RecType idzebra_filter_grs_xml[]; +#endif +#endif +#ifdef IDZEBRA_STATIC_GRS_REGX + extern RecType idzebra_filter_grs_regx[]; +#endif +#ifdef IDZEBRA_STATIC_GRS_MARC + extern RecType idzebra_filter_grs_marc[]; +#endif +#ifdef IDZEBRA_STATIC_GRS_DANBIB + extern RecType idzebra_filter_grs_danbib[]; +#endif +#ifdef IDZEBRA_STATIC_SAFARI + extern RecType idzebra_filter_safari[]; +#endif + static void recTypeClass_add (struct recTypeClass **rts, RecType *rt, NMEM nmem, void *module_handle); @@ -60,34 +81,30 @@ RecTypeClass recTypeClass_create (Res res, NMEM nmem) extern RecType idzebra_filter_grs_sgml[]; recTypeClass_add (&rts, idzebra_filter_grs_sgml, nmem, 0); #ifdef IDZEBRA_STATIC_TEXT - extern RecType idzebra_filter_text[]; recTypeClass_add (&rts, idzebra_filter_text, nmem, 0); #endif #ifdef IDZEBRA_STATIC_GRS_XML - extern RecType idzebra_filter_grs_xml[]; +#if HAVE_EXPAT_H recTypeClass_add (&rts, idzebra_filter_grs_xml, nmem, 0); #endif +#endif #ifdef IDZEBRA_STATIC_GRS_REGX - extern RecType idzebra_filter_grs_regx[]; recTypeClass_add (&rts, idzebra_filter_grs_regx, nmem, 0); #endif #ifdef IDZEBRA_STATIC_GRS_MARC - extern RecType idzebra_filter_grs_marc[]; recTypeClass_add (&rts, idzebra_filter_grs_marc, nmem, 0); #endif -#ifdef IDZEBRA_STATIC_GRS_PERL - extern RecType idzebra_filter_grs_perl[]; - recTypeClass_add (&rts, idzebra_filter_grs_perl, nmem, 0); -#endif #ifdef IDZEBRA_STATIC_GRS_DANBIB - extern RecType idzebra_filter_grs_danbib[]; recTypeClass_add (&rts, idzebra_filter_grs_danbib, nmem, 0); #endif +#ifdef IDZEBRA_STATIC_SAFARI + recTypeClass_add (&rts, idzebra_filter_safari, nmem, 0); +#endif if (module_path) { DIR *dir = opendir(module_path); - yaz_log(LOG_LOG, "searching filters in %s", module_path); + yaz_log(YLOG_LOG, "searching filters in %s", module_path); if (dir) { struct dirent *de; @@ -95,8 +112,7 @@ RecTypeClass recTypeClass_create (Res res, NMEM nmem) while ((de = readdir(dir))) { size_t dlen = strlen(de->d_name); - if ((de->d_type == DT_REG || de->d_type == DT_LNK) - && dlen >= 5 && + if (dlen >= 5 && !memcmp(de->d_name, "mod-", 4) && !strcmp(de->d_name + dlen - 3, ".so")) { @@ -108,20 +124,20 @@ RecTypeClass recTypeClass_create (Res res, NMEM nmem) mod_p = dlopen(fname, RTLD_NOW|RTLD_GLOBAL); if (mod_p && (fl = dlsym(mod_p, "idzebra_filter"))) { - yaz_log(LOG_LOG, "Loaded filter module %s", fname); + yaz_log(YLOG_LOG, "Loaded filter module %s", fname); recTypeClass_add(&rts, fl, nmem, mod_p); } else if (mod_p) { const char *err = dlerror(); - yaz_log(LOG_WARN, "dlsym failed %s %s", + yaz_log(YLOG_WARN, "dlsym failed %s %s", fname, err ? err : "none"); dlclose(mod_p); } else { const char *err = dlerror(); - yaz_log(LOG_WARN, "dlopen failed %s %s", + yaz_log(YLOG_WARN, "dlopen failed %s %s", fname, err ? err : "none"); } @@ -144,7 +160,7 @@ static void recTypeClass_add (struct recTypeClass **rts, RecType *rt, r->next = *rts; *rts = r; - yaz_log(LOG_LOG, "Adding filter %s", (*rt)->name); + yaz_log(YLOG_LOG, "Adding filter %s", (*rt)->name); r->module_handle = module_handle; module_handle = 0; /* so that we only store module_handle once */ r->recType = *rt;