diff options
Diffstat (limited to 'otherlibs/unix/itimer.c')
-rw-r--r-- | otherlibs/unix/itimer.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/otherlibs/unix/itimer.c b/otherlibs/unix/itimer.c index 000238292..b2242ff89 100644 --- a/otherlibs/unix/itimer.c +++ b/otherlibs/unix/itimer.c @@ -40,6 +40,15 @@ static value unix_convert_itimer(tp) return res; } +static value unix_convert_itimer_native(tp) + struct itimerval * tp; +{ + value res = alloc(Double_wosize * 2, Double_array_tag); + Store_double_field(res, 0, Get_timeval(tp->it_interval)); + Store_double_field(res, 1, Get_timeval(tp->it_value)); + return res; +} + static int itimers[3] = { ITIMER_REAL, ITIMER_VIRTUAL, ITIMER_PROF }; value unix_setitimer(which, newval) @@ -53,6 +62,17 @@ value unix_setitimer(which, newval) return unix_convert_itimer(&old); } +value unix_setitimer_native(which, newval) + value which, newval; +{ + struct itimerval new, old; + Set_timeval(new.it_interval, Double_field(newval, 0)); + Set_timeval(new.it_value, Double_field(newval, 1)); + if (setitimer(itimers[Int_val(which)], &new, &old) == -1) + uerror("setitimer", Nothing); + return unix_convert_itimer_native(&old); +} + value unix_getitimer(which) value which; { @@ -62,9 +82,24 @@ value unix_getitimer(which) return unix_convert_itimer(&val); } +value unix_getitimer_native(which) + value which; +{ + struct itimerval val; + if (getitimer(itimers[Int_val(which)], &val) == -1) + uerror("getitimer", Nothing); + return unix_convert_itimer_native(&val); +} + #else -value unix_setitimer() { invalid_argument("setitimer not implemented"); } -value unix_getitimer() { invalid_argument("getitimer not implemented"); } +value unix_setitimer() +{ invalid_argument("setitimer not implemented"); } +value unix_getitimer() +{ invalid_argument("getitimer not implemented"); } +value unix_setitimer_native() +{ invalid_argument("setitimer not implemented"); } +value unix_getitimer_native() +{ invalid_argument("getitimer not implemented"); } #endif |