10578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato/* 20578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * Copyright (C) 2016 The Android Open Source Project 30578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * 40578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 50578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * you may not use this file except in compliance with the License. 60578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * You may obtain a copy of the License at 70578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * 80578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * http://www.apache.org/licenses/LICENSE-2.0 90578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * 100578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * Unless required by applicable law or agreed to in writing, software 110578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 120578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * See the License for the specific language governing permissions and 140578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * limitations under the License. 150578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato */ 160578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 170578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato#ifndef COMMAND_H 180578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato#define COMMAND_H 190578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 200578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato#include <map> 210578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato#include <string> 220578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato#include <vector> 230578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 240578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onoratousing namespace std; 250578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 260578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onoratostruct Command 270578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato{ 280578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato Command(const string& prog); 290578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato ~Command(); 300578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 310578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato void AddArg(const string& arg); 320578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato void AddEnv(const string& name, const string& value); 330578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 340578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato const char* GetProg() const; 350578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato char* const* GetArgv() const; 360578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato char* const* GetEnv() const; 370578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 380578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato string GetCommandline() const; 390578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 400578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato string prog; 410578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato vector<string> args; 420578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato map<string,string> env; 430578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato}; 440578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 450578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato/** 460578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * Run the command and collect stdout. 470578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * Returns the exit code. 480578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato */ 490578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onoratostring get_command_output(const Command& command, int* err, bool quiet=false); 500578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 510578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato/** 520578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * Run the command. 530578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato * Returns the exit code. 540578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato */ 550578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onoratoint run_command(const Command& command); 560578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 5731617e3b8ff01bb016446a0d2cb687b25aee42c6Joe Onorato// Mac OS doesn't have execvpe. This is the same as execvpe. 5831617e3b8ff01bb016446a0d2cb687b25aee42c6Joe Onoratoint exec_with_path_search(const char* prog, char const* const* argv, char const* const* envp); 5931617e3b8ff01bb016446a0d2cb687b25aee42c6Joe Onorato 600578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato#endif // COMMAND_H 610578cbc6c527bc09a38a0fcd8b9642c25c8ea023Joe Onorato 62