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

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

commit f82e6c22295e4f8d6ce7bef2490170933f4aa2be
Author: yangsong8 <[email protected]>
AuthorDate: Mon Dec 9 21:13:49 2024 +0800

    nsh: return EOF when nread is 0
    
    If enable CONFIG NSH_CLE. When sh reads data and detects that nread is 0,
    return EOF and exit.
    
    Signed-off-by: yangsong8 <[email protected]>
---
 nshlib/nsh_session.c |  5 +++--
 system/cle/cle.c     | 10 +++++-----
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/nshlib/nsh_session.c b/nshlib/nsh_session.c
index 500c8d6f1..bb83b98fb 100644
--- a/nshlib/nsh_session.c
+++ b/nshlib/nsh_session.c
@@ -211,11 +211,12 @@ int nsh_session(FAR struct console_stdio_s *pstate,
 
       ret = cle_fd(pstate->cn_line, nsh_prompt(), LINE_MAX,
                    INFD(pstate), OUTFD(pstate));
-      if (ret < 0)
+      if (ret == EOF)
         {
           dprintf(ERRFD(pstate), g_fmtcmdfailed, "nsh_session",
                   "cle", NSH_ERRNO_OF(-ret));
-          continue;
+          ret = EXIT_SUCCESS;
+          break;
         }
 #else
       /* Display the prompt string */
diff --git a/system/cle/cle.c b/system/cle/cle.c
index cf11f7097..21b442806 100644
--- a/system/cle/cle.c
+++ b/system/cle/cle.c
@@ -316,7 +316,7 @@ static int cle_getch(FAR struct cle_s *priv)
           if (nread == 0 || errcode != EINTR)
             {
               cledbg("ERROR: read from stdin failed: %d\n", errcode);
-              return -EIO;
+              return EOF;
             }
         }
     }
@@ -372,13 +372,13 @@ static void cle_setcursor(FAR struct cle_s *priv, int16_t 
column)
   int len;
   int off;
 
-  /* Sub prompt offset from real postion to get correct offset to execute */
+  /* Sub prompt offset from real position to get correct offset to execute */
 
   off = column - (priv->realpos - priv->coloffs);
 
   cleinfo("column=%d offset=%d\n", column, off);
 
-  /* If cursor not move, retrun directly */
+  /* If cursor not move, return directly */
 
   if (off == 0)
     {
@@ -703,9 +703,9 @@ static int cle_editloop(FAR struct cle_s *priv)
       for (; ; )
         {
           ch = cle_getch(priv);
-          if (ch < 0)
+          if (ch == EOF)
             {
-              return -EIO;
+              return EOF;
             }
           else if (state != 0)
             {

Reply via email to