Merge WinCE and Win32 directories -- Initial patch
[p5sagit/p5-mst-13.2.git] / win32 / dl_win32.xs
index 69910dd..6c094d2 100644 (file)
@@ -68,7 +68,7 @@ static int
 dl_static_linked(char *filename)
 {
     char **p;
-    char* ptr;
+    char *ptr, *hptr;
     static char subStr[] = "/auto/";
     char szBuffer[MAX_PATH];
 
@@ -90,7 +90,14 @@ dl_static_linked(char *filename)
        ptr = szBuffer;
 
     for (p = staticlinkmodules; *p;p++) {
-       if (strstr(ptr, *p)) return 1;
+       if (hptr = strstr(ptr, *p)) {
+           /* found substring, need more detailed check if module name match */
+           if (hptr==ptr) {
+               return strcmp(ptr, *p)==0;
+           }
+           if (hptr[strlen(*p)] == 0)
+               return hptr[-1]=='/';
+       }
     };
     return 0;
 }
@@ -112,7 +119,7 @@ dl_load_file(filename,flags=0)
        RETVAL = PerlProc_DynaLoad(filename);
     }
     else
-       RETVAL = (void*) GetModuleHandle(NULL);
+       RETVAL = (void*) Win_GetModuleHandle(NULL);
     DLDEBUG(2,PerlIO_printf(Perl_debug_log," libref=%x\n", RETVAL));
     ST(0) = sv_newmortal() ;
     if (RETVAL == NULL)
@@ -122,6 +129,18 @@ dl_load_file(filename,flags=0)
        sv_setiv( ST(0), (IV)RETVAL);
   }
 
+int
+dl_unload_file(libref)
+    void *     libref
+  CODE:
+    DLDEBUG(1,PerlIO_printf(Perl_debug_log, "dl_unload_file(%lx):\n", PTR2ul(libref)));
+    RETVAL = FreeLibrary(libref);
+    if (!RETVAL)
+        SaveError(aTHX_ "unload_file:%s", OS_Error_String(aTHX)) ;
+    DLDEBUG(2,PerlIO_printf(Perl_debug_log, " retval = %d\n", RETVAL));
+  OUTPUT:
+    RETVAL
+
 void *
 dl_find_symbol(libhandle, symbolname)
     void *     libhandle