Introducing a new wrapper function in iprconfig that invokes an editor chosen by the user for log viewing.
Signed-off-by: Heitor Ricardo Alves de Siqueira <hal...@linux.vnet.ibm.com> --- iprconfig.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/iprconfig.c b/iprconfig.c index 644ba1de37da..1af5af5a722f 100644 --- a/iprconfig.c +++ b/iprconfig.c @@ -11920,6 +11920,51 @@ int log_menu(i_container *i_con) return rc; } +#define EDITOR_MAX_ARGS 32 +static int invoke_editor(char* filename) +{ + int i; + int rc, pid, status; + + /* if editor not set, use secure pager */ + if (strcmp(editor, DEFAULT_EDITOR) == 0) { + rc = invoke_pager(filename); + return rc; + } + + pid = fork(); + if (pid == 0) { + char *tok; + char *argv[EDITOR_MAX_ARGS]; + char cmnd[MAX_CMD_LENGTH]; + + /* copy editor name to argv[0] */ + strncpy(cmnd, editor, sizeof(cmnd) - 1); + tok = strtok(cmnd, " "); + argv[0] = malloc(strlen(tok)); + strcpy(argv[0], tok); + + /* handle editor arguments, if any */ + for (i = 1; i < EDITOR_MAX_ARGS - 2; ++i) { + tok = strtok(NULL, " "); + if (tok == NULL) + break; + argv[i] = malloc(strlen(tok)); + strcpy(argv[i], tok); + } + argv[i] = filename; + argv[i+1] = NULL; + + execvp(argv[0], argv); + _exit(errno); + } else { + waitpid(pid, &status, 0); + } + + return WEXITSTATUS(status); +} + + /** * ibm_storage_log_tail - * @i_con: i_container struct @@ -11996,7 +12041,7 @@ int ibm_storage_log_tail(i_container *i_con) fclose(logsource); close(log_fd); - rc = invoke_pager(logfile); + rc = invoke_editor(logfile); if ((rc != 0) && (rc != 127)) { /* "Editor returned %d. Try setting the default editor" */ @@ -12148,7 +12193,7 @@ int ibm_storage_log(i_container *i_con) } close(log_fd); - rc = invoke_pager(logfile); + rc = invoke_editor(logfile); if (num_dir_entries) { while (num_dir_entries--) @@ -12228,7 +12273,7 @@ int kernel_log(i_container *i_con) } close(log_fd); - rc = invoke_pager(logfile); + rc = invoke_editor(logfile); if (num_dir_entries > 0) { while (num_dir_entries--) @@ -12313,7 +12358,7 @@ int iprconfig_log(i_container *i_con) } close(log_fd); - rc = invoke_pager(logfile); + rc = invoke_editor(logfile); if (num_dir_entries) { while (num_dir_entries--) @@ -12568,7 +12613,7 @@ int ibm_boot_log(i_container *i_con) fclose(logsource); close(log_fd); - rc = invoke_pager(logfile); + rc = invoke_editor(logfile); if ((rc != 0) && (rc != 127)) { s_status.num = rc; -- 2.4.3 ------------------------------------------------------------------------------ _______________________________________________ Iprdd-devel mailing list Iprdd-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/iprdd-devel