- if (INTEGERP (seconds))
- secs = XINT (seconds);
- else if (FLOATP (seconds))
- {
- double timeout = XFLOAT_DATA (seconds);
- secs = (int) timeout;
- usecs = (int) ((timeout - (double) secs) * 1000000);
- }
- else
- wrong_type_argument (Qnumberp, seconds);
-
- if (secs < 0 || (secs == 0 && usecs == 0))
- secs = -1, usecs = 0;
+ double duration = extract_float (seconds);
+ if (0 < duration)
+ duration_to_sec_usec (duration, &secs, &usecs);