]> code.citadel.org Git - citadel.git/blobdiff - citadel/dynloader.c
- port to Cygwin (DLL support, etc.)
[citadel.git] / citadel / dynloader.c
index 459d6d62731e046576483c20cf6df69f7226d40f..251ca2deec08de187cb04e81cf474990de84ec44 100644 (file)
@@ -6,6 +6,10 @@
  *
  */
 
+#ifdef DLL_EXPORT
+#define IN_LIBCIT
+#endif
+
 #include "sysdep.h"
 #include <stdio.h>
 #include <stdlib.h>
@@ -82,7 +86,7 @@ int DLoader_Exec_Cmd(char *cmdbuf)
 void DLoader_Init(char *pathname)
 {
        void *fcn_handle;
-       char dl_error[256];
+       char dl_error[SIZ];
        DIR *dir;
        int i;
        struct dirent *dptr;
@@ -98,12 +102,18 @@ void DLoader_Init(char *pathname)
        while ((dptr = readdir(dir)) != NULL) {
                if (strlen(dptr->d_name) < 4)
                        continue;
+#ifndef __CYGWIN__
                if (strcasecmp(&dptr->d_name[strlen(dptr->d_name)-3], ".so"))
+#else
+               if (strcasecmp(&dptr->d_name[strlen(dptr->d_name)-4], ".dll"))
+#endif
                        continue;
 
                snprintf(pathbuf, PATH_MAX, "%s/%s", pathname, dptr->d_name);
-#ifdef RTLD_NOW
-               if (!(fcn_handle = dlopen(pathbuf, RTLD_NOW)))
+               lprintf(7, "Initializing %s...\n", pathbuf);
+
+#ifdef RTLD_LAZY
+               if (!(fcn_handle = dlopen(pathbuf, RTLD_LAZY)))
 #else                          /* OpenBSD */
                if (!(fcn_handle = dlopen(pathbuf, DL_LAZY)))
 #endif
@@ -238,7 +248,7 @@ void CtdlRegisterServiceHook(int tcp_port,
                        void (*h_command_function) (void) )
 {
        struct ServiceFunctionHook *newfcn;
-       char message[256];
+       char message[SIZ];
 
        newfcn = (struct ServiceFunctionHook *)
            mallok(sizeof(struct ServiceFunctionHook));
@@ -316,9 +326,9 @@ int PerformMessageHooks(struct CtdlMessage *msg, int EventType)
 
        /* Other code may elect to protect this message from server-side
         * handlers; if this is the case, don't do anything.
-        */
        lprintf(9, "** Event type is %d, flags are %d\n",
                EventType, msg->cm_flags);
+        */
        if (msg->cm_flags & CM_SKIP_HOOKS) {
                lprintf(9, "Skipping hooks\n");
                return(0);