#include <sched.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <stdio.h>
void cpu_debug(void);
int arch_init(void*);
{
pid_t pid;
int err;
+ int i;
/*
* Instead of something like /sbin/init, this process will behave more
* spawn the daemons necessary for basic system operation, and restart
* them in case they should die.
*/
-#if 0
- pid = fork();
- if(!pid) {
- /* this is the child */
- err = execfve(vga_main, NULL, NULL);
+ for(i = 0; i < initfs.ifs_num_entries; i++) {
+ char buffer[128];
+ int len;
- if(err < 0) {
- for(;;);
- }
- } else if(pid < 0) {
- /* FIXME: Handle error */
- }
-#endif
- pid = fork();
+ len = snprintf(buffer, sizeof(buffer), "Executing %s\n",
+ initfs.ifs_entries[i].ife_name);
+
+ debug(buffer, len);
+
+ pid = fork();
+
+ len = snprintf(buffer, sizeof(buffer), "pid = %08u\n", pid);
+ debug(buffer, len);
+
+ if(!pid) {
+ char argv1[16];
+ char argv0[16];
+ char *argv[3];
+ char env1[16];
+ char env0[16];
+ char *envp[3];
- if(!pid) {
- err = execfve(kbd_main, NULL, NULL);
+ snprintf(argv0, sizeof(argv0), "%s", initfs.ifs_entries[i].ife_name);
+ snprintf(argv1, sizeof(argv1), "--verbose");
- if(err < 0) {
- for(;;);
+ argv[0] = argv0;
+ argv[1] = argv1;
+ argv[2] = NULL;
+
+ snprintf(env0, sizeof(env0), "PWD=/");
+ snprintf(env1, sizeof(env1), "USER=root");
+
+ envp[0] = env0;
+ envp[1] = env1;
+ envp[2] = NULL;
+
+ err = execeve(initfs.ifs_entries[i].ife_base,
+ initfs.ifs_entries[i].ife_limit,
+ argv, envp);
+
+ if(err < 0) {
+ debug("execeve failed\n", 15);
+ }
}
- } else if(pid < 0) {
- /* FIXME: Handle error */
}
- while(1) {
- wait(NULL);
- }
+ while(1);
return;
}