From 4622e146ee77148ddddf6ef1ecfcf306b5286262 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Tue, 19 Sep 2000 13:35:40 +0000 Subject: [PATCH] Randall Hopper: Add fpectl functionality patch for FreeBSD. --- Modules/fpectlmodule.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Modules/fpectlmodule.c b/Modules/fpectlmodule.c index 039deb4dc46..59d2b72bb12 100644 --- a/Modules/fpectlmodule.c +++ b/Modules/fpectlmodule.c @@ -68,6 +68,10 @@ extern "C" { #include "Python.h" #include +#if defined(__FreeBSD__) +# include +#endif + #ifndef WANT_SIGFPE_HANDLER /* Define locally if they are not defined in Python. This gives only * the limited control to induce a core dump in case of an exception. @@ -178,6 +182,12 @@ static void fpe_reset(Sigfunc *handler) #endif signal(SIGFPE, handler); +/*-- FreeBSD ----------------------------------------------------------------*/ +#elif defined(__FreeBSD__) + fpresetsticky( fpgetsticky() ); + fpsetmask( FP_X_INV | FP_X_DZ | FP_X_OFL ); + signal( SIGFPE, handler ); + /*-- Linux ----------------------------------------------------------------*/ #elif defined(linux) #ifdef __GLIBC__ @@ -212,7 +222,12 @@ static void fpe_reset(Sigfunc *handler) static PyObject *turnoff_sigfpe(PyObject *self,PyObject *args) { +#ifdef __FreeBSD__ + fpresetsticky( fpgetsticky() ); + fpsetmask( 0 ); +#else fputs("Operation not implemented\n", stderr); +#endif Py_INCREF (Py_None); return Py_None; }