summaryrefslogtreecommitdiff
path: root/wrapper/plugin-load.h
diff options
context:
space:
mode:
Diffstat (limited to 'wrapper/plugin-load.h')
-rw-r--r--wrapper/plugin-load.h53
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;
}