From 9730eaad9ec5259916bb46304803334bf694f967 Mon Sep 17 00:00:00 2001 From: ligd Date: Sat, 18 Dec 2021 00:02:40 +0800 Subject: [PATCH] nsh: sh_main also support isctty = true Signed-off-by: ligd --- include/nshlib/nshlib.h | 21 +++++++++++++++ nshlib/nsh_system.c | 59 ++++++++++++++++++++++++++++++++--------- system/nsh/sh_main.c | 2 +- 3 files changed, 68 insertions(+), 14 deletions(-) diff --git a/include/nshlib/nshlib.h b/include/nshlib/nshlib.h index 894e736bd..cea122b5e 100644 --- a/include/nshlib/nshlib.h +++ b/include/nshlib/nshlib.h @@ -214,6 +214,27 @@ int platform_user_verify(FAR const char *username, FAR const char *password); int nsh_system(int argc, FAR char *argv[]); +/**************************************************************************** + * Name: nsh_system_ctty + * + * Description: + * This is the NSH-specific implementation of the standard system() + * command. + * + * NOTE: + * This difference with nsh_system: newconsole set isctty true + * + * Input Parameters: + * Standard task start-up arguments. Expects argc == 2 with argv[1] being + * the command to execute + * + * Returned Values: + * EXIT_SUCCESS or EXIT_FAILURE + * + ****************************************************************************/ + +int nsh_system_ctty(int argc, FAR char *argv[]); + #undef EXTERN #ifdef __cplusplus } diff --git a/nshlib/nsh_system.c b/nshlib/nsh_system.c index 48042683d..12bbed5b7 100644 --- a/nshlib/nsh_system.c +++ b/nshlib/nsh_system.c @@ -32,6 +32,27 @@ #include "nsh.h" #include "nsh_console.h" +/**************************************************************************** + * Static Functions + ****************************************************************************/ + +static int nsh_system_(int argc, FAR char *argv[], int isctty) +{ + FAR struct console_stdio_s *pstate = nsh_newconsole(isctty); + int ret; + + DEBUGASSERT(pstate != NULL); + + /* Execute the session */ + + ret = nsh_session(pstate, false, argc, argv); + + /* Exit upon return */ + + nsh_exit(&pstate->cn_vtbl, ret); + return ret; +} + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -57,17 +78,29 @@ int nsh_system(int argc, FAR char *argv[]) { - FAR struct console_stdio_s *pstate = nsh_newconsole(false); - int ret; - - DEBUGASSERT(pstate != NULL); - - /* Execute the session */ - - ret = nsh_session(pstate, false, argc, argv); - - /* Exit upon return */ - - nsh_exit(&pstate->cn_vtbl, ret); - return ret; + return nsh_system_(argc, argv, false); +} + +/**************************************************************************** + * Name: nsh_system_ctty + * + * Description: + * This is the NSH-specific implementation of the standard system() + * command. + * + * NOTE: + * This difference with nsh_system: newconsole set isctty true + * + * Input Parameters: + * Standard task start-up arguments. Expects argc == 2 with argv[1] being + * the command to execute + * + * Returned Values: + * EXIT_SUCCESS or EXIT_FAILURE + * + ****************************************************************************/ + +int nsh_system_ctty(int argc, FAR char *argv[]) +{ + return nsh_system_(argc, argv, true); } diff --git a/system/nsh/sh_main.c b/system/nsh/sh_main.c index b17c5e780..38e45920d 100644 --- a/system/nsh/sh_main.c +++ b/system/nsh/sh_main.c @@ -49,5 +49,5 @@ int main(int argc, FAR char *argv[]) * system() and popen() interfaces. */ - return nsh_system(argc, argv); + return nsh_system_ctty(argc, argv); }