feat: shell and signal demo as loadable user executable
[lunaix-os.git] / lunaix-os / uprog / init.c
index a1972452ebf614e287556a9596d205664813b9b9..a7265c0e350c4c9b54187d5d7a2b94d77c8faf8b 100644 (file)
@@ -1,4 +1,5 @@
 #include <fcntl.h>
+#include <stdio.h>
 #include <sys/lunaix.h>
 #include <unistd.h>
 
@@ -7,17 +8,26 @@ main(int argc, const char** argv)
 {
     int errno = 0;
 
-    if ((errno = open("/dev/tty", 0))) {
+    if ((errno = open("/dev/tty", 0)) < 0) {
         syslog(2, "fail to open tty (%d)\n", errno);
         return 0;
     }
 
-    if ((errno = dup(errno))) {
+    if ((errno = dup(errno)) < 0) {
         syslog(2, "fail to setup tty i/o (%d)\n", errno);
         return 0;
     }
 
-    syslog(0, "user space!\n");
+    printf("(%p) user space!\n", (void*)main);
+
+    pid_t pid;
+    if (!(pid = fork())) {
+        int err = execve("/mnt/lunaix-os/usr/sh", NULL, NULL);
+        printf("fail to execute (%d)\n", err);
+        _exit(err);
+    }
+
+    waitpid(pid, NULL, 0);
 
     return 0;
 }
\ No newline at end of file