X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/bdc143a7aa3f51a46eceec62b0b364599533fa21..270869139db617e29a35bb9ded41087bb702f9ac:/lunaix-os/usr/sh/sh.c diff --git a/lunaix-os/usr/sh/sh.c b/lunaix-os/usr/sh/sh.c index c2c8347..33f0b03 100644 --- a/lunaix-os/usr/sh/sh.c +++ b/lunaix-os/usr/sh/sh.c @@ -113,6 +113,7 @@ sigint_handle(int signum) void sh_exec(const char** argv) { + static int prev_exit; const char* envp[] = { 0 }; char* name = argv[0]; if (!strcmp(name, "cd")) { @@ -121,15 +122,27 @@ sh_exec(const char** argv) return; } + if (!strcmp(name, "?")) { + printf("%d\n", prev_exit); + return; + } + + char buffer[1024]; + strcpy(buffer, "/usr/bin/"); + strcpy(&buffer[9], name); + pid_t p; + int res; if (!(p = fork())) { - if (execve(name, argv, envp)) { + if (execve(buffer, argv, envp)) { sh_printerr(); } _exit(1); } setpgid(p, getpgid()); - waitpid(p, NULL, 0); + waitpid(p, &res, 0); + + prev_exit = WEXITSTATUS(res); } static char*