summaryrefslogtreecommitdiffstats
path: root/cpukit/posix
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1996-06-03 17:32:19 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1996-06-03 17:32:19 +0000
commit5b748a177d0a4820f7409d3dcdb29a89c62bf802 (patch)
treec2f8d673c999a90a4ad83062051db7fdc99c609c /cpukit/posix
parentadded test code for nanosleep and return code from sleep. (diff)
downloadrtems-5b748a177d0a4820f7409d3dcdb29a89c62bf802.tar.bz2
renamed _POSIX_Time_Spec_to_interval to _POSIX_Timespec_to_interval
Diffstat (limited to 'cpukit/posix')
-rw-r--r--cpukit/posix/include/rtems/posix/time.h16
-rw-r--r--cpukit/posix/src/cond.c2
-rw-r--r--cpukit/posix/src/intr.c2
-rw-r--r--cpukit/posix/src/mqueue.c4
-rw-r--r--cpukit/posix/src/mutex.c2
-rw-r--r--cpukit/posix/src/semaphore.c2
-rw-r--r--cpukit/posix/src/time.c49
7 files changed, 56 insertions, 21 deletions
diff --git a/cpukit/posix/include/rtems/posix/time.h b/cpukit/posix/include/rtems/posix/time.h
index eb48d2af5d..7b1f731428 100644
--- a/cpukit/posix/include/rtems/posix/time.h
+++ b/cpukit/posix/include/rtems/posix/time.h
@@ -18,8 +18,22 @@
(((1987 - 1970 + 1) * TOD_SECONDS_PER_NON_LEAP_YEAR) + \
(4 * TOD_SECONDS_PER_DAY))
-Watchdog_Interval _POSIX_Time_Spec_to_interval(
+/*
+ * _POSIX_Timespec_to_interval
+ */
+
+Watchdog_Interval _POSIX_Timespec_to_interval(
const struct timespec *time
);
+/*PAGE
+ *
+ * _POSIX_Interval_to_timespec
+ */
+
+void _POSIX_Interval_to_timespec(
+ Watchdog_Interval ticks,
+ struct timespec *time
+);
+
#endif
diff --git a/cpukit/posix/src/cond.c b/cpukit/posix/src/cond.c
index 5dd5493808..68ef709be1 100644
--- a/cpukit/posix/src/cond.c
+++ b/cpukit/posix/src/cond.c
@@ -427,6 +427,6 @@ int pthread_cond_timedwait(
return _POSIX_Condition_variables_Wait_support(
cond,
mutex,
- _POSIX_Time_Spec_to_interval( abstime )
+ _POSIX_Timespec_to_interval( abstime )
);
}
diff --git a/cpukit/posix/src/intr.c b/cpukit/posix/src/intr.c
index d82af2e266..5d41a5fe52 100644
--- a/cpukit/posix/src/intr.c
+++ b/cpukit/posix/src/intr.c
@@ -270,7 +270,7 @@ int intr_timed_wait(
Watchdog_Interval ticks;
POSIX_API_Thread_Support_Control *thread_support;
- ticks = _POSIX_Time_Spec_to_interval( timeout );
+ ticks = _POSIX_Timespec_to_interval( timeout );
thread_support = _Thread_Executing->API_Extensions[ THREAD_API_POSIX ];
diff --git a/cpukit/posix/src/mqueue.c b/cpukit/posix/src/mqueue.c
index 364d30169e..b489643401 100644
--- a/cpukit/posix/src/mqueue.c
+++ b/cpukit/posix/src/mqueue.c
@@ -439,7 +439,7 @@ int mq_timedsend(
msg_ptr,
msg_len,
msg_prio,
- _POSIX_Time_Spec_to_interval( timeout )
+ _POSIX_Timespec_to_interval( timeout )
);
}
@@ -537,7 +537,7 @@ int mq_timedreceive( /* XXX: should this be ssize_t */
msg_ptr,
msg_len,
msg_prio,
- _POSIX_Time_Spec_to_interval( timeout )
+ _POSIX_Timespec_to_interval( timeout )
);
}
diff --git a/cpukit/posix/src/mutex.c b/cpukit/posix/src/mutex.c
index a3b81da52d..463d897ba6 100644
--- a/cpukit/posix/src/mutex.c
+++ b/cpukit/posix/src/mutex.c
@@ -456,7 +456,7 @@ int pthread_mutex_timedlock(
return _POSIX_Mutex_Lock_support(
mutex,
TRUE,
- _POSIX_Time_Spec_to_interval( timeout )
+ _POSIX_Timespec_to_interval( timeout )
);
}
diff --git a/cpukit/posix/src/semaphore.c b/cpukit/posix/src/semaphore.c
index 488e42b8e7..628e094716 100644
--- a/cpukit/posix/src/semaphore.c
+++ b/cpukit/posix/src/semaphore.c
@@ -496,7 +496,7 @@ int sem_timedwait(
return _POSIX_Semaphore_Wait_support(
sem,
TRUE,
- _POSIX_Time_Spec_to_interval( timeout )
+ _POSIX_Timespec_to_interval( timeout )
);
}
diff --git a/cpukit/posix/src/time.c b/cpukit/posix/src/time.c
index 9284bfac44..74e78133f3 100644
--- a/cpukit/posix/src/time.c
+++ b/cpukit/posix/src/time.c
@@ -13,11 +13,12 @@
#include <rtems/posix/time.h>
-/*
- * _POSIX_Time_Spec_to_interval
+/*PAGE
+ *
+ * _POSIX_Timespec_to_interval
*/
-Watchdog_Interval _POSIX_Time_Spec_to_interval(
+Watchdog_Interval _POSIX_Timespec_to_interval(
const struct timespec *time
)
{
@@ -32,7 +33,27 @@ Watchdog_Interval _POSIX_Time_Spec_to_interval(
return ticks;
}
-/*
+/*PAGE
+ *
+ * _POSIX_Interval_to_timespec
+ */
+
+void _POSIX_Interval_to_timespec(
+ Watchdog_Interval ticks,
+ struct timespec *time
+)
+{
+ unsigned32 usecs;
+
+ usecs = ticks * _TOD_Microseconds_per_tick;
+
+ time->tv_sec = usecs / TOD_MICROSECONDS_PER_SECOND;
+ time->tv_nsec = (usecs % TOD_MICROSECONDS_PER_SECOND) *
+ TOD_NANOSECONDS_PER_MICROSECOND;
+}
+
+/*PAGE
+ *
* 4.5.1 Get System Time, P1003.1b-1993, p. 91
*/
@@ -203,12 +224,8 @@ int clock_getres(
case CLOCK_REALTIME:
case CLOCK_PROCESS_CPUTIME:
case CLOCK_THREAD_CPUTIME:
- if ( res ) {
- res->tv_sec = _TOD_Microseconds_per_tick / TOD_MICROSECONDS_PER_SECOND;
- res->tv_nsec =
- (_TOD_Microseconds_per_tick % TOD_MICROSECONDS_PER_SECOND) *
- TOD_NANOSECONDS_PER_MICROSECOND;
- }
+ if ( res )
+ _POSIX_Interval_to_timespec( _TOD_Microseconds_per_tick, res );
break;
default:
@@ -248,9 +265,7 @@ int nanosleep(
/* XXX this is interruptible by a posix signal */
-/* XXX rmtp is the time remaining on the timer -- we do not support this */
-
- ticks = _POSIX_Time_Spec_to_interval( rqtp );
+ ticks = _POSIX_Timespec_to_interval( rqtp );
_Thread_Disable_dispatch();
_Thread_Set_state( _Thread_Executing, STATES_WAITING_FOR_TIME );
@@ -263,8 +278,14 @@ int nanosleep(
_Watchdog_Insert_ticks( &_Thread_Executing->Timer, ticks );
_Thread_Enable_dispatch();
+ /* calculate time remaining */
+
if ( rmtp ) {
- /* XXX calculate time remaining */
+
+ _POSIX_Interval_to_timespec(
+ _Thread_Executing->Timer.stop_time - _Thread_Executing->Timer.start_time,
+ rmtp
+ );
}
return 0; /* XXX should account for signal */