aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-04 18:12:10 +0000
committer_ov4 <ov4@ov4.org>2026-10-04 18:12:10 +0000
commitf60cb6c7b365d1a9f18153b1d2fd0cfe5df754e4 (patch)
tree1a551a814c586be7387d882e50d44e62443a4e7d
parentfda4936771831605db13a3f7b5d85bb49db3998c (diff)
refactor eval_err
-rw-r--r--include/eval.h1
-rw-r--r--src/eval/eval_err.cc41
-rw-r--r--src/eval/eval_exe.cc27
3 files changed, 43 insertions, 26 deletions
diff --git a/include/eval.h b/include/eval.h
index 1db31af..00f466a 100644
--- a/include/eval.h
+++ b/include/eval.h
@@ -9,5 +9,6 @@ int eval_exe(const std::string &s, bool is_async);
int eval_exe(const std::string &s, bool is_async, const T_lexer *lexer_instance, size_t i);
int eval_tree_cd(size_t i, const T_lexer &lexer_instance, bool inside_subshell);
void eval(char *cmdline);
+void eval_err(int err);
}
diff --git a/src/eval/eval_err.cc b/src/eval/eval_err.cc
new file mode 100644
index 0000000..3d90262
--- /dev/null
+++ b/src/eval/eval_err.cc
@@ -0,0 +1,41 @@
+#include "eval.h"
+
+#include <print>
+#include <unistd.h>
+
+using namespace std;
+
+namespace ov4
+{
+
+void eval_err(int err)
+{
+ switch (err)
+ {
+ case ENOTDIR:
+ println(": A component of the path prefix is not a directory.");
+ _exit(errno);
+ break;
+
+ case ENAMETOOLONG:
+ println(": A component of a pathname exceeded 255 characters, or an entire path name exceeded 1023 characters.");
+ _exit(errno);
+ break;
+
+ case ENOENT:
+ println(": The new process file does not exist.");
+ _exit(errno);
+ break;
+
+ case EACCES:
+ println(": The new process file mode denies execute permission.");
+ _exit(errno);
+ break;
+
+ default:
+ println(": Error, code: {}", errno);
+ _exit(errno);
+ }
+}
+
+} \ No newline at end of file
diff --git a/src/eval/eval_exe.cc b/src/eval/eval_exe.cc
index 534b878..4e893f3 100644
--- a/src/eval/eval_exe.cc
+++ b/src/eval/eval_exe.cc
@@ -93,32 +93,7 @@ int eval_exe(const string &s, bool is_async, const T_lexer *lexer_instance, size
// execve: if success, never returns
cout << raw_input << flush;
- switch (errno)
- {
- case ENOTDIR:
- println(": A component of the path prefix is not a directory.");
- _exit(errno);
- break;
-
- case ENAMETOOLONG:
- println(": A component of a pathname exceeded 255 characters, or an entire path name exceeded 1023 characters.");
- _exit(errno);
- break;
-
- case ENOENT:
- println(": The new process file does not exist.");
- _exit(errno);
- break;
-
- case EACCES:
- println(": The new process file mode denies execute permission.");
- _exit(errno);
- break;
-
- default:
- println(": Error, code: {}", errno);
- _exit(errno);
- }
+ eval_err(errno);
}
// parent