gml_Loader_CDAlib.private.h

00001 #define GML_USE_DYNAMIC_LOADER 1
00002 
00003 #include <stdio.h>
00004 #include <dlfcn.h>
00005 #include <string.h>
00006 #include <limits.h>
00007 
00008 #include <cdalib/cda_api.h>
00009 #ifdef GML_USE_DYNAMIC_LOADER
00010 
00011 static void* handle_CDAlib = NULL;
00012 
00013 static typeof(CDA_ErrHandlerInstall)* CDA_ErrHandlerInstall_wrapper = NULL;
00014 
00015 static
00016 int gml_Loader_Load_CDAlib ()
00017 {
00018   char* directories[] = {
00019     "~/Library/Frameworks",
00020     "/Library/Frameworks",
00021     "/System/Library/Frameworks",
00022     (char*)NULL
00023   };
00024   char** currentdir = directories;
00025   char* filename = "cdalib.framework/cdalib";
00026   char path[PATH_MAX] = {0, };
00027   
00028   while (*currentdir != NULL) {
00029     snprintf (path, PATH_MAX, "%s/%s", *currentdir, filename);
00030     handle_CDAlib = dlopen (path, RTLD_NOW);
00031     if (handle_CDAlib != NULL) break;
00032     fprintf (stderr, "[gml_Loader] %s not loadable\n", path);
00033     ++currentdir;
00034   }
00035   if (handle_CDAlib == NULL) return 1;
00036   fprintf (stderr, "[gml_Loader] loaded %s\n", path);
00037   
00038   CDA_ErrHandlerInstall_wrapper = (typeof(CDA_ErrHandlerInstall)*) dlsym (handle_CDAlib, "CDA_ErrHandlerInstall");
00039   if (CDA_ErrHandlerInstall_wrapper == NULL) {
00040     fprintf (stderr, "[gml_Loader] symbol \"CDA_ErrHandlerInstall\" not found\n");
00041     return 1;
00042   }
00043   
00044   
00045   fprintf (stderr, "[gml_Loader] all CDAlib symbols found\n");
00046   return 0;
00047 }
00048 
00049 #define CDA_ErrHandlerInstall CDA_ErrHandlerInstall_wrapper
00050 
00051 
00052 #else /* GML_USE_DYNAMIC_LOADER */
00053 
00054 static
00055 int gml_Loader_Load_CDAlib ()
00056 {
00057   return 0;
00058 }
00059 
00060 #endif /* GML_USE_DYNAMIC_LOADER */
00061 
Generated on Tue Jun 12 14:03:27 2007 for gml by Doxygen 1.5.2.