[MSVCRT-OLD] Delete old msvcrt

This commit is contained in:
Timo Kreuzer
2025-11-08 12:06:07 +02:00
parent 4aef49943f
commit 9e477a655d
6 changed files with 0 additions and 2668 deletions

View File

@@ -1,45 +0,0 @@
include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/crt/include)
spec2def(msvcrt.dll msvcrt.spec ADD_IMPORTLIB)
# Let consumers of msvcrt have the right defines
target_compile_definitions(libmsvcrt INTERFACE _DLL __USE_CRTIMP)
# Embed msvcrtex into libmsvcrt
target_sources(libmsvcrt PRIVATE $<TARGET_OBJECTS:msvcrtex>)
# Embed RTC libs
if (STACK_PROTECTOR)
target_sources(libmsvcrt PRIVATE $<TARGET_OBJECTS:gcc_ssp_msvcrt>)
target_link_libraries(libmsvcrt INTERFACE libkernel32) # For OutputDebugStringA
endif()
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
dllmain.c
stubs.c
msvcrt.rc
${CMAKE_CURRENT_BINARY_DIR}/msvcrt_stubs.c
${CMAKE_CURRENT_BINARY_DIR}/msvcrt.def)
add_library(msvcrt MODULE ${SOURCE})
set_module_type(msvcrt win32dll ENTRYPOINT DllMain 12)
add_dependencies(msvcrt psdk)
target_link_libraries(msvcrt crt vcruntime cpprt wine ${PSEH_LIB})
if(MSVC)
# export of deleting destructor "name"
target_link_options(msvcrt PRIVATE "/ignore:4102")
set_property(TARGET libmsvcrt APPEND PROPERTY STATIC_LIBRARY_OPTIONS "/ignore:4102")
endif()
add_importlibs(msvcrt kernel32 ntdll)
add_cd_file(TARGET msvcrt DESTINATION reactos/system32 FOR all)

View File

@@ -1,113 +0,0 @@
/*
* dllmain.c
*
* ReactOS MSVCRT.DLL Compatibility Library
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#include "precomp.h"
WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
/* EXTERNAL PROTOTYPES ********************************************************/
BOOL crt_process_init(void);
extern void FreeEnvironment(char **environment);
#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 msvcrt_init_exception(void*) DECLSPEC_HIDDEN;
/* LIBRARY ENTRY POINT ********************************************************/
BOOL
WINAPI
DllMain(PVOID hinstDll, ULONG dwReason, PVOID reserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
TRACE("Process Attach\n");
msvcrt_init_exception(hinstDll);
if (!crt_process_init())
{
ERR("crt_init() failed!\n");
return FALSE;
}
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;
}
/* FIXME: This hack is required to prevent the VC linker from linking these
exports to the functions from libntdll. See CORE-10753 */
#ifdef _MSC_VER
#ifdef _M_IX86
#pragma comment(linker, "/include:__vsnprintf")
#pragma comment(linker, "/include:_bsearch")
#pragma comment(linker, "/include:_strcspn")
#else
#pragma comment(linker, "/include:_vsnprintf")
#pragma comment(linker, "/include:bsearch")
#pragma comment(linker, "/include:strcspn")
#endif // _M_IX86
#endif // _MSC_VER
/* EOF */

View File

@@ -1,8 +0,0 @@
#define REACTOS_STR_FILE_DESCRIPTION "ReactOS C Runtime Library"
#define REACTOS_STR_INTERNAL_NAME "msvcrt"
#define REACTOS_STR_ORIGINAL_FILENAME "msvcrt.dll"
#define REACTOS_FILEVERSION 7,0,2600,2180
#define REACTOS_FILEVERSION_STR "7.0.2600"
#include <reactos/version.rc>

File diff suppressed because it is too large Load Diff

View File

@@ -1,17 +0,0 @@
#ifndef _CRT_PRECOMP_H
#define _CRT_PRECOMP_H
#define WIN32_NO_STATUS
//#include <stdio.h>
//#include <stdlib.h>
//#include <locale.h>
//#include <mbctype.h>
#include <internal/wine/msvcrt.h>
#include <internal/tls.h>
#include <internal/locale.h>
//#include <windows.h>
#include <wine/debug.h>
#endif /* _CRT_PRECOMP_H */

View File

@@ -1,922 +0,0 @@
#include <windef.h>
#include <stubs.h>
#undef UNIMPLEMENTED
#define UNIMPLEMENTED __wine_spec_unimplemented_stub("msvcrt.dll", __FUNCTION__)
int __get_app_type()
{
UNIMPLEMENTED;
return 0;
}
int _fileinfo = -1;
void *
__p__fileinfo()
{
return &_fileinfo;
}
unsigned char _mbcasemap[1];
void *
__p__mbcasemap()
{
return _mbcasemap;
}
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 );
}
#ifdef _M_IX86
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);
}
#endif
typedef struct __crt_locale_data_public
{
unsigned short const* _locale_pctype;
_Field_range_(1, 2) int _locale_mb_cur_max;
unsigned int _locale_lc_codepage;
} __crt_locale_data_public;
static
__crt_locale_data_public*
__CRTDECL
__acrt_get_locale_data_prefix(
void const volatile* const _LocalePointers)
{
_locale_t const _TypedLocalePointers = (_locale_t)_LocalePointers;
return (__crt_locale_data_public*)_TypedLocalePointers->locinfo;
}
static
int
__CRTDECL
__acrt_locale_get_ctype_array_value(
_In_reads_(_Char_value + 1) unsigned short const * const locale_pctype_array,
_In_range_(-1, 255) int const c,
_In_ int const mask
)
{
if (c >= -1 && c <= 255)
{
return locale_pctype_array[c] & mask;
}
return 0;
}
const unsigned short* __cdecl __pctype_func(void);
#if defined _CRT_DISABLE_PERFCRIT_LOCKS && !defined _DLL
#define __PCTYPE_FUNC _pctype
#else
#define __PCTYPE_FUNC __pctype_func()
#endif
#ifdef _DEBUG
_ACRTIMP int __cdecl _chvalidator(_In_ int c, _In_ int mask);
#define __chvalidchk(a, b) _chvalidator(a, b)
#else
#define __chvalidchk(a, b) (__acrt_locale_get_ctype_array_value(__PCTYPE_FUNC, (a), (b)))
#endif
static
int
__CRTDECL
_chvalidchk_l(
_In_ int const c,
_In_ int const mask,
_In_opt_ _locale_t const locale
)
{
#ifdef _DEBUG
return _chvalidator_l(locale, c, mask);
#else
if (locale)
{
return __acrt_locale_get_ctype_array_value(__acrt_get_locale_data_prefix(locale)->_locale_pctype, c, mask);
}
return __chvalidchk(c, mask);
#endif
}
static
int
__CRTDECL
_ischartype_l(
_In_ int const c,
_In_ int const mask,
_In_opt_ _locale_t const locale)
{
if (locale)
{
if (c >= -1 && c <= 255)
{
return __acrt_get_locale_data_prefix(locale)->_locale_pctype[c] & mask;
}
if (__acrt_get_locale_data_prefix(locale)->_locale_mb_cur_max > 1)
{
return _isctype_l(c, mask, locale);
}
return 0; // >0xFF and SBCS locale
}
return _chvalidchk_l(c, mask, 0);
}
//#undef _isalnum_l
_Check_return_
_CRTIMP
int
__cdecl
_isalnum_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
return _ischartype_l(c, _ALPHA | _DIGIT, locale);
}
#undef _isalpha_l
_Check_return_
_CRTIMP
int
__cdecl
_isalpha_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
return _ischartype_l(c, _ALPHA, locale);
}
#undef _iscntrl_l
_Check_return_
_CRTIMP
int
__cdecl
_iscntrl_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
return _ischartype_l(c, _CONTROL, locale);
}
#undef _isdigit_l
_Check_return_
_CRTIMP
int
__cdecl
_isdigit_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
return _ischartype_l(c, _DIGIT, locale);
}
#undef _isgraph_l
_Check_return_
_CRTIMP
int
__cdecl
_isgraph_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
return _ischartype_l(c, _PUNCT | _ALPHA | _DIGIT, locale);
}
#undef _islower_l
_Check_return_
_CRTIMP
int
__cdecl
_islower_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
return _ischartype_l(c, _LOWER, locale);
}
#undef _isprint_l
_Check_return_
_CRTIMP
int
__cdecl
_isprint_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
return _ischartype_l(c, _BLANK | _PUNCT | _ALPHA | _DIGIT, locale);
}
#undef _isspace_l
_Check_return_
_CRTIMP
int
__cdecl
_isspace_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
return _ischartype_l(c, _SPACE, locale);
}
#undef _isupper_l
_Check_return_
_CRTIMP
int
__cdecl
_isupper_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
return _ischartype_l(c, _UPPER, locale);
}
#undef _iswalnum_l
_Check_return_
_CRTIMP
int
__cdecl
_iswalnum_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
return _iswctype_l(c, _ALPHA|_DIGIT, locale);
}
#undef _iswalpha_l
_Check_return_
_CRTIMP
int
__cdecl
_iswalpha_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
return _iswctype_l(c, _ALPHA, locale);
}
#undef _iswcntrl_l
_Check_return_
_CRTIMP
int
__cdecl
_iswcntrl_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return _iswctype_l(c, _CONTROL, locale);
}
_Check_return_
_CRTIMP
int
__cdecl
_iswctype_l(
_In_ wint_t c,
_In_ wctype_t type,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
#undef _iswdigit_l
_Check_return_
_CRTIMP
int
__cdecl
_iswdigit_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
return _iswctype_l(c, _DIGIT, locale);
}
#undef _iswgraph_l
_Check_return_
_CRTIMP
int
__cdecl
_iswgraph_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
return _iswctype_l(c, _PUNCT | _ALPHA | _DIGIT, locale);
}
#undef _iswlower_l
_Check_return_
_CRTIMP
int
__cdecl
_iswlower_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
return _iswctype_l(c , _LOWER, locale);
}
#undef _iswprint_l
_Check_return_
_CRTIMP
int
__cdecl
_iswprint_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
return _iswctype_l(c, _BLANK | _PUNCT | _ALPHA | _DIGIT, locale);
}
#undef _iswpunct_l
_Check_return_
_CRTIMP
int
__cdecl
_iswpunct_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
return _iswctype_l(c, _PUNCT, locale);
}
#undef _iswspace_l
_Check_return_
_CRTIMP
int
__cdecl
_iswspace_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
return _iswctype_l(c, _SPACE, locale);
}
#undef _iswupper_l
_Check_return_
_CRTIMP
int
__cdecl
_iswupper_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
return _iswctype_l(c, _UPPER, locale);
}
#undef _iswxdigit_l
_Check_return_
_CRTIMP
int
__cdecl
_iswxdigit_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
return _iswctype_l(c, _HEX, locale);
}
#undef _isxdigit_l
_Check_return_
_CRTIMP
int
__cdecl
_isxdigit_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
return _ischartype_l(c, _HEX, locale);
}
_Must_inspect_result_
_CRTIMP
int
__cdecl
_memicmp_l(
_In_reads_bytes_opt_(size) const void *buf1,
_In_reads_bytes_opt_(size) const void *buf2,
_In_ size_t size,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_strcoll_l(
_In_z_ const char *str1,
_In_z_ const char *str2,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_stricmp_l(
_In_z_ const char *str1,
_In_z_ const char *str2,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_stricoll_l(
_In_z_ const char *str1,
_In_z_ const char *str2,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_strlwr_s(
_Inout_updates_z_(size) char *str,
_In_ size_t size)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_strlwr_s_l(
_Inout_updates_z_(size) char *str,
_In_ size_t size,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_strncoll_l(
_In_z_ const char *str1,
_In_z_ const char *str2,
_In_ size_t maxcount,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_strnicmp_l(
_In_reads_or_z_(maxcount) const char *str1,
_In_reads_or_z_(maxcount) const char *str2,
_In_ size_t maxcount,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_strnicoll_l(
_In_z_ const char *str1,
_In_z_ const char *str2,
_In_ size_t maxcount,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_strnset_s(
_Inout_updates_z_(size) char *str,
_In_ size_t size,
_In_ int val,
_In_ size_t _MaxCount)
{
UNIMPLEMENTED;
return 0;
}
_CRTIMP
char*
_strupr_l(
char *str,
_locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
wint_t
__cdecl
_towlower_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
wint_t
__cdecl
_towupper_l(
_In_ wint_t c,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_CRTIMP
wchar_t*
_wcslwr_l(
wchar_t *str,
_locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_CRTIMP
wchar_t*
_wcsupr_l(
wchar_t *str,
_locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_opt_
_CRTIMP
size_t
__cdecl
_wcsxfrm_l(
_Out_writes_opt_(maxcount) _Post_maybez_ wchar_t *dst,
_In_z_ const wchar_t *src,
_In_ size_t maxcount,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_strset_s(
_Inout_updates_z_(size) char *dst,
_In_ size_t size,
_In_ int val)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_strupr_s(
_Inout_updates_z_(size) char *str,
_In_ size_t size)
{
return _strupr_s_l(str, size, 0);
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_strupr_s_l(
_Inout_updates_z_(_Size) char *str,
_In_ size_t size,
_locale_t locale)
{
UNIMPLEMENTED;
return ENOTSUP;
}
_Check_return_
_CRTIMP
int
__cdecl
_tolower_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_toupper_l(
_In_ int c,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_wcscoll_l(
_In_z_ const wchar_t *str1,
_In_z_ const wchar_t *str2,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_wcsicmp_l(
_In_z_ const wchar_t *str1,
_In_z_ const wchar_t *str2,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_wcsicoll_l(
_In_z_ const wchar_t *str1,
_In_z_ const wchar_t *str2,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_wcslwr_s(
_Inout_updates_z_(sizeInWords) wchar_t *str,
_In_ size_t sizeInWords)
{
return _wcslwr_s_l(str, sizeInWords, NULL);
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_wcslwr_s_l(
_Inout_updates_z_(sizeInWords) wchar_t *str,
_In_ size_t sizeInWords,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return ENOTSUP;
}
typedef size_t rsize_t;
_Check_return_wat_
_CRTIMP // _ACRTIMP
errno_t
__cdecl
strncat_s(
_Inout_updates_z_(size) char* dest,
_In_ rsize_t size,
_In_reads_or_z_(maxCount) char const* src,
_In_ rsize_t maxCount)
{
UNIMPLEMENTED;
return ENOTSUP;
}
_Check_return_opt_
_CRTIMP
_CRT_INSECURE_DEPRECATE(vsnprintf_s)
int
__cdecl
vsnprintf_(
_Out_writes_(maxCount) char *dst,
_In_ size_t maxCount,
_In_z_ _Printf_format_string_ const char *format,
va_list argptr)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_wcsnicoll_l(
_In_z_ const wchar_t *str1,
_In_z_ const wchar_t *str2,
_In_ size_t maxCount,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_wcsnicmp_l(
_In_reads_or_z_(_MaxCount) const wchar_t *str1,
_In_reads_or_z_(_MaxCount) const wchar_t *str2,
_In_ size_t maxCount,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_
_CRTIMP
int
__cdecl
_wcsncoll_l(
_In_z_ const wchar_t *str1,
_In_z_ const wchar_t *str2,
_In_ size_t maxCount,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_strerror_s(
_Out_writes_z_(_SizeInBytes) char *buf,
_In_ size_t sizeInBytes,
_In_opt_z_ const char *errMsg)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_wcsnset_s(
_Inout_updates_z_(_DstSizeInWords) wchar_t *dst,
_In_ size_t sizeInWords,
_In_ wchar_t val,
_In_ size_t maxCount)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_wcsset_s(
_Inout_updates_z_(_SizeInWords) wchar_t *str,
_In_ size_t sizeInWords,
_In_ wchar_t val)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_wat_
_CRTIMP
errno_t
__cdecl
_wcsupr_s_l(
_Inout_updates_z_(_Size) wchar_t *str,
_In_ size_t size,
_In_opt_ _locale_t locale)
{
UNIMPLEMENTED;
return 0;
}
_Check_return_opt_
_CRTIMP
_CRT_INSECURE_DEPRECATE(vsnprintf_s)
int
__cdecl
vsnprintf(
_Out_writes_(_MaxCount) char *dest,
_In_ size_t maxCount,
_In_z_ _Printf_format_string_ const char *format,
va_list argptr)
{
UNIMPLEMENTED;
return 0;
}