void makeXar()

in xar/XarParserTest.cpp [365:393]


  void makeXar(
      const std::string& header,
      bool includeMagic,
      const std::vector<uint8_t>& magic) {
    const auto filenameTemplate = std::filesystem::temp_directory_path()
                                      .append("test_xar_headerXXXXXX")
                                      .string();
    char* filename = new char[filenameTemplate.size() + 1];
    ::strncpy(filename, filenameTemplate.c_str(), filenameTemplate.size() + 1);
    fdHolder_ = std::make_unique<SelfClosingFdHolder>(::mkstemp(filename));
    ASSERT_GE(fdHolder_->fd_, 0) << "Failed to make temporary file" << errno;
    // Delete the temp file later on ::close
    ::unlink(filename);

    int bytes;
    if (includeMagic) {
      char buf[kTestHeaderSize + magic.size() + 1];
      memset(buf, 0, sizeof(buf));
      EXPECT_LE(header.size(), kTestHeaderSize);
      ::strncpy(buf, header.c_str(), sizeof(buf));
      ::memcpy(&buf[kTestHeaderSize], magic.data(), magic.size());
      bytes = tools::xar::writeFull(fdHolder_->fd_, buf, sizeof(buf));
      ASSERT_EQ(bytes, sizeof(buf));
    } else {
      bytes =
          tools::xar::writeFull(fdHolder_->fd_, header.c_str(), header.size());
      ASSERT_EQ(bytes, header.size());
    }
  }