summaryrefslogtreecommitdiff
path: root/compat/winansi.c
diff options
context:
space:
mode:
Diffstat (limited to 'compat/winansi.c')
-rw-r--r--compat/winansi.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/compat/winansi.c b/compat/winansi.c
index a29d34ef44..cacd82c833 100644
--- a/compat/winansi.c
+++ b/compat/winansi.c
@@ -540,7 +540,20 @@ static HANDLE swap_osfhnd(int fd, HANDLE new_handle)
#ifdef DETECT_MSYS_TTY
#include <winternl.h>
+
+#if defined(_MSC_VER)
+
+typedef struct _OBJECT_NAME_INFORMATION
+{
+ UNICODE_STRING Name;
+ WCHAR NameBuffer[0];
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
+
+#define ObjectNameInformation 1
+
+#else
#include <ntstatus.h>
+#endif
static void detect_msys_tty(int fd)
{
@@ -595,7 +608,7 @@ int winansi_isatty(int fd)
void winansi_init(void)
{
int con1, con2;
- char name[32];
+ wchar_t name[32];
/* check if either stdout or stderr is a console output screen buffer */
con1 = is_console(1);
@@ -615,13 +628,15 @@ void winansi_init(void)
}
/* create a named pipe to communicate with the console thread */
- xsnprintf(name, sizeof(name), "\\\\.\\pipe\\winansi%lu", GetCurrentProcessId());
- hwrite = CreateNamedPipe(name, PIPE_ACCESS_OUTBOUND,
+ if (swprintf(name, ARRAY_SIZE(name) - 1, L"\\\\.\\pipe\\winansi%lu",
+ GetCurrentProcessId()) < 0)
+ die("Could not initialize winansi pipe name");
+ hwrite = CreateNamedPipeW(name, PIPE_ACCESS_OUTBOUND,
PIPE_TYPE_BYTE | PIPE_WAIT, 1, BUFFER_SIZE, 0, 0, NULL);
if (hwrite == INVALID_HANDLE_VALUE)
die_lasterr("CreateNamedPipe failed");
- hread = CreateFile(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
+ hread = CreateFileW(name, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
if (hread == INVALID_HANDLE_VALUE)
die_lasterr("CreateFile for named pipe failed");