1// Licensed to the .NET Foundation under one or more agreements.
2// The .NET Foundation licenses this file to you under the MIT license.
3// See the LICENSE file in the project root for more information.
4
5/*=====================================================================
6**
7** Source: GetStdHandle.c (test 1)
8**
9** Purpose: Tests the PAL implementation of the GetStdHandle function.
10**
11**
12**===================================================================*/
13
14#include <palsuite.h>
15
16
17int __cdecl main(int argc, char *argv[])
18{
19 HANDLE hFile = NULL;
20 DWORD dwBytesWritten = 0;
21 DWORD dwFileType;
22 BOOL bRc = FALSE;
23 const char* szText = "this is a test of GetStdHandle\n";
24
25
26 if (0 != PAL_Initialize(argc,argv))
27 {
28 return FAIL;
29 }
30
31 /*
32 * attempt to get an invalid handle
33 */
34 hFile = GetStdHandle(-2);
35 if (hFile != INVALID_HANDLE_VALUE)
36 {
37 Fail("GetStdHandle: ERROR -> A request for the STD_INPUT_HANDLE "
38 "returned an invalid handle.\n");
39 }
40
41
42 /*
43 * test the STD_INPUT_HANDLE handle
44 */
45 hFile = GetStdHandle(STD_INPUT_HANDLE);
46 if (hFile == INVALID_HANDLE_VALUE)
47 {
48 Fail("GetStdHandle: ERROR -> A request for the STD_INPUT_HANDLE "
49 "returned an invalid handle.\n");
50 }
51
52 /* an attempt to write to the input handle should fail */
53 /* I don't know how to automate a read from the input handle */
54 bRc = WriteFile(hFile, szText, (DWORD)strlen(szText), &dwBytesWritten, NULL);
55 if (bRc != FALSE)
56 {
57 Fail("GetStdHandle: ERROR -> WriteFile was able to write to "
58 "STD_INPUT_HANDLE when it should have failed.\n");
59 }
60
61
62 /*
63 * test the STD_OUTPUT_HANDLE handle
64 */
65 hFile = GetStdHandle(STD_OUTPUT_HANDLE);
66 if (hFile == INVALID_HANDLE_VALUE)
67 {
68 Fail("GetStdHandle: ERROR -> A request for the STD_OUTPUT_HANDLE "
69 "returned an invalid handle.\n");
70 }
71
72 /* try to write to the output handle */
73 bRc = WriteFile(hFile, szText, (DWORD)strlen(szText), &dwBytesWritten, NULL);
74 if (bRc != TRUE)
75 {
76 Fail("GetStdHandle: ERROR -> WriteFile failed to write to "
77 "STD_OUTPUT_HANDLE with the error %ld\n",
78 GetLastError());
79 }
80
81
82 /* test the STD_ERROR_HANDLE handle */
83 hFile = GetStdHandle(STD_ERROR_HANDLE);
84 if (hFile == INVALID_HANDLE_VALUE)
85 {
86 Fail("GetStdHandle: ERROR -> A request for the STD_ERROR_HANDLE "
87 "returned an invalid handle.\n");
88 }
89
90 /* try to write to the error handle */
91 bRc = WriteFile(hFile, szText, (DWORD)strlen(szText), &dwBytesWritten, NULL);
92 if (bRc != TRUE)
93 {
94 Fail("GetStdHandle: ERROR -> WriteFile failed to write to "
95 "STD_ERROR_HANDLE with the error %ld\n",
96 GetLastError());
97 }
98
99 /* check to see if we can CloseHandle works on the STD_ERROR_HANDLE */
100 if (!CloseHandle(hFile))
101 {
102 Fail("GetStdHandle: ERROR -> CloseHandle failed. GetLastError "
103 "returned %u.\n",
104 GetLastError());
105 }
106
107 /* try to write to the closed error handle */
108 bRc = WriteFile(hFile,
109 szText,
110 (DWORD)strlen(szText),
111 &dwBytesWritten,
112 NULL);
113 if (bRc)
114 {
115 Fail("GetStdHandle: ERROR -> WriteFile was able to write to the closed"
116 " STD_ERROR_HANDLE handle.\n");
117 }
118
119
120 PAL_Terminate();
121 return PASS;
122}
123
124