blob: 5eb9792526aa7f74f15a428ecac6d363f663989f [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <time.h>
#include <errno.h>
#include <trusty_syscalls.h>
int trusty_nanosleep(clockid_t clock_id, uint32_t flags, uint64_t sleep_time) {
return _trusty_nanosleep(clock_id, flags, sleep_time);
}
int trusty_gettime(clockid_t clock_id, int64_t* time) {
return _trusty_gettime(clock_id, 0, time);
}
#define NS_PER_SEC 1000000000
int clock_gettime(clockid_t clock_id, struct timespec* ts) {
if (ts == NULL) {
errno = EFAULT;
return -1;
}
int64_t time;
int rc = trusty_gettime(clock_id, &time);
if (rc) {
/* &time is valid, so clock_id must have been invalid. */
errno = EINVAL;
return -1;
}
ts->tv_sec = (time_t)(time / NS_PER_SEC);
ts->tv_nsec = (long)(time % NS_PER_SEC);
return 0;
}