Browse Source
Further fix for O_APPEND emulation on Windows * js/mingw-o-append: mingw: fix mingw_open_append to work with named pipes t0051: test GIT_TRACE to a windows named pipemaint
Junio C Hamano
6 years ago
6 changed files with 129 additions and 3 deletions
@ -0,0 +1,72 @@
@@ -0,0 +1,72 @@
|
||||
#include "test-tool.h" |
||||
#include "git-compat-util.h" |
||||
#include "strbuf.h" |
||||
|
||||
#ifdef GIT_WINDOWS_NATIVE |
||||
static const char *usage_string = "<pipe-filename>"; |
||||
|
||||
#define TEST_BUFSIZE (4096) |
||||
|
||||
int cmd__windows_named_pipe(int argc, const char **argv) |
||||
{ |
||||
const char *filename; |
||||
struct strbuf pathname = STRBUF_INIT; |
||||
int err; |
||||
HANDLE h; |
||||
BOOL connected; |
||||
char buf[TEST_BUFSIZE + 1]; |
||||
|
||||
if (argc < 2) |
||||
goto print_usage; |
||||
filename = argv[1]; |
||||
if (strchr(filename, '/') || strchr(filename, '\\')) |
||||
goto print_usage; |
||||
strbuf_addf(&pathname, "//./pipe/%s", filename); |
||||
|
||||
/* |
||||
* Create a single instance of the server side of the named pipe. |
||||
* This will allow exactly one client instance to connect to it. |
||||
*/ |
||||
h = CreateNamedPipeA( |
||||
pathname.buf, |
||||
PIPE_ACCESS_INBOUND | FILE_FLAG_FIRST_PIPE_INSTANCE, |
||||
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT, |
||||
PIPE_UNLIMITED_INSTANCES, |
||||
TEST_BUFSIZE, TEST_BUFSIZE, 0, NULL); |
||||
if (h == INVALID_HANDLE_VALUE) { |
||||
err = err_win_to_posix(GetLastError()); |
||||
fprintf(stderr, "CreateNamedPipe failed: %s\n", |
||||
strerror(err)); |
||||
return err; |
||||
} |
||||
|
||||
connected = ConnectNamedPipe(h, NULL) |
||||
? TRUE |
||||
: (GetLastError() == ERROR_PIPE_CONNECTED); |
||||
if (!connected) { |
||||
err = err_win_to_posix(GetLastError()); |
||||
fprintf(stderr, "ConnectNamedPipe failed: %s\n", |
||||
strerror(err)); |
||||
CloseHandle(h); |
||||
return err; |
||||
} |
||||
|
||||
while (1) { |
||||
DWORD nbr; |
||||
BOOL success = ReadFile(h, buf, TEST_BUFSIZE, &nbr, NULL); |
||||
if (!success || nbr == 0) |
||||
break; |
||||
buf[nbr] = 0; |
||||
|
||||
write(1, buf, nbr); |
||||
} |
||||
|
||||
DisconnectNamedPipe(h); |
||||
CloseHandle(h); |
||||
return 0; |
||||
|
||||
print_usage: |
||||
fprintf(stderr, "usage: %s %s\n", argv[0], usage_string); |
||||
return 1; |
||||
} |
||||
#endif |
@ -0,0 +1,17 @@
@@ -0,0 +1,17 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='Windows named pipes' |
||||
|
||||
. ./test-lib.sh |
||||
|
||||
test_expect_success MINGW 'o_append write to named pipe' ' |
||||
GIT_TRACE="$(pwd)/expect" git status >/dev/null 2>&1 && |
||||
{ test-tool windows-named-pipe t0051 >actual 2>&1 & } && |
||||
pid=$! && |
||||
sleep 1 && |
||||
GIT_TRACE=//./pipe/t0051 git status >/dev/null 2>warning && |
||||
wait $pid && |
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue