1 /* 2 * Copyright (C) 2018 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 #include <stdio.h> 18 #include <iostream> 19 #include <string> 20 #include <vector> 21 22 #include <android-base/strings.h> 23 24 static std::string pathToFilename(const std::string& path, bool noext = false) { 25 std::vector<std::string> spath = android::base::Split(path, "/"); 26 std::string ret = spath.back(); 27 28 if (noext) { 29 size_t lastindex = ret.find_last_of('.'); 30 return ret.substr(0, lastindex); 31 } 32 return ret; 33 } 34 35 static int getMachineKvers(void) { 36 struct utsname un; 37 char* unameOut; 38 int nums[3]; // maj, min, sub 39 40 if (uname(&un)) return -1; 41 unameOut = un.release; 42 43 std::string s = unameOut; 44 std::string token; 45 size_t pos = 0; 46 int cur_num = 0; 47 48 while ((pos = s.find('.')) != std::string::npos && cur_num < 3) { 49 token = s.substr(0, pos); 50 s.erase(0, pos + 1); 51 52 if ((pos = token.find('-')) != std::string::npos) token = token.substr(0, pos); 53 54 nums[cur_num++] = stoi(token); 55 } 56 57 if ((pos = s.find('-')) != std::string::npos) 58 token = s.substr(0, pos); 59 else 60 token = s; 61 62 if (token.length() > 0 && cur_num < 3) { 63 nums[cur_num++] = stoi(token); 64 } 65 66 if (cur_num != 3) 67 return -1; 68 else 69 return (65536 * nums[0] + 256 * nums[1] + nums[2]); 70 } 71 72 static void deslash(std::string& s) { 73 std::replace(s.begin(), s.end(), '/', '_'); 74 } 75