/** * 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; }
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; }