Author: jgardou
Date: Mon Aug 27 21:34:42 2012
New Revision: 57183

URL: http://svn.reactos.org/svn/reactos?rev=57183&view=rev
Log:
[MSVCRTEX]
- Better fix for DLLs not providing a DllMain function, as per Timo's remarks.

Added:
    trunk/reactos/lib/sdk/crt/startup/dllmain.c
      - copied unchanged from r57179, 
trunk/reactos/lib/sdk/crt/startup/mscdllmain.c
Removed:
    trunk/reactos/lib/sdk/crt/startup/mscdllmain.c
Modified:
    trunk/reactos/lib/sdk/crt/msvcrtex.cmake
    trunk/reactos/lib/sdk/crt/startup/crtdll.c

Modified: trunk/reactos/lib/sdk/crt/msvcrtex.cmake
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/msvcrtex.cmake?rev=57183&r1=57182&r2=57183&view=diff
==============================================================================
--- trunk/reactos/lib/sdk/crt/msvcrtex.cmake [iso-8859-1] (original)
+++ trunk/reactos/lib/sdk/crt/msvcrtex.cmake [iso-8859-1] Mon Aug 27 21:34:42 
2012
@@ -21,6 +21,7 @@
     startup/charmax.c
     startup/merr.c
     startup/atonexit.c
+    startup/dllmain.c
     startup/txtmode.c
     startup/pesect.c
     startup/tlsmcrt.c
@@ -66,9 +67,7 @@
 endif()
 
 if(MSVC)
-    list(APPEND MSVCRTEX_SOURCE 
-        startup/mscmain.c
-        startup/mscdllmain.c)
+    list(APPEND MSVCRTEX_SOURCE startup/mscmain.c)
 else()
     list(APPEND MSVCRTEX_SOURCE startup/gccmain.c)
 endif()

Modified: trunk/reactos/lib/sdk/crt/startup/crtdll.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/startup/crtdll.c?rev=57183&r1=57182&r2=57183&view=diff
==============================================================================
--- trunk/reactos/lib/sdk/crt/startup/crtdll.c [iso-8859-1] (original)
+++ trunk/reactos/lib/sdk/crt/startup/crtdll.c [iso-8859-1] Mon Aug 27 21:34:42 
2012
@@ -50,19 +50,7 @@
 
 extern int mingw_app_type;
 
-/* 
- * It is possible that a DLL provides no DllMain entry point.
- * Mark it as a weak symbol for GCC.
- * Tests show that at link time, MSVC looks for a function first in the object 
files provided, and then
- * in the libraries. This means that we must provide a basic implementation in 
msvcrtex, which will be used 
- * if none is found in the object files provided to link.exe.
- * This also means that we can't rely on a DllMain function implemented in a 
static library when linking a DLL.
- */
-#ifdef __GNUC__
-extern WINBOOL WINAPI DllMain (HANDLE hDllHandle, DWORD dwReason, LPVOID 
lpreserved) __attribute__((weak));
-#else
 extern WINBOOL WINAPI DllMain (HANDLE hDllHandle, DWORD dwReason, LPVOID 
lpreserved);
-#endif
 
 extern WINBOOL WINAPI DllEntryPoint (HANDLE, DWORD, LPVOID);
 
@@ -210,12 +198,10 @@
     }
   if (dwReason == DLL_PROCESS_ATTACH)
     __main ();
-  if(DllMain)
-    retcode = DllMain(hDllHandle,dwReason,lpreserved);
+  retcode = DllMain(hDllHandle,dwReason,lpreserved);
   if (dwReason == DLL_PROCESS_ATTACH && ! retcode)
     {
-    if(DllMain)
-         DllMain (hDllHandle, DLL_PROCESS_DETACH, lpreserved);
+       DllMain (hDllHandle, DLL_PROCESS_DETACH, lpreserved);
        DllEntryPoint (hDllHandle, DLL_PROCESS_DETACH, lpreserved);
        _CRT_INIT (hDllHandle, DLL_PROCESS_DETACH, lpreserved);
     }

Removed: trunk/reactos/lib/sdk/crt/startup/mscdllmain.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/sdk/crt/startup/mscdllmain.c?rev=57182&view=auto
==============================================================================
--- trunk/reactos/lib/sdk/crt/startup/mscdllmain.c [iso-8859-1] (original)
+++ trunk/reactos/lib/sdk/crt/startup/mscdllmain.c (removed)
@@ -1,11 +1,0 @@
-#include <oscalls.h>
-#define _DECL_DLLMAIN
-#include <process.h>
-
-WINBOOL WINAPI DllMain (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved)
-{
-    /* If the DLL provides no DllMain, then chances are that it doesn't bother 
with thread initialization */
-    if(dwReason == DLL_PROCESS_ATTACH)
-        DisableThreadLibraryCalls(hDllHandle);
-    return TRUE;
-}


Reply via email to