1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-28 13:57:36 +00:00

Kernel+LibC+LibCore: Implement mkdirat(2)

This commit is contained in:
sin-ack 2022-10-01 11:36:24 +00:00 committed by Andrew Kaster
parent 6445a706cf
commit eb5389e933
5 changed files with 12 additions and 5 deletions

View file

@ -23,12 +23,18 @@ mode_t umask(mode_t mask)
// https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdir.html
int mkdir(char const* pathname, mode_t mode)
{
return mkdirat(AT_FDCWD, pathname, mode);
}
// https://pubs.opengroup.org/onlinepubs/9699919799/functions/mkdirat.html
int mkdirat(int dirfd, char const* pathname, mode_t mode)
{
if (!pathname) {
errno = EFAULT;
return -1;
}
int rc = syscall(SC_mkdir, pathname, strlen(pathname), mode);
int rc = syscall(SC_mkdir, dirfd, pathname, strlen(pathname), mode);
__RETURN_WITH_ERRNO(rc, rc, -1);
}

View file

@ -18,6 +18,7 @@ int chmod(char const* pathname, mode_t);
int fchmodat(int fd, char const* path, mode_t mode, int flag);
int fchmod(int fd, mode_t);
int mkdir(char const* pathname, mode_t);
int mkdirat(int dirfd, char const* pathname, mode_t);
int mkfifo(char const* pathname, mode_t);
int fstat(int fd, struct stat* statbuf);
int lstat(char const* path, struct stat* statbuf);

View file

@ -857,7 +857,7 @@ ErrorOr<void> mkdir(StringView path, mode_t mode)
if (path.is_null())
return Error::from_errno(EFAULT);
#ifdef AK_OS_SERENITY
int rc = syscall(SC_mkdir, path.characters_without_null_termination(), path.length(), mode);
int rc = syscall(SC_mkdir, AT_FDCWD, path.characters_without_null_termination(), path.length(), mode);
HANDLE_SYSCALL_RETURN_VALUE("mkdir", rc, {});
#else
DeprecatedString path_string = path;