commit aeaa7220e510c0204425fa15e010c9d666673a6a
parent 5d466fab83d16dcff3dc41e59e34df4a92a74646
Author: evenfri <evenfri@4plt.ch>
Date: Mon, 26 Oct 2026 22:58:48 +0800
PATCH: set defines to upper case. FEAT: while 1 for shell proc
Diffstat:
| M | init.c | | | 51 | ++++++++++++++++++++++++++++----------------------- |
1 file changed, 28 insertions(+), 23 deletions(-)
diff --git a/init.c b/init.c
@@ -1,40 +1,45 @@
#include <libc.h>
-#define msg_clear "\033[2J\033[H"
-
-#define msg_welcome "[init] starting...\n"
-#define msg_proc "[init] mouting /proc...\n"
-#define msg_sys "[init] mouting /sys...\n"
-#define msg_dev "[init] mouting /dev...\n"
+#define MSG_CLEAR "\033[2J\033[H"
+#define MSG_WELCOME "[init] starting...\n"
+#define MSG_PROC "[init] mouting /proc...\n"
+#define MSG_SYS "[init] mouting /sys...\n"
+#define MSG_DEV "[init] mouting /dev...\n"
int main(void) {
- write(stdout, msg_clear, strlen(msg_clear));
+ write(stdout, MSG_CLEAR, strlen(MSG_CLEAR));
- write(stdout, msg_welcome, strlen(msg_welcome));
+ write(stdout, MSG_WELCOME, strlen(MSG_WELCOME));
- write(stdout, msg_proc, strlen(msg_proc));
+ write(stdout, MSG_PROC, strlen(MSG_PROC));
mount("proc", "/proc", "proc", 0, NULL);
- write(stdout, msg_sys, strlen(msg_sys));
+ write(stdout, MSG_SYS, strlen(MSG_SYS));
mount("sysfs", "/sys", "sysfs", 0, NULL);
- write(stdout, msg_dev, strlen(msg_dev));
+ write(stdout, MSG_DEV, strlen(MSG_DEV));
mount("devtmpfs", "/dev", "devtmpfs", 0, NULL);
- int pid = fork();
- if (pid == 0) {
- char *argv[] = { "/bin/sh", NULL };
- char *envp[] = { "PATH=/bin:/sbin", NULL };
-
- execve("/bin/sh", argv, envp);
-
- write(stderr, "[init] Failed to exec /bin/sh!\n", 31);
- exit(1);
- }
-
while (1) {
+ int pid = fork();
+ if (pid < 0) {
+ sleep(1);
+ continue;
+ }
+
+ if (pid == 0) {
+ char *argv[] = { "/bin/sh", NULL };
+ char *envp[] = { "PATH=/bin:/sbin", NULL };
+
+ execve("/bin/sh", argv, envp);
+ const char msg[] = "[init] Failed to exec /bin/sh!\n";
+ write(stderr, msg, sizeof(msg) - 1);
+ _exit(1);
+ }
+
int status;
- waitpid(-1, &status, 0);
+ waitpid(pid, &status, 0);
}
+
return 0;
}