| -rw-r--r-- | cgit.c | 1 | ||||
| -rw-r--r-- | cgit.h | 2 | ||||
| -rw-r--r-- | filter.c | 90 |
3 files changed, 27 insertions, 66 deletions
@@ -951,7 +951,6 @@ int main(int argc, const char **argv) ctx.cfg.cache_size = 0; err = cache_process(ctx.cfg.cache_size, ctx.cfg.cache_root, ctx.qry.raw, ttl, process_request, &ctx); - cgit_cleanup_filters(); if (err) cgit_print_error("Error processing page: %s (%d)", strerror(err), err); @@ -60,7 +60,6 @@ struct cgit_filter { int (*open)(struct cgit_filter *, va_list ap); int (*close)(struct cgit_filter *); void (*fprintf)(struct cgit_filter *, FILE *, const char *prefix); - void (*cleanup)(struct cgit_filter *); }; struct cgit_exec_filter { @@ -356,7 +355,6 @@ extern int cgit_close_filter(struct cgit_filter *filter); extern void cgit_fprintf_filter(struct cgit_filter *filter, FILE *f, const char *prefix); extern void cgit_exec_filter_init(struct cgit_exec_filter *filter, char *cmd, char **argv); extern struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype); -extern void cgit_cleanup_filters(void); extern void cgit_prepare_repo_env(struct cgit_repo * repo); @@ -13,25 +13,6 @@ #include <string.h> #include <stdlib.h> -static inline void reap_filter(struct cgit_filter *filter) -{ - if (filter && filter->cleanup) - filter->cleanup(filter); -} - -void cgit_cleanup_filters(void) -{ - int i; - reap_filter(ctx.cfg.about_filter); - reap_filter(ctx.cfg.commit_filter); - reap_filter(ctx.cfg.source_filter); - for (i = 0; i < cgit_repolist.count; ++i) { - reap_filter(cgit_repolist.repos[i].about_filter); - reap_filter(cgit_repolist.repos[i].commit_filter); - reap_filter(cgit_repolist.repos[i].source_filter); - } -} - static int open_exec_filter(struct cgit_filter *base, va_list ap) { struct cgit_exec_filter *filter = (struct cgit_exec_filter *) base; @@ -86,17 +67,34 @@ static void fprintf_exec_filter(struct cgit_filter *base, FILE *f, const char *p fprintf(f, "%sexec:%s\n", prefix, filter->cmd); } -static void cleanup_exec_filter(struct cgit_filter *base) +int cgit_open_filter(struct cgit_filter *filter, ...) { - struct cgit_exec_filter *filter = (struct cgit_exec_filter *) base; - if (filter->argv) { - free(filter->argv); - filter->argv = NULL; - } - if (filter->cmd) { - free(filter->cmd); - filter->cmd = NULL; - } + int result; + va_list ap; + va_start(ap, filter); + result = filter->open(filter, ap); + va_end(ap); + return result; +} + +int cgit_close_filter(struct cgit_filter *filter) +{ + return filter->close(filter); +} + +void cgit_fprintf_filter(struct cgit_filter *filter, FILE *f, const char *prefix) +{ + filter->fprintf(filter, f, prefix); +} + +void cgit_exec_filter_init(struct cgit_exec_filter *filter, char *cmd, char **argv) +{ + memset(filter, 0, sizeof(*filter)); + filter->base.open = open_exec_filter; + filter->base.close = close_exec_filter; + filter->base.fprintf = fprintf_exec_filter; + filter->cmd = cmd; + filter->argv = argv; } static struct cgit_filter *new_exec_filter(const char *cmd, filter_type filtertype) @@ -127,39 +125,6 @@ static struct cgit_filter *new_exec_filter(const char *cmd, filter_type filterty return &f->base; } -void cgit_exec_filter_init(struct cgit_exec_filter *filter, char *cmd, char **argv) -{ - memset(filter, 0, sizeof(*filter)); - filter->base.open = open_exec_filter; - filter->base.close = close_exec_filter; - filter->base.fprintf = fprintf_exec_filter; - filter->base.cleanup = cleanup_exec_filter; - filter->cmd = cmd; - filter->argv = argv; -} - -int cgit_open_filter(struct cgit_filter *filter, ...) -{ - int result; - va_list ap; - va_start(ap, filter); - result = filter->open(filter, ap); - va_end(ap); - return result; -} - -int cgit_close_filter(struct cgit_filter *filter) -{ - return filter->close(filter); -} - -void cgit_fprintf_filter(struct cgit_filter *filter, FILE *f, const char *prefix) -{ - filter->fprintf(filter, f, prefix); -} - - - static const struct { const char *prefix; struct cgit_filter *(*ctor)(const char *cmd, filter_type filtertype); @@ -196,4 +161,3 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype) die("Invalid filter type: %.*s", (int) len, cmd); } - |