From d2344fbbcdad9d98f14acb068145f9a8641b8e62 Mon Sep 17 00:00:00 2001
From: Eric Pouech <Eric.Pouech@wanadoo.fr>
Date: Wed, 13 Oct 1999 15:59:26 +0000
Subject: [PATCH] Fix loading of modules: now search key is module's filename,
 not module's name.

---
 if1632/builtin.c    | 12 ++++++++++--
 relay32/builtin32.c | 14 ++++++++++----
 2 files changed, 20 insertions(+), 6 deletions(-)

diff --git a/if1632/builtin.c b/if1632/builtin.c
index 7be0d6799c4..e6766fc68a3 100644
--- a/if1632/builtin.c
+++ b/if1632/builtin.c
@@ -233,11 +233,19 @@ HMODULE16 BUILTIN_LoadModule( LPCSTR name, BOOL force )
 
     if ((p = strrchr( name, '\\' ))) name = p + 1;
     lstrcpynA( dllname, name, sizeof(dllname) );
-    if ((p = strrchr( dllname, '.' ))) *p = '\0';
+    p = strrchr( dllname, '.' );
+	 
+    if (!p) strcat( dllname, ".dll" );
 
     for (table = BuiltinDLLs; table->descr; table++)
-        if (!lstrcmpiA( table->descr->name, dllname )) break;
+    {
+       NE_MODULE *pModule = (NE_MODULE *)table->descr->module_start;
+       OFSTRUCT *pOfs = (OFSTRUCT *)((LPBYTE)pModule + pModule->fileinfo);
+       if (!lstrcmpiA( pOfs->szPathName, dllname )) break;
+    }
+
     if (!table->descr) return (HMODULE16)2;
+
     if ((table->flags & DLL_FLAG_NOT_USED) && !force) return (HMODULE16)2;
 
     return BUILTIN_DoLoadModule16( table->descr );
diff --git a/relay32/builtin32.c b/relay32/builtin32.c
index 5d73107e5b7..450df451a08 100644
--- a/relay32/builtin32.c
+++ b/relay32/builtin32.c
@@ -418,19 +418,25 @@ HMODULE BUILTIN32_LoadImage( LPCSTR name, OFSTRUCT *ofs)
 
     if ((p = strrchr( name, '\\' ))) name = p + 1;
     lstrcpynA( dllname, name, sizeof(dllname) );
-    if ((p = strrchr( dllname, '.' ))) *p = '\0';
+
+    p = strrchr( dllname, '.' );
+	 
+    if (!p) strcat( dllname, ".dll" );
 
     for (table = BuiltinDLLs; table->descr; table++)
-        if (!lstrcmpiA( table->descr->name, dllname )) break;
+    {
+       if (!lstrcmpiA( table->descr->filename, dllname )) break;
+    }
+
     if (!table->descr) return 0;
 
     if ( (table->flags & BI32_INSTANTIATED) && (table->flags & BI32_DANGER) )
     {
 	ERR_(module)("Attemp to instantiate built-in dll '%s' twice in the same address-space. Expect trouble!\n",
-		table->descr->name);
+		     table->descr->name);
     }
 
-    sprintf( ofs->szPathName, "%s.DLL", table->descr->name );
+    strcpy( ofs->szPathName, table->descr->filename );
 
     if ( !table->hModule )
         table->hModule = BUILTIN32_DoLoadImage( table );
-- 
GitLab