forked from Bananymous/banan-os
Kernel/LibC: add clock_gettime() for CLOCK_MONOTONIC
This gets the number of milliseconds since boot
This commit is contained in:
@@ -99,6 +99,8 @@ namespace Kernel
|
||||
|
||||
BAN::ErrorOr<long> sys_termid(char*) const;
|
||||
|
||||
BAN::ErrorOr<long> sys_clock_gettime(clockid_t, timespec*) const;
|
||||
|
||||
TTY& tty() { ASSERT(m_tty); return *m_tty; }
|
||||
|
||||
static Process& current() { return Thread::current().process(); }
|
||||
|
||||
@@ -835,6 +835,24 @@ namespace Kernel
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
BAN::ErrorOr<long> Process::sys_clock_gettime(clockid_t clock_id, timespec* tp) const
|
||||
{
|
||||
switch (clock_id)
|
||||
{
|
||||
case CLOCK_MONOTONIC:
|
||||
{
|
||||
uint64_t time_ms = PIT::ms_since_boot();
|
||||
tp->tv_sec = time_ms / 1000;
|
||||
tp->tv_nsec = (time_ms % 1000) * 1000000;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return BAN::Error::from_errno(ENOTSUP);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
BAN::ErrorOr<long> Process::sys_setuid(uid_t uid)
|
||||
{
|
||||
if (uid < 0 || uid >= 1'000'000'000)
|
||||
|
||||
@@ -129,6 +129,9 @@ namespace Kernel
|
||||
case SYS_SET_PWD:
|
||||
ret = Process::current().sys_setpwd((const char*)arg1);
|
||||
break;
|
||||
case SYS_CLOCK_GETTIME:
|
||||
ret = Process::current().sys_clock_gettime((clockid_t)arg1, (timespec*)arg2);
|
||||
break;
|
||||
default:
|
||||
dwarnln("Unknown syscall {}", syscall);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user