Skip to content

Commit

Permalink
vis: cleanup vis_pipe API
Browse files Browse the repository at this point in the history
  • Loading branch information
martanne committed Apr 1, 2016
1 parent e2f4b5b commit ba23d97
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 8 deletions.
4 changes: 2 additions & 2 deletions register.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ const char *register_get(Vis *vis, Register *reg, size_t *len) {

int status = vis_pipe(vis, &clipboard,
&(Filerange){ .start = 0, .end = 0 },
(const char*[]){ "vis-clipboard", "vis-clipboard", "--paste", NULL },
(const char*[]){ "vis-clipboard", "--paste", NULL },
read_stdout, read_stderr);
if (status != 0)
vis_info_show(vis, "Command failed %s", stderr.len > 0 ? stderr.data : "");
Expand Down Expand Up @@ -90,7 +90,7 @@ bool register_put_range(Vis *vis, Register *reg, Text *txt, Filerange *range) {
};

int status = vis_pipe(vis, &clipboard, range,
(const char*[]){ "vis-clipboard", "vis-clipboard", "--copy", NULL },
(const char*[]){ "vis-clipboard", "--copy", NULL },
NULL, read_stderr);

if (status != 0)
Expand Down
10 changes: 5 additions & 5 deletions vis-cmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -700,10 +700,10 @@ int vis_pipe(Vis *vis, void *context, Filerange *range, const char *argv[],
dup2(perr[1], STDERR_FILENO);
close(perr[0]);
close(perr[1]);
if (!argv[2])
execl("/bin/sh", "sh", "-c", argv[1], NULL);
if (!argv[1])
execl("/bin/sh", "sh", "-c", argv[0], NULL);
else
execvp(argv[1], (char**)argv+1);
execvp(argv[0], (char* const*)argv);
vis_info_show(vis, "exec failure: %s", strerror(errno));
exit(EXIT_FAILURE);
}
Expand Down Expand Up @@ -848,7 +848,7 @@ static bool cmd_filter(Vis *vis, Filerange *range, enum CmdOpt opt, const char *

text_snapshot(txt);

int status = vis_pipe(vis, &filter, range, argv, read_stdout, read_stderr);
int status = vis_pipe(vis, &filter, range, &argv[1], read_stdout, read_stderr);

if (status == 0) {
if (text_range_valid(range)) {
Expand Down Expand Up @@ -902,7 +902,7 @@ static bool cmd_pipe(Vis *vis, Filerange *range, enum CmdOpt opt, const char *ar

buffer_init(&filter.err);

int status = vis_pipe(vis, &filter, range, argv, read_stdout_new, read_stderr);
int status = vis_pipe(vis, &filter, range, &argv[1], read_stdout_new, read_stderr);

if (vis->cancel_filter)
vis_info_show(vis, "Command cancelled");
Expand Down
11 changes: 10 additions & 1 deletion vis.h
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,16 @@ bool vis_cmd(Vis*, const char *cmd);
/* execute any kind (:,?,/) of prompt command */
bool vis_prompt_cmd(Vis*, const char *cmd);

/* pipe a given file range to an external process */
/* pipe a given file range to an external process
*
* if argv contains only one non-NULL element the command is executed using
* /bin/sh -c (i.e. argument expansion is performed by the shell). In contrast
* if argv contains more than one non-NULL element execvp(argv[0], argv); will
* be used.
*
* if read_std{out,err} are non-NULL they will be called when output from
* the forked process is available.
*/
int vis_pipe(Vis *vis, void *context, Filerange *range, const char *argv[],
ssize_t (*read_stdout)(void *context, char *data, size_t len),
ssize_t (*read_stderr)(void *context, char *data, size_t len));
Expand Down

0 comments on commit ba23d97

Please sign in to comment.