示例#1
0
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);
		}
	}
}
示例#2
0
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);
    }
}
示例#3
0
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;
}