diff --git a/Userland/Libraries/LibCore/System.cpp b/Userland/Libraries/LibCore/System.cpp index f84495a853..c86c22f083 100644 --- a/Userland/Libraries/LibCore/System.cpp +++ b/Userland/Libraries/LibCore/System.cpp @@ -465,4 +465,19 @@ ErrorOr symlink(StringView target, StringView link_path) #endif } +ErrorOr mkdir(StringView path, mode_t mode) +{ + if (path.is_null()) + return Error::from_errno(EFAULT); +#ifdef __serenity__ + int rc = syscall(SC_mkdir, path.characters_without_null_termination(), path.length(), mode); + HANDLE_SYSCALL_RETURN_VALUE("mkdir"sv, rc, {}); +#else + String path_string = path; + if (::mkdir(path_string.characters(), mode) < 0) + return Error::from_syscall("mkdir"sv, -errno); + return {}; +#endif +} + } diff --git a/Userland/Libraries/LibCore/System.h b/Userland/Libraries/LibCore/System.h index c5bfcb28b8..7032b5553e 100644 --- a/Userland/Libraries/LibCore/System.h +++ b/Userland/Libraries/LibCore/System.h @@ -63,5 +63,6 @@ ErrorOr setgid(gid_t); ErrorOr setegid(gid_t); ErrorOr isatty(int fd); ErrorOr symlink(StringView target, StringView link_path); +ErrorOr mkdir(StringView path, mode_t); }