static void alarm_intrinsic (void) { #ifndef HAVE_ALARM SLang_set_error (SL_NotImplemented_Error); #else SLang_Ref_Type *ref = NULL; unsigned int secs; Signal_Type *s; if (SLang_Num_Function_Args == 2) { if (-1 == SLang_pop_ref (&ref)) return; } if (-1 == SLang_pop_uint (&secs)) { SLang_free_ref (ref); /* NULL ok */ return; } #ifdef SIGALRM if ((NULL != (s = find_signal (SIGALRM))) && s->forbidden) { SLang_set_error (SL_Forbidden_Error); return; } #endif secs = alarm (secs); if (ref != NULL) (void) SLang_assign_to_ref (ref, SLANG_UINT_TYPE, &secs); #endif }
void sl_ioctl (void) { char *argp = NULL; int fd, retval; unsigned int length, request; SLFile_FD_Type *f; SLang_BString_Type *bstr; if (SLang_Num_Function_Args == 3) { if (SLang_pop_bstring (&bstr) == -1) goto usage_error; if (SLang_pop_uint ((unsigned int *) &request) == -1) goto usage_error; if (SLfile_pop_fd (&f) == -1) goto usage_error; argp = SLbstring_get_pointer (bstr, &length); } else if (SLang_Num_Function_Args == 2) { if (SLang_pop_uint ((unsigned int *) &request) == -1) goto usage_error; if (SLfile_pop_fd (&f) == -1) goto usage_error; } else goto usage_error; if (SLfile_get_fd (f, &fd) == -1) return; if ((retval = ioctl (fd, request, argp)) == -1) { SLang_set_error (SL_OS_Error); (void) SLerrno_set_errno (errno); return; } (void) SLang_push_int (retval); if (argp != NULL) (void) SLang_push_bstring (bstr); return; usage_error : SLang_set_error (SL_Usage_Error); return; }