aboutsummaryrefslogtreecommitdiffstats
path: root/cgit.h
diff options
context:
space:
mode:
authorGravatar Jason A. Donenfeld <Jason@zx2c4.com>2014-01-13 22:16:18 (JST)
committerGravatar Jason A. Donenfeld <Jason@zx2c4.com>2014-01-14 10:00:07 (JST)
commite83b51b4f6bd53efea0c772e6ecdf1c5605ca611 (patch)
tree695797e4de7c7e413730f7ab66246327e6fa0046 /cgit.h
parentd750c7a2c9bb83cfc47c0d74fcee61f0a5042aa9 (diff)
downloadcgit-e83b51b4f6bd53efea0c772e6ecdf1c5605ca611.zip
cgit-e83b51b4f6bd53efea0c772e6ecdf1c5605ca611.tar.gz
filter: basic write hooking infrastructure
Filters can now call hook_write and unhook_write if they want to redirect writing to stdout to a different function. This saves us from potential file descriptor pipes and other less efficient mechanisms. We do this instead of replacing the call in html_raw because some places stdlib's printf functions are used (ui-patch or within git itself), which has its own internal buffering, which makes it difficult to interlace our function calls. So, we dlsym libc's write and then override it in the link stage. While we're at it, we move considerations of argument count into the generic new filter handler. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'cgit.h')
-rw-r--r--cgit.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/cgit.h b/cgit.h
index 893c38f..519d2af 100644
--- a/cgit.h
+++ b/cgit.h
@@ -61,13 +61,13 @@ struct cgit_filter {
61 int (*close)(struct cgit_filter *); 61 int (*close)(struct cgit_filter *);
62 void (*fprintf)(struct cgit_filter *, FILE *, const char *prefix); 62 void (*fprintf)(struct cgit_filter *, FILE *, const char *prefix);
63 void (*cleanup)(struct cgit_filter *); 63 void (*cleanup)(struct cgit_filter *);
64 int argument_count;
64}; 65};
65 66
66struct cgit_exec_filter { 67struct cgit_exec_filter {
67 struct cgit_filter base; 68 struct cgit_filter base;
68 char *cmd; 69 char *cmd;
69 char **argv; 70 char **argv;
70 int extra_args;
71 int old_stdout; 71 int old_stdout;
72 int pipe_fh[2]; 72 int pipe_fh[2];
73 int pid; 73 int pid;
@@ -357,6 +357,7 @@ extern void cgit_fprintf_filter(struct cgit_filter *filter, FILE *f, const char
357extern void cgit_exec_filter_init(struct cgit_exec_filter *filter, char *cmd, char **argv); 357extern void cgit_exec_filter_init(struct cgit_exec_filter *filter, char *cmd, char **argv);
358extern struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype); 358extern struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype);
359extern void cgit_cleanup_filters(void); 359extern void cgit_cleanup_filters(void);
360extern void cgit_init_filters(void);
360 361
361extern void cgit_prepare_repo_env(struct cgit_repo * repo); 362extern void cgit_prepare_repo_env(struct cgit_repo * repo);
362 363