mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
eb53121b77
Fixes two warnings: - test\overlapped-checker\main_win.c(37,25): warning : format specifies type 'int' but the argument has type 'DWORD' (aka 'unsigned long') [-Wformat] - test\overlapped-checker\main_win.c(9,14): warning : unused variable 'write_count' [-Wunused-variable] PR-URL: https://github.com/nodejs/node/pull/52405 Reviewed-By: Richard Lau <rlau@redhat.com> Reviewed-By: Mohammed Keyvanzadeh <mohammadkeyvanzade94@gmail.com> Reviewed-By: Yagiz Nizipli <yagiz.nizipli@sentry.io>
85 lines
2.1 KiB
C
85 lines
2.1 KiB
C
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include <windows.h>
|
|
|
|
static char buf[256];
|
|
static DWORD read_count;
|
|
static HANDLE stdin_h;
|
|
static OVERLAPPED stdin_o;
|
|
|
|
static void die(const char* buf) {
|
|
fprintf(stderr, "%s\n", buf);
|
|
fflush(stderr);
|
|
exit(100);
|
|
}
|
|
|
|
static void overlapped_read(void) {
|
|
if (ReadFile(stdin_h, buf, sizeof(buf), NULL, &stdin_o)) {
|
|
// Since we start the read operation immediately before requesting a write,
|
|
// it should never complete synchronously since no data would be available
|
|
die("read completed synchronously");
|
|
}
|
|
if (GetLastError() != ERROR_IO_PENDING) {
|
|
die("overlapped read failed");
|
|
}
|
|
}
|
|
|
|
static void write(const char* buf, size_t buf_size) {
|
|
overlapped_read();
|
|
DWORD write_count;
|
|
HANDLE stdout_h = GetStdHandle(STD_OUTPUT_HANDLE);
|
|
if (!WriteFile(stdout_h, buf, buf_size, &write_count, NULL)) {
|
|
die("overlapped write failed");
|
|
}
|
|
fprintf(stderr, "%ld", write_count);
|
|
fflush(stderr);
|
|
}
|
|
|
|
int main(void) {
|
|
HANDLE event = CreateEvent(NULL, FALSE, FALSE, NULL);
|
|
if (event == NULL) {
|
|
die("failed to create event handle");
|
|
}
|
|
|
|
stdin_h = GetStdHandle(STD_INPUT_HANDLE);
|
|
stdin_o.hEvent = event;
|
|
|
|
write("0", 1);
|
|
|
|
while (1) {
|
|
DWORD result = WaitForSingleObject(event, INFINITE);
|
|
if (result == WAIT_OBJECT_0) {
|
|
if (!GetOverlappedResult(stdin_h, &stdin_o, &read_count, FALSE)) {
|
|
die("failed to get overlapped read result");
|
|
}
|
|
if (strncmp(buf, "exit", read_count) == 0) {
|
|
break;
|
|
}
|
|
write(buf, read_count);
|
|
} else {
|
|
char emsg[0xfff];
|
|
int ecode = GetLastError();
|
|
DWORD rv = FormatMessage(
|
|
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
|
|
NULL,
|
|
ecode,
|
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
|
(LPSTR)emsg,
|
|
sizeof(emsg),
|
|
NULL);
|
|
if (rv > 0) {
|
|
snprintf(emsg, sizeof(emsg),
|
|
"WaitForSingleObject failed. Error %d (%s)", ecode, emsg);
|
|
} else {
|
|
snprintf(emsg, sizeof(emsg),
|
|
"WaitForSingleObject failed. Error %d", ecode);
|
|
}
|
|
die(emsg);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|