diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-05-17 18:06:13 +0200 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-05-18 15:07:02 +0200 |
| commit | 826be3072ad3ce475ea39d80e5a6606a896d98c2 (patch) | |
| tree | 3e93b11649540e37877ccbfd6881f1bc748862ce /vis.c | |
| parent | 39b306f235f3faebb047c7cda82746781b9ea2f2 (diff) | |
| download | vis-826be3072ad3ce475ea39d80e5a6606a896d98c2.tar.gz vis-826be3072ad3ce475ea39d80e5a6606a896d98c2.tar.xz | |
vis: introduce vis_pipe_collect utility function
Diffstat (limited to 'vis.c')
| -rw-r--r-- | vis.c | 19 |
1 files changed, 19 insertions, 0 deletions
@@ -1325,6 +1325,25 @@ int vis_pipe(Vis *vis, Filerange *range, const char *argv[], return status; } +static ssize_t read_buffer(void *context, char *data, size_t len) { + buffer_append(context, data, len); + return len; +} + +int vis_pipe_collect(Vis *vis, Filerange *range, const char *argv[], char **out, char **err) { + Buffer bufout, buferr; + buffer_init(&bufout); + buffer_init(&buferr); + int status = vis_pipe(vis, range, argv, &bufout, read_buffer, &buferr, read_buffer); + buffer_terminate(&bufout); + buffer_terminate(&buferr); + if (out) + *out = bufout.data; + if (err) + *err = buferr.data; + return status; +} + bool vis_cmd(Vis *vis, const char *cmdline) { if (!cmdline) return true; |
