[MSVCRT20] Build from msvcrt sources

This commit is contained in:
Timo Kreuzer
2026-02-01 11:46:59 +02:00
parent dcca81a716
commit 7a88891ae8
4 changed files with 96 additions and 256 deletions
+4 -20
View File
@@ -1,32 +1,16 @@
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/crt/include)
spec2def(msvcrt20.dll msvcrt20.spec)
add_definitions(
-DUSE_MSVCRT_PREFIX
-D_MSVCRT_
-D_MSVCRT_LIB_
-D_MT
-D_CTYPE_DISABLE_MACROS
-D_NO_INLINING
-DCRTDLL
-D__MINGW_IMPORT="")
list(APPEND SOURCE
add_library(msvcrt20 MODULE
msvcrt20.c
stubs.c
${CMAKE_CURRENT_BINARY_DIR}/msvcrt20_stubs.c
${CMAKE_CURRENT_BINARY_DIR}/msvcrt20.def)
add_library(msvcrt20 MODULE ${SOURCE})
set_module_type(msvcrt20 win32dll ENTRYPOINT DllMain 12)
add_dependencies(msvcrt20 psdk)
target_link_libraries(msvcrt20 crt vcruntime wine ${PSEH_LIB})
target_link_libraries(msvcrt20 msvcrt_static crtmath vcruntime wine chkstk ${PSEH_LIB})
if(MSVC)
# export of deleting destructor "name"
target_link_options(msvcrt20 PRIVATE /ignore:4102)
endif()
add_importlibs(msvcrt20 kernel32 kernel32_vista ntdll)
add_delay_importlibs(msvcrt20 user32 advapi32)
add_importlibs(msvcrt20 kernel32 ntdll)
add_cd_file(TARGET msvcrt20 DESTINATION reactos/system32 FOR all)
+4 -131
View File
@@ -21,143 +21,18 @@
#define WIN32_NO_STATUS
#include <stdio.h>
#define _CRT_PRECOMP_H
#include <internal/tls.h>
//#include <stdlib.h>
//#include <windows.h>
#include <internal/wine/msvcrt.h>
#include <internal/locale.h>
//#include <locale.h>
//#include <mbctype.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 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 BOOL msvcrt_init_heap(void);
extern void CDECL __getmainargs(int *argc, char** *argv, char** *envp,
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,
extern void _cdecl __wgetmainargs(int *argc, wchar_t** *wargv, wchar_t** *wenvp,
int expand_wildcards, int *new_mode);
/* LIBRARY ENTRY POINT ********************************************************/
BOOL
WINAPI
DllMain(PVOID hinstDll, ULONG dwReason, PVOID reserved)
{
OSVERSIONINFOW osvi;
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
/* initialize version info */
TRACE("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;
/* create tls stuff */
if (!msvcrt_init_tls())
return FALSE;
if (!msvcrt_init_heap())
return FALSE;
if (BlockEnvToEnvironA() < 0)
return FALSE;
if (BlockEnvToEnvironW() < 0)
{
FreeEnvironment(_environ);
return FALSE;
}
_acmdln = _strdup(GetCommandLineA());
_wcmdln = _wcsdup(GetCommandLineW());
/* Initialization of the WINE code */
msvcrt_init_mt_locks();
//msvcrt_init_math();
msvcrt_init_io();
//msvcrt_init_console();
//msvcrt_init_args();
//msvcrt_init_signals();
TRACE("Attach done\n");
break;
case DLL_THREAD_ATTACH:
//msvcrt_get_thread_data creates data when first called
break;
case DLL_THREAD_DETACH:
msvcrt_free_tls_mem();
break;
case DLL_PROCESS_DETACH:
TRACE("Detach\n");
/* Deinit of the WINE code */
msvcrt_free_io();
if (reserved) break;
msvcrt_free_popen_data();
msvcrt_free_mt_locks();
//msvcrt_free_console();
//msvcrt_free_args();
//msvcrt_free_signals();
msvcrt_free_tls_mem();
if (!msvcrt_free_tls())
return FALSE;
if(global_locale)
MSVCRT__free_locale(global_locale);
if (__winitenv && __winitenv != _wenviron)
FreeEnvironment((char**)__winitenv);
if (_wenviron)
FreeEnvironment((char**)_wenviron);
if (__initenv && __initenv != _environ)
FreeEnvironment(__initenv);
if (_environ)
FreeEnvironment(_environ);
TRACE("Detach done\n");
break;
}
return TRUE;
}
/* LIBRARY EXPORTS ************************************************************/
/*********************************************************************
* __getmainargs (MSVCRT20.@)
*
* new_mode is not a pointer in msvcrt20.
*/
void CDECL MSVCRT20__getmainargs( int *argc, char** *argv, char** *envp,
void _cdecl MSVCRT20__getmainargs( int *argc, char** *argv, char** *envp,
int expand_wildcards, int new_mode )
{
__getmainargs( argc, argv, envp, expand_wildcards, &new_mode );
@@ -168,10 +43,8 @@ void CDECL MSVCRT20__getmainargs( int *argc, char** *argv, char** *envp,
*
* new_mode is not a pointer in msvcrt20.
*/
void CDECL MSVCRT20__wgetmainargs( int *argc, WCHAR** *wargv, WCHAR** *wenvp,
void _cdecl MSVCRT20__wgetmainargs( int *argc, wchar_t** *wargv, wchar_t** *wenvp,
int expand_wildcards, int new_mode )
{
__wgetmainargs( argc, wargv, wenvp, expand_wildcards, &new_mode );
}
/* EOF */
+88 -77
View File
@@ -456,23 +456,23 @@
@ cdecl -arch=i386 _CItan()
@ cdecl -arch=i386 _CItanh()
@ stdcall _CxxThrowException(long long)
@ extern _HUGE
@ extern _HUGE MSVCRT__HUGE
@ cdecl _XcptFilter(long ptr)
@ cdecl -i386 __CxxFrameHandler(ptr ptr ptr ptr)
@ stdcall -i386 __CxxLongjmpUnwind(ptr)
@ cdecl __STRINGTOLD(ptr ptr str long)
@ extern __argc
@ extern __argv
@ extern __argc MSVCRT___argc
@ extern __argv MSVCRT___argv
@ cdecl __dllonexit(ptr ptr ptr)
@ cdecl __doserrno()
@ cdecl __fpecode()
@ cdecl __getmainargs(ptr ptr ptr long long) MSVCRT20__getmainargs
@ extern __initenv
@ extern -arch=i386,x86_64 __initenv MSVCRT___initenv
@ cdecl __isascii(long)
@ cdecl __iscsym(long)
@ cdecl __iscsymf(long)
@ cdecl __lconv_init()
@ extern __mb_cur_max
@ extern __mb_cur_max MSVCRT___mb_cur_max
@ cdecl -arch=i386 __p___argc()
@ cdecl -arch=i386 __p___argv()
@ cdecl -arch=i386 __p___initenv()
@@ -503,26 +503,26 @@
@ cdecl __threadhandle() kernel32.GetCurrentThread
@ cdecl __threadid() kernel32.GetCurrentThreadId
@ cdecl __toascii(long)
@ extern __wargv
@ extern __wargv MSVCRT___wargv
@ cdecl __wgetmainargs(ptr ptr ptr long long) MSVCRT20__wgetmainargs
@ extern __winitenv
@ cdecl _abnormal_termination()
@ extern __winitenv MSVCRT___winitenv
@ cdecl -arch=i386 _abnormal_termination() __intrinsic_abnormal_termination
@ cdecl _access(str long)
@ extern _acmdln
@ stdcall _adj_fdiv_m16i(long)
@ stdcall _adj_fdiv_m32(long)
@ stdcall _adj_fdiv_m32i(long)
@ stdcall _adj_fdiv_m64(double)
@ cdecl _adj_fdiv_r()
@ stdcall _adj_fdivr_m16i(long)
@ stdcall _adj_fdivr_m32(long)
@ stdcall _adj_fdivr_m32i(long)
@ stdcall _adj_fdivr_m64(double)
@ cdecl _adj_fpatan()
@ cdecl _adj_fprem()
@ cdecl _adj_fprem1()
@ cdecl _adj_fptan()
@ extern _adjust_fdiv
@ extern _acmdln MSVCRT__acmdln
@ stdcall -arch=i386 _adj_fdiv_m16i(long)
@ stdcall -arch=i386 _adj_fdiv_m32(long)
@ stdcall -arch=i386 _adj_fdiv_m32i(long)
@ stdcall -arch=i386 _adj_fdiv_m64(int64)
@ cdecl -arch=i386 _adj_fdiv_r()
@ stdcall -arch=i386 _adj_fdivr_m16i(long)
@ stdcall -arch=i386 _adj_fdivr_m32(long)
@ stdcall -arch=i386 _adj_fdivr_m32i(long)
@ stdcall -arch=i386 _adj_fdivr_m64(int64)
@ cdecl -arch=i386 _adj_fpatan()
@ cdecl -arch=i386 _adj_fprem()
@ cdecl -arch=i386 _adj_fprem1()
@ cdecl -arch=i386 _adj_fptan()
@ extern -arch=i386 _adjust_fdiv MSVCRT__adjust_fdiv
@ extern _aexit_rtn
@ cdecl _amsg_exit(long)
@ cdecl _assert(str str long)
@@ -543,7 +543,7 @@
@ cdecl _clearfp()
@ cdecl _close(long)
@ cdecl _commit(long)
@ extern _commode
@ extern _commode MSVCRT__commode
@ cdecl -arch=i386,x86_64 _control87(long long)
@ cdecl _controlfp(long long)
@ cdecl _copysign( double double )
@@ -551,15 +551,15 @@
@ cdecl _cputs(str)
@ cdecl _creat(str long)
@ varargs _cscanf(str)
@ extern _ctype
@ extern _ctype MSVCRT__ctype
@ cdecl _cwait(ptr long long)
@ extern _daylight
@ extern _daylight MSVCRT___daylight
@ cdecl _dup(long)
@ cdecl _dup2(long long)
@ cdecl _ecvt(double long ptr ptr)
@ cdecl _endthread()
@ cdecl _endthreadex(long)
@ extern _environ
@ extern _environ MSVCRT__environ
@ cdecl _eof(long)
@ cdecl _errno()
@ cdecl _except_handler2(ptr ptr ptr ptr)
@@ -589,7 +589,7 @@
@ cdecl _finite( double )
@ cdecl _flsbuf(long ptr)
@ cdecl _flushall()
@ extern _fmode
@ extern _fmode MSVCRT__fmode
@ cdecl _fpclass(double)
@ cdecl _fpieee_flt(long ptr ptr)
@ cdecl _fpreset()
@@ -597,10 +597,12 @@
@ cdecl _fputwchar(long)
@ cdecl _fsopen(str str long)
@ cdecl _fstat(long ptr)
@ cdecl _ftime(ptr)
@ cdecl -arch=win32 _ftime(ptr) _ftime32
@ cdecl -arch=win64 _ftime(ptr) _ftime64
@ cdecl -arch=i386 -ret64 _ftol()
@ cdecl _fullpath(ptr str long)
@ cdecl _futime(long ptr)
@ cdecl -arch=win32 _futime(long ptr) _futime32
@ cdecl -arch=win64 _futime(long ptr) _futime64
@ cdecl _gcvt(double long str)
@ cdecl _get_osfhandle(long)
@ cdecl _getch()
@@ -613,7 +615,7 @@
@ cdecl _getdrives() kernel32.GetLogicalDrives
@ cdecl _getmbcp()
@ cdecl _getpid() kernel32.GetCurrentProcessId
@ cdecl _getsystime(ptr)
@ stub _getsystime(ptr)
@ cdecl _getw(ptr)
@ cdecl _getws(ptr)
@ cdecl _global_unwind2(ptr)
@@ -621,23 +623,23 @@
@ cdecl _heapchk()
@ cdecl _heapmin()
@ cdecl _heapset(long)
@ cdecl _heapused(ptr ptr)
@ stub _heapused(ptr ptr)
@ cdecl _heapwalk(ptr)
@ cdecl _hypot(double double)
@ cdecl _initterm(ptr ptr)
@ extern _iob
@ extern _iob MSVCRT__iob
@ cdecl _isatty(long)
@ cdecl _isctype(long long)
@ cdecl _ismbbalnum(long)
@ cdecl _ismbbalpha(long)
@ cdecl _ismbbgraph(long)
@ cdecl _ismbbkalnum(long)
@ stub _ismbbalnum(long)
@ stub _ismbbalpha(long)
@ stub _ismbbgraph(long)
@ stub _ismbbkalnum(long)
@ cdecl _ismbbkana(long)
@ cdecl _ismbbkprint(long)
@ cdecl _ismbbkpunct(long)
@ stub _ismbbkprint(long)
@ stub _ismbbkpunct(long)
@ cdecl _ismbblead(long)
@ cdecl _ismbbprint(long)
@ cdecl _ismbbpunct(long)
@ stub _ismbbprint(long)
@ stub _ismbbpunct(long)
@ cdecl _ismbbtrail(long)
@ cdecl _ismbcalnum(long)
@ cdecl _ismbcalpha(long)
@@ -670,8 +672,8 @@
@ cdecl _locking(long long long)
@ cdecl _logb(double)
@ cdecl _longjmpex(ptr long) longjmp
@ cdecl _lrotl(long long)
@ cdecl _lrotr(long long)
@ cdecl _lrotl(long long) MSVCRT__lrotl
@ cdecl _lrotr(long long) MSVCRT__lrotr
@ cdecl _lsearch(ptr ptr long long ptr)
@ cdecl _lseek(long long long)
@ cdecl _ltoa(long ptr long)
@@ -689,7 +691,7 @@
@ cdecl _mbctolower(long)
@ cdecl _mbctombb(long)
@ cdecl _mbctoupper(long)
@ extern _mbctype
@ extern _mbctype MSVCRT_mbctype
@ cdecl _mbsbtype(str long)
@ cdecl _mbscat(str str)
@ cdecl _mbschr(str long)
@@ -698,7 +700,7 @@
@ cdecl _mbscpy(ptr str)
@ cdecl _mbscspn(str str)
@ cdecl _mbsdec(ptr ptr)
@ cdecl _mbsdup(str)
@ cdecl _mbsdup(str) _strdup
@ cdecl _mbsicmp(str str)
@ cdecl _mbsicoll(str str)
@ cdecl _mbsinc(str)
@@ -715,11 +717,11 @@
@ cdecl _mbsncat(str str long)
@ cdecl _mbsnccnt(str long)
@ cdecl _mbsncmp(str str long)
@ cdecl _mbsncoll(str str long)
@ stub _mbsncoll(str str long)
@ cdecl _mbsncpy(str str long)
@ cdecl _mbsnextc(str)
@ cdecl _mbsnicmp(str str long)
@ cdecl _mbsnicoll(str str long)
@ stub _mbsnicoll(str str long)
@ cdecl _mbsninc(str long)
@ cdecl _mbsnset(str long long)
@ cdecl _mbspbrk(str str)
@@ -743,10 +745,10 @@
@ cdecl _onexit(ptr)
@ varargs _open(str long)
@ cdecl _open_osfhandle(long long)
@ extern _osver
@ extern _osver MSVCRT__osver
@ cdecl _pclose(ptr)
@ extern _pctype
@ extern _pgmptr
@ extern _pctype MSVCRT__pctype
@ extern _pgmptr MSVCRT__pgmptr
@ cdecl _pipe(ptr long long)
@ cdecl _popen(str str)
@ cdecl _purecall()
@@ -754,12 +756,12 @@
@ cdecl _putenv(str)
@ cdecl _putw(long ptr)
@ cdecl _putws(wstr)
@ extern _pwctype
@ extern _pwctype MSVCRT__pwctype
@ cdecl _read(long ptr long)
@ cdecl _rmdir(str)
@ cdecl _rmtmp()
@ cdecl _rotl(long long)
@ cdecl _rotr(long long)
@ cdecl _rotl(long long) MSVCRT__rotl
@ cdecl _rotr(long long) MSVCRT__rotr
@ cdecl _safe_fdiv()
@ cdecl _safe_fdivr()
@ cdecl _safe_fprem()
@@ -772,7 +774,7 @@
@ cdecl -i386 _setjmp3(ptr long)
@ cdecl _setmbcp(long)
@ cdecl _setmode(long long)
@ cdecl _setsystime(ptr long)
@ stub _setsystime(ptr long)
@ cdecl _sleep(long)
@ varargs _snprintf(ptr long str)
@ varargs _snwprintf(ptr long wstr)
@@ -804,8 +806,8 @@
@ cdecl _strtime(ptr)
@ cdecl _strupr(str)
@ cdecl _swab(str str long)
@ extern _sys_errlist
@ extern _sys_nerr
@ extern _sys_errlist MSVCRT__sys_errlist
@ extern _sys_nerr MSVCRT__sys_nerr
@ cdecl _tccpy(str str) _mbccpy
@ cdecl _tclen(ptr) _mbclen
@ cdecl _tcschr(str long) _mbschr
@@ -841,10 +843,10 @@
@ cdecl _tcsupr(str) _mbsupr
@ cdecl _tell(long)
@ cdecl _tempnam(str str)
@ extern _timezone
@ extern _timezone MSVCRT___timezone
@ cdecl _tolower(long)
@ cdecl _toupper(long)
@ extern _tzname
@ extern _tzname MSVCRT__tzname
@ cdecl _tzset()
@ cdecl _ultoa(long ptr long)
@ cdecl _ultow(long ptr long)
@@ -852,14 +854,15 @@
@ cdecl _ungetch(long)
@ cdecl _unlink(str)
@ cdecl _unloaddll(long)
@ cdecl _utime(str ptr)
@ cdecl -arch=win32 _utime(str ptr) _utime32
@ cdecl -arch=win64 _utime(str ptr) _utime64
@ cdecl _vsnprintf(ptr long ptr ptr)
@ cdecl _vsnwprintf(ptr long wstr long)
@ cdecl _waccess(wstr long)
@ cdecl _wasctime(ptr)
@ cdecl _wchdir(wstr)
@ cdecl _wchmod(wstr long)
@ extern _wcmdln
@ extern _wcmdln MSVCRT__wcmdln
@ cdecl _wcreat(wstr long)
@ cdecl _wcsdup(wstr)
@ cdecl _wcsicmp(wstr wstr)
@@ -872,8 +875,9 @@
@ cdecl _wcsrev(wstr)
@ cdecl _wcsset(wstr long)
@ cdecl _wcsupr(wstr)
@ cdecl _wctime(ptr)
@ extern _wenviron
@ cdecl -arch=win32 _wctime(ptr) _wctime32
@ cdecl -arch=win64 _wctime(ptr) _wctime64
@ extern _wenviron MSVCRT__wenviron
@ varargs _wexecl(wstr wstr)
@ varargs _wexecle(wstr wstr)
@ varargs _wexeclp(wstr wstr)
@@ -892,15 +896,15 @@
@ cdecl _wgetcwd(wstr long)
@ cdecl _wgetdcwd(long wstr long)
@ cdecl _wgetenv(wstr)
@ extern _winmajor
@ extern _winminor
@ extern _winver
@ extern _winmajor MSVCRT__winmajor
@ extern _winminor MSVCRT__winminor
@ extern _winver MSVCRT__winver
@ cdecl _wmakepath(ptr wstr wstr wstr wstr)
@ cdecl _wmkdir(wstr)
@ cdecl _wmktemp(wstr)
@ varargs _wopen(wstr long)
@ cdecl _wperror(wstr)
@ extern _wpgmptr
@ extern _wpgmptr MSVCRT__wpgmptr
@ cdecl _wpopen(wstr wstr)
@ cdecl _wputenv(wstr)
@ cdecl _wremove(wstr)
@@ -928,7 +932,8 @@
@ cdecl _wtoi(wstr)
@ cdecl _wtol(wstr)
@ cdecl _wunlink(wstr)
@ cdecl _wutime(wstr ptr)
@ cdecl -arch=win32 _wutime(wstr ptr) _wutime32
@ cdecl -arch=win64 _wutime(wstr ptr) _wutime64
@ cdecl _y0(double)
@ cdecl _y1(double)
@ cdecl _yn(long double )
@@ -939,7 +944,7 @@
@ cdecl asin(double)
@ cdecl atan(double)
@ cdecl atan2(double double)
@ extern atexit # <-- do not touch this!
@ extern atexit MSVCRT_atexit # <-- do not touch this!
@ cdecl atof(str)
@ cdecl atoi(str)
@ cdecl atol(str)
@@ -950,9 +955,11 @@
@ cdecl clock()
@ cdecl cos(double)
@ cdecl cosh(double)
@ cdecl ctime(ptr)
@ cdecl difftime(long long)
@ cdecl div(long long)
@ cdecl -arch=win32 ctime(ptr) _ctime32
@ cdecl -arch=win64 ctime(ptr) _ctime64
@ cdecl -arch=win32 difftime(long long) _difftime32
@ cdecl -arch=win64 difftime(long long) _difftime64
@ cdecl -ret64 div(long long)
@ cdecl exit(long)
@ cdecl exp(double)
@ cdecl fabs(double)
@@ -990,8 +997,9 @@
@ cdecl gets(str)
@ cdecl getwc(ptr)
@ cdecl getwchar()
@ cdecl gmtime(ptr)
@ cdecl is_wctype(long long)
@ cdecl -arch=win32 gmtime(ptr) _gmtime32
@ cdecl -arch=win64 gmtime(ptr) _gmtime64
@ cdecl is_wctype(long long) iswctype
@ cdecl isalnum(long)
@ cdecl isalpha(long)
@ cdecl iscntrl(long)
@@ -1021,7 +1029,8 @@
@ cdecl ldexp(double long)
@ cdecl ldiv(long long)
@ cdecl localeconv()
@ cdecl localtime(ptr)
@ cdecl -arch=win32 localtime(ptr) _localtime32
@ cdecl -arch=win64 localtime(ptr) _localtime64
@ cdecl log(double)
@ cdecl log10(double)
@ cdecl longjmp(ptr long)
@@ -1034,7 +1043,8 @@
@ cdecl memcpy(ptr ptr long)
@ cdecl memmove(ptr ptr long)
@ cdecl memset(ptr long long)
@ cdecl mktime(ptr)
@ cdecl -arch=win32 mktime(ptr) _mktime32
@ cdecl -arch=win64 mktime(ptr) _mktime64
@ cdecl modf(double ptr)
@ cdecl perror(str)
@ cdecl pow(double double)
@@ -1088,7 +1098,8 @@
@ cdecl system(str)
@ cdecl tan(double)
@ cdecl tanh(double)
@ cdecl time(ptr)
@ cdecl -arch=win32 time(ptr) _time32
@ cdecl -arch=win64 time(ptr) _time64
@ cdecl tmpfile()
@ cdecl tmpnam(ptr)
@ cdecl tolower(long)
@@ -1101,7 +1112,7 @@
@ cdecl vfwprintf(ptr wstr ptr)
@ cdecl vprintf(str ptr)
@ cdecl vsprintf(ptr str ptr)
@ cdecl vswprintf(ptr wstr long)
@ cdecl vswprintf(ptr wstr ptr) _vswprintf
@ cdecl vwprintf(wstr long)
@ cdecl wcscat(wstr wstr)
@ cdecl wcschr(wstr long)
-28
View File
@@ -1,28 +0,0 @@
#include <windef.h>
#include <stubs.h>
#undef UNIMPLEMENTED
#define UNIMPLEMENTED __wine_spec_unimplemented_stub("msvcrt.dll", __FUNCTION__)
int _atodbl(
void * value,
char * str)
{
UNIMPLEMENTED;
return 0;
}
int _ismbbkprint(
unsigned int c)
{
UNIMPLEMENTED;
return 0;
}
size_t _heapused( size_t *pUsed, size_t *pCommit )
{
UNIMPLEMENTED;
return( 0 );
}
int _fileinfo = 0;