From 884c31df411755d4ee86683f184b7bf3b0ce2ec0 Mon Sep 17 00:00:00 2001 From: Cedric BAIL Date: Mon, 18 Feb 2013 16:39:49 +0900 Subject: [PATCH] eina: fix siginfo detection. Signal are not a portable way to detect memory mapped file corruption. So let's disable it for system without signal and later find a way to detect it on other system. --- configure.ac | 8 ++++++++ src/lib/eina/eina_mmap.c | 17 ++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 2ab49caf8c..bef64aed84 100644 --- a/configure.ac +++ b/configure.ac @@ -327,6 +327,14 @@ AC_SUBST([EINA_SIZEOF_WCHAR_T]) AC_CHECK_SIZEOF(int, 4) AC_CHECK_SIZEOF(long, 4) +AC_CHECK_TYPES([siginfo_t], [], [], + [[ +#include +#if HAVE_SIGINFO_H +# include +#endif + ]]) + #### Checks for structures diff --git a/src/lib/eina/eina_mmap.c b/src/lib/eina/eina_mmap.c index 9da97fda0e..bed7e07d08 100644 --- a/src/lib/eina/eina_mmap.c +++ b/src/lib/eina/eina_mmap.c @@ -20,6 +20,8 @@ # include "config.h" #endif +#ifdef HAVE_SIGINFO_T + #ifdef STDC_HEADERS # include # include @@ -41,6 +43,12 @@ #include #include +#if HAVE_SIGINFO_H +# include +#endif + +#endif + #include "eina_config.h" #include "eina_private.h" #include "eina_log.h" @@ -51,6 +59,7 @@ *============================================================================*/ static Eina_Bool mmap_safe = EINA_FALSE; +#ifdef HAVE_SIGINFO_T static int _eina_mmap_log_dom = -1; static int _eina_mmap_zero_fd = -1; @@ -106,6 +115,7 @@ _eina_mmap_safe_sigbus(int sig EINA_UNUSED, /* restore previous errno */ errno = perrno; } +#endif /*============================================================================* * API * @@ -114,6 +124,10 @@ _eina_mmap_safe_sigbus(int sig EINA_UNUSED, EAPI Eina_Bool eina_mmap_safety_enabled_set(Eina_Bool enabled) { +#ifndef HAVE_SIGINFO_T + (void) enabled; + return EINA_FALSE; +#else if (_eina_mmap_log_dom < 0) { _eina_mmap_log_dom = eina_log_domain_register("eina_mmap", @@ -155,7 +169,7 @@ eina_mmap_safety_enabled_set(Eina_Bool enabled) flags |= FD_CLOEXEC; fcntl(_eina_mmap_zero_fd, F_SETFD, flags); #endif - + } /* set up signal handler for SIGBUS */ sa.sa_sigaction = _eina_mmap_safe_sigbus; @@ -180,6 +194,7 @@ eina_mmap_safety_enabled_set(Eina_Bool enabled) done: mmap_safe = enabled; return mmap_safe; +#endif } EAPI Eina_Bool