diff options
-rw-r--r-- | wrapper/plugin-find.h | 9 | ||||
-rw-r--r-- | wrapper/plugin-parse.h | 90 | ||||
-rw-r--r-- | wrapper/plugins.h | 8 | ||||
-rw-r--r-- | wrapper/rvs.c | 3 |
4 files changed, 51 insertions, 59 deletions
diff --git a/wrapper/plugin-find.h b/wrapper/plugin-find.h index 9444f55..f2d102f 100644 --- a/wrapper/plugin-find.h +++ b/wrapper/plugin-find.h @@ -95,13 +95,14 @@ plugin_find_commands(struct plugin *plugin, char *name) } } -#ifdef DEBUG void -plugin_print_command_list(struct plugin_command_list *list, int ind) +plugin_free_list(struct plugin_command_list *node) { - + if (node!=NULL) { + plugin_free_list(node->next); + xfree(node); + } } -#endif /*DEBUG*/ #endif diff --git a/wrapper/plugin-parse.h b/wrapper/plugin-parse.h index c75b1fe..4cad0bc 100644 --- a/wrapper/plugin-parse.h +++ b/wrapper/plugin-parse.h @@ -23,7 +23,7 @@ #define FILE_plugin_parse_h_SEEN #include <stdio.h> -#include <error.h> /* only used in `plugin_parse_escape' for `error' */ +#include <error.h> /* only used in `plugin_parse_escape' for `error'*/ #include "rvs.h" #include "plugins.h" @@ -66,24 +66,20 @@ plugin_parse_depend (FILE *file) string[0]='\0'; char c[2] = " \0"; - char *cs = (char *)&c; while ( (c[0]=getc(file)) != EOF ) { - if (c[0] == '\n') { - ungetc (c[0], file); - break; - } else { - switch (c[0]) { - case '\\': - c[0]=plugin_parse_escape(file); - stradds(&nbytes,&string,cs); - break; - case '#': - plugin_parse_comment(file); - break; - default: - stradds(&nbytes,&string,cs); - break; - } + switch (c[0]) { + case '\n': + ungetc (c[0], file); + return string; + break; + case '#': + plugin_parse_comment(file); + break; + case '\\': + c[0]=plugin_parse_escape(file); + default: + stradds(&nbytes,&string,(char *)&c); + break; } } return string; @@ -95,45 +91,35 @@ plugin_parse (FILE *file) struct plugin_command *command=plugin_mk_command(); size_t nbytes = 10; - char *string = (char *)xmalloc(nbytes); - string[0]='\0'; + command->name = (char *)xmalloc(nbytes); + command->name[0]='\0'; char c[2] = " \0"; - char *cs = (char *)&c; - if ( (c[0]=getc(file)) == EOF ) - return NULL; - else - ungetc (c[0], file); + c[0]=getc(file); + if (c[0]==EOF) return NULL; + else ungetc (c[0], file); while ( (c[0]=getc(file)) != EOF ) { - if (c[0] == '\n') { - if (strlen(string)==0) { - xfree(command); - xfree(string); - command=plugin_parse(file); - } else { - command->name=string; - command->next=plugin_parse(file); - } - break; - } else { - switch (c[0]) { - case '\\': - c[0]=plugin_parse_escape(file); - stradds(&nbytes,&string,cs); - break; - case '#': - plugin_parse_comment(file); - break; - case ':': - command->depends=plugin_parse_depend( - file); - break; - default: - stradds(&nbytes,&string,cs); - break; - } + switch (c[0]) { + case '\n': + if (strlen(command->name)==0) { + plugin_free_command(command); + command=plugin_parse(file); + } else + command->next=plugin_parse(file); + break; + case ':': + command->depends=plugin_parse_depend(file); + break; + case '#': + plugin_parse_comment(file); + break; + case '\\': + c[0]=plugin_parse_escape(file); + default: + stradds(&nbytes,&(command->name),(char *)&c); + break; } } return command; diff --git a/wrapper/plugins.h b/wrapper/plugins.h index 739fce8..1e88279 100644 --- a/wrapper/plugins.h +++ b/wrapper/plugins.h @@ -58,6 +58,9 @@ plugin_mk_command() { struct plugin_command *command; command=(struct plugin_command *)xmalloc(sizeof(*command)); + #ifdef DEBUG + printf("malloc'd command: %p\n",command); + #endif /* node */ command->name=NULL; @@ -79,8 +82,11 @@ void plugin_free_command(struct plugin_command *command) { if (command!=NULL) { - printf("%p\n",command->next); plugin_free_command(command->next); + #ifdef DEBUG + printf(" free'd command: %p \"%s\"\n", + command,command->name); + #endif xfree(command->name); xfree(command->depends); xfree(command); diff --git a/wrapper/rvs.c b/wrapper/rvs.c index cf2b708..50343e4 100644 --- a/wrapper/rvs.c +++ b/wrapper/rvs.c @@ -38,9 +38,8 @@ main ( int argc, char *argv[] ) struct plugin_command_list *list; list=plugin_find_commands(plugins,argv[1]); plugin_depend_list(list,plugins); - puts(""); + plugin_free_list(list); } - puts("freeing..."); plugin_free_plugin(plugins); return 0; } |