diff options
Diffstat (limited to 'c/plugin.c')
-rw-r--r-- | c/plugin.c | 124 |
1 files changed, 0 insertions, 124 deletions
diff --git a/c/plugin.c b/c/plugin.c deleted file mode 100644 index 7182626..0000000 --- a/c/plugin.c +++ /dev/null @@ -1,124 +0,0 @@ -/* Copyright (C) 2009 Luke Shumaker - - This file is part of rvs. - - rvs is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your - option) any later version. - - rvs is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with rvs; see the file COPYING. - If not, write to the Free Software Foundation, - 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ - -#include <stdio.h> -#include <stdlib.h> /* EXIT_FAILURE */ -#include <unistd.h> /* file acces */ -#include <string.h> - -#include <errno.h> -#include <error.h> - -#include <dirent.h> -#include <sys/stat.h> - -#include "rvs.h" -#include "plugin.h" - -/* finds a plugin with `name'. Start looking at `plugin' (linked list) */ -struct plugin * -_plugin_find_plugin(struct plugin *plugin, char *name) -{ - if (strcmp(plugin->name,name) == 0) { - return plugin; - } else { - if (plugin->next==NULL) { - error(EXIT_FAILURE,0,"cannot find plugin `%s'",name); - return NULL; - } else { - return _plugin_find_plugin(plugin->next,name); - } - } -} - -/* finds a command with `name'. Start looking at `command' (linked list) */ -struct plugin_command * -_plugin_find_command(struct plugin_command *command, char *name) -{ - if (strcmp(command->name,name) == 0) { - return command; - } else { - if (command->p_next==NULL) { - error(EXIT_FAILURE,0, - "plugin `%s' does not contain command `%s'", - command->plugin->name,name); - return NULL; - } else { - return _plugin_find_command(command->p_next,name); - } - } -} - -#include "plugin-parse.c" -#include "plugin-depend.c" - -struct plugin * -_plugin_load (char *plug_name, char *plugin_conf) -{ - struct plugin *plugin=(struct plugin *)xmalloc(sizeof(*plugin)); - char *plug_name2 = (char *)xmalloc(strlen(plug_name)+1); - strcpy(plug_name2,plug_name); - plugin->name=plug_name2; - plugin->next=NULL; - - xchdir(plug_name); - FILE *file = xfopen(plugin_conf,"r"); - - plugin->child=_plugin_parse(plugin, file); - - fclose( file ); - xchdir(".."); - return plugin; -} - -struct plugin_tree * -load_plugins (char *libexecdir, char *plugin_conf) -{ - struct plugin_tree *tree=(struct plugin_tree *)xmalloc(sizeof(*tree)); - struct plugin **last=&tree->plugins; - *last=NULL; - struct plugin *plugin; - - xchdir(libexecdir); - - DIR *cwd; - struct dirent *dirent; - int serr; - struct stat sbuf; - cwd = xopendir ("./"); - 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); - *last=plugin;/* this sets the last's `next' */ - last=&plugin->next; - } - } - } - closedir (cwd); - - _plugin_depend(tree); - - xchdir(".."); - return tree; -} - |