22#include <winpr/file.h>
23#include <winpr/handle.h>
27static BOOL write_std_handle(DWORD nStdHandle,
const char* name)
29 const char buf[] =
"happy happy\n";
30 DWORD bytesWritten = 0;
32 HANDLE h = GetStdHandle(nStdHandle);
33 if (h == INVALID_HANDLE_VALUE)
35 (void)fprintf(stderr,
"GetStdHandle(%s) failed ;(\n", name);
38 if (!WriteFile(h, buf, strnlen(buf,
sizeof(buf)), &bytesWritten,
nullptr))
40 (void)fprintf(stderr,
"WriteFile(%s) failed\n", name);
43 if (bytesWritten != strnlen(buf,
sizeof(buf)))
45 (void)fprintf(stderr,
"write to %s failed\n", name);
51int TestFileGetStdHandle(
int argc,
char* argv[])
58 const HANDLE si = GetStdHandle(STD_INPUT_HANDLE);
59 const HANDLE so = GetStdHandle(STD_OUTPUT_HANDLE);
60 const HANDLE se = GetStdHandle(STD_ERROR_HANDLE);
61 if ((si == INVALID_HANDLE_VALUE) || (so == INVALID_HANDLE_VALUE) ||
62 (se == INVALID_HANDLE_VALUE))
64 (void)fprintf(stderr,
"GetStdHandle failed ;(\n");
67 if ((si == so) || (si == se) || (so == se))
69 (void)fprintf(stderr,
"GetStdHandle returned one handle for different streams\n");
72 if ((GetStdHandle(STD_INPUT_HANDLE) != si) || (GetStdHandle(STD_OUTPUT_HANDLE) != so) ||
73 (GetStdHandle(STD_ERROR_HANDLE) != se))
75 (void)fprintf(stderr,
"GetStdHandle returned a new handle on a repeated call\n");
79 if (!write_std_handle(STD_OUTPUT_HANDLE,
"STD_OUTPUT_HANDLE") ||
80 !write_std_handle(STD_ERROR_HANDLE,
"STD_ERROR_HANDLE"))
84 (void)CloseHandle(si);
85 (void)CloseHandle(so);
86 (void)CloseHandle(se);
87 if (!write_std_handle(STD_OUTPUT_HANDLE,
"STD_OUTPUT_HANDLE") ||
88 !write_std_handle(STD_ERROR_HANDLE,
"STD_ERROR_HANDLE"))