diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index 23ad53b603..99b5b1cacc 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -592,6 +592,21 @@ ErrorOr mkdir(StringView path, mode_t mode) #endif } +ErrorOr chdir(StringView path) +{ + if (path.is_null()) + return Error::from_errno(EFAULT); +#ifdef __serenity__ + int rc = syscall(SC_chdir, path.characters_without_null_termination(), path.length()); + HANDLE_SYSCALL_RETURN_VALUE("chdir"sv, rc, {}); +#else + String path_string = path; + if (::chdir(path_string.characters()) < 0) + return Error::from_syscall("chdir"sv, -errno); + return {}; +#endif +} + ErrorOr fork() { pid_t pid = ::fork(); diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index 12727b3928..f39f120bbe 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -93,6 +93,7 @@ ErrorOr setpgid(pid_t pid, pid_t pgid); ErrorOr isatty(int fd); ErrorOr symlink(StringView target, StringView link_path); ErrorOr mkdir(StringView path, mode_t); +ErrorOr chdir(StringView path); ErrorOr fork(); ErrorOr mkstemp(Span pattern); ErrorOr fchmod(int fd, mode_t mode);