/* * testModule.c : a small tester program for xmlModule * * See Copyright for the status of this software. * * joelwreed@comcast.net */ #include "libxml.h" #ifdef LIBXML_MODULES_ENABLED #include <libxml/xmlversion.h> #include <limits.h> #include <stdio.h> #include <string.h> #include <stdarg.h> #include <libxml/xmlmemory.h> #include <libxml/debugXML.h> #include <libxml/xmlmodule.h> #ifdef _WIN32 #define MODULE_PATH "." #include <stdlib.h> /* for _MAX_PATH */ #ifndef __MINGW32__ #define PATH_MAX _MAX_PATH #endif #else #define MODULE_PATH ".libs" #endif /* Used for SCO Openserver*/ #ifndef PATH_MAX #ifdef _POSIX_PATH_MAX #define PATH_MAX _POSIX_PATH_MAX #else #define PATH_MAX 4096 #endif #endif typedef int (*hello_world_t)(void); int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { xmlChar filename[PATH_MAX]; xmlModulePtr module = NULL; hello_world_t hello_world = NULL; /* build the module filename, and confirm the module exists */ xmlStrPrintf(filename, sizeof(filename), (const xmlChar*) "%s/testdso%s", (const xmlChar*)MODULE_PATH, (const xmlChar*)LIBXML_MODULE_EXTENSION); module = xmlModuleOpen((const char*)filename, 0); if (module) { if (xmlModuleSymbol(module, "hello_world", (void **) &hello_world)) { fprintf(stderr, "Failure to lookup\n"); return(1); } if (hello_world == NULL) { fprintf(stderr, "Lookup returned NULL\n"); return(1); } (*hello_world)(); xmlModuleClose(module); } xmlMemoryDump(); return(0); } #else #include <stdio.h> int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) { printf("%s : Module support not compiled in\n", argv[0]); return(0); } #endif /* LIBXML_SCHEMAS_ENABLED */