Merge "adb: win32: fix exec-in and exec-out to use binary mode"
This commit is contained in:
commit
6b40d0aaa1
1 changed files with 32 additions and 0 deletions
|
|
@ -302,13 +302,32 @@ static void copy_to_file(int inFd, int outFd) {
|
||||||
if (buf == nullptr) fatal("couldn't allocate buffer for copy_to_file");
|
if (buf == nullptr) fatal("couldn't allocate buffer for copy_to_file");
|
||||||
int len;
|
int len;
|
||||||
long total = 0;
|
long total = 0;
|
||||||
|
#ifdef _WIN32
|
||||||
|
int old_stdin_mode = -1;
|
||||||
|
int old_stdout_mode = -1;
|
||||||
|
#endif
|
||||||
|
|
||||||
D("copy_to_file(%d -> %d)\n", inFd, outFd);
|
D("copy_to_file(%d -> %d)\n", inFd, outFd);
|
||||||
|
|
||||||
if (inFd == STDIN_FILENO) {
|
if (inFd == STDIN_FILENO) {
|
||||||
stdin_raw_init(STDIN_FILENO);
|
stdin_raw_init(STDIN_FILENO);
|
||||||
|
#ifdef _WIN32
|
||||||
|
old_stdin_mode = _setmode(STDIN_FILENO, _O_BINARY);
|
||||||
|
if (old_stdin_mode == -1) {
|
||||||
|
fatal_errno("could not set stdin to binary");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (outFd == STDOUT_FILENO) {
|
||||||
|
old_stdout_mode = _setmode(STDOUT_FILENO, _O_BINARY);
|
||||||
|
if (old_stdout_mode == -1) {
|
||||||
|
fatal_errno("could not set stdout to binary");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (inFd == STDIN_FILENO) {
|
if (inFd == STDIN_FILENO) {
|
||||||
len = unix_read(inFd, buf, BUFSIZE);
|
len = unix_read(inFd, buf, BUFSIZE);
|
||||||
|
|
@ -338,8 +357,21 @@ static void copy_to_file(int inFd, int outFd) {
|
||||||
|
|
||||||
if (inFd == STDIN_FILENO) {
|
if (inFd == STDIN_FILENO) {
|
||||||
stdin_raw_restore(STDIN_FILENO);
|
stdin_raw_restore(STDIN_FILENO);
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (_setmode(STDIN_FILENO, old_stdin_mode) == -1) {
|
||||||
|
fatal_errno("could not restore stdin mode");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (outFd == STDOUT_FILENO) {
|
||||||
|
if (_setmode(STDOUT_FILENO, old_stdout_mode) == -1) {
|
||||||
|
fatal_errno("could not restore stdout mode");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
D("copy_to_file() finished after %lu bytes\n", total);
|
D("copy_to_file() finished after %lu bytes\n", total);
|
||||||
free(buf);
|
free(buf);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue