Browse Source

Shell: Print correct errno when execvp() fails

Amusingly enough, this was caused by yet another bug.
Sergey Bugaev 5 năm trước cách đây
mục cha
commit
7aad44b825
1 tập tin đã thay đổi với 2 bổ sung1 xóa
  1. 2 1
      Shell/main.cpp

+ 2 - 1
Shell/main.cpp

@@ -1044,12 +1044,13 @@ static ExitCodeOrContinuationRequest run_command(const StringView& cmd)
                         } else
                         } else
                             fprintf(stderr, "%s: Command not found.\n", argv[0]);
                             fprintf(stderr, "%s: Command not found.\n", argv[0]);
                     } else {
                     } else {
+                        int saved_errno = errno;
                         struct stat st;
                         struct stat st;
                         if (stat(argv[0], &st) == 0 && S_ISDIR(st.st_mode)) {
                         if (stat(argv[0], &st) == 0 && S_ISDIR(st.st_mode)) {
                             fprintf(stderr, "Shell: %s: Is a directory\n", argv[0]);
                             fprintf(stderr, "Shell: %s: Is a directory\n", argv[0]);
                             _exit(126);
                             _exit(126);
                         }
                         }
-                        fprintf(stderr, "execvp(%s): %s\n", argv[0], strerror(errno));
+                        fprintf(stderr, "execvp(%s): %s\n", argv[0], strerror(saved_errno));
                     }
                     }
                     _exit(126);
                     _exit(126);
                 }
                 }