diff options
| author | Paul Eggert | 2012-10-06 19:26:03 -0700 |
|---|---|---|
| committer | Paul Eggert | 2012-10-06 19:26:03 -0700 |
| commit | c622b48f7894fc904cdc95edff47f2173240f0cf (patch) | |
| tree | 498fcede7d0dbde0fe60d338198396633ac433dd /src | |
| parent | 559e479cbb1e1fb88325c90a22f7b7fdb5c3c95b (diff) | |
| download | emacs-c622b48f7894fc904cdc95edff47f2173240f0cf.tar.gz emacs-c622b48f7894fc904cdc95edff47f2173240f0cf.zip | |
Improve sys_siglist detection.
* configure.ac (sys_siglist): Look for its decl in <signal.h>.
Otherwise, it's not found in either Fedora 17 or Solaris 11.
* src/sysdep.c (sys_siglist, init_signals): Use _sys_siglist if it's
defined as a macro, as is done in Solaris.
(sys_siglist_entries): New macro.
(save_strsignal): Use it.
* src/syssignal.h (safe_strsignal): Now ATTRIBUTE_CONST, to pacify
GCC 4.7.2 on Fedora 17 with the fixed sys_siglist detection.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 10 | ||||
| -rw-r--r-- | src/sysdep.c | 18 | ||||
| -rw-r--r-- | src/syssignal.h | 2 |
3 files changed, 25 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index b960837eaab..a30dde5e4ea 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,13 @@ | |||
| 1 | 2012-10-07 Paul Eggert <eggert@cs.ucla.edu> | ||
| 2 | |||
| 3 | Improve sys_siglist detection. | ||
| 4 | * sysdep.c (sys_siglist, init_signals): Use _sys_siglist if it's | ||
| 5 | defined as a macro, as is done in Solaris. | ||
| 6 | (sys_siglist_entries): New macro. | ||
| 7 | (save_strsignal): Use it. | ||
| 8 | * syssignal.h (safe_strsignal): Now ATTRIBUTE_CONST, to pacify | ||
| 9 | GCC 4.7.2 on Fedora 17 with the fixed sys_siglist detection. | ||
| 10 | |||
| 1 | 2012-10-06 Jan Djärv <jan.h.d@swipnet.se> | 11 | 2012-10-06 Jan Djärv <jan.h.d@swipnet.se> |
| 2 | 12 | ||
| 3 | * nsfns.m (Fx_create_frame): Call x_default_parameter with | 13 | * nsfns.m (Fx_create_frame): Call x_default_parameter with |
diff --git a/src/sysdep.c b/src/sysdep.c index 74617fcaf0f..35beeaa7202 100644 --- a/src/sysdep.c +++ b/src/sysdep.c | |||
| @@ -1545,8 +1545,18 @@ deliver_thread_signal (int sig, signal_handler_t handler) | |||
| 1545 | 1545 | ||
| 1546 | #if !HAVE_DECL_SYS_SIGLIST | 1546 | #if !HAVE_DECL_SYS_SIGLIST |
| 1547 | # undef sys_siglist | 1547 | # undef sys_siglist |
| 1548 | # define sys_siglist my_sys_siglist | 1548 | # ifdef _sys_siglist |
| 1549 | # define sys_siglist _sys_siglist | ||
| 1550 | # else | ||
| 1551 | # define sys_siglist my_sys_siglist | ||
| 1549 | static char const *sys_siglist[NSIG]; | 1552 | static char const *sys_siglist[NSIG]; |
| 1553 | # endif | ||
| 1554 | #endif | ||
| 1555 | |||
| 1556 | #ifdef _sys_nsig | ||
| 1557 | # define sys_siglist_entries _sys_nsig | ||
| 1558 | #else | ||
| 1559 | # define sys_siglist_entries NSIG | ||
| 1550 | #endif | 1560 | #endif |
| 1551 | 1561 | ||
| 1552 | /* Handle bus errors, invalid instruction, etc. */ | 1562 | /* Handle bus errors, invalid instruction, etc. */ |
| @@ -1609,7 +1619,7 @@ init_signals (bool dumping) | |||
| 1609 | main_thread = pthread_self (); | 1619 | main_thread = pthread_self (); |
| 1610 | #endif | 1620 | #endif |
| 1611 | 1621 | ||
| 1612 | #if !HAVE_DECL_SYS_SIGLIST | 1622 | #if !HAVE_DECL_SYS_SIGLIST && !defined _sys_siglist |
| 1613 | if (! initialized) | 1623 | if (! initialized) |
| 1614 | { | 1624 | { |
| 1615 | sys_siglist[SIGABRT] = "Aborted"; | 1625 | sys_siglist[SIGABRT] = "Aborted"; |
| @@ -1757,7 +1767,7 @@ init_signals (bool dumping) | |||
| 1757 | sys_siglist[SIGXFSZ] = "File size limit exceeded"; | 1767 | sys_siglist[SIGXFSZ] = "File size limit exceeded"; |
| 1758 | # endif | 1768 | # endif |
| 1759 | } | 1769 | } |
| 1760 | #endif /* !HAVE_DECL_SYS_SIGLIST */ | 1770 | #endif /* !HAVE_DECL_SYS_SIGLIST && !_sys_siglist */ |
| 1761 | 1771 | ||
| 1762 | /* Don't alter signal handlers if dumping. On some machines, | 1772 | /* Don't alter signal handlers if dumping. On some machines, |
| 1763 | changing signal handlers sets static data that would make signals | 1773 | changing signal handlers sets static data that would make signals |
| @@ -2285,7 +2295,7 @@ safe_strsignal (int code) | |||
| 2285 | { | 2295 | { |
| 2286 | char const *signame = 0; | 2296 | char const *signame = 0; |
| 2287 | 2297 | ||
| 2288 | if (0 <= code && code < NSIG) | 2298 | if (0 <= code && code < sys_siglist_entries) |
| 2289 | signame = sys_siglist[code]; | 2299 | signame = sys_siglist[code]; |
| 2290 | if (! signame) | 2300 | if (! signame) |
| 2291 | signame = "Unknown signal"; | 2301 | signame = "Unknown signal"; |
diff --git a/src/syssignal.h b/src/syssignal.h index 83ab19698dd..2bf2f046aa5 100644 --- a/src/syssignal.h +++ b/src/syssignal.h | |||
| @@ -43,7 +43,7 @@ extern sigset_t empty_mask; | |||
| 43 | typedef void (*signal_handler_t) (int); | 43 | typedef void (*signal_handler_t) (int); |
| 44 | 44 | ||
| 45 | extern void emacs_sigaction_init (struct sigaction *, signal_handler_t); | 45 | extern void emacs_sigaction_init (struct sigaction *, signal_handler_t); |
| 46 | char const *safe_strsignal (int); | 46 | char const *safe_strsignal (int) ATTRIBUTE_CONST; |
| 47 | 47 | ||
| 48 | #if NSIG < NSIG_MINIMUM | 48 | #if NSIG < NSIG_MINIMUM |
| 49 | # undef NSIG | 49 | # undef NSIG |