mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 05:38:11 +00:00
Kernel/LibC: Implement posix syscall clock_getres()
This commit is contained in:
parent
a031b7a174
commit
ca74443012
4 changed files with 27 additions and 3 deletions
|
@ -52,6 +52,7 @@ enum class NeedsBigProcessLock {
|
||||||
S(chown, NeedsBigProcessLock::No) \
|
S(chown, NeedsBigProcessLock::No) \
|
||||||
S(clock_gettime, NeedsBigProcessLock::No) \
|
S(clock_gettime, NeedsBigProcessLock::No) \
|
||||||
S(clock_nanosleep, NeedsBigProcessLock::No) \
|
S(clock_nanosleep, NeedsBigProcessLock::No) \
|
||||||
|
S(clock_getres, NeedsBigProcessLock::No) \
|
||||||
S(clock_settime, NeedsBigProcessLock::No) \
|
S(clock_settime, NeedsBigProcessLock::No) \
|
||||||
S(close, NeedsBigProcessLock::No) \
|
S(close, NeedsBigProcessLock::No) \
|
||||||
S(connect, NeedsBigProcessLock::No) \
|
S(connect, NeedsBigProcessLock::No) \
|
||||||
|
@ -259,6 +260,11 @@ struct SC_clock_nanosleep_params {
|
||||||
struct timespec* remaining_sleep;
|
struct timespec* remaining_sleep;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct SC_clock_getres_params {
|
||||||
|
int clock_id;
|
||||||
|
struct timespec* result;
|
||||||
|
};
|
||||||
|
|
||||||
struct SC_accept4_params {
|
struct SC_accept4_params {
|
||||||
sockaddr* addr;
|
sockaddr* addr;
|
||||||
socklen_t* addrlen;
|
socklen_t* addrlen;
|
||||||
|
|
|
@ -339,6 +339,7 @@ public:
|
||||||
ErrorOr<FlatPtr> sys$clock_gettime(clockid_t, Userspace<timespec*>);
|
ErrorOr<FlatPtr> sys$clock_gettime(clockid_t, Userspace<timespec*>);
|
||||||
ErrorOr<FlatPtr> sys$clock_settime(clockid_t, Userspace<timespec const*>);
|
ErrorOr<FlatPtr> sys$clock_settime(clockid_t, Userspace<timespec const*>);
|
||||||
ErrorOr<FlatPtr> sys$clock_nanosleep(Userspace<Syscall::SC_clock_nanosleep_params const*>);
|
ErrorOr<FlatPtr> sys$clock_nanosleep(Userspace<Syscall::SC_clock_nanosleep_params const*>);
|
||||||
|
ErrorOr<FlatPtr> sys$clock_getres(Userspace<Syscall::SC_clock_getres_params const*>);
|
||||||
ErrorOr<FlatPtr> sys$gethostname(Userspace<char*>, size_t);
|
ErrorOr<FlatPtr> sys$gethostname(Userspace<char*>, size_t);
|
||||||
ErrorOr<FlatPtr> sys$sethostname(Userspace<char const*>, size_t);
|
ErrorOr<FlatPtr> sys$sethostname(Userspace<char const*>, size_t);
|
||||||
ErrorOr<FlatPtr> sys$uname(Userspace<utsname*>);
|
ErrorOr<FlatPtr> sys$uname(Userspace<utsname*>);
|
||||||
|
|
|
@ -91,6 +91,23 @@ ErrorOr<FlatPtr> Process::sys$clock_nanosleep(Userspace<Syscall::SC_clock_nanosl
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ErrorOr<FlatPtr> Process::sys$clock_getres(Userspace<Syscall::SC_clock_getres_params const*> user_params)
|
||||||
|
{
|
||||||
|
VERIFY_NO_PROCESS_BIG_LOCK(this);
|
||||||
|
auto params = TRY(copy_typed_from_user(user_params));
|
||||||
|
timespec ts {};
|
||||||
|
switch (params.clock_id) {
|
||||||
|
case CLOCK_REALTIME:
|
||||||
|
ts.tv_sec = 0;
|
||||||
|
ts.tv_nsec = 1000000000 / _SC_CLK_TCK;
|
||||||
|
TRY(copy_to_user(params.result, &ts));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
ErrorOr<FlatPtr> Process::sys$adjtime(Userspace<timeval const*> user_delta, Userspace<timeval*> user_old_delta)
|
ErrorOr<FlatPtr> Process::sys$adjtime(Userspace<timeval const*> user_delta, Userspace<timeval*> user_old_delta)
|
||||||
{
|
{
|
||||||
VERIFY_NO_PROCESS_BIG_LOCK(this);
|
VERIFY_NO_PROCESS_BIG_LOCK(this);
|
||||||
|
|
|
@ -471,10 +471,10 @@ int nanosleep(const struct timespec* requested_sleep, struct timespec* remaining
|
||||||
return clock_nanosleep(CLOCK_REALTIME, 0, requested_sleep, remaining_sleep);
|
return clock_nanosleep(CLOCK_REALTIME, 0, requested_sleep, remaining_sleep);
|
||||||
}
|
}
|
||||||
|
|
||||||
int clock_getres(clockid_t, struct timespec*)
|
int clock_getres(clockid_t clock_id, struct timespec* result)
|
||||||
{
|
{
|
||||||
dbgln("FIXME: Implement clock_getres()");
|
Syscall::SC_clock_getres_params params { clock_id, result };
|
||||||
auto rc = -ENOSYS;
|
int rc = syscall(SC_clock_getres, ¶ms);
|
||||||
__RETURN_WITH_ERRNO(rc, rc, -1);
|
__RETURN_WITH_ERRNO(rc, rc, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue