mirror of
https://github.com/reactos/reactos.git
synced 2024-10-02 07:26:47 +00:00
[MSVCRT40]
- static link to crt, correct base address qnd entry point, etc... See change log of MSVCRT20 for details. svn path=/trunk/; revision=52835
This commit is contained in:
parent
7b87ca19ec
commit
c81afef878
|
@ -1,22 +1,34 @@
|
|||
|
||||
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(msvcrt40.dll msvcrt40.spec)
|
||||
|
||||
list(APPEND SOURCE
|
||||
msvcrt40.c
|
||||
stubs.c
|
||||
${CMAKE_CURRENT_BINARY_DIR}/msvcrt40_stubs.c
|
||||
${CMAKE_CURRENT_BINARY_DIR}/msvcrt40.def)
|
||||
|
||||
add_library(msvcrt40 SHARED ${SOURCE})
|
||||
set_image_base(msvcrt40 ${baseaddress_msvcrt40})
|
||||
set_entrypoint(msvcrt40 DllMain@12)
|
||||
|
||||
set_module_type(msvcrt40 win32dll)
|
||||
target_link_libraries(msvcrt40 crt wine)
|
||||
|
||||
target_link_libraries(msvcrt40 wine)
|
||||
if(NOT MSVC)
|
||||
target_link_libraries(msvcrt40 pseh)
|
||||
endif()
|
||||
|
||||
add_importlibs(msvcrt40 msvcrt kernel32 ntdll)
|
||||
add_importlibs(msvcrt40 kernel32 ntdll)
|
||||
|
||||
add_cd_file(TARGET msvcrt40 DESTINATION reactos/system32 FOR all)
|
||||
|
|
|
@ -17,23 +17,136 @@
|
|||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||
*/
|
||||
|
||||
#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 <stdarg.h>
|
||||
#include "wine/debug.h"
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||
|
||||
#include "windef.h"
|
||||
#include "winbase.h"
|
||||
/* EXTERNAL PROTOTYPES ********************************************************/
|
||||
|
||||
BOOL WINAPI DllMain( HINSTANCE inst, DWORD reason, LPVOID reserved )
|
||||
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 */
|
||||
|
||||
|
||||
/* LIBRARY GLOBAL VARIABLES ***************************************************/
|
||||
|
||||
HANDLE hHeap = NULL; /* handle for heap */
|
||||
|
||||
|
||||
/* LIBRARY ENTRY POINT ********************************************************/
|
||||
|
||||
BOOL
|
||||
WINAPI
|
||||
DllMain(PVOID hinstDll, ULONG dwReason, PVOID reserved)
|
||||
{
|
||||
switch (reason)
|
||||
{
|
||||
case DLL_WINE_PREATTACH:
|
||||
return FALSE; /* prefer native version */
|
||||
case DLL_PROCESS_ATTACH:
|
||||
DisableThreadLibraryCalls( inst );
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
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;
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/* EOF */
|
|
@ -4,10 +4,18 @@
|
|||
<module name="msvcrt40" type="win32dll" baseaddress="${BASEADDRESS_MSVCRT40}" installbase="system32" installname="msvcrt40.dll" iscrt="yes">
|
||||
<importlibrary definition="msvcrt40.spec" />
|
||||
<include base="msvcrt40">.</include>
|
||||
<include base="ReactOS">include/reactos/wine</include>
|
||||
<define name="__WINESRC__" />
|
||||
<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>msvcrt40.c</file>
|
||||
<file>stubs.c</file>
|
||||
<library>wine</library>
|
||||
<library>crt</library>
|
||||
<library>pseh</library>
|
||||
</module>
|
||||
</group>
|
||||
|
|
File diff suppressed because it is too large
Load diff
67
reactos/dll/win32/msvcrt40/stubs.c
Normal file
67
reactos/dll/win32/msvcrt40/stubs.c
Normal file
|
@ -0,0 +1,67 @@
|
|||
#include <stubs.h>
|
||||
|
||||
#undef UNIMPLEMENTED
|
||||
#define UNIMPLEMENTED __wine_spec_unimplemented_stub("msvcrt.dll", __FUNCTION__)
|
||||
|
||||
int MSVCRT__inp(
|
||||
unsigned short port)
|
||||
{
|
||||
return _inp(port);
|
||||
}
|
||||
|
||||
unsigned short MSVCRT__inpw(
|
||||
unsigned short port)
|
||||
{
|
||||
return _inpw(port);
|
||||
}
|
||||
|
||||
unsigned long MSVCRT__inpd(
|
||||
unsigned short port)
|
||||
{
|
||||
return _inpd(port);
|
||||
}
|
||||
|
||||
|
||||
int MSVCRT__outp(
|
||||
unsigned short port,
|
||||
int databyte)
|
||||
{
|
||||
return _outp(port, databyte);
|
||||
}
|
||||
|
||||
unsigned short MSVCRT__outpw(
|
||||
unsigned short port,
|
||||
unsigned short dataword)
|
||||
{
|
||||
return _outpw(port, dataword);
|
||||
}
|
||||
|
||||
unsigned long MSVCRT__outpd(
|
||||
unsigned short port,
|
||||
unsigned long dataword)
|
||||
{
|
||||
return _outpd(port, dataword);
|
||||
}
|
||||
|
||||
size_t _heapused( size_t *pUsed, size_t *pCommit )
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
int _fileinfo = 0;
|
||||
|
||||
int _atodbl(
|
||||
void * value,
|
||||
char * str)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _ismbbkprint(
|
||||
unsigned int c)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return 0;
|
||||
}
|
Loading…
Reference in a new issue