xref: /reactos/sdk/lib/ucrt/conio/cputs.cpp (revision a6a07059)
1 //
2 // cputs.cpp
3 //
4 //      Copyright (c) Microsoft Corporation. All rights reserved.
5 //
6 // Defines _cputs(), which writes a string directly to the console.
7 //
8 #include <conio.h>
9 #include <corecrt_internal_lowio.h>
10 
11 // Writes the given string directly to the console.  No newline is appended.
12 // Returns 0 on success; nonzero on failure.
13 extern "C" int __cdecl _cputs(char const* const string)
14 {
15     _VALIDATE_CLEAR_OSSERR_RETURN(string != nullptr, EINVAL, -1);
16 
17     __acrt_lock(__acrt_conio_lock);
18     int result = 0;
19     __try
20     {
21         // Write the string directly to the console.  Each character is written
22         // individually, as performance of this function is not considered
23         // critical.
24         for (char const* p = string; *p; ++p)
25         {
26             if (_putch_nolock(*p) == EOF)
27             {
28                 result = -1;
29                 __leave;
30             }
31         }
32     }
33     __finally
34     {
35         __acrt_unlock(__acrt_conio_lock);
36     }
37     __endtry
38     return result;
39 }
40