diff --git a/scsh/bsd/time_dep1.c b/scsh/bsd/time_dep1.c index 77fbbfc..0b52fdb 100644 --- a/scsh/bsd/time_dep1.c +++ b/scsh/bsd/time_dep1.c @@ -16,9 +16,23 @@ s48_value time_plus_ticks() { struct timeval t; struct timezone tz; - + s48_value sch_tv_sec = S48_UNSPECIFIC; + s48_value sch_tv_usec = S48_UNSPECIFIC; + s48_value sch_listval = S48_UNSPECIFIC; + s48_value sch_retval + S48_DECLARE_GC_PROTECT(3); + if( gettimeofday(&t, &tz) ) s48_raise_os_error (errno); - return s48_cons (s48_enter_integer (t.tv_sec), - s48_cons (s48_enter_integer (t.tv_usec), S48_NULL)); + S48_GC_PROTECT_3(sch_tv_sec, sch_tv_usec, sch_listval); + + sch_tv_sec = s48_enter_integer(t.tv_sec); + sch_tv_usec = s48_enter_integer(t.tv_usec); + sch_listval = s48_cons (sch_tv_usec, S48_NULL); + sch_retval = s48_cons (sch_tv_sec, sch_listval); + + S48_GC_UNPROTECT; + + return sch_retval; + }