diff options
Diffstat (limited to 'cpukit/posix/src/time.c')
-rw-r--r-- | cpukit/posix/src/time.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/cpukit/posix/src/time.c b/cpukit/posix/src/time.c index 125db4d16b..f184f200e8 100644 --- a/cpukit/posix/src/time.c +++ b/cpukit/posix/src/time.c @@ -16,6 +16,37 @@ /*PAGE * + * _POSIX_Timespec_subtract + */ + +void _POSIX_Timespec_subtract( + const struct timespec *the_start, + const struct timespec *end, + struct timespec *result +) +{ + struct timespec start_struct = *the_start; + struct timespec *start = &start_struct; + unsigned int nsecs_per_sec = TOD_NANOSECONDS_PER_SECOND; + + if (end->tv_nsec < start->tv_nsec) { + int seconds = (start->tv_nsec - end->tv_nsec) / nsecs_per_sec + 1; + start->tv_nsec -= nsecs_per_sec * seconds; + start->tv_sec += seconds; + } + + if (end->tv_nsec - start->tv_nsec > nsecs_per_sec) { + int seconds = (start->tv_nsec - end->tv_nsec) / nsecs_per_sec; + start->tv_nsec += nsecs_per_sec * seconds; + start->tv_sec -= seconds; + } + + result->tv_sec = end->tv_sec - start->tv_sec; + result->tv_nsec = end->tv_nsec - start->tv_nsec; +} + +/*PAGE + * * _POSIX_Timespec_to_interval */ |