diff options
Diffstat (limited to 'wrapper/plugin-load.h')
-rw-r--r-- | wrapper/plugin-load.h | 53 |
1 files changed, 19 insertions, 34 deletions
diff --git a/wrapper/plugin-load.h b/wrapper/plugin-load.h index cb7399d..07fa6a7 100644 --- a/wrapper/plugin-load.h +++ b/wrapper/plugin-load.h @@ -1,5 +1,5 @@ /* wrapper/plugin-load.h -- load rvs plugins into mem - system depens: <string.h> <unistd.h> <dirent.h> <sys/stat.h> <error.h> + system depens: <stdio.h> <string.h> Copyright (C) 2009 Luke Shumaker This file is part of rvs. @@ -22,12 +22,14 @@ #ifndef FILE_plugin_load_h_SEEN #define FILE_plugin_load_h_SEEN +#include <stdio.h> +#include <string.h> + #include "rvs.h" #include "plugins.h" #include "plugin-parse.h" /*- plugin_load ----------------------------------------------------*\ - assume we're in rvs's libexecdir, where plugins are now, load plugin plug_name, \* whose configuration file is plugin_conf */ struct plugin * @@ -47,48 +49,31 @@ plugin_load (const char *plug_name, const char *plugin_conf) } /*- load_plugins ---------------------------------------------------*\ - Load all the plugins in `libexecdir' - Use `plugin_conf' as the name of the config file for each plugin - Note that the method we use to loop through all the directories in - `libexecdir' is a horible kludge, uses a ton of system functions, -\* and generally needs to be rewritten. */ -#include <string.h> -#include <unistd.h> -#include <dirent.h> -#include <sys/stat.h> -#include <error.h> + Load all the plugins + assume we're in rvs's libexecdir, where plugins are +\* Use `plugin_conf' as the name of the config file for each plugin */ struct plugin * -load_plugins (const char *libexecdir, const char *plugin_conf) +load_plugins (FILE *list, const char *plugin_conf) { struct plugin *first=NULL; /* we return this */ struct plugin **prev=&first; /* this is the previous plugin->next */ struct plugin *plugin; /* this is the current plugin */ - xchdir(libexecdir); - - /* Yeah, I know this next bit is pretty ugly. */ - DIR *cwd; - struct dirent *dirent; - int serr; - struct stat sbuf; - const char *dirname="./"; - cwd = opendir (dirname); - if (cwd == NULL) error(EXIT_FAILURE,errno,"%s/",dirname); - while ( (dirent = readdir (cwd)) != NULL ) { - if ((strcmp(dirent->d_name,"." )!=0)&& - (strcmp(dirent->d_name,"..")!=0)) { - serr = stat(dirent->d_name, &sbuf); - if (!serr && S_ISDIR(sbuf.st_mode)) { - plugin=plugin_load(dirent->d_name,plugin_conf); - *prev=plugin;/* this sets the last's `next' */ - prev=&plugin->next; - } + size_t nbytes = 10; + char *plug_name=(char *)xmalloc(nbytes); + plug_name[0]='\0'; + while ( getline(&plug_name, &nbytes, list) > 0 ) { + char *del=strchr(plug_name,'\n'); + del[0]='\0'; + /*if (strlen(plug_name)!=0) {*/ + if (plug_name[0]!='\0') {; + plugin=plugin_load(plug_name,plugin_conf); + *prev=plugin;/* this sets the last's `next' */ + prev=&plugin->next; } } - closedir (cwd); - xchdir(".."); return first; } |