mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 23:18:21 +00:00
init: run the /etc/rc script on startup
This commit is contained in:
@@ -0,0 +1 @@
|
|||||||
|
mkdir /tmp
|
||||||
+29
-4
@@ -134,23 +134,48 @@ int main(int argc, char* argv[]){
|
|||||||
setenv("HOME", pw->pw_dir, 1);
|
setenv("HOME", pw->pw_dir, 1);
|
||||||
chdir(pw->pw_dir);
|
chdir(pw->pw_dir);
|
||||||
setenv("PATH", "/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin", 1);
|
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
|
// execute shell
|
||||||
|
|
||||||
pid_t shellpid = fork();
|
pid_t shellpid = fork();
|
||||||
|
|
||||||
if(shellpid == -1){
|
if(shellpid == -1){
|
||||||
printf("init: fork failed: %s\n", strerror(errno));
|
perror("init: fork failed");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(shellpid == 0){
|
if(shellpid == 0){
|
||||||
execv(name, args);
|
execv(name, args);
|
||||||
printf("init: exec failed: %s\n", strerror(errno));
|
perror("init: execv failed");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int status;
|
|
||||||
|
|
||||||
for(;;) waitpid(-1, &status, 0);
|
for(;;) waitpid(-1, &status, 0);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user