ecore_signal.c: factoring out the platform test to improve readability.
authorBenjamin Jacobs <benj@spam.thsi.be>
Mon, 6 Jun 2016 18:14:55 +0000 (11:14 -0700)
committerCedric BAIL <cedric@osg.samsung.com>
Mon, 6 Jun 2016 19:05:43 +0000 (12:05 -0700)
Turns out there is no PRI?SIGATOMIC in the C99 standard. Work around
that by deducing the effective integer type by comparing the
SIG_ATOMIC_MAX with integers *MAX.

Signed-off-by: Cedric BAIL <cedric@osg.samsung.com>
src/lib/ecore/ecore_signal.c

index 6cae0e4..795dab4 100644 (file)
@@ -2,6 +2,8 @@
 # include <config.h>
 #endif
 
+#include <inttypes.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -78,6 +80,22 @@ static volatile siginfo_t sigterm_info[MAXSIGQ];
 static volatile siginfo_t sigpwr_info[MAXSIGQ];
 #endif
 
+#if defined(SIG_ATOMIC_MAX)
+# if SIG_ATOMIC_MAX == INT64_MAX
+/* Basically FreeBSD on 64bits */
+#  define PRIdSIGATOMIC PRId64
+# elif SIG_ATOMIC_MAX == UINT64_MAX
+#  define PRIdSIGATOMIC PRIu64
+# elif SIG_ATOMIC_MAX == UINT32_MAX
+#  define PRIdSIGATOMIC PRIu32
+# else
+/* everybody else seems to go for int */
+#  define PRIdSIGATOMIC PRId32
+# endif
+#else
+# define PRIdSIGATOMIC "d"
+#endif
+
 void
 _ecore_signal_shutdown(void)
 {
@@ -168,30 +186,22 @@ _ecore_signal_call(void)
 #endif
    sigprocmask(SIG_BLOCK, &newset, &oldset);
    if (sigchld_count > MAXSIGQ)
-#ifdef __FreeBSD__
-     WRN("%ld SIGCHLD in queue. max queue size %i. losing "
-         "siginfo for extra signals.", sigchld_count, MAXSIGQ);
-#else
-     WRN("%i SIGCHLD in queue. max queue size %i. losing "
+     WRN("%"PRIdSIGATOMIC" SIGCHLD in queue. max queue size %i. losing "
          "siginfo for extra signals.", sigchld_count, MAXSIGQ);
-#endif
    tot = sigchld_count + sigusr1_count + sigusr2_count +
      sighup_count + sigquit_count + sigint_count + sigterm_count
 #ifdef SIGPWR
      + sigpwr_count
 #endif
      ;
-   
+
    if (sig_count != tot)
      {
-#ifdef __FreeBSD__
-        ERR("sig_count (%ld) != actual totals (%i) ", sig_count, tot);
-#else
-        ERR("sig_count (%i) != actual totals (%i) ", sig_count, tot);
-#endif
+        ERR("sig_count (%"PRIdSIGATOMIC") != actual totals (%i) ",
+            sig_count, tot);
         sig_count = tot;
      }
-   
+
    for (n = 0; n < sigchld_count; n++)
      {
         pid_t pid;
@@ -267,13 +277,8 @@ _ecore_signal_call(void)
    sigchld_count = 0;
 
    if (sigusr1_count > MAXSIGQ)
-#ifdef __FreeBSD__
-     WRN("%ld SIGUSR1 in queue. max queue size %i. losing "
-         "siginfo for extra signals.", sigusr1_count, MAXSIGQ);
-#else
-     WRN("%i SIGUSR1 in queue. max queue size %i. losing "
+     WRN("%"PRIdSIGATOMIC" SIGUSR1 in queue. max queue size %i. losing "
          "siginfo for extra signals.", sigusr1_count, MAXSIGQ);
-#endif
    for (n = 0; n < sigusr1_count; n++)
      {
         Ecore_Event_Signal_User *e;
@@ -294,13 +299,8 @@ _ecore_signal_call(void)
    sigusr1_count = 0;
 
    if (sigusr2_count > MAXSIGQ)
-#ifdef __FreeBSD__
-     WRN("%ld SIGUSR2 in queue. max queue size %i. losing "
-         "siginfo for extra signals.", sigusr2_count, MAXSIGQ);
-#else
-     WRN("%i SIGUSR2 in queue. max queue size %i. losing "
+     WRN("%"PRIdSIGATOMIC" SIGUSR2 in queue. max queue size %i. losing "
          "siginfo for extra signals.", sigusr2_count, MAXSIGQ);
-#endif
    for (n = 0; n < sigusr2_count; n++)
      {
         Ecore_Event_Signal_User *e;
@@ -321,13 +321,8 @@ _ecore_signal_call(void)
    sigusr2_count = 0;
 
    if (sighup_count > MAXSIGQ)
-#ifdef __FreeBSD__
-     WRN("%ld SIGHUP in queue. max queue size %i. losing "
-         "siginfo for extra signals.", sighup_count, MAXSIGQ);
-#else
-     WRN("%i SIGHUP in queue. max queue size %i. losing "
+     WRN("%"PRIdSIGATOMIC" SIGHUP in queue. max queue size %i. losing "
          "siginfo for extra signals.", sighup_count, MAXSIGQ);
-#endif
    for (n = 0; n < sighup_count; n++)
      {
         Ecore_Event_Signal_Hup *e;
@@ -346,13 +341,8 @@ _ecore_signal_call(void)
    sighup_count = 0;
 
    if (sigquit_count > MAXSIGQ)
-#ifdef __FreeBSD__
-     WRN("%ld SIGQUIT in queue. max queue size %i. losing "
+     WRN("%"PRIdSIGATOMIC" SIGQUIT in queue. max queue size %i. losing "
          "siginfo for extra signals.", sigquit_count, MAXSIGQ);
-#else
-     WRN("%i SIGQUIT in queue. max queue size %i. losing "
-         "siginfo for extra signals.", sigquit_count, MAXSIGQ);
-#endif
    for (n = 0; n < sigquit_count; n++)
      {
         Ecore_Event_Signal_Exit *e;
@@ -373,13 +363,8 @@ _ecore_signal_call(void)
    sigquit_count = 0;
 
    if (sigint_count > MAXSIGQ)
-#ifdef __FreeBSD__
-     WRN("%ld SIGINT in queue. max queue size %i. losing "
-         "siginfo for extra signals.", sigint_count, MAXSIGQ);
-#else
-     WRN("%i SIGINT in queue. max queue size %i. losing "
+     WRN("%"PRIdSIGATOMIC" SIGINT in queue. max queue size %i. losing "
          "siginfo for extra signals.", sigint_count, MAXSIGQ);
-#endif
    for (n = 0; n < sigint_count; n++)
      {
         Ecore_Event_Signal_Exit *e;
@@ -400,13 +385,8 @@ _ecore_signal_call(void)
    sigint_count = 0;
 
    if (sigterm_count > MAXSIGQ)
-#ifdef __FreeBSD__
-     WRN("%ld SIGTERM in queue. max queue size %i. losing "
-         "siginfo for extra signals.", sigterm_count, MAXSIGQ);
-#else
-     WRN("%i SIGTERM in queue. max queue size %i. losing "
+     WRN("%"PRIdSIGATOMIC" SIGTERM in queue. max queue size %i. losing "
          "siginfo for extra signals.", sigterm_count, MAXSIGQ);
-#endif
    for (n = 0; n < sigterm_count; n++)
      {
         Ecore_Event_Signal_Exit *e;
@@ -428,13 +408,8 @@ _ecore_signal_call(void)
 
 #ifdef SIGPWR
    if (sigpwr_count > MAXSIGQ)
-#ifdef __FreeBSD__
-     WRN("%ld SIGPWR in queue. max queue size %i. losing "
-         "siginfo for extra signals.", sigpwr_count, MAXSIGQ);
-#else
-     WRN("%i SIGPWR in queue. max queue size %i. losing "
+     WRN("%"PRIdSIGATOMIC" SIGPWR in queue. max queue size %i. losing "
          "siginfo for extra signals.", sigpwr_count, MAXSIGQ);
-#endif
    for (n = 0; n < sigpwr_count; n++)
      {
         Ecore_Event_Signal_Power *e;