aboutsummaryrefslogtreecommitdiffstats
path: root/timespec2timeval.c
blob: c4069ff65dd07c455ef2853b0089a9daa20f31be (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/* See LICENSE file for copyright and license details. */
#include "libsimple.h"


int
libsimple_timespec2timeval(struct timeval *restrict tv, const struct timespec *restrict ts)
{
        tv->tv_sec = ts->tv_sec;
        tv->tv_usec = ts->tv_nsec / 1000L;
        if ((ts->tv_nsec % 1000L) >= 500L) {
                if (++(tv->tv_usec) == 1000000L) {
                        tv->tv_usec = 0;
                        if (tv->tv_sec == TIME_MAX) {
                                tv->tv_usec = 999999L;
                                errno = EOVERFLOW;
                                return -1;
                        } else {
                                tv->tv_sec += 1;
                        }
                }
        }
        return 0;
}