1*6777b538SAndroid Build Coastguard Worker /*
2*6777b538SAndroid Build Coastguard Worker * testModule.c : a small tester program for xmlModule
3*6777b538SAndroid Build Coastguard Worker *
4*6777b538SAndroid Build Coastguard Worker * See Copyright for the status of this software.
5*6777b538SAndroid Build Coastguard Worker *
6*6777b538SAndroid Build Coastguard Worker * [email protected]
7*6777b538SAndroid Build Coastguard Worker */
8*6777b538SAndroid Build Coastguard Worker
9*6777b538SAndroid Build Coastguard Worker #include <stdio.h>
10*6777b538SAndroid Build Coastguard Worker #include <libxml/xmlversion.h>
11*6777b538SAndroid Build Coastguard Worker
12*6777b538SAndroid Build Coastguard Worker #ifdef LIBXML_MODULES_ENABLED
13*6777b538SAndroid Build Coastguard Worker
14*6777b538SAndroid Build Coastguard Worker #include <limits.h>
15*6777b538SAndroid Build Coastguard Worker #include <string.h>
16*6777b538SAndroid Build Coastguard Worker #include <stdarg.h>
17*6777b538SAndroid Build Coastguard Worker
18*6777b538SAndroid Build Coastguard Worker #include <libxml/xmlmemory.h>
19*6777b538SAndroid Build Coastguard Worker #include <libxml/debugXML.h>
20*6777b538SAndroid Build Coastguard Worker #include <libxml/xmlmodule.h>
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard Worker #ifdef _WIN32
23*6777b538SAndroid Build Coastguard Worker #define MODULE_PATH "."
24*6777b538SAndroid Build Coastguard Worker #include <stdlib.h> /* for _MAX_PATH */
25*6777b538SAndroid Build Coastguard Worker #ifndef __MINGW32__
26*6777b538SAndroid Build Coastguard Worker #define PATH_MAX _MAX_PATH
27*6777b538SAndroid Build Coastguard Worker #endif
28*6777b538SAndroid Build Coastguard Worker #else
29*6777b538SAndroid Build Coastguard Worker #define MODULE_PATH ".libs"
30*6777b538SAndroid Build Coastguard Worker #endif
31*6777b538SAndroid Build Coastguard Worker
32*6777b538SAndroid Build Coastguard Worker /* Used for SCO Openserver*/
33*6777b538SAndroid Build Coastguard Worker #ifndef PATH_MAX
34*6777b538SAndroid Build Coastguard Worker #ifdef _POSIX_PATH_MAX
35*6777b538SAndroid Build Coastguard Worker #define PATH_MAX _POSIX_PATH_MAX
36*6777b538SAndroid Build Coastguard Worker #else
37*6777b538SAndroid Build Coastguard Worker #define PATH_MAX 4096
38*6777b538SAndroid Build Coastguard Worker #endif
39*6777b538SAndroid Build Coastguard Worker #endif
40*6777b538SAndroid Build Coastguard Worker
41*6777b538SAndroid Build Coastguard Worker typedef int (*hello_world_t)(void);
42*6777b538SAndroid Build Coastguard Worker
main(int argc ATTRIBUTE_UNUSED,char ** argv ATTRIBUTE_UNUSED)43*6777b538SAndroid Build Coastguard Worker int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
44*6777b538SAndroid Build Coastguard Worker xmlChar filename[PATH_MAX];
45*6777b538SAndroid Build Coastguard Worker xmlModulePtr module = NULL;
46*6777b538SAndroid Build Coastguard Worker hello_world_t hello_world = NULL;
47*6777b538SAndroid Build Coastguard Worker
48*6777b538SAndroid Build Coastguard Worker /* build the module filename, and confirm the module exists */
49*6777b538SAndroid Build Coastguard Worker xmlStrPrintf(filename, sizeof(filename),
50*6777b538SAndroid Build Coastguard Worker "%s/testdso%s",
51*6777b538SAndroid Build Coastguard Worker (const xmlChar*)MODULE_PATH,
52*6777b538SAndroid Build Coastguard Worker (const xmlChar*)LIBXML_MODULE_EXTENSION);
53*6777b538SAndroid Build Coastguard Worker
54*6777b538SAndroid Build Coastguard Worker module = xmlModuleOpen((const char*)filename, 0);
55*6777b538SAndroid Build Coastguard Worker if (module == NULL) {
56*6777b538SAndroid Build Coastguard Worker fprintf(stderr, "Failed to open module\n");
57*6777b538SAndroid Build Coastguard Worker return(1);
58*6777b538SAndroid Build Coastguard Worker }
59*6777b538SAndroid Build Coastguard Worker
60*6777b538SAndroid Build Coastguard Worker if (xmlModuleSymbol(module, "hello_world", (void **) &hello_world)) {
61*6777b538SAndroid Build Coastguard Worker fprintf(stderr, "Failure to lookup\n");
62*6777b538SAndroid Build Coastguard Worker return(1);
63*6777b538SAndroid Build Coastguard Worker }
64*6777b538SAndroid Build Coastguard Worker if (hello_world == NULL) {
65*6777b538SAndroid Build Coastguard Worker fprintf(stderr, "Lookup returned NULL\n");
66*6777b538SAndroid Build Coastguard Worker return(1);
67*6777b538SAndroid Build Coastguard Worker }
68*6777b538SAndroid Build Coastguard Worker
69*6777b538SAndroid Build Coastguard Worker (*hello_world)();
70*6777b538SAndroid Build Coastguard Worker
71*6777b538SAndroid Build Coastguard Worker xmlModuleClose(module);
72*6777b538SAndroid Build Coastguard Worker
73*6777b538SAndroid Build Coastguard Worker return(0);
74*6777b538SAndroid Build Coastguard Worker }
75*6777b538SAndroid Build Coastguard Worker
76*6777b538SAndroid Build Coastguard Worker #else
main(int argc ATTRIBUTE_UNUSED,char ** argv ATTRIBUTE_UNUSED)77*6777b538SAndroid Build Coastguard Worker int main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED) {
78*6777b538SAndroid Build Coastguard Worker printf("%s : Module support not compiled in\n", argv[0]);
79*6777b538SAndroid Build Coastguard Worker return(0);
80*6777b538SAndroid Build Coastguard Worker }
81*6777b538SAndroid Build Coastguard Worker #endif /* LIBXML_SCHEMAS_ENABLED */
82