Ejemplo n.º 1
0
Archivo: sysfs.c Proyecto: myaut/tsload
/**
 * Walk over sysfs directory and call function for each entry
 * 
 * @param root path to directory
 * @param proc walker function that receives file name
 * @param arg  argument passed as second argument to `proc()`
 * 
 * @return HI_LINUX_SYSFS_OK if everything went fine or HI_LINUX_SYSFS_ERROR if	\
 *         opening directory failed
 */
int hi_linux_sysfs_walk(const char* root,
					   void (*proc)(const char* name, void* arg), void* arg) {
	plat_dir_t* dirp;
	plat_dir_entry_t* de;

	if((dirp = plat_opendir(root)) == NULL)
		return HI_LINUX_SYSFS_ERROR;

	hi_sysfs_dprintf("hi_linux_sysfs_walk: %s\n", root);

	do {
		de = plat_readdir(dirp);

		if(de != NULL) {
			if(plat_dirent_hidden(de))
				continue;

			if(plat_dirent_type(de) < 0)
				continue;

			proc(de->d_name, arg);
		}
	} while(de != NULL);

	plat_closedir(dirp);
	return HI_LINUX_SYSFS_OK;
}
Ejemplo n.º 2
0
int load_modules() {
	plat_dir_t* dir = plat_opendir(mod_search_path);
	plat_dir_entry_t* d = NULL;
	char path[MODPATHLEN];

	if(!dir) {
		logmsg(LOG_CRIT, "Failed to open directory %s", mod_search_path);
		logerror();

		return -1;
	}

	while((d = plat_readdir(dir)) != NULL) {
		if( plat_dirent_hidden(d) ||
			plat_dirent_type(d) != DET_REG)
			continue;

		path_join(path, MODPATHLEN, mod_search_path, d->d_name, NULL);

		mod_load(path);
	}

	plat_closedir(dir);
	return 0;
}