Add generic filter/plugin infrastructure The functions cgit_open_filter() and cgit_close_filter() can be used to execute filters on the output stream from cgit. Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Lars Hjemli hjemli@gmail.com
Fri, 31 Jul 2009 17:38:38 +0200
M
cgit.c
→
cgit.c
@@ -17,6 +17,21 @@ #include "scan-tree.h"
const char *cgit_version = CGIT_VERSION; +struct cgit_filter *new_filter(const char *cmd, int extra_args) +{ + struct cgit_filter *f; + + if (!cmd) + return NULL; + + f = xmalloc(sizeof(struct cgit_filter)); + f->cmd = xstrdup(cmd); + f->argv = xmalloc((2 + extra_args) * sizeof(char *)); + f->argv[0] = f->cmd; + f->argv[1] = NULL; + return f; +} + void config_cb(const char *name, const char *value) { if (!strcmp(name, "root-title"))
M
cgit.h
→
cgit.h
@@ -129,6 +129,15 @@ char *sort;
int showmsg; }; +struct cgit_filter { + char *cmd; + char **argv; + int old_stdout; + int pipe_fh[2]; + int pid; + int exitstatus; +}; + struct cgit_config { char *agefile; char *cache_root;@@ -247,6 +256,9 @@
extern const char *cgit_repobasename(const char *reponame); extern int cgit_parse_snapshots_mask(const char *str); + +extern int cgit_open_filter(struct cgit_filter *filter); +extern int cgit_close_filter(struct cgit_filter *filter); #endif /* CGIT_H */