From 5062baf0da01ecf492713ef50ab1cfbc3b60a795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Fri, 30 Sep 2016 17:38:46 +0200 Subject: sam: simplify :r command implementaion Avoid intermediate shell. --- sam.c | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'sam.c') diff --git a/sam.c b/sam.c index 3121a13..3bf679c 100644 --- a/sam.c +++ b/sam.c @@ -1154,18 +1154,11 @@ static bool cmd_read(Vis *vis, Win *win, Command *cmd, const char *argv[], Curso return false; } - Buffer buf; - buffer_init(&buf); - bool ret = buffer_put0(&buf, "cat --"); - for (const char **name = &argv[1]; *name; name++) { - ret &= buffer_append0(&buf, " '"); - ret &= buffer_append0(&buf, *name); - ret &= buffer_append0(&buf, "'"); - } - if (ret) - ret = cmd_pipein(vis, win, cmd, (const char*[]){ argv[0], buf.data, NULL }, cur, range); - buffer_release(&buf); - return ret; + const char *args[MAX_ARGV] = { argv[0], "cat", "--" }; + for (int i = 3; i < MAX_ARGV-2; i++) + args[i] = argv[i-2]; + args[MAX_ARGV-1] = NULL; + return cmd_pipein(vis, win, cmd, (const char**)args, cur, range); } static ssize_t read_text(void *context, char *data, size_t len) { @@ -1226,7 +1219,7 @@ static bool cmd_pipein(Vis *vis, Win *win, Command *cmd, const char *argv[], Cur if (!win) return false; Filerange filter_range = text_range_new(range->end, range->end); - bool ret = cmd_filter(vis, win, cmd, (const char*[]){ argv[0], argv[1], NULL }, cur, &filter_range); + bool ret = cmd_filter(vis, win, cmd, argv, cur, &filter_range); if (ret) { text_delete_range(win->file->text, range); range->end = range->start + text_range_size(&filter_range); -- cgit v1.2.3