void Data::fillAllConfigs(MHWD::DEVICETYPE type) { std::vector<std::string> configPaths; std::vector<Config*>* configs; if (type == MHWD::DEVICETYPE::USB) { configs = &allUSBConfigs; configPaths = getRecursiveDirectoryFileList(MHWD_USB_CONFIG_DIR, MHWD_CONFIG_NAME); } else { configs = &allPCIConfigs; configPaths = getRecursiveDirectoryFileList(MHWD_PCI_CONFIG_DIR, MHWD_CONFIG_NAME); } for (std::vector<std::string>::const_iterator configPath = configPaths.begin(); configPath != configPaths.end(); ++configPath) { Config *config = new Config((*configPath), type); if (config->readConfigFile((*configPath))) { configs->push_back(config); } else { invalidConfigs.push_back(config); } } }
void mhwd::fillAllConfigs(mhwd::Data *data, mhwd::TYPE type) { std::vector<std::string> configPaths; std::vector<mhwd::Config*>* configs; if (type == mhwd::TYPE_USB) { configs = &data->allUSBConfigs; configPaths = getRecursiveDirectoryFileList(MHWD_USB_CONFIG_DIR, MHWD_CONFIG_NAME); } else { configs = &data->allPCIConfigs; configPaths = getRecursiveDirectoryFileList(MHWD_PCI_CONFIG_DIR, MHWD_CONFIG_NAME); } for (std::vector<std::string>::const_iterator iterator = configPaths.begin(); iterator != configPaths.end(); iterator++) { struct mhwd::Config *config = new mhwd::Config(); if (fillConfig(config, (*iterator), type)) configs->push_back(config); else data->invalidConfigs.push_back(config); } }
std::vector<std::string> Data::getRecursiveDirectoryFileList(const std::string directoryPath, std::string onlyFilename) { std::vector<std::string> list; struct dirent *dir; DIR *d = opendir(directoryPath.c_str()); if (d) { while ((dir = readdir(d)) != nullptr) { std::string filename = std::string(dir->d_name); std::string filepath = directoryPath + "/" + filename; if (filename == "." || filename == ".." || filename == "") continue; struct stat filestatus; lstat(filepath.c_str(), &filestatus); if (S_ISREG(filestatus.st_mode) && (onlyFilename.empty() || onlyFilename == filename)) { list.push_back(filepath); } else if (S_ISDIR(filestatus.st_mode)) { std::vector<std::string> templist = getRecursiveDirectoryFileList(filepath, onlyFilename); for (std::vector<std::string>::const_iterator iterator = templist.begin(); iterator != templist.end(); iterator++) { list.push_back((*iterator)); } } } closedir(d); } return list; }