{
error_t err;
mach_port_t hostpriv;
- struct timeval dummy;
+ time_value_t rpc_delta, rpc_olddelta;
err = __get_privileged_ports (&hostpriv, NULL);
if (err)
return __hurd_fail (EPERM);
- if (olddelta == NULL)
- olddelta = &dummy;
-
if (delta != NULL)
{
if (delta->tv_usec >= TIME_MICROS_MAX ||
delta->tv_usec <= -TIME_MICROS_MAX)
return EINVAL;
+
+ rpc_delta.seconds = delta->tv_sec;
+ rpc_delta.microseconds = delta->tv_usec;
}
+ else
+ return EINVAL;
- err = __host_adjust_time (hostpriv,
- /* `time_value_t' and `struct timeval' are in
- fact identical with the names changed. */
- *(time_value_t *) delta,
- (time_value_t *) olddelta);
+ err = __host_adjust_time (hostpriv, rpc_delta, &rpc_olddelta);
__mach_port_deallocate (__mach_task_self (), hostpriv);
if (err)
return __hurd_fail (err);
+
+ if (olddelta != NULL)
+ {
+ olddelta->tv_sec = rpc_olddelta.seconds;
+ olddelta->tv_usec = rpc_olddelta.microseconds;
+ }
+
return 0;
}