#define NULL _PDCLIB_NULL
#endif
+/* These are defined to be "real types capable of representing types", with
+ "range and precision of times representable in [them being] implementation-
+ defined".
+ As part of struct timespec (see below), time_t is further defined as "a
+ linear count of seconds", with potentially different semantics from a
+ "normal" time_t.
+ For sake of simplicity, we used just that (common) definition of "seconds
+ since epoch" as integer.
+*/
typedef _PDCLIB_time_t time_t;
typedef _PDCLIB_clock_t clock_t;
-/* time( time_t * )
+/* clock( void )
This file is part of the Public Domain C Library (PDCLib).
Permission is granted to use, modify, and / or redistribute at will.
#ifndef REGTEST
-time_t time( time_t * timer )
+#include <sys/times.h>
+
+clock_t clock( void )
{
+ struct tms buf;
+ if ( times( &buf ) != (clock_t)-1 )
+ {
+ return buf.tms_utime + buf.tms_stime;
+ }
return -1;
}
--- /dev/null
+/* time( time_t * )
+
+ This file is part of the Public Domain C Library (PDCLib).
+ Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#include <time.h>
+
+#ifndef REGTEST
+
+#include <sys/time.h>
+
+/* See comments in time.h on the semantics of time_t. */
+
+time_t time( time_t * timer )
+{
+ struct timeval tv;
+ if ( gettimeofday( &tv, NULL ) == 0 )
+ {
+ if ( timer != NULL )
+ {
+ *timer = tv.tv_sec;
+ }
+ return tv.tv_sec;
+ }
+ return -1;
+}
+
+#endif
+
+#ifdef TEST
+
+#include "_PDCLIB_test.h"
+
+int main( void )
+{
+ TESTCASE( NO_TESTDRIVER );
+ return TEST_RESULTS;
+}
+
+#endif
--- /dev/null
+/* timespec_get( struct timespec *, int )
+
+ This file is part of the Public Domain C Library (PDCLib).
+ Permission is granted to use, modify, and / or redistribute at will.
+*/
+
+#include <time.h>
+
+#ifndef REGTEST
+
+#include <sys/time.h>
+
+int timespec_get( struct timespec * ts, int base )
+{
+ if ( base == TIME_UTC )
+ {
+ /* We can make do with a really thin wrapper here. */
+ struct timeval tv;
+ if ( gettimeofday( &tv, NULL ) == 0 )
+ {
+ ts->tv_sec = tv.tv_sec;
+ ts->tv_nsec = tv.tv_usec * 1000;
+ return base;
+ }
+ }
+ /* Not supporting any other time base than TIME_UTC for now. */
+ return 0;
+}
+
+#endif
+
+#ifdef TEST
+
+#include "_PDCLIB_test.h"
+
+int main( void )
+{
+ TESTCASE( NO_TESTDRIVER );
+ return TEST_RESULTS;
+}
+
+#endif