1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-14 09:24:57 +00:00

LibC: Implement serenity_open

This syscall is very much similar to open(2), with the difference of
accepting a string and a length, instead of requiring a null-terminated
string. This way, if the string passed is not null-terminated, we can
still perform the syscall.
This commit is contained in:
sin-ack 2021-09-10 22:45:28 +00:00 committed by Ali Mohammad Pur
parent c710d52afa
commit 59eb2d5de4
2 changed files with 27 additions and 0 deletions

View file

@ -4,6 +4,8 @@
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <Kernel/API/POSIX/fcntl.h>
#include <Kernel/API/Syscall.h>
#include <arpa/inet.h>
#include <errno.h>
#include <serenity.h>
@ -148,4 +150,27 @@ int emuctl(uintptr_t command, uintptr_t arg0, uintptr_t arg1)
{
return syscall(SC_emuctl, command, arg0, arg1);
}
int serenity_open(char const* path, size_t path_length, int options, ...)
{
if (!path) {
errno = EFAULT;
return -1;
}
if (path_length > INT32_MAX) {
errno = EINVAL;
return -1;
}
va_list ap;
va_start(ap, options);
auto mode = (mode_t)va_arg(ap, unsigned);
va_end(ap);
Syscall::SC_open_params params { AT_FDCWD, { path, path_length }, options, mode };
int rc = syscall(SC_open, &params);
__RETURN_WITH_ERRNO(rc, rc, -1);
}
}