// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chromecast/base/process_utils.h" #include #include #include "base/logging.h" #include "base/posix/safe_strerror.h" #include "base/strings/string_util.h" namespace chromecast { bool GetAppOutput(const std::vector& argv, std::string* output) { DCHECK(output); // Join the args into one string, creating the command. std::string command = JoinString(argv, ' '); // Open the process. FILE* fp = popen(command.c_str(), "r"); if (!fp) { LOG(ERROR) << "popen (" << command << ") failed: " << base::safe_strerror(errno); return false; } // Fill |output| with the stdout from the process. output->clear(); while (!feof(fp)) { char buffer[256]; size_t bytes_read = fread(buffer, 1, sizeof(buffer), fp); if (bytes_read <= 0) break; output->append(buffer, bytes_read); } // pclose() function waits for the associated process to terminate and returns // the exit status. return (pclose(fp) == 0); } } // namespace chromecast