aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--buffer.c5
-rw-r--r--buffer.h3
-rw-r--r--sam.c11
-rw-r--r--vis-cmds.c2
-rw-r--r--vis-registers.c9
-rw-r--r--vis.c9
6 files changed, 17 insertions, 22 deletions
diff --git a/buffer.c b/buffer.c
index ffda00f..e9285fe 100644
--- a/buffer.c
+++ b/buffer.c
@@ -182,3 +182,8 @@ char *buffer_move(Buffer *buf) {
buffer_init(buf);
return data;
}
+
+ssize_t read_into_buffer(void *context, char *data, size_t len) {
+ buffer_append(context, data, len);
+ return len;
+}
diff --git a/buffer.h b/buffer.h
index 321d54a..d9e2b85 100644
--- a/buffer.h
+++ b/buffer.h
@@ -80,4 +80,7 @@ const char *buffer_content(Buffer*);
*/
char *buffer_move(Buffer*);
+/** ``read(3p)`` like interface for reading into a Buffer (``context``) */
+ssize_t read_into_buffer(void *context, char *data, size_t len);
+
#endif
diff --git a/sam.c b/sam.c
index 90d19c2..e5aead3 100644
--- a/sam.c
+++ b/sam.c
@@ -1743,11 +1743,6 @@ static bool cmd_write(Vis *vis, Win *win, Command *cmd, const char *argv[], Sele
return true;
}
-static ssize_t read_buffer(void *context, char *data, size_t len) {
- buffer_append(context, data, len);
- return len;
-}
-
static bool cmd_filter(Vis *vis, Win *win, Command *cmd, const char *argv[], Selection *sel, Filerange *range) {
if (!win)
return false;
@@ -1756,7 +1751,8 @@ static bool cmd_filter(Vis *vis, Win *win, Command *cmd, const char *argv[], Sel
buffer_init(&bufout);
buffer_init(&buferr);
- int status = vis_pipe(vis, win->file, range, &argv[1], &bufout, read_buffer, &buferr, read_buffer, false);
+ int status = vis_pipe(vis, win->file, range, &argv[1], &bufout, read_into_buffer, &buferr,
+ read_into_buffer, false);
if (vis->interrupted) {
vis_info_show(vis, "Command cancelled");
@@ -1796,7 +1792,8 @@ static bool cmd_pipeout(Vis *vis, Win *win, Command *cmd, const char *argv[], Se
Buffer buferr;
buffer_init(&buferr);
- int status = vis_pipe(vis, win->file, range, (const char*[]){ argv[1], NULL }, NULL, NULL, &buferr, read_buffer, false);
+ int status = vis_pipe(vis, win->file, range, (const char*[]){ argv[1], NULL }, NULL, NULL,
+ &buferr, read_into_buffer, false);
if (vis->interrupted)
vis_info_show(vis, "Command cancelled");
diff --git a/vis-cmds.c b/vis-cmds.c
index 4cfb3bd..b195013 100644
--- a/vis-cmds.c
+++ b/vis-cmds.c
@@ -413,7 +413,7 @@ static const char *file_open_dialog(Vis *vis, const char *pattern) {
Filerange empty = text_range_new(0,0);
int status = vis_pipe(vis, vis->win->file, &empty,
(const char*[]){ buffer_content0(&bufcmd), NULL },
- &bufout, read_buffer, &buferr, read_buffer, false);
+ &bufout, read_into_buffer, &buferr, read_into_buffer, false);
if (status == 0)
strncpy(name, buffer_content0(&bufout), sizeof(name)-1);
diff --git a/vis-registers.c b/vis-registers.c
index 6e21a58..caecbd3 100644
--- a/vis-registers.c
+++ b/vis-registers.c
@@ -21,11 +21,6 @@ static Buffer *register_buffer(Register *reg, size_t slot) {
return array_get(&reg->values, slot);
}
-static ssize_t read_buffer(void *context, char *data, size_t len) {
- buffer_append(context, data, len);
- return len;
-}
-
bool register_init(Register *reg) {
Buffer buf;
buffer_init(&buf);
@@ -83,7 +78,7 @@ const char *register_slot_get(Vis *vis, Register *reg, size_t slot, size_t *len)
cmd[3] = "clipboard";
int status = vis_pipe(vis, vis->win->file,
&(Filerange){ .start = 0, .end = 0 },
- cmd, buf, read_buffer, &buferr, read_buffer, false);
+ cmd, buf, read_into_buffer, &buferr, read_into_buffer, false);
if (status != 0)
vis_info_show(vis, "Command failed %s", buffer_content0(&buferr));
@@ -167,7 +162,7 @@ bool register_slot_put_range(Vis *vis, Register *reg, size_t slot, Text *txt, Fi
cmd[3] = "clipboard";
int status = vis_pipe(vis, vis->win->file, range,
- cmd, NULL, NULL, &buferr, read_buffer, false);
+ cmd, NULL, NULL, &buferr, read_into_buffer, false);
if (status != 0)
vis_info_show(vis, "Command failed %s", buffer_content0(&buferr));
diff --git a/vis.c b/vis.c
index d1c0dab..c059a48 100644
--- a/vis.c
+++ b/vis.c
@@ -1854,18 +1854,13 @@ int vis_pipe_buf(Vis *vis, const char* buf, const char *argv[],
return _vis_pipe(vis, NULL, NULL, buf, argv, stdout_context, read_stdout, stderr_context, read_stderr, fullscreen);
}
-static ssize_t read_buffer(void *context, char *data, size_t len) {
- buffer_append(context, data, len);
- return len;
-}
-
static int _vis_pipe_collect(Vis *vis, File *file, Filerange *range, const char* buf, const char *argv[], char **out, char **err, bool fullscreen) {
Buffer bufout, buferr;
buffer_init(&bufout);
buffer_init(&buferr);
int status = _vis_pipe(vis, file, range, buf, argv,
- &bufout, out ? read_buffer : NULL,
- &buferr, err ? read_buffer : NULL,
+ &bufout, out ? read_into_buffer : NULL,
+ &buferr, err ? read_into_buffer : NULL,
fullscreen);
buffer_terminate(&bufout);
buffer_terminate(&buferr);