From 9f95a19a57f0f85212c320327636e93d70bbecc8 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Tue, 2 Nov 1999 18:35:52 +0000 Subject: Split time.c into multiple files. --- c/src/exec/posix/src/posixtimespecsubtract.c | 46 ++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 c/src/exec/posix/src/posixtimespecsubtract.c (limited to 'c/src/exec/posix/src/posixtimespecsubtract.c') diff --git a/c/src/exec/posix/src/posixtimespecsubtract.c b/c/src/exec/posix/src/posixtimespecsubtract.c new file mode 100644 index 0000000000..eb5e21d83a --- /dev/null +++ b/c/src/exec/posix/src/posixtimespecsubtract.c @@ -0,0 +1,46 @@ +/* + * $Id$ + */ + +#include +#include +#include + +#include +#include +#include +#include + +#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; +} -- cgit v1.2.3