-/* $Id: recctrl.c,v 1.19 2005-03-31 12:42:07 adam Exp $
- Copyright (C) 1995-2005
+/* $Id: recctrl.c,v 1.27 2006-06-02 13:55:55 marc Exp $
+ Copyright (C) 1995-2006
Index Data ApS
This file is part of the Zebra server.
static void recTypeClass_add (struct recTypeClass **rts, RecType *rt,
NMEM nmem, void *module_handle);
+
RecTypeClass recTypeClass_create (Res res, NMEM nmem)
{
struct recTypeClass *rts = 0;
- const char *module_path = res_get_def(res, "modulePath",
- DEFAULT_MODULE_PATH);
#ifdef IDZEBRA_STATIC_GRS_SGML
if (1)
recTypeClass_add (&rts, idzebra_filter_grs_sgml, nmem, 0);
}
#endif
+
#ifdef IDZEBRA_STATIC_TEXT
if (1)
{
recTypeClass_add (&rts, idzebra_filter_text, nmem, 0);
}
#endif
+
#ifdef IDZEBRA_STATIC_GRS_XML
#if HAVE_EXPAT_H
if (1)
}
#endif
#endif
+
#ifdef IDZEBRA_STATIC_GRS_REGX
if (1)
{
recTypeClass_add (&rts, idzebra_filter_grs_regx, nmem, 0);
}
#endif
+
#ifdef IDZEBRA_STATIC_GRS_MARC
if (1)
{
recTypeClass_add (&rts, idzebra_filter_grs_marc, nmem, 0);
}
#endif
-#ifdef IDZEBRA_STATIC_GRS_DANBIB
- if (1)
- {
- extern RecType idzebra_filter_grs_danbib[];
- recTypeClass_add (&rts, idzebra_filter_grs_danbib, nmem, 0);
- }
-#endif
+
#ifdef IDZEBRA_STATIC_SAFARI
if (1)
{
recTypeClass_add (&rts, idzebra_filter_safari, nmem, 0);
}
#endif
+
#ifdef IDZEBRA_STATIC_ALVIS
+#if HAVE_XSLT
if (1)
{
extern RecType idzebra_filter_alvis[];
recTypeClass_add (&rts, idzebra_filter_alvis, nmem, 0);
}
#endif
+#endif
+ return rts;
+}
+
+void recTypeClass_load_modules(RecTypeClass *rts, NMEM nmem,
+ const char *module_path)
+{
#if HAVE_DLFCN_H
if (module_path)
{
if (mod_p && (fl = dlsym(mod_p, "idzebra_filter")))
{
yaz_log(YLOG_LOG, "Loaded filter module %s", fname);
- recTypeClass_add(&rts, fl, nmem, mod_p);
+ recTypeClass_add(rts, fl, nmem, mod_p);
}
else if (mod_p)
{
}
}
#endif
- return rts;
}
-static void recTypeClass_add (struct recTypeClass **rts, RecType *rt,
- NMEM nmem, void *module_handle)
+static void recTypeClass_add(struct recTypeClass **rts, RecType *rt,
+ NMEM nmem, void *module_handle)
{
while (*rt)
{
slen++; /* skip . */
if (rti->recType->config)
- (*(rti->recType)->config)(rti->clientData, res, name+slen);
+ {
+ if ((*(rti->recType)->config)
+ (rti->clientData, res, name+slen) != ZEBRA_OK)
+ return 0;
+ }
return rti->recType;
}
}
return 0;
}
+/*
+ * Local variables:
+ * c-basic-offset: 4
+ * indent-tabs-mode: nil
+ * End:
+ * vim: shiftwidth=4 tabstop=8 expandtab
+ */
+