// // Copyright 2019 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // system_utils: Defines common utility functions #include "util/test_utils.h" #include #include namespace angle { bool CreateTemporaryFile(char *tempFileNameOut, uint32_t maxFileNameLen) { constexpr uint32_t kMaxPath = 1000u; char tempPath[kMaxPath]; if (!GetTempDir(tempPath, kMaxPath)) return false; return CreateTemporaryFileInDir(tempPath, tempFileNameOut, maxFileNameLen); } bool GetFileSize(const char *filePath, uint32_t *sizeOut) { std::ifstream stream(filePath); if (!stream) { return false; } stream.seekg(0, std::ios::end); *sizeOut = static_cast(stream.tellg()); return true; } bool ReadEntireFileToString(const char *filePath, char *contentsOut, uint32_t maxLen) { std::ifstream stream(filePath); if (!stream) { return false; } std::string contents; stream.seekg(0, std::ios::end); contents.reserve(static_cast(stream.tellg())); stream.seekg(0, std::ios::beg); contents.assign((std::istreambuf_iterator(stream)), std::istreambuf_iterator()); strncpy(contentsOut, contents.c_str(), maxLen); return true; } // static Process::~Process() = default; ProcessHandle::ProcessHandle() : mProcess(nullptr) {} ProcessHandle::ProcessHandle(Process *process) : mProcess(process) {} ProcessHandle::ProcessHandle(const std::vector &args, bool captureStdout, bool captureStderr) : mProcess(LaunchProcess(args, captureStdout, captureStderr)) {} ProcessHandle::~ProcessHandle() { reset(); } ProcessHandle::ProcessHandle(ProcessHandle &&other) : mProcess(other.mProcess) { other.mProcess = nullptr; } ProcessHandle &ProcessHandle::operator=(ProcessHandle &&rhs) { std::swap(mProcess, rhs.mProcess); return *this; } void ProcessHandle::reset() { if (mProcess) { delete mProcess; mProcess = nullptr; } } } // namespace angle