diff --git a/apps/sh.cpp b/apps/sh.cpp index eb1ade6a..c929d2f5 100644 --- a/apps/sh.cpp +++ b/apps/sh.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -113,12 +114,7 @@ Result luna_main(int argc, char** argv) continue; } - pid_t child = fork(); - if (child < 0) - { - perror("fork"); - return 1; - } + pid_t child = TRY(os::Process::fork()); if (child == 0) { execute_command(cmd.view()); } diff --git a/libos/CMakeLists.txt b/libos/CMakeLists.txt index 5bff51fe..91127a5e 100644 --- a/libos/CMakeLists.txt +++ b/libos/CMakeLists.txt @@ -7,6 +7,7 @@ set(SOURCES src/ArgumentParser.cpp src/File.cpp src/FileSystem.cpp + src/Process.cpp src/Main.cpp ) diff --git a/libos/include/os/Process.h b/libos/include/os/Process.h new file mode 100644 index 00000000..c80c3465 --- /dev/null +++ b/libos/include/os/Process.h @@ -0,0 +1,12 @@ +#pragma once +#include +#include + +namespace os +{ + class Process + { + public: + static Result fork(); + }; +} diff --git a/libos/src/Process.cpp b/libos/src/Process.cpp new file mode 100644 index 00000000..c8024cdc --- /dev/null +++ b/libos/src/Process.cpp @@ -0,0 +1,12 @@ +#include +#include +#include + +namespace os +{ + Result Process::fork() + { + long rc = syscall(SYS_fork); + return Result::from_syscall(rc); + } +}