From 71234ec0bd16c490239eefcf98069ceb7a7f7618 Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Wed, 16 Jul 2014 23:53:30 +0200
Subject: Refactor wins_launch_external()

Allow for passing an arbitrary number of arguments. This also allows us
to remove wins_launch_external2() and use wins_launch_external() at all
call sites instead.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
---
 src/calcurse.c | 11 +++++++----
 src/calcurse.h |  3 +--
 src/help.c     |  3 ++-
 src/io.c       |  6 ++++--
 src/note.c     |  7 +++++--
 src/wins.c     | 19 +------------------
 6 files changed, 20 insertions(+), 29 deletions(-)

(limited to 'src')

diff --git a/src/calcurse.c b/src/calcurse.c
index cfe8298..e31770c 100644
--- a/src/calcurse.c
+++ b/src/calcurse.c
@@ -290,10 +290,13 @@ static inline void key_generic_reload(void)
 			io_save_todo(path_todo_backup);
 			io_save_mutex_unlock();
 
-			wins_launch_external2(path_apts, path_apts_backup,
-					      conf.mergetool);
-			wins_launch_external2(path_todo, path_todo_backup,
-					      conf.mergetool);
+			const char *arg_apts[] = { conf.mergetool, path_apts,
+						   path_apts_backup, NULL };
+			wins_launch_external(arg_apts);
+
+			const char *arg_todo[] = { conf.mergetool, path_todo,
+						   path_todo_backup, NULL };
+			wins_launch_external(arg_todo);
 
 			xfree(path_apts_backup);
 			xfree(path_todo_backup);
diff --git a/src/calcurse.h b/src/calcurse.h
index a1cf9bb..34e74b5 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -1124,8 +1124,7 @@ void wins_reset_noupdate(void);
 void wins_reset(void);
 void wins_prepare_external(void);
 void wins_unprepare_external(void);
-void wins_launch_external(const char *, const char *);
-void wins_launch_external2(const char *, const char *, const char *);
+void wins_launch_external(const char *[]);
 void wins_status_bar(void);
 void wins_erase_status_bar(void);
 void wins_other_status_page(int);
diff --git a/src/help.c b/src/help.c
index b2a7e72..09f9197 100644
--- a/src/help.c
+++ b/src/help.c
@@ -189,7 +189,8 @@ int display_help(const char *topic)
 	}
 
 	if (io_file_exists(path)) {
-		wins_launch_external(path, conf.pager);
+		const char *arg[] = { conf.pager, path, NULL };
+		wins_launch_external(arg);
 		return 1;
 	} else {
 		return 0;
diff --git a/src/io.c b/src/io.c
index 95a42d3..0ea6bbf 100644
--- a/src/io.c
+++ b/src/io.c
@@ -1175,8 +1175,10 @@ void io_log_display(struct io_file *log, const char *msg,
 				child_wait(NULL, NULL, pid);
 		}
 	} else {
-		if (status_ask_bool(msg) == 1)
-			wins_launch_external(log->name, pager);
+		if (status_ask_bool(msg) == 1) {
+			const char *arg[] = { pager, log->name, NULL };
+			wins_launch_external(arg);
+		}
 		wins_erase_status_bar();
 	}
 }
diff --git a/src/note.c b/src/note.c
index 9bce762..882d1a6 100644
--- a/src/note.c
+++ b/src/note.c
@@ -95,7 +95,8 @@ void edit_note(char **note, const char *editor)
 		io_file_cp(notepath, tmppath);
 	}
 
-	wins_launch_external(tmppath, editor);
+	const char *arg[] = { editor, tmppath, NULL };
+	wins_launch_external(arg);
 
 	if (io_file_is_empty(tmppath) > 0) {
 		erase_note(note);
@@ -119,7 +120,9 @@ void view_note(const char *note, const char *pager)
 	if (note == NULL)
 		return;
 	snprintf(fullname, BUFSIZ, "%s%s", path_notes, note);
-	wins_launch_external(fullname, pager);
+
+	const char *arg[] = { pager, fullname, NULL };
+	wins_launch_external(arg);
 }
 
 /* Erase a note previously attached to an item. */
diff --git a/src/wins.c b/src/wins.c
index 7545a59..80ec17e 100644
--- a/src/wins.c
+++ b/src/wins.c
@@ -600,25 +600,8 @@ void wins_unprepare_external(void)
  * While inside interactive mode, launch the external command cmd on the given
  * file.
  */
-void wins_launch_external(const char *file, const char *cmd)
+void wins_launch_external(const char *arg[])
 {
-	const char *arg[] = { cmd, file, NULL };
-	int pid;
-
-	wins_prepare_external();
-	if ((pid = shell_exec(NULL, NULL, *arg, arg)))
-		child_wait(NULL, NULL, pid);
-	wins_unprepare_external();
-}
-
-/*
- * While inside interactive mode, launch the external command cmd on the given
- * two files.
- */
-void wins_launch_external2(const char *file1, const char *file2,
-			   const char *cmd)
-{
-	const char *arg[] = { cmd, file1, file2, NULL };
 	int pid;
 
 	wins_prepare_external();
-- 
cgit v1.2.3-70-g09d2