1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef FRAMEWORK_NATIVE_CMDS_LSHAL_UTILS_H_ 18 #define FRAMEWORK_NATIVE_CMDS_LSHAL_UTILS_H_ 19 20 #include <iomanip> 21 #include <iostream> 22 #include <string> 23 #include <sstream> 24 #include <utility> 25 #include <vector> 26 27 namespace android { 28 namespace lshal { 29 30 enum : unsigned int { 31 OK = 0, 32 // Return to Lshal::main to print help info. 33 USAGE = 1 << 0, 34 // no service managers 35 NO_BINDERIZED_MANAGER = 1 << 1, 36 NO_PASSTHROUGH_MANAGER = 1 << 2, 37 // general error in getting information from the three sources 38 DUMP_BINDERIZED_ERROR = 1 << 3, 39 DUMP_PASSTHROUGH_ERROR = 1 << 4, 40 DUMP_ALL_LIBS_ERROR = 1 << 5, 41 // I/O error in reading files 42 IO_ERROR = 1 << 6, 43 // Interface does not exist (IServiceManager::get fails) 44 NO_INTERFACE = 1 << 7, 45 // Transaction error from hwbinder transactions 46 TRANSACTION_ERROR = 1 << 8, 47 // No transaction error, but return value is unexpected. 48 BAD_IMPL = 1 << 9, 49 }; 50 using Status = unsigned int; 51 52 struct Arg { 53 int argc; 54 char **argv; 55 }; 56 57 template <typename A> 58 std::string join(const A &components, const std::string &separator) { 59 std::stringstream out; 60 bool first = true; 61 for (const auto &component : components) { 62 if (!first) { 63 out << separator; 64 } 65 out << component; 66 67 first = false; 68 } 69 return out.str(); 70 } 71 72 std::string toHexString(uint64_t t); 73 74 template<typename String> 75 std::pair<String, String> splitFirst(const String &s, char c) { 76 const char *pos = strchr(s.c_str(), c); 77 if (pos == nullptr) { 78 return {s, {}}; 79 } 80 return {String(s.c_str(), pos - s.c_str()), String(pos + 1)}; 81 } 82 83 std::vector<std::string> split(const std::string &s, char c); 84 85 void replaceAll(std::string *s, char from, char to); 86 87 } // namespace lshal 88 } // namespace android 89 90 #endif // FRAMEWORK_NATIVE_CMDS_LSHAL_UTILS_H_ 91