bool WriteToFile()

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;
  }