You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gu...@apache.org on 2021/11/09 16:39:16 UTC

[incubator-nuttx-apps] branch master updated (a0f773b -> 850c036)

This is an automated email from the ASF dual-hosted git repository.

gustavonihei pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git.


    from a0f773b  nshlib/nsh_session: Handle the command arguments in any order
     new ad09ca2  nshlib: sync nsh_stdsession.c with nsh_session.c
     new 850c036  nshlib/stdsession: Handle the command arguments in any order

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 nshlib/nsh_session.c    |   6 +-
 nshlib/nsh_stdsession.c | 160 +++++++++++++++++++++++++++++-------------------
 2 files changed, 100 insertions(+), 66 deletions(-)

[incubator-nuttx-apps] 02/02: nshlib/stdsession: Handle the command arguments in any order

Posted by gu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gustavonihei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git

commit 850c036c58f04c3a0a7b14a516ee92494f2d8ccb
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Tue Nov 9 23:24:21 2021 +0800

    nshlib/stdsession: Handle the command arguments in any order
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
 nshlib/nsh_stdsession.c | 145 ++++++++++++++++++++++++++++--------------------
 1 file changed, 85 insertions(+), 60 deletions(-)

diff --git a/nshlib/nsh_stdsession.c b/nshlib/nsh_stdsession.c
index 4488bc6..5d423f1 100644
--- a/nshlib/nsh_stdsession.c
+++ b/nshlib/nsh_stdsession.c
@@ -69,6 +69,7 @@ int nsh_session(FAR struct console_stdio_s *pstate,
 {
   FAR struct nsh_vtbl_s *vtbl;
   int ret = EXIT_FAILURE;
+  int i;
 
   DEBUGASSERT(pstate);
   vtbl = &pstate->cn_vtbl;
@@ -110,85 +111,109 @@ int nsh_session(FAR struct console_stdio_s *pstate,
 #endif
     }
 
-  if (argc < 2)
-    {
-      /* Then enter the command line parsing loop */
+  /* Process the command line option */
 
-      for (; ; )
+  for (i = 1; i < argc; i++)
+    {
+      if (strcmp(argv[i], "-h") == 0)
         {
-          /* For the case of debugging the USB console...
-           * dump collected USB trace data
-           */
-
-#ifdef CONFIG_NSH_USBDEV_TRACE
-          nsh_usbtrace();
-#endif
-
-          /* Get the next line of input. readline() returns EOF
-           * on end-of-file or any read failure.
-           */
-
-#ifdef CONFIG_NSH_CLE
-          /* cle() normally returns the number of characters read, but will
-           * return a negated errno value on end of file or if an error
-           * occurs. Either  will cause the session to terminate.
-           */
+          nsh_output(vtbl, "Usage: %s [<script-path>|-c <command>]\n",
+                     argv[0]);
+          return EXIT_SUCCESS;
+        }
+      else if (strcmp(argv[i], "-c") == 0)
+        {
+          /* Process the inline command */
 
-          ret = cle(pstate->cn_line, g_nshprompt, CONFIG_NSH_LINELEN,
-                    stdin, stdout);
-          if (ret < 0)
+          if (i + 1 < argc)
             {
-              printf(g_fmtcmdfailed, "nsh_session",
-                     "cle", NSH_ERRNO_OF(-ret));
-              continue;
+              return nsh_parse(vtbl, argv[i + 1]);
             }
-#else
-          /* Display the prompt string */
-
-          printf("%s", g_nshprompt);
-
-          /* readline() normally returns the number of characters read, but
-           * will return EOF on end of file or if an error occurs.  EOF
-           * will cause the session to terminate.
-           */
-
-          ret = std_readline(pstate->cn_line, CONFIG_NSH_LINELEN);
-          if (ret == EOF)
+          else
             {
-              /* NOTE: readline() does not set the errno variable, but
-               * perhaps we will be lucky and it will still be valid.
-               */
-
-              printf(g_fmtcmdfailed, "nsh_session",
-                     "readline", NSH_ERRNO);
-              ret = EXIT_SUCCESS;
-              break;
+              nsh_error(vtbl, g_fmtargrequired, argv[0]);
+              return EXIT_FAILURE;
             }
-#endif
+        }
+      else if (argv[i][0] != '-')
+        {
+          break;
+        }
 
-          /* Parse process the command */
+      /* Unknown option */
 
-          nsh_parse(vtbl, pstate->cn_line);
-        }
+      nsh_error(vtbl, g_fmtsyntax, argv[0]);
+      return EXIT_FAILURE;
     }
-  else if (strcmp(argv[1], "-h") == 0)
-    {
-      ret = nsh_output(vtbl, "Usage: %s [<script-path>|-c <command>]\n",
-                       argv[0]);
-    }
-  else if (strcmp(argv[1], "-c") != 0)
+
+  if (i < argc)
     {
 #ifndef CONFIG_NSH_DISABLESCRIPT
       /* Execute the shell script */
 
-      ret = nsh_script(vtbl, argv[0], argv[1]);
+      return nsh_script(vtbl, argv[0], argv[i]);
+#else
+      return EXIT_FAILURE;
 #endif
     }
-  else if (argc >= 3)
+
+  /* Then enter the command line parsing loop */
+
+  for (; ; )
     {
+      /* For the case of debugging the USB console...
+       * dump collected USB trace data
+       */
+
+#ifdef CONFIG_NSH_USBDEV_TRACE
+      nsh_usbtrace();
+#endif
+
+      /* Get the next line of input. readline() returns EOF
+       * on end-of-file or any read failure.
+       */
+
+#ifdef CONFIG_NSH_CLE
+      /* cle() normally returns the number of characters read, but will
+       * return a negated errno value on end of file or if an error
+       * occurs. Either  will cause the session to terminate.
+       */
+
+      ret = cle(pstate->cn_line, g_nshprompt, CONFIG_NSH_LINELEN,
+                stdin, stdout);
+      if (ret < 0)
+        {
+          printf(g_fmtcmdfailed, "nsh_session",
+                 "cle", NSH_ERRNO_OF(-ret));
+          continue;
+        }
+#else
+      /* Display the prompt string */
+
+      printf("%s", g_nshprompt);
+
+      /* readline() normally returns the number of characters read, but
+       * will return EOF on end of file or if an error occurs.  EOF
+       * will cause the session to terminate.
+       */
+
+      ret = std_readline(pstate->cn_line, CONFIG_NSH_LINELEN);
+      if (ret == EOF)
+        {
+          /* NOTE: readline() does not set the errno variable, but
+           * perhaps we will be lucky and it will still be valid.
+           */
+
+          printf(g_fmtcmdfailed, "nsh_session",
+                 "readline", NSH_ERRNO);
+          ret = EXIT_SUCCESS;
+          break;
+        }
+#endif
+
       /* Parse process the command */
 
-      ret = nsh_parse(vtbl, argv[2]);
+      nsh_parse(vtbl, pstate->cn_line);
     }
 
   return ret;

[incubator-nuttx-apps] 01/02: nshlib: sync nsh_stdsession.c with nsh_session.c

Posted by gu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

gustavonihei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx-apps.git

commit ad09ca2a807b2c99937b52160dbb13c1a52fa1af
Author: Xiang Xiao <xi...@xiaomi.com>
AuthorDate: Tue Nov 9 22:58:08 2021 +0800

    nshlib: sync nsh_stdsession.c with nsh_session.c
    
    Signed-off-by: Xiang Xiao <xi...@xiaomi.com>
---
 nshlib/nsh_session.c    |  6 +++---
 nshlib/nsh_stdsession.c | 37 +++++++++++++++++++++++--------------
 2 files changed, 26 insertions(+), 17 deletions(-)

diff --git a/nshlib/nsh_session.c b/nshlib/nsh_session.c
index e001606..4286bcb 100644
--- a/nshlib/nsh_session.c
+++ b/nshlib/nsh_session.c
@@ -92,17 +92,17 @@ int nsh_session(FAR struct console_stdio_s *pstate,
       fputs(g_nshgreeting, pstate->cn_outstream);
 
 #ifdef CONFIG_NSH_MOTD
-#ifdef CONFIG_NSH_PLATFORM_MOTD
+# ifdef CONFIG_NSH_PLATFORM_MOTD
       /* Output the platform message of the day */
 
       platform_motd(vtbl->iobuffer, IOBUFFERSIZE);
       fprintf(pstate->cn_outstream, "%s\n", vtbl->iobuffer);
 
-#else
+# else
       /* Output the fixed message of the day */
 
       fprintf(pstate->cn_outstream, "%s\n", g_nshmotd);
-#endif
+# endif
 #endif
 
       fflush(pstate->cn_outstream);
diff --git a/nshlib/nsh_stdsession.c b/nshlib/nsh_stdsession.c
index fd72830..4488bc6 100644
--- a/nshlib/nsh_stdsession.c
+++ b/nshlib/nsh_stdsession.c
@@ -46,11 +46,12 @@
  * Name: nsh_session
  *
  * Description:
- *   This is the common session logic or an NSH session that uses only stdin
+ *   This is the common session login on any NSH session that uses only stdin
  *   and stdout.
  *
  *   This function:
- *   - Executes the NSH logic script
+ *   - Performs the login sequence if so configured
+ *   - Executes the NSH login script
  *   - Presents a greeting
  *   - Then provides a prompt then gets and processes the command line.
  *   - This continues until an error occurs, then the session returns.
@@ -58,6 +59,9 @@
  * Input Parameters:
  *   pstate - Abstracts the underlying session.
  *
+ * Returned Values:
+ *   EXIT_SUCCESS or EXIT_FAILURE is returned.
+ *
  ****************************************************************************/
 
 int nsh_session(FAR struct console_stdio_s *pstate,
@@ -96,9 +100,14 @@ int nsh_session(FAR struct console_stdio_s *pstate,
       /* Output the fixed message of the day */
 
       printf("%s\n", g_nshmotd);
-
 # endif
 #endif
+
+      /* Execute the login script */
+
+#ifdef CONFIG_NSH_ROMFSRC
+      nsh_loginscript(vtbl);
+#endif
     }
 
   if (argc < 2)
@@ -115,20 +124,22 @@ int nsh_session(FAR struct console_stdio_s *pstate,
           nsh_usbtrace();
 #endif
 
-          /* Get the next line of input. */
+          /* Get the next line of input. readline() returns EOF
+           * on end-of-file or any read failure.
+           */
 
 #ifdef CONFIG_NSH_CLE
           /* cle() normally returns the number of characters read, but will
            * return a negated errno value on end of file or if an error
-           * occurs. Either will cause the session to terminate.
+           * occurs. Either  will cause the session to terminate.
            */
 
           ret = cle(pstate->cn_line, g_nshprompt, CONFIG_NSH_LINELEN,
                     stdin, stdout);
           if (ret < 0)
             {
-              printf(g_fmtcmdfailed,
-                     "nsh_session", "cle", NSH_ERRNO_OF(-ret));
+              printf(g_fmtcmdfailed, "nsh_session",
+                     "cle", NSH_ERRNO_OF(-ret));
               continue;
             }
 #else
@@ -136,8 +147,8 @@ int nsh_session(FAR struct console_stdio_s *pstate,
 
           printf("%s", g_nshprompt);
 
-          /* readline () normally returns the number of characters read, but
-           * will return EOF on end of file or if an error occurs.  Either
+          /* readline() normally returns the number of characters read, but
+           * will return EOF on end of file or if an error occurs.  EOF
            * will cause the session to terminate.
            */
 
@@ -148,7 +159,8 @@ int nsh_session(FAR struct console_stdio_s *pstate,
                * perhaps we will be lucky and it will still be valid.
                */
 
-              printf(g_fmtcmdfailed, "nsh_session", "readline", NSH_ERRNO);
+              printf(g_fmtcmdfailed, "nsh_session",
+                     "readline", NSH_ERRNO);
               ret = EXIT_SUCCESS;
               break;
             }
@@ -166,7 +178,7 @@ int nsh_session(FAR struct console_stdio_s *pstate,
     }
   else if (strcmp(argv[1], "-c") != 0)
     {
-#if defined(CONFIG_FILE_STREAM) && !defined(CONFIG_NSH_DISABLESCRIPT)
+#ifndef CONFIG_NSH_DISABLESCRIPT
       /* Execute the shell script */
 
       ret = nsh_script(vtbl, argv[0], argv[1]);
@@ -177,9 +189,6 @@ int nsh_session(FAR struct console_stdio_s *pstate,
       /* Parse process the command */
 
       ret = nsh_parse(vtbl, argv[2]);
-#ifdef CONFIG_FILE_STREAM
-      fflush(pstate->cn_outstream);
-#endif
     }
 
   return ret;