/* * Copyright (c) 2018, Google Inc. * All rights reserved. * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "perf_to_profile_lib.h" #include #include bool FileExists(const string& path) { struct stat file_stat; return stat(path.c_str(), &file_stat) != -1; } string ReadFileToString(const string& path) { std::ifstream perf_file(path); if (!perf_file.is_open()) { LOG(FATAL) << "Failed to open file: " << path; } std::ostringstream ss; ss << perf_file.rdbuf(); return ss.str(); } void CreateFile(const string& path, std::ofstream* file, bool overwriteOutput) { if (!overwriteOutput && FileExists(path)) { LOG(FATAL) << "File already exists: " << path; } file->open(path, std::ios_base::trunc); if (!file->is_open()) { LOG(FATAL) << "Failed to open file: " << path; } } void PrintUsage() { LOG(INFO) << "Usage:"; LOG(INFO) << "perf_to_profile -i -o [-f]"; LOG(INFO) << "If the -f option is given, overwrite the existing output " << "profile."; } bool ParseArguments(int argc, const char* argv[], string* input, string* output, bool* overwriteOutput) { *input = ""; *output = ""; *overwriteOutput = false; int opt; while ((opt = getopt(argc, const_cast(argv), ":fi:o:")) != -1) { switch (opt) { case 'i': *input = optarg; break; case 'o': *output = optarg; break; case 'f': *overwriteOutput = true; break; case ':': LOG(ERROR) << "Must provide arguments for flags -i and -o"; return false; case '?': LOG(ERROR) << "Invalid option: " << static_cast(optopt); return false; default: LOG(ERROR) << "Invalid option: " << static_cast(opt); return false; } } return !input->empty() && !output->empty(); }