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>
This commit is contained in:
John Keeping 2014-01-12 17:13:52 +00:00 committed by Jason A. Donenfeld
parent 632efb25c0
commit 7bd90b8048
3 changed files with 63 additions and 22 deletions

View file

@ -58,13 +58,12 @@ static int write_compressed_tar_archive(const char *hex,
char *filter_argv[])
{
int rv;
struct cgit_filter f = {
.cmd = filter_argv[0],
.argv = filter_argv,
};
cgit_open_filter(&f);
struct cgit_exec_filter f;
cgit_exec_filter_init(&f, filter_argv[0], filter_argv);
cgit_open_filter(&f.base);
rv = write_tar_archive(hex, prefix);
cgit_close_filter(&f);
cgit_close_filter(&f.base);
return rv;
}