From 5659a2a39782e493f58bc6de128b19fdc9d146e1 Mon Sep 17 00:00:00 2001 From: Matheus Date: Fri, 21 Oct 2022 23:08:44 -0300 Subject: [PATCH] init: run the /etc/rc script on startup --- distro-files/etc/rc | 1 + extras/init/main.c | 33 +++++++++++++++++++++++++++++---- 2 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 distro-files/etc/rc diff --git a/distro-files/etc/rc b/distro-files/etc/rc new file mode 100644 index 00000000..eeee083c --- /dev/null +++ b/distro-files/etc/rc @@ -0,0 +1 @@ +mkdir /tmp diff --git a/extras/init/main.c b/extras/init/main.c index 959a3a52..ae4a9a6e 100644 --- a/extras/init/main.c +++ b/extras/init/main.c @@ -134,23 +134,48 @@ int main(int argc, char* argv[]){ setenv("HOME", pw->pw_dir, 1); chdir(pw->pw_dir); setenv("PATH", "/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin", 1); + + printf("init: running /etc/rc\n"); + + // execute init script + + pid_t scriptpid = fork(); + + if(scriptpid == -1){ + perror("init: fork failed"); + exit(1); + } + + if(scriptpid == 0){ + char* args[] = {name, "/etc/rc", 0}; + execv(name, args); + perror("init: execv failed"); + exit(1); + } + + int status = 0; + + waitpid(scriptpid, &status, 0); + + if(status){ + printf("init: running the /etc/rc script failed: status %lu\n", status); + exit(1); + } // execute shell pid_t shellpid = fork(); if(shellpid == -1){ - printf("init: fork failed: %s\n", strerror(errno)); + perror("init: fork failed"); exit(1); } if(shellpid == 0){ execv(name, args); - printf("init: exec failed: %s\n", strerror(errno)); + perror("init: execv failed"); exit(1); } - - int status; for(;;) waitpid(-1, &status, 0);