From 41a4f5309ef298da764bf1dca1254e734a4417f0 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Fri, 13 Mar 2015 15:37:30 +0100 Subject: Basis for a shell. --- src/sysbin/login/main.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'src/sysbin/login') diff --git a/src/sysbin/login/main.c b/src/sysbin/login/main.c index 5d8840b..359d677 100644 --- a/src/sysbin/login/main.c +++ b/src/sysbin/login/main.c @@ -8,6 +8,9 @@ int main(int argc, char **argv) { dbg_print("[login] Starting up.\n"); + // communication channel between terminal && shell + fd_pair_t tc = make_channel(false); + // just launch a terminal pid_t term_pid = new_proc(); if (term_pid == 0) { @@ -16,17 +19,32 @@ int main(int argc, char **argv) { bool ok; - ok = bind_fs(term_pid, "root", "root") - && bind_fs(term_pid, "sys", "sys") + ok = bind_fs(term_pid, "sys", "sys") && bind_fs(term_pid, "config", "config") - && bind_fd(term_pid, 1, 1); + && bind_fd(term_pid, 1, 1) + && bind_fd(term_pid, 2, tc.a); if (!ok) PANIC("[login] Could not bind to terminal process."); ok = proc_exec(term_pid, "sys:/bin/terminal.bin"); if (!ok) PANIC("[login] Could not run terminal.bin"); + // and launch the shell + pid_t shell_pid = new_proc(); + if (shell_pid == 0) { + PANIC("[login] Could not launch shell"); + } + + ok = bind_fs(shell_pid, "root", "root") + && bind_fs(shell_pid, "sys", "sys") + && bind_fs(shell_pid, "config", "config") + && bind_fd(shell_pid, 1, tc.b); + if (!ok) PANIC("[login] Could not bind to shell process."); + + ok = proc_exec(shell_pid, "sys:/bin/shell.bin"); + if (!ok) PANIC("[login] Could not run shell.bin"); + proc_status_t s; - proc_wait(term_pid, true, &s); + proc_wait(0, true, &s); return 0; } -- cgit v1.2.3