msvcrt: Added _set_printf_count_output and _get_printf_count_output implementation.
This commit is contained in:
parent
168909283c
commit
6ecabf7cae
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "stdlib.h"
|
#include "stdio.h"
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@ BOOL WINAPI DllMain(HINSTANCE hdll, DWORD reason, LPVOID reserved)
|
||||||
|
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
DisableThreadLibraryCalls(hdll);
|
DisableThreadLibraryCalls(hdll);
|
||||||
|
_set_printf_count_output(0);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -686,7 +686,7 @@
|
||||||
@ cdecl _get_osfhandle(long) msvcrt._get_osfhandle
|
@ cdecl _get_osfhandle(long) msvcrt._get_osfhandle
|
||||||
@ cdecl _get_output_format() msvcrt._get_output_format
|
@ cdecl _get_output_format() msvcrt._get_output_format
|
||||||
@ stub _get_pgmptr
|
@ stub _get_pgmptr
|
||||||
@ stub _get_printf_count_output
|
@ cdecl _get_printf_count_output() msvcrt._get_printf_count_output
|
||||||
@ stub _get_purecall_handler
|
@ stub _get_purecall_handler
|
||||||
@ cdecl _get_terminate() msvcrt._get_terminate
|
@ cdecl _get_terminate() msvcrt._get_terminate
|
||||||
@ stub _get_timezone
|
@ stub _get_timezone
|
||||||
|
@ -1077,7 +1077,7 @@
|
||||||
@ cdecl _set_invalid_parameter_handler(ptr) msvcrt._set_invalid_parameter_handler
|
@ cdecl _set_invalid_parameter_handler(ptr) msvcrt._set_invalid_parameter_handler
|
||||||
@ stub _set_malloc_crt_max_wait
|
@ stub _set_malloc_crt_max_wait
|
||||||
@ stub _set_output_format
|
@ stub _set_output_format
|
||||||
@ stub _set_printf_count_output
|
@ cdecl _set_printf_count_output(long) msvcrt._set_printf_count_output
|
||||||
@ cdecl _set_purecall_handler(ptr) msvcrt._set_purecall_handler
|
@ cdecl _set_purecall_handler(ptr) msvcrt._set_purecall_handler
|
||||||
@ cdecl _seterrormode(long) msvcrt._seterrormode
|
@ cdecl _seterrormode(long) msvcrt._seterrormode
|
||||||
@ cdecl -arch=i386,x86_64 -norelay _setjmp(ptr) msvcrt._setjmp
|
@ cdecl -arch=i386,x86_64 -norelay _setjmp(ptr) msvcrt._setjmp
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
MODULE = msvcr80.dll
|
MODULE = msvcr80.dll
|
||||||
IMPORTS = msvcrt
|
IMPORTS = msvcrt
|
||||||
|
MODCFLAGS = @BUILTINFLAG@
|
||||||
|
EXTRAINCL = -I$(top_srcdir)/include/msvcrt
|
||||||
|
|
||||||
C_SRCS = \
|
C_SRCS = \
|
||||||
msvcr80.c
|
msvcr80.c
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
#include "stdio.h"
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
#include "winbase.h"
|
#include "winbase.h"
|
||||||
|
|
||||||
|
@ -32,6 +33,7 @@ BOOL WINAPI DllMain(HINSTANCE hdll, DWORD reason, LPVOID reserved)
|
||||||
|
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
DisableThreadLibraryCalls(hdll);
|
DisableThreadLibraryCalls(hdll);
|
||||||
|
_set_printf_count_output(0);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -530,7 +530,7 @@
|
||||||
@ stub _get_osver
|
@ stub _get_osver
|
||||||
@ cdecl _get_output_format() msvcrt._get_output_format
|
@ cdecl _get_output_format() msvcrt._get_output_format
|
||||||
@ stub _get_pgmptr
|
@ stub _get_pgmptr
|
||||||
@ stub _get_printf_count_output
|
@ cdecl _get_printf_count_output() msvcrt._get_printf_count_output
|
||||||
@ stub _get_purecall_handler
|
@ stub _get_purecall_handler
|
||||||
@ cdecl _get_sbh_threshold() msvcrt._get_sbh_threshold
|
@ cdecl _get_sbh_threshold() msvcrt._get_sbh_threshold
|
||||||
@ cdecl _get_terminate() msvcrt._get_terminate
|
@ cdecl _get_terminate() msvcrt._get_terminate
|
||||||
|
@ -930,7 +930,7 @@
|
||||||
@ cdecl _set_invalid_parameter_handler(ptr) msvcrt._set_invalid_parameter_handler
|
@ cdecl _set_invalid_parameter_handler(ptr) msvcrt._set_invalid_parameter_handler
|
||||||
@ stub _set_malloc_crt_max_wait
|
@ stub _set_malloc_crt_max_wait
|
||||||
@ stub _set_output_format
|
@ stub _set_output_format
|
||||||
@ stub _set_printf_count_output
|
@ cdecl _set_printf_count_output(long) msvcrt._set_printf_count_output
|
||||||
@ cdecl _set_purecall_handler(ptr) msvcrt._set_purecall_handler
|
@ cdecl _set_purecall_handler(ptr) msvcrt._set_purecall_handler
|
||||||
@ cdecl _set_sbh_threshold(long) msvcrt._set_sbh_threshold
|
@ cdecl _set_sbh_threshold(long) msvcrt._set_sbh_threshold
|
||||||
@ cdecl _seterrormode(long) msvcrt._seterrormode
|
@ cdecl _seterrormode(long) msvcrt._seterrormode
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
|
#include "stdio.h"
|
||||||
#include "errno.h"
|
#include "errno.h"
|
||||||
#include "malloc.h"
|
#include "malloc.h"
|
||||||
#include "windef.h"
|
#include "windef.h"
|
||||||
|
@ -101,6 +102,7 @@ BOOL WINAPI DllMain(HINSTANCE hdll, DWORD reason, LPVOID reserved)
|
||||||
|
|
||||||
case DLL_PROCESS_ATTACH:
|
case DLL_PROCESS_ATTACH:
|
||||||
DisableThreadLibraryCalls(hdll);
|
DisableThreadLibraryCalls(hdll);
|
||||||
|
_set_printf_count_output(0);
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -520,7 +520,7 @@
|
||||||
@ cdecl _get_osfhandle(long) msvcrt._get_osfhandle
|
@ cdecl _get_osfhandle(long) msvcrt._get_osfhandle
|
||||||
@ cdecl _get_output_format() msvcrt._get_output_format
|
@ cdecl _get_output_format() msvcrt._get_output_format
|
||||||
@ stub _get_pgmptr
|
@ stub _get_pgmptr
|
||||||
@ stub _get_printf_count_output
|
@ cdecl _get_printf_count_output() msvcrt._get_printf_count_output
|
||||||
@ stub _get_purecall_handler
|
@ stub _get_purecall_handler
|
||||||
@ cdecl _get_sbh_threshold() msvcrt._get_sbh_threshold
|
@ cdecl _get_sbh_threshold() msvcrt._get_sbh_threshold
|
||||||
@ cdecl _get_terminate() msvcrt._get_terminate
|
@ cdecl _get_terminate() msvcrt._get_terminate
|
||||||
|
@ -916,7 +916,7 @@
|
||||||
@ cdecl _set_invalid_parameter_handler(ptr) msvcrt._set_invalid_parameter_handler
|
@ cdecl _set_invalid_parameter_handler(ptr) msvcrt._set_invalid_parameter_handler
|
||||||
@ stub _set_malloc_crt_max_wait
|
@ stub _set_malloc_crt_max_wait
|
||||||
@ stub _set_output_format
|
@ stub _set_output_format
|
||||||
@ stub _set_printf_count_output
|
@ cdecl _set_printf_count_output(long) msvcrt._set_printf_count_output
|
||||||
@ cdecl _set_purecall_handler(ptr) msvcrt._set_purecall_handler
|
@ cdecl _set_purecall_handler(ptr) msvcrt._set_purecall_handler
|
||||||
@ cdecl _set_sbh_threshold(long) msvcrt._set_sbh_threshold
|
@ cdecl _set_sbh_threshold(long) msvcrt._set_sbh_threshold
|
||||||
@ cdecl _seterrormode(long) msvcrt._seterrormode
|
@ cdecl _seterrormode(long) msvcrt._seterrormode
|
||||||
|
|
|
@ -1491,3 +1491,5 @@
|
||||||
@ cdecl -arch=i386 _statusfp2(ptr ptr)
|
@ cdecl -arch=i386 _statusfp2(ptr ptr)
|
||||||
@ cdecl _wcstod_l(wstr ptr) MSVCRT__wcstod_l
|
@ cdecl _wcstod_l(wstr ptr) MSVCRT__wcstod_l
|
||||||
@ cdecl _wdupenv_s(ptr ptr str)
|
@ cdecl _wdupenv_s(ptr ptr str)
|
||||||
|
@ cdecl _get_printf_count_output()
|
||||||
|
@ cdecl _set_printf_count_output(long)
|
||||||
|
|
|
@ -491,7 +491,15 @@ int FUNC_NAME(pf_printf)(FUNC_NAME(puts_clbk) pf_puts, void *puts_ctx, const API
|
||||||
i = FUNC_NAME(pf_output_format_str)(pf_puts, puts_ctx, buf, -1, &flags, locale);
|
i = FUNC_NAME(pf_output_format_str)(pf_puts, puts_ctx, buf, -1, &flags, locale);
|
||||||
#endif
|
#endif
|
||||||
} else if(flags.Format == 'n') {
|
} else if(flags.Format == 'n') {
|
||||||
int *used = pf_args(args_ctx, pos, VT_PTR, &valist).get_ptr;
|
int *used;
|
||||||
|
|
||||||
|
if(!n_format_enabled) {
|
||||||
|
MSVCRT_INVALID_PMT("\'n\' format specifier disabled");
|
||||||
|
*MSVCRT__errno() = MSVCRT_EINVAL;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
used = pf_args(args_ctx, pos, VT_PTR, &valist).get_ptr;
|
||||||
*used = written;
|
*used = written;
|
||||||
i = 0;
|
i = 0;
|
||||||
} else if(flags.Format && strchr("diouxX", flags.Format)) {
|
} else if(flags.Format && strchr("diouxX", flags.Format)) {
|
||||||
|
|
|
@ -33,11 +33,27 @@
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
|
WINE_DEFAULT_DEBUG_CHANNEL(msvcrt);
|
||||||
|
|
||||||
|
static BOOL n_format_enabled = TRUE;
|
||||||
|
|
||||||
#include "printf.h"
|
#include "printf.h"
|
||||||
#define PRINTF_WIDE
|
#define PRINTF_WIDE
|
||||||
#include "printf.h"
|
#include "printf.h"
|
||||||
#undef PRINTF_WIDE
|
#undef PRINTF_WIDE
|
||||||
|
|
||||||
|
/* _get_printf_count_output - not exported in native msvcrt */
|
||||||
|
int CDECL _get_printf_count_output( void )
|
||||||
|
{
|
||||||
|
return n_format_enabled ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* _set_printf_count_output - not exported in native msvcrt */
|
||||||
|
int CDECL _set_printf_count_output( int enable )
|
||||||
|
{
|
||||||
|
BOOL old = n_format_enabled;
|
||||||
|
n_format_enabled = (enable ? TRUE : FALSE);
|
||||||
|
return old ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* _wcsdup (MSVCRT.@)
|
* _wcsdup (MSVCRT.@)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -108,12 +108,14 @@ int __cdecl _flsbuf(int,FILE*);
|
||||||
int __cdecl _flushall(void);
|
int __cdecl _flushall(void);
|
||||||
int __cdecl _fputchar(int);
|
int __cdecl _fputchar(int);
|
||||||
FILE* __cdecl _fsopen(const char*,const char*,int);
|
FILE* __cdecl _fsopen(const char*,const char*,int);
|
||||||
|
int __cdecl _get_printf_count_output(void);
|
||||||
int __cdecl _getmaxstdio(void);
|
int __cdecl _getmaxstdio(void);
|
||||||
int __cdecl _getw(FILE*);
|
int __cdecl _getw(FILE*);
|
||||||
int __cdecl _pclose(FILE*);
|
int __cdecl _pclose(FILE*);
|
||||||
FILE* __cdecl _popen(const char*,const char*);
|
FILE* __cdecl _popen(const char*,const char*);
|
||||||
int __cdecl _putw(int,FILE*);
|
int __cdecl _putw(int,FILE*);
|
||||||
int __cdecl _rmtmp(void);
|
int __cdecl _rmtmp(void);
|
||||||
|
int __cdecl _set_printf_count_output(int);
|
||||||
int __cdecl _setmaxstdio(int);
|
int __cdecl _setmaxstdio(int);
|
||||||
int __cdecl _snprintf(char*,size_t,const char*,...);
|
int __cdecl _snprintf(char*,size_t,const char*,...);
|
||||||
int __cdecl _snprintf_s(char*,size_t,size_t,const char*,...);
|
int __cdecl _snprintf_s(char*,size_t,size_t,const char*,...);
|
||||||
|
|
Loading…
Reference in New Issue