Author: jgardou
Date: Sun Jul 24 13:22:15 2011
New Revision: 52834

URL: http://svn.reactos.org/svn/reactos?rev=52834&view=rev
Log:
[MSVCRT20]
- being a full blown crt dll, msvcrt20 needs a correct dllmain entry point

Modified:
    trunk/reactos/dll/win32/msvcrt20/CMakeLists.txt
    trunk/reactos/dll/win32/msvcrt20/msvcrt20.c
    trunk/reactos/dll/win32/msvcrt20/msvcrt20.rbuild

Modified: trunk/reactos/dll/win32/msvcrt20/CMakeLists.txt
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt20/CMakeLists.txt?rev=52834&r1=52833&r2=52834&view=diff
==============================================================================
--- trunk/reactos/dll/win32/msvcrt20/CMakeLists.txt [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msvcrt20/CMakeLists.txt [iso-8859-1] Sun Jul 24 
13:22:15 2011
@@ -1,8 +1,15 @@
 
-include_directories(${REACTOS_SOURCE_DIR}/include/reactos/wine)
+add_definitions(
+    -DUSE_MSVCRT_PREFIX
+    -D_MSVCRT_
+    -D_MSVCRT_LIB_
+    -D_MT
+    -D_CTYPE_DISABLE_MACROS
+    -D_NO_INLINING
+    -DCRTDLL
+    -D__MINGW_IMPORT="")
 
-add_definitions(-D__WINESRC__)
-add_definitions(-DCRTDLL)
+include_directories(${REACTOS_SOURCE_DIR}/lib/sdk/crt/include)
 
 spec2def(msvcrt20.dll msvcrt20.spec)
 
@@ -13,7 +20,8 @@
     ${CMAKE_CURRENT_BINARY_DIR}/msvcrt20.def)
 
 add_library(msvcrt20 SHARED ${SOURCE})
-set_entrypoint(msvcrt20 0)
+set_entrypoint(msvcrt20 DllMain@12)
+set_image_base(msvcrt20 ${baseaddress_msvcrt20})
 
 target_link_libraries(msvcrt20 crt wine)
 

Modified: trunk/reactos/dll/win32/msvcrt20/msvcrt20.c
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt20/msvcrt20.c?rev=52834&r1=52833&r2=52834&view=diff
==============================================================================
--- trunk/reactos/dll/win32/msvcrt20/msvcrt20.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msvcrt20/msvcrt20.c [iso-8859-1] Sun Jul 24 
13:22:15 2011
@@ -18,14 +18,142 @@
  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
  */
 
-#include <stdarg.h>
+#include <stdio.h>
+#define _CRT_PRECOMP_H
+#include <internal/tls.h>
+#include <stdlib.h>
+#include <windows.h>
+#include <internal/wine/msvcrt.h>
+#include <locale.h>
+#include <mbctype.h>
 
-#include "windef.h"
+#include "wine/debug.h"
+WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
+
+/* EXTERNAL PROTOTYPES 
********************************************************/
+
+extern int BlockEnvToEnvironA(void);
+extern int BlockEnvToEnvironW(void);
+extern void FreeEnvironment(char **environment);
+extern void _atexit_cleanup(void);
+
+extern unsigned int _osplatform;
+extern unsigned int _osver;
+extern unsigned int _winminor;
+extern unsigned int _winmajor;
+extern unsigned int _winver;
+
+extern char* _acmdln;        /* pointer to ascii command line */
+extern wchar_t* _wcmdln;     /* pointer to wide character command line */
+#undef _environ
+extern char** _environ;      /* pointer to environment block */
+extern char** __initenv;     /* pointer to initial environment block */
+extern wchar_t** _wenviron;  /* pointer to environment block */
+extern wchar_t** __winitenv; /* pointer to initial environment block */
 
 extern void CDECL __getmainargs(int *argc, char** *argv, char** *envp,
                                 int expand_wildcards, int *new_mode);
 extern void CDECL __wgetmainargs(int *argc, WCHAR** *wargv, WCHAR** *wenvp,
                                  int expand_wildcards, int *new_mode);
+
+/* LIBRARY GLOBAL VARIABLES 
***************************************************/
+
+HANDLE hHeap = NULL;        /* handle for heap */
+
+
+/* LIBRARY ENTRY POINT 
********************************************************/
+
+BOOL
+WINAPI
+DllMain(PVOID hinstDll, ULONG dwReason, PVOID reserved)
+{
+    OSVERSIONINFOW osvi;
+    switch (dwReason)
+    {
+    case DLL_PROCESS_ATTACH://1
+        /* initialize version info */
+        //DPRINT1("Process Attach %d\n", nAttachCount);
+        //DPRINT1("Process Attach\n");
+        osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
+        GetVersionExW( &osvi );
+        _winver     = (osvi.dwMajorVersion << 8) | osvi.dwMinorVersion;
+        _winmajor   = osvi.dwMajorVersion;
+        _winminor   = osvi.dwMinorVersion;
+        _osplatform = osvi.dwPlatformId;
+        _osver      = osvi.dwBuildNumber;
+        hHeap = HeapCreate(0, 100000, 0);
+        if (hHeap == NULL)
+            return FALSE;
+
+        /* create tls stuff */
+        if (!CreateThreadData())
+            return FALSE;
+
+        if (BlockEnvToEnvironA() < 0)
+            return FALSE;
+
+        if (BlockEnvToEnvironW() < 0)
+        {
+            FreeEnvironment(_environ);
+            return FALSE;
+        }
+
+        _acmdln = _strdup(GetCommandLineA());
+        _wcmdln = _wcsdup(GetCommandLineW());
+
+        /* FIXME: more initializations... */
+
+        /* Initialization of the WINE code */
+        msvcrt_init_mt_locks();
+        msvcrt_init_io();
+        setlocale(0, "C");
+        //_setmbcp(_MB_CP_LOCALE);
+
+        TRACE("Attach done\n");
+        break;
+
+    case DLL_THREAD_ATTACH:
+        break;
+
+    case DLL_THREAD_DETACH:
+        FreeThreadData(NULL);
+        break;
+
+    case DLL_PROCESS_DETACH:
+        //DPRINT1("Detach %d\n", nAttachCount);
+        //DPRINT("Detach\n");
+        /* FIXME: more cleanup... */
+        /* Deinit of the WINE code */
+        msvcrt_free_io();
+        msvcrt_free_mt_locks();
+
+        _atexit_cleanup();
+
+
+        /* destroy tls stuff */
+        DestroyThreadData();
+
+       if (__winitenv && __winitenv != _wenviron)
+            FreeEnvironment((char**)__winitenv);
+        if (_wenviron)
+            FreeEnvironment((char**)_wenviron);
+
+       if (__initenv && __initenv != _environ)
+            FreeEnvironment(__initenv);
+        if (_environ)
+            FreeEnvironment(_environ);
+
+        /* destroy heap */
+        HeapDestroy(hHeap);
+
+        TRACE("Detach done\n");
+        break;
+    }
+
+    return TRUE;
+}
+
+/* LIBRARY EXPORTS 
************************************************************/
 
 /*********************************************************************
  *             __getmainargs (MSVCRT20.@)
@@ -48,3 +176,5 @@
 {
     __wgetmainargs( argc, wargv, wenvp, expand_wildcards, &new_mode );
 }
+
+/* EOF */

Modified: trunk/reactos/dll/win32/msvcrt20/msvcrt20.rbuild
URL: 
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/msvcrt20/msvcrt20.rbuild?rev=52834&r1=52833&r2=52834&view=diff
==============================================================================
--- trunk/reactos/dll/win32/msvcrt20/msvcrt20.rbuild [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/msvcrt20/msvcrt20.rbuild [iso-8859-1] Sun Jul 24 
13:22:15 2011
@@ -1,16 +1,24 @@
 <?xml version="1.0"?>
 <!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd">
 <group>
-<module name="msvcrt20" type="win32dll" baseaddress="${BASEADDRESS_MSVCRT20}" 
installbase="system32" installname="msvcrt20.dll" allowwarnings="true" 
entrypoint="0" iscrt="yes">
-       <importlibrary definition="msvcrt20.spec" />
-       <include base="msvcrt20">.</include>
-       <include base="ReactOS">include/reactos/wine</include>
-       <define name="__WINESRC__" />
+  <module name="msvcrt20" type="win32dll"
+  baseaddress="${BASEADDRESS_MSVCRT20}" installbase="system32"
+  installname="msvcrt20.dll"
+  entrypoint="DllMain@12" iscrt="yes">
+    <importlibrary definition="msvcrt20.spec" />
+    <include base="msvcrt20">.</include>
+    <include base="crt">include</include>
+    <define name="USE_MSVCRT_PREFIX" />
+       <define name="_MSVCRT_" />
+       <define name="_MSVCRT_LIB_" />
+       <define name="_MT" />
+       <define name="_CTYPE_DISABLE_MACROS" />
+       <define name="_NO_INLINING" />
        <define name="CRTDLL" />
-       <file>msvcrt20.c</file>
+    <file>msvcrt20.c</file>
     <file>stubs.c</file>
-       <library>wine</library>
+    <library>wine</library>
     <library>crt</library>
     <library>pseh</library>
-</module>
+  </module>
 </group>


Reply via email to