Reactos
1//
2// putwch.cpp
3//
4// Copyright (c) Microsoft Corporation. All rights reserved.
5//
6// Defines _putwch(), which writes a wide character to the console.
7//
8#include <conio.h>
9#include <corecrt_internal_lowio.h>
10#include <corecrt_internal_ptd_propagation.h>
11
12// Writes a wide character to the console. Returns the character on success,
13// WEOF on failure.
14extern "C" wint_t __cdecl _putwch(wchar_t const c)
15{
16 return __acrt_lock_and_call(__acrt_conio_lock, [&]
17 {
18 return _putwch_nolock(c);
19 });
20}
21
22extern "C" wint_t __cdecl _putwch_nolock(wchar_t const c)
23{
24 if (__dcrt_lowio_ensure_console_output_initialized() == FALSE)
25 return WEOF;
26
27 // Write character to console:
28 DWORD charsWritten;
29 if (__dcrt_write_console(&c, 1, &charsWritten) == FALSE)
30 return WEOF;
31
32 return c;
33}
34
35extern "C" wint_t __cdecl _putwch_nolock_internal(wchar_t const c, __crt_cached_ptd_host&)
36{
37 // Currently _putwch_nolock does not require any PTD access. Do not need to propagate __crt_cached_ptd_host&.
38 return _putwch_nolock(c);
39}