/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "utils.h" #include #include #include #include #include #include void PrintIndented(size_t indent, const char* fmt, ...) { va_list ap; va_start(ap, fmt); printf("%*s", static_cast(indent * 2), ""); vprintf(fmt, ap); va_end(ap); } bool IsPowerOfTwo(uint64_t value) { return (value != 0 && ((value & (value - 1)) == 0)); } bool NextArgumentOrError(const std::vector& args, size_t* pi) { if (*pi + 1 == args.size()) { LOG(ERROR) << "No argument following " << args[*pi] << " option. Try `simpleperf help " << args[0] << "`"; return false; } ++*pi; return true; } void GetEntriesInDir(const std::string& dirpath, std::vector* files, std::vector* subdirs) { if (files != nullptr) { files->clear(); } if (subdirs != nullptr) { subdirs->clear(); } DIR* dir = opendir(dirpath.c_str()); if (dir == nullptr) { PLOG(DEBUG) << "can't open dir " << dirpath; return; } dirent* entry; while ((entry = readdir(dir)) != nullptr) { if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) { continue; } if (entry->d_type == DT_DIR) { if (subdirs != nullptr) { subdirs->push_back(entry->d_name); } } else { if (files != nullptr) { files->push_back(entry->d_name); } } } closedir(dir); }