]> sourceware.org Git - newlib-cygwin.git/commitdiff
* dlfcn.cc (get_full_path_of_dll): Drop enforcing a .dll suffix.
authorCorinna Vinschen <corinna@vinschen.de>
Mon, 2 Nov 2009 14:39:08 +0000 (14:39 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Mon, 2 Nov 2009 14:39:08 +0000 (14:39 +0000)
(dlopen): If last path component has no dot, append one to override
automatic .dll suffix in LoadLibrary.

winsup/cygwin/ChangeLog
winsup/cygwin/dlfcn.cc

index 99fcb9dc03cb24111394d025f60c8b5672072a12..c19de6228a11b99b3b5f593f469ffd633e37cacf 100644 (file)
@@ -1,3 +1,9 @@
+2009-11-02  Corinna Vinschen  <corinna@vinschen.de>
+
+       * dlfcn.cc (get_full_path_of_dll): Drop enforcing a .dll suffix.
+       (dlopen): If last path component has no dot, append one to override
+       automatic .dll suffix in LoadLibrary.
+
 2009-11-02  Corinna Vinschen  <corinna@vinschen.de>
 
        * miscfuncs.h (transform_chars): Declare.  Define inline variation here.
index bc95e221c483df00bcf9f6261b50e4dfc6b66234..e62d74cb3d9a287cfb024f8a4368bba8c6124139 100644 (file)
@@ -53,15 +53,6 @@ get_full_path_of_dll (const char* str, path_conv &real_filename)
 
   strcpy (name, str);  /* Put it somewhere where we can manipulate it. */
 
-  /* Add extension if necessary */
-  if (str[len - 1] != '.')
-    {
-      /* Add .dll only if no extension provided. */
-      const char *p = strrchr (str, '.');
-      if (!p || strpbrk (p, "\\/"))
-       strcat (name, ".dll");
-    }
-
   if (isabspath (name) ||
       (check_path_access ("LD_LIBRARY_PATH=", name, real_filename)
        ?: check_path_access ("/usr/lib", name, real_filename)) == NULL)
@@ -93,6 +84,12 @@ dlopen (const char *name, int)
          wchar_t *path = tp.w_get ();
 
          pc.get_wide_win32_path (path);
+         /* Check if the last path component contains a dot.  If so,
+            leave the filename alone.  Otherwise add a traiing dot
+            to override LoadLibrary's automatic adding of a ".dll" suffix. */
+         wchar_t *last_bs = wcsrchr (path, L'\\');
+         if (last_bs && !wcschr (last_bs, L'.'))
+           wcscat (last_bs, L".");
 
          /* Workaround for broken DLLs built against Cygwin versions 1.7.0-49
             up to 1.7.0-57.  They override the cxx_malloc pointer in their
This page took 0.035844 seconds and 5 git commands to generate.