ecore_signal.c: factoring out the platform test to improve readability.

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>
This commit is contained in:
Benjamin Jacobs 2016-06-06 11:14:55 -07:00 committed by Cedric BAIL
parent 180e64653d
commit b548a6396b
1 changed files with 30 additions and 55 deletions

View 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 "
WRN("%"PRIdSIGATOMIC" 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 "
"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 "
WRN("%"PRIdSIGATOMIC" 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 "
"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 "
WRN("%"PRIdSIGATOMIC" 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 "
"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 "
WRN("%"PRIdSIGATOMIC" 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 "
"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 "
WRN("%"PRIdSIGATOMIC" 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 "
"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 "
WRN("%"PRIdSIGATOMIC" 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 "
"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 "
WRN("%"PRIdSIGATOMIC" 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 "
"siginfo for extra signals.", sigpwr_count, MAXSIGQ);
#endif
for (n = 0; n < sigpwr_count; n++)
{
Ecore_Event_Signal_Power *e;