From 41be2e8943d8737c0074c266aa9c463ab7faff05 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 17 Sep 1996 21:31:30 +0000 Subject: added routine _POSIX_Timespec_subtract --- cpukit/posix/src/time.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'cpukit/posix') 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 @@ -14,6 +14,37 @@ #include #include +/*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 -- cgit v1.2.3