about summary refs log tree commit diff stats
path: root/cgit.h
diff options
context:
space:
mode:
authorJohn Keeping2014-01-12 17:13:52 +0000
committerJason A. Donenfeld2014-01-14 02:00:07 +0100
commit7bd90b8048fd6937766dff7474947dd80205ea7e (patch)
tree63f9ba4eac9892a843338400042194b3bf115216 /cgit.h
parentfilter: add fprintf_filter function (diff)
downloadcgit-7bd90b8048fd6937766dff7474947dd80205ea7e.tar.gz
cgit-7bd90b8048fd6937766dff7474947dd80205ea7e.zip
filter: add interface layer
Change the existing cgit_{open,close,fprintf}_filter functions to
delegate to filter-specific implementations accessed via function
pointers on the cgit_filter object.

We treat the "exec" filter type slightly specially here by putting its
structure definition in the header file and providing an "init" function
to set up the function pointers.  This is required so that the
ui-snapshot.c code that applies a compression filter can continue to use
the filter interface to do so.

Signed-off-by: John Keeping <john@keeping.me.uk>
Diffstat (limited to 'cgit.h')
-rw-r--r--cgit.h8
1 files changed, 8 insertions, 0 deletions
diff --git a/cgit.h b/cgit.h index 9b4be26..92e8c55 100644 --- a/cgit.h +++ b/cgit.h
@@ -57,6 +57,13 @@ typedef enum {
57} filter_type; 57} filter_type;
58 58
59struct cgit_filter { 59struct cgit_filter {
60 int (*open)(struct cgit_filter *, va_list ap);
61 int (*close)(struct cgit_filter *);
62 void (*fprintf)(struct cgit_filter *, FILE *, const char *prefix);
63};
64
65struct cgit_exec_filter {
66 struct cgit_filter base;
60 char *cmd; 67 char *cmd;
61 char **argv; 68 char **argv;
62 int extra_args; 69 int extra_args;
@@ -346,6 +353,7 @@ extern int cgit_parse_snapshots_mask(const char *str);
346extern int cgit_open_filter(struct cgit_filter *filter, ...); 353extern int cgit_open_filter(struct cgit_filter *filter, ...);
347extern int cgit_close_filter(struct cgit_filter *filter); 354extern int cgit_close_filter(struct cgit_filter *filter);
348extern void cgit_fprintf_filter(struct cgit_filter *filter, FILE *f, const char *prefix); 355extern void cgit_fprintf_filter(struct cgit_filter *filter, FILE *f, const char *prefix);
356extern void cgit_exec_filter_init(struct cgit_exec_filter *filter, char *cmd, char **argv);
349extern struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype); 357extern struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype);
350 358
351extern void cgit_prepare_repo_env(struct cgit_repo * repo); 359extern void cgit_prepare_repo_env(struct cgit_repo * repo);