diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/eval.cc | 4 | ||||
| -rw-r--r-- | src/handler.cc | 19 | ||||
| -rw-r--r-- | src/util/io.cc | 33 |
3 files changed, 42 insertions, 14 deletions
diff --git a/src/eval.cc b/src/eval.cc index c4862d2..3b3a3ba 100644 --- a/src/eval.cc +++ b/src/eval.cc @@ -70,8 +70,8 @@ void eval(char *cmdline) execve(cmd_c, argv, environ); - safe_print(cmdline, true); - safe_print(": Command not found\n"); + wrap_eliminator(cmdline); + cout << cmdline << ": Command not found" << endl; exit(-1); // if no command is found } diff --git a/src/handler.cc b/src/handler.cc index 2e966f6..77512ec 100644 --- a/src/handler.cc +++ b/src/handler.cc @@ -72,11 +72,7 @@ void sigchld_handler([[maybe_unused]] int sig) if (WIFSIGNALED(status) || WIFSTOPPED(status)) { int jid = pid2jid(pid); - safe_print("Job ["); - safe_print(jid); - safe_print("] ("); - safe_print(pid); - safe_print(") "); + safe_output("Job [", jid, "] (", pid, ") "); if (!WIFSTOPPED(status) && WTERMSIG(status) == SIGINT) safe_print("terminated"); else if (WIFSTOPPED(status)) @@ -93,17 +89,17 @@ void sigchld_handler([[maybe_unused]] int sig) if (WIFSTOPPED(status)) { - safe_debug("suspended pid: "); - safe_debug(pid); - safe_debug("\n"); + // safe_debug("suspended pid: "); + // safe_debug(pid); + // safe_debug("\n"); + safe_output("Process suspended PID: ", pid, "\n"); sigset_t prev_inner; block_all(&prev_inner); job_suspend(pid); sigprocmask(SIG_SETMASK, &prev_inner, nullptr); } else { - safe_debug("terminated pid: "); - safe_debug(pid); + safe_output("Process terminated PID: ", pid, "\n"); sigset_t prev_inner; block_all(&prev_inner); deletejob(pid); @@ -182,7 +178,8 @@ int block_handler(sigset_t *prev) void sigquit_handler([[maybe_unused]] int sig) { - printf("Terminating after receipt of SIGQUIT signal\n"); + //printf("Terminating after receipt of SIGQUIT signal\n"); + safe_output("Terminating after receipt of SIGQUIT signal\n"); exit(1); } diff --git a/src/util/io.cc b/src/util/io.cc index 1fe37e5..09479e6 100644 --- a/src/util/io.cc +++ b/src/util/io.cc @@ -22,7 +22,7 @@ void safe_print(const char *s, bool ignore_wrap) void safe_print(int x) { int errno_old = errno; - char msg[LENGTH]; + char msg[NUMBER_LENGTH]; itoa(x, msg, DECIMAL); safe_print(msg); errno = errno_old; @@ -110,6 +110,37 @@ char *itoa(int num, char* str, int base) return str; } +void wrap_eliminator(char *s, char replacement) +{ + if (replacement == '\0') + { + char *r = s; + char *w = s; + while (*r) { + if (*r != '\n') + *w++ = *r; + r++; + } + *w = '\0'; + return; + } + size_t len = strlen(s); + for (size_t i = 0; i < len; i++) + if (s[i] == '\n') + s[i] = replacement; +} + +void write_helper(const char *s) +{ + int errno_old = errno; + + size_t len = strlen(s); + for (size_t i = 0; i < len; i++) + write(STDIN_FILENO, &s[i], 1); + + errno = errno_old; +} + /* * usage - print a help message */ |
