Second Extended Filesystem (ext2) and other improvements (#33)
[lunaix-os.git] / lunaix-os / usr / sh / sh.c
index c2c8347f3f7d6969fd03f838b7b5607dadbe0e7e..33f0b030b1372b860afff9b8cda068d8ef59b5fe 100644 (file)
@@ -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*