summaryrefslogtreecommitdiff
path: root/libguile/scmsigs.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/scmsigs.c')
-rw-r--r--libguile/scmsigs.c110
1 files changed, 59 insertions, 51 deletions
diff --git a/libguile/scmsigs.c b/libguile/scmsigs.c
index c0c995e28..b8e190899 100644
--- a/libguile/scmsigs.c
+++ b/libguile/scmsigs.c
@@ -38,6 +38,10 @@
* If you write modifications of your own for GUILE, it is your choice
* whether to permit this exception to apply to your modifications.
* If you do not wish that, delete this exception notice. */
+
+/* Software engineering face-lift by Greg J. Badros, 11-Dec-1999,
+ gjb@cs.washington.edu, http://www.cs.washington.edu/homes/gjb */
+
#include <stdio.h>
@@ -46,6 +50,8 @@
#include "async.h"
#include "eval.h"
+
+#include "scm_validate.h"
#include "scmsigs.h"
#ifdef HAVE_UNISTD_H
@@ -173,9 +179,10 @@ sys_deliver_signals (void)
}
/* user interface for installation of signal handlers. */
-SCM_PROC(s_sigaction, "sigaction", 1, 2, 0, scm_sigaction);
-SCM
-scm_sigaction (SCM signum, SCM handler, SCM flags)
+GUILE_PROC(scm_sigaction, "sigaction", 1, 2, 0,
+ (SCM signum, SCM handler, SCM flags),
+"")
+#define FUNC_NAME s_scm_sigaction
{
int csig;
#ifdef HAVE_SIGACTION
@@ -190,8 +197,7 @@ scm_sigaction (SCM signum, SCM handler, SCM flags)
SCM *scheme_handlers = SCM_VELTS (*signal_handlers);
SCM old_handler;
- SCM_ASSERT (SCM_INUMP (signum), signum, SCM_ARG1, s_sigaction);
- csig = SCM_INUM (signum);
+ SCM_VALIDATE_INT_COPY(1,signum,csig);
#if defined(HAVE_SIGACTION)
#if defined(SA_RESTART) && defined(HAVE_RESTARTABLE_SYSCALLS)
/* don't allow SA_RESTART to be omitted if HAVE_RESTARTABLE_SYSCALLS
@@ -203,7 +209,7 @@ scm_sigaction (SCM signum, SCM handler, SCM flags)
#endif
if (!SCM_UNBNDP (flags))
{
- SCM_ASSERT (SCM_INUMP (flags), flags, SCM_ARG3, s_sigaction);
+ SCM_VALIDATE_INT(3,flags);
action.sa_flags |= SCM_INUM (flags);
}
sigemptyset (&action.sa_mask);
@@ -214,10 +220,8 @@ scm_sigaction (SCM signum, SCM handler, SCM flags)
query_only = 1;
else if (scm_integer_p (handler) == SCM_BOOL_T)
{
- if (scm_num2long (handler, (char *) SCM_ARG2, s_sigaction)
- == (long) SIG_DFL
- || scm_num2long (handler, (char *) SCM_ARG2, s_sigaction)
- == (long) SIG_IGN)
+ if (SCM_NUM2LONG (2,handler) == (long) SIG_DFL
+ || SCM_NUM2LONG (2,handler) == (long) SIG_IGN)
{
#ifdef HAVE_SIGACTION
action.sa_handler = (SIGRETTYPE (*) (int)) SCM_INUM (handler);
@@ -227,7 +231,7 @@ scm_sigaction (SCM signum, SCM handler, SCM flags)
scheme_handlers[csig] = SCM_BOOL_F;
}
else
- scm_out_of_range (s_sigaction, handler);
+ SCM_OUT_OF_RANGE (2, handler);
}
else if (SCM_FALSEP (handler))
{
@@ -254,7 +258,7 @@ scm_sigaction (SCM signum, SCM handler, SCM flags)
}
else
{
- SCM_ASSERT (SCM_NIMP (handler), handler, SCM_ARG2, s_sigaction);
+ SCM_VALIDATE_NIMP(2,handler);
#ifdef HAVE_SIGACTION
action.sa_handler = take_signal;
if (orig_handlers[csig].sa_handler == SIG_ERR)
@@ -270,12 +274,12 @@ scm_sigaction (SCM signum, SCM handler, SCM flags)
if (query_only)
{
if (sigaction (csig, 0, &old_action) == -1)
- scm_syserror (s_sigaction);
+ SCM_SYSERROR;
}
else
{
if (sigaction (csig, &action , &old_action) == -1)
- scm_syserror (s_sigaction);
+ SCM_SYSERROR;
if (save_handler)
orig_handlers[csig] = old_action;
}
@@ -287,14 +291,14 @@ scm_sigaction (SCM signum, SCM handler, SCM flags)
if (query_only)
{
if ((old_chandler = signal (csig, SIG_IGN)) == SIG_ERR)
- scm_syserror (s_sigaction);
+ SCM_SYSERROR;
if (signal (csig, old_chandler) == SIG_ERR)
- scm_syserror (s_sigaction);
+ SCM_SYSERROR;
}
else
{
if ((old_chandler = signal (csig, chandler)) == SIG_ERR)
- scm_syserror (s_sigaction);
+ SCM_SYSERROR;
if (save_handler)
orig_handlers[csig] = old_chandler;
}
@@ -304,10 +308,12 @@ scm_sigaction (SCM signum, SCM handler, SCM flags)
return scm_cons (old_handler, SCM_MAKINUM (0));
#endif
}
+#undef FUNC_NAME
-SCM_PROC (s_restore_signals, "restore-signals", 0, 0, 0, scm_restore_signals);
-SCM
-scm_restore_signals (void)
+GUILE_PROC (scm_restore_signals, "restore-signals", 0, 0, 0,
+ (void),
+"")
+#define FUNC_NAME s_scm_restore_signals
{
int i;
SCM *scheme_handlers = SCM_VELTS (*signal_handlers);
@@ -318,7 +324,7 @@ scm_restore_signals (void)
if (orig_handlers[i].sa_handler != SIG_ERR)
{
if (sigaction (i, &orig_handlers[i], NULL) == -1)
- scm_syserror (s_restore_signals);
+ SCM_SYSERROR;
orig_handlers[i].sa_handler = SIG_ERR;
scheme_handlers[i] = SCM_BOOL_F;
}
@@ -326,7 +332,7 @@ scm_restore_signals (void)
if (orig_handlers[i] != SIG_ERR)
{
if (signal (i, orig_handlers[i]) == SIG_ERR)
- scm_syserror (s_restore_signals);
+ SCM_SYSERROR;
orig_handlers[i] = SIG_ERR;
scheme_handlers[i] = SCM_BOOL_F;
}
@@ -334,38 +340,39 @@ scm_restore_signals (void)
}
return SCM_UNSPECIFIED;
}
+#undef FUNC_NAME
-SCM_PROC(s_alarm, "alarm", 1, 0, 0, scm_alarm);
-
-SCM
-scm_alarm (i)
- SCM i;
+GUILE_PROC(scm_alarm, "alarm", 1, 0, 0,
+ (SCM i),
+"")
+#define FUNC_NAME s_scm_alarm
{
unsigned int j;
- SCM_ASSERT (SCM_INUMP (i) && (SCM_INUM (i) >= 0), i, SCM_ARG1, s_alarm);
+ SCM_VALIDATE_INT(1,i);
j = alarm (SCM_INUM (i));
return SCM_MAKINUM (j);
}
+#undef FUNC_NAME
#ifdef HAVE_PAUSE
-SCM_PROC(s_pause, "pause", 0, 0, 0, scm_pause);
-
-SCM
-scm_pause ()
+GUILE_PROC(scm_pause, "pause", 0, 0, 0,
+ (),
+"")
+#define FUNC_NAME s_scm_pause
{
pause ();
return SCM_UNSPECIFIED;
}
+#undef FUNC_NAME
#endif
-SCM_PROC(s_sleep, "sleep", 1, 0, 0, scm_sleep);
-
-SCM
-scm_sleep (i)
- SCM i;
+GUILE_PROC(scm_sleep, "sleep", 1, 0, 0,
+ (SCM i),
+"")
+#define FUNC_NAME s_scm_sleep
{
unsigned long j;
- SCM_ASSERT (SCM_INUMP (i) && (SCM_INUM (i) >= 0), i, SCM_ARG1, s_sleep);
+ SCM_VALIDATE_INT_MIN(1,i,0);
#ifdef USE_THREADS
j = scm_thread_sleep (SCM_INUM(i));
#else
@@ -373,15 +380,15 @@ scm_sleep (i)
#endif
return scm_ulong2num (j);
}
+#undef FUNC_NAME
#if defined(USE_THREADS) || defined(HAVE_USLEEP)
-SCM_PROC(s_usleep, "usleep", 1, 0, 0, scm_usleep);
-
-SCM
-scm_usleep (i)
- SCM i;
+GUILE_PROC(scm_usleep, "usleep", 1, 0, 0,
+ (SCM i),
+"")
+#define FUNC_NAME s_scm_usleep
{
- SCM_ASSERT (SCM_INUMP (i) && (SCM_INUM (i) >= 0), i, SCM_ARG1, s_usleep);
+ SCM_VALIDATE_INT_MIN(1,i,0);
#ifdef USE_THREADS
/* If we have threads, we use the thread system's sleep function. */
@@ -401,21 +408,22 @@ scm_usleep (i)
#endif
#endif
}
+#undef FUNC_NAME
#endif /* GUILE_ISELECT || HAVE_USLEEP */
-SCM_PROC(s_raise, "raise", 1, 0, 0, scm_raise);
-
-SCM
-scm_raise(sig)
- SCM sig;
+GUILE_PROC(scm_raise, "raise", 1, 0, 0,
+ (SCM sig),
+"")
+#define FUNC_NAME s_scm_raise
{
- SCM_ASSERT(SCM_INUMP(sig), sig, SCM_ARG1, s_raise);
+ SCM_VALIDATE_INT(1,sig);
SCM_DEFER_INTS;
if (kill (getpid (), (int) SCM_INUM (sig)) != 0)
- scm_syserror (s_raise);
+ SCM_SYSERROR;
SCM_ALLOW_INTS;
return SCM_UNSPECIFIED;
}
+#undef FUNC_NAME