aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Erik de Castro Lopo <erikd@mega-nerd.com>2014-12-19 14:47:43 +1100
committerGravatar Herbert Valerio Riedel <hvr@gnu.org>2014-12-19 09:43:00 +0100
commit3c4ced48d5d82bc3042fdd058e684e87e7036166 (patch)
tree0bf272be6e33d38a3fc9381116430ffe2b2cefd7
parent757bf44bb4895fc561a2e5dd2f602168478741ec (diff)
Fix SIGINFO and SIGWINCH.
It seems these two signals have not been working since at least 2009. Detection of these signals seems to have never been added to the configure.ac script and the code guarded by #ifdef then bit-rotted (the idiom used to handle these signals seems to have been abandoned for something simpler/better in 2009). This fix simply handles these signals the same way the other signals are handled in System/Posix/Signals.hsc. Closes #30 and #31
-rw-r--r--System/Posix/Signals/Exts.hsc51
-rw-r--r--cbits/HsUnix.c9
-rw-r--r--changelog.md2
-rw-r--r--configure.ac2
-rw-r--r--include/HsUnix.h7
5 files changed, 22 insertions, 49 deletions
diff --git a/System/Posix/Signals/Exts.hsc b/System/Posix/Signals/Exts.hsc
index a889340..95796a2 100644
--- a/System/Posix/Signals/Exts.hsc
+++ b/System/Posix/Signals/Exts.hsc
@@ -1,17 +1,14 @@
+{-# LANGUAGE CPP #-}
#ifdef __GLASGOW_HASKELL__
-#if defined(SIGINFO) || defined(SIGWINCH)
-{-# LANGUAGE Trustworthy #-}
-#else
{-# LANGUAGE Safe #-}
#endif
-#endif
-----------------------------------------------------------------------------
-- |
-- Module : System.Posix.Signals.Exts
-- Copyright : (c) The University of Glasgow 2002
-- License : BSD-style (see the file libraries/base/LICENSE)
---
+--
-- Maintainer : libraries@haskell.org
-- Stability : provisional
-- Portability : non-portable (requires POSIX, includes Linuxisms/BSDisms)
@@ -20,45 +17,33 @@
--
-----------------------------------------------------------------------------
-#include "HsUnix.h"
-
-module System.Posix.Signals.Exts (
- module System.Posix.Signals
+#include "HsUnixConfig.h"
+##include "HsUnixConfig.h"
-#ifdef SIGINFO
- , infoEvent, sigINFO
-#endif
-#ifdef SIGWINCH
- , windowChange, sigWINCH
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
#endif
+module System.Posix.Signals.Exts (
+ module System.Posix.Signals
+ , sigINFO
+ , sigWINCH
+ , infoEvent
+ , windowChange
) where
import Foreign.C
import System.Posix.Signals
-#ifdef __HUGS__
-# ifdef SIGINFO
-sigINFO = (#const SIGINFO) :: CInt
-# endif
-# ifdef SIGWINCH
-sigWINCH = (#const SIGWINCH) :: CInt
-# endif
-#else /* !HUGS */
-# ifdef SIGINFO
-foreign import ccall unsafe "__hsunix_SIGINFO" sigINFO :: CInt
-# endif
-# ifdef SIGWINCH
-foreign import ccall unsafe "__hsunix_SIGWINCH" sigWINCH :: CInt
-# endif
-#endif /* !HUGS */
+sigINFO :: CInt
+sigINFO = CONST_SIGINFO
+
+sigWINCH :: CInt
+sigWINCH = CONST_SIGWINCH
+
-#ifdef SIGINFO
infoEvent :: Signal
infoEvent = sigINFO
-#endif
-#ifdef SIGWINCH
windowChange :: Signal
windowChange = sigWINCH
-#endif
diff --git a/cbits/HsUnix.c b/cbits/HsUnix.c
index db97de2..60f19bc 100644
--- a/cbits/HsUnix.c
+++ b/cbits/HsUnix.c
@@ -21,14 +21,7 @@ void *__hsunix_rtldNext (void) {return RTLD_NEXT;}
#endif
#ifdef HAVE_RTLDDEFAULT
-void *__hsunix_rtldDefault (void) {return RTLD_DEFAULT;}
-#endif
-
-#ifdef SIGINFO
-int __hsunix_SIGINFO(void) { return SIGINFO; }
-#endif
-#ifdef SIGWINCH
-int __hsunix_SIGWINCH(void) { return SIGWINCH; }
+void *__hsunix_rtldDefault (void) {return RTLD_DEFAULT;}
#endif
// lstat is a macro on some platforms, so we need a wrapper:
diff --git a/changelog.md b/changelog.md
index db6bb48..5d682bc 100644
--- a/changelog.md
+++ b/changelog.md
@@ -25,6 +25,8 @@
- `fileAdvise` (aka `posix_fadvise(2)`), and
- `fileAllocate` (aka `posix_fallocate(2)`)
+ * Fix SIGINFO and SIGWINCH definitions
+
## 2.7.0.1 *Mar 2014*
* Bundled with GHC 7.8.1
diff --git a/configure.ac b/configure.ac
index 1c82c36..f7b1afb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -76,7 +76,7 @@ AC_CHECK_FUNCS([posix_fadvise posix_fallocate])
AC_SEARCH_LIBS(shm_open, rt, [AC_CHECK_FUNCS([shm_open shm_unlink])])
AS_IF([test "x$ac_cv_search_shm_open" = x-lrt], [EXTRA_LIBS="$EXTRA_LIBS rt"])
-FP_CHECK_CONSTS([SIGABRT SIGALRM SIGBUS SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIGPOLL SIGPROF SIGSYS SIGTRAP SIGURG SIGVTALRM SIGXCPU SIGXFSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK], [
+FP_CHECK_CONSTS([SIGABRT SIGALRM SIGBUS SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIGPOLL SIGPROF SIGSYS SIGTRAP SIGURG SIGVTALRM SIGXCPU SIGXFSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SIGINFO SIGWINCH], [
#if HAVE_SIGNAL_H
#include <signal.h>
#endif])
diff --git a/include/HsUnix.h b/include/HsUnix.h
index a23f0f9..ba3e053 100644
--- a/include/HsUnix.h
+++ b/include/HsUnix.h
@@ -119,13 +119,6 @@ fall back to O_FSYNC, which should be the same */
#define O_SYNC O_FSYNC
#endif
-#ifdef SIGINFO
-int __hsunix_SIGINFO();
-#endif
-#ifdef SIGWINCH
-int __hsunix_SIGWINCH();
-#endif
-
// lstat is a macro on some platforms, so we need a wrapper:
int __hsunix_lstat(const char *path, struct stat *buf);