in util/process_wrapper/system_windows.cc [128:174]
bool WriteToFile(const System::StrType& stdout_file) {
CloseWriteEnd();
HANDLE output_file_handle = CreateFile(
/*lpFileName*/ stdout_file.c_str(),
/*dwDesiredAccess*/ GENERIC_WRITE,
/*dwShareMode*/ FILE_SHARE_WRITE,
/*lpSecurityAttributes*/ NULL,
/*dwCreationDisposition*/ CREATE_ALWAYS,
/*dwFlagsAndAttributes*/ FILE_ATTRIBUTE_NORMAL,
/*hTemplateFile*/ NULL);
if (output_file_handle == INVALID_HANDLE_VALUE) {
std::cerr << "process wrapper error: failed to open the output file: "
<< GetLastErrorAsStr();
return false;
}
constexpr DWORD kBufferSize = 4096;
CHAR buffer[kBufferSize];
bool ret = true;
while (1) {
DWORD read;
bool success =
ReadFile(ReadEndHandle(), buffer, kBufferSize, &read, NULL);
if (read == 0) {
break;
} else if (!success) {
std::cerr
<< "process wrapper error: failed to read child process output: "
<< GetLastErrorAsStr();
ret = false;
break;
}
DWORD written;
success = WriteFile(output_file_handle, buffer, read, &written, NULL);
if (!success) {
std::cerr << "process wrapper error: failed to write to output capture "
"file: "
<< GetLastErrorAsStr();
ret = false;
break;
}
}
CloseHandle(output_file_handle);
return ret;
}