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/CMakeLis... ============================================================================== --- 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... ============================================================================== --- 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... ============================================================================== --- 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>