struct timespec current_time_tspec;
ret = clock_gettime(clockid, ¤t_time_tspec);
+ if (ret) return errno;
+
*current_time = fosa_timespec_to_abs_time(current_time_tspec);
- return ret;
+ return 0;
}
/**
int fosa_thread_get_cputime_clock(fosa_thread_id_t tid,
fosa_clock_id_t *clockid)
{
- if (tid.linux_pid == tid.linux_tid) {
- /* standard UNIX process */
- return clock_getcpuclockid(tid.linux_pid, clockid);
- } else {
- /* POSIX thread */
- return pthread_getcpuclockid(tid.pthread_id, clockid);
- }
+ int ret;
+
+ if (tid.linux_pid == tid.linux_tid) /* standard UNIX process */
+ ret = clock_getcpuclockid(tid.linux_pid, clockid);
+ else /* POSIX thread */
+ ret = pthread_getcpuclockid(tid.pthread_id, clockid);
+
+ return ret ? errno : 0;
}
/*************************
fosa_signal_info_t info,
fosa_timer_id_t *timerid)
{
+ int ret;
struct sigevent event;
event.sigev_notify = SIGEV_SIGNAL;
event.sigev_signo = signal;
event.sigev_value = *((union sigval*) &info);
- return timer_create(clockid, &event, timerid);
+ ret = timer_create(clockid, &event, timerid);
+
+ return ret ? errno : 0;
}
/**
fosa_timer_id_t *timerid,
fosa_thread_id_t receiver)
{
+ int ret;
struct sigevent event;
event.sigev_notify = SIGEV_SIGNAL;
event.sigev_notify = SIGEV_THREAD_ID | SIGEV_SIGNAL;
event._sigev_un._tid = receiver.linux_tid;
- return timer_create(clockid, &event, timerid);
+ ret = timer_create(clockid, &event, timerid);
+
+ return ret ? errno : 0;
}
/**
**/
int fosa_timer_delete(fosa_timer_id_t timerid)
{
- return timer_delete(timerid);
+ int ret;
+
+ ret = timer_delete(timerid);
+
+ return ret ? errno : 0;
}
/**
**/
int fosa_rel_timer_arm(fosa_timer_id_t timerid, const fosa_rel_time_t *value)
{
+ int ret;
struct itimerspec when;
/* non-periodic one shot timer */
when.it_value = fosa_abs_time_to_timespec(*value);
when.it_interval = zero_time;
- return timer_settime(timerid, 0, &when, NULL);
+ ret = timer_settime(timerid, 0, &when, NULL);
+
+ return ret ? errno : 0;
}
**/
int fosa_abs_timer_arm(fosa_timer_id_t timerid, const fosa_abs_time_t *value)
{
+ int ret;
struct itimerspec when;
/* non-periodic one shot timer */
when.it_value = fosa_abs_time_to_timespec(*value);
when.it_interval = zero_time;
- return timer_settime(timerid, TIMER_ABSTIME, &when, NULL);
+ ret = timer_settime(timerid, TIMER_ABSTIME, &when, NULL);
+
+ return ret ? errno : 0;
}
/**
ret = timer_gettime(timerid, &time);
*remaining_time = fosa_timespec_to_rel_time(time.it_value);
- return ret;
+ return ret ? errno : 0;
}
/**
return FOSA_EINVAL;
ret = timer_gettime(timerid, &time);
+ if (ret) return errno;
+
*remaining_time = fosa_timespec_to_rel_time(time.it_value);
- if (ret < 0)
- return ret;
time.it_value = zero_time;
time.it_interval = zero_time;
-
- return timer_settime(timerid, 0, &time, NULL);
+
+ ret = timer_settime(timerid, 0, &time, NULL);
+
+ return ret ? errno : 0;
}