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

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


The following commit(s) were added to refs/heads/master by this push:
     new 7942d18fd57 sched/task: Do not log a missing or unloadable program as 
an exec error.
7942d18fd57 is described below

commit 7942d18fd57810288b7f14d8a5076afcfe33781d
Author: Marco Casaroli <[email protected]>
AuthorDate: Fri Oct 9 08:17:00 2026 +0200

    sched/task: Do not log a missing or unloadable program as an exec error.
    
    posix_spawn() and execve() logged every failed exec at error level.  A
    shell normally tries a program first: NSH with CONFIG_NSH_FILE_APPS
    spawns each command from PATH before its built-in command, and bash
    runs a script itself when execve() returns ENOEXEC.  So every built-in
    NSH command printed
    
      nxposix_spawn_exec: ERROR: exec failed: 2
    
    although nothing was wrong.  The caller gets the error code and reports
    it if it needs to.
    
    Do not log ENOENT and ENOEXEC.  Other errors are logged as before.
    
    Assisted-by: Claude Code:claude-opus-5-5
    Signed-off-by: Marco Casaroli <[email protected]>
---
 sched/task/task_execve.c     | 12 +++++++++++-
 sched/task/task_posixspawn.c | 12 +++++++++++-
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/sched/task/task_execve.c b/sched/task/task_execve.c
index f070ce29513..0971509a33c 100644
--- a/sched/task/task_execve.c
+++ b/sched/task/task_execve.c
@@ -128,7 +128,17 @@ int execve(FAR const char *path, FAR char * const argv[],
   ret = exec(path, argv, envp, symtab, nsymbols);
   if (ret < 0)
     {
-      serr("ERROR: exec failed: %d\n", get_errno());
+      /* No such program (ENOENT) or not a loadable format (ENOEXEC) is an
+       * ordinary result for the caller, for example a shell that runs a
+       * script itself when execve() cannot.
+       */
+
+      ret = get_errno();
+      if (ret != ENOENT && ret != ENOEXEC)
+        {
+          serr("ERROR: exec failed: %d\n", ret);
+        }
+
       return ERROR;
     }
 
diff --git a/sched/task/task_posixspawn.c b/sched/task/task_posixspawn.c
index cc896c75717..b94b5d1f4c6 100644
--- a/sched/task/task_posixspawn.c
+++ b/sched/task/task_posixspawn.c
@@ -110,7 +110,17 @@ static int nxposix_spawn_exec(FAR pid_t *pidp, FAR const 
char *path,
   if (pid < 0)
     {
       ret = -pid;
-      serr("ERROR: exec failed: %d\n", ret);
+
+      /* No such program (ENOENT) or not a loadable format (ENOEXEC) is an
+       * ordinary result for the caller, for example a shell that tries a
+       * program before its built-in command.
+       */
+
+      if (ret != ENOENT && ret != ENOEXEC)
+        {
+          serr("ERROR: exec failed: %d\n", ret);
+        }
+
       return ret;
     }
 

Reply via email to