summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2017-02-15 14:47:45 +1100
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2017-08-15 13:38:17 +1000
commitd90efe9e2bbfb18ee05ec2032b5723dbfa902d82 (patch)
treec576ccae13ca2f9264f18c9777a9f275f9a74cef
parent37feda62bd2835eabc779d275301a9b763521f7a (diff)
downloadtalos-petitboot-d90efe9e2bbfb18ee05ec2032b5723dbfa902d82.zip
talos-petitboot-d90efe9e2bbfb18ee05ec2032b5723dbfa902d82.tar.gz
ui/ncurses: Update cui_run_cmd() to pass display to command
Update cui_run_cmd() to setup a process that uses 'raw_stdout' so that output is displayed on the screen instead of being caught in the log. Also update cui_run_cmd() to take a more generic list of arguments, and add a cui_run_cmd_from_item() wrapper for the existing user. Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
-rw-r--r--ui/ncurses/nc-cui.c28
-rw-r--r--ui/ncurses/nc-cui.h3
2 files changed, 26 insertions, 5 deletions
diff --git a/ui/ncurses/nc-cui.c b/ui/ncurses/nc-cui.c
index fbc02b9..84e4bf0 100644
--- a/ui/ncurses/nc-cui.c
+++ b/ui/ncurses/nc-cui.c
@@ -155,19 +155,29 @@ void cui_on_exit(struct pmenu *menu)
* cui_run_cmd - A generic cb to run the supplied command.
*/
-int cui_run_cmd(struct pmenu_item *item)
+int cui_run_cmd(struct cui *cui, const char **cmd_argv)
{
+ struct process *process;
int result;
- struct cui *cui = cui_from_item(item);
- const char **cmd_argv = item->data;
+
+ process = process_create(cui);
+ if (!process)
+ return -1;
+
+ process->path = cmd_argv[0];
+ process->argv = cmd_argv;
+ process->raw_stdout = true;
nc_scr_status_printf(cui->current, _("Running %s..."), cmd_argv[0]);
def_prog_mode();
+ endwin();
- result = process_run_simple_argv(item, cmd_argv);
+ result = process_run_sync(process);
reset_prog_mode();
+ refresh();
+
redrawwin(cui->current->main_ncw);
if (result) {
@@ -176,9 +186,19 @@ int cui_run_cmd(struct pmenu_item *item)
cmd_argv[0]);
}
+ process_release(process);
+
return result;
}
+int cui_run_cmd_from_item(struct pmenu_item *item)
+{
+ struct cui *cui = cui_from_item(item);
+ const char **cmd_argv = item->data;
+
+ return cui_run_cmd(cui, cmd_argv);
+}
+
/**
* cui_boot - A generic cb to run kexec.
*/
diff --git a/ui/ncurses/nc-cui.h b/ui/ncurses/nc-cui.h
index 418df71..d8a5f8b 100644
--- a/ui/ncurses/nc-cui.h
+++ b/ui/ncurses/nc-cui.h
@@ -98,7 +98,8 @@ void cui_abort(struct cui *cui);
void cui_resize(struct cui *cui);
void cui_on_exit(struct pmenu *menu);
void cui_on_open(struct pmenu *menu);
-int cui_run_cmd(struct pmenu_item *item);
+int cui_run_cmd(struct cui *cui, const char **cmd_argv);
+int cui_run_cmd_from_item(struct pmenu_item *item);
static inline struct cui *cui_from_arg(void *arg)
{
OpenPOWER on IntegriCloud