Commit 91b1b388 authored by Bruno Haible's avatar Bruno Haible

signal: Avoid #define replacements in C++ mode.

parent 7e4c6ad7
2010-03-07 Bruno Haible <bruno@clisp.org> 2010-03-07 Bruno Haible <bruno@clisp.org>
signal: Avoid #define replacements in C++ mode.
* lib/signal.in.h: Include c++defs.h.
(sigismember, sigemptyset, sigaddset, sigdelset, sigfillset,
sigpending, sigprocmask, signal, raise, sigaction): In C++, define a
namespaced alias symbol.
* modules/signal (Depends-on): Add c++defs.
(Makefile.am): Update signal.h rule.
search: Avoid #define replacements in C++ mode. search: Avoid #define replacements in C++ mode.
* lib/search.in.h: Include c++defs.h. * lib/search.in.h: Include c++defs.h.
(_gl_search_compar_fn, _gl_search_action_fn): New types. (_gl_search_compar_fn, _gl_search_action_fn): New types.
...@@ -35,6 +35,8 @@ ...@@ -35,6 +35,8 @@
#ifndef _GL_SIGNAL_H #ifndef _GL_SIGNAL_H
#define _GL_SIGNAL_H #define _GL_SIGNAL_H
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
/* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */
/* The definition of _GL_WARN_ON_USE is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */
...@@ -57,10 +59,6 @@ typedef int rpl_sig_atomic_t; ...@@ -57,10 +59,6 @@ typedef int rpl_sig_atomic_t;
typedef unsigned int sigset_t; typedef unsigned int sigset_t;
#endif #endif
#ifdef __cplusplus
extern "C" {
#endif
#if @GNULIB_SIGNAL_H_SIGPIPE@ #if @GNULIB_SIGNAL_H_SIGPIPE@
# ifndef SIGPIPE # ifndef SIGPIPE
...@@ -84,49 +82,105 @@ extern "C" { ...@@ -84,49 +82,105 @@ extern "C" {
/* This code supports only 32 signals. */ /* This code supports only 32 signals. */
typedef int verify_NSIG_constraint[2 * (NSIG <= 32) - 1]; typedef int verify_NSIG_constraint[2 * (NSIG <= 32) - 1];
# endif
/* Test whether a given signal is contained in a signal set. */ /* Test whether a given signal is contained in a signal set. */
extern int sigismember (const sigset_t *set, int sig) _GL_ARG_NONNULL ((1)); # if !@HAVE_POSIX_SIGNALBLOCKING@
_GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig)
_GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig));
_GL_CXXALIASWARN (sigismember);
/* Initialize a signal set to the empty set. */ /* Initialize a signal set to the empty set. */
extern int sigemptyset (sigset_t *set) _GL_ARG_NONNULL ((1)); # if !@HAVE_POSIX_SIGNALBLOCKING@
_GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set));
_GL_CXXALIASWARN (sigemptyset);
/* Add a signal to a signal set. */ /* Add a signal to a signal set. */
extern int sigaddset (sigset_t *set, int sig) _GL_ARG_NONNULL ((1)); # if !@HAVE_POSIX_SIGNALBLOCKING@
_GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig)
_GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig));
_GL_CXXALIASWARN (sigaddset);
/* Remove a signal from a signal set. */ /* Remove a signal from a signal set. */
extern int sigdelset (sigset_t *set, int sig) _GL_ARG_NONNULL ((1)); # if !@HAVE_POSIX_SIGNALBLOCKING@
_GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig)
_GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig));
_GL_CXXALIASWARN (sigdelset);
/* Fill a signal set with all possible signals. */ /* Fill a signal set with all possible signals. */
extern int sigfillset (sigset_t *set) _GL_ARG_NONNULL ((1)); # if !@HAVE_POSIX_SIGNALBLOCKING@
_GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set));
_GL_CXXALIASWARN (sigfillset);
/* Return the set of those blocked signals that are pending. */ /* Return the set of those blocked signals that are pending. */
extern int sigpending (sigset_t *set) _GL_ARG_NONNULL ((1)); # if !@HAVE_POSIX_SIGNALBLOCKING@
_GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1)));
# endif
_GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set));
_GL_CXXALIASWARN (sigpending);
/* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. /* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET.
Then, if SET is not NULL, affect the current set of blocked signals by Then, if SET is not NULL, affect the current set of blocked signals by
combining it with *SET as indicated in OPERATION. combining it with *SET as indicated in OPERATION.
In this implementation, you are not allowed to change a signal handler In this implementation, you are not allowed to change a signal handler
while the signal is blocked. */ while the signal is blocked. */
# if !@HAVE_POSIX_SIGNALBLOCKING@
# define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ # define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */
# define SIG_SETMASK 1 /* blocked_set = *set; */ # define SIG_SETMASK 1 /* blocked_set = *set; */
# define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ # define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */
extern int sigprocmask (int operation, const sigset_t *set, sigset_t *old_set); _GL_FUNCDECL_SYS (sigprocmask, int,
(int operation, const sigset_t *set, sigset_t *old_set));
# endif
_GL_CXXALIAS_SYS (sigprocmask, int,
(int operation, const sigset_t *set, sigset_t *old_set));
_GL_CXXALIASWARN (sigprocmask);
# define signal rpl_signal
/* Install the handler FUNC for signal SIG, and return the previous /* Install the handler FUNC for signal SIG, and return the previous
handler. */ handler. */
extern void (*signal (int sig, void (*func) (int))) (int); # ifdef __cplusplus
extern "C" {
# if GNULIB_defined_SIGPIPE # endif
typedef void (*_gl_function_taking_int_returning_void_t) (int);
# ifdef __cplusplus
}
# endif
# if !@HAVE_POSIX_SIGNALBLOCKING@
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# define signal rpl_signal
# endif
_GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t,
(int sig, _gl_function_taking_int_returning_void_t func));
_GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t,
(int sig, _gl_function_taking_int_returning_void_t func));
# else
_GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t,
(int sig, _gl_function_taking_int_returning_void_t func));
# endif
_GL_CXXALIASWARN (signal);
/* Raise signal SIG. */ /* Raise signal SIG. */
# if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
# undef raise # undef raise
# define raise rpl_raise # define raise rpl_raise
extern int raise (int sig);
# endif # endif
_GL_FUNCDECL_RPL (raise, int, (int sig));
_GL_CXXALIAS_RPL (raise, int, (int sig));
# else
_GL_CXXALIAS_SYS (raise, int, (int sig));
# endif
_GL_CXXALIASWARN (raise);
# endif /* !@HAVE_POSIX_SIGNALBLOCKING@ */
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef sigaddset # undef sigaddset
# if HAVE_RAW_DECL_SIGADDSET # if HAVE_RAW_DECL_SIGADDSET
...@@ -218,14 +272,19 @@ struct sigaction ...@@ -218,14 +272,19 @@ struct sigaction
# define SA_NODEFER 2 # define SA_NODEFER 2
# define SA_RESTART 4 # define SA_RESTART 4
extern int sigaction (int, const struct sigaction *restrict, _GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict,
struct sigaction *restrict); struct sigaction *restrict));
# elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ # elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@
# define sa_sigaction sa_handler # define sa_sigaction sa_handler
# endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */ # endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */
_GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict,
struct sigaction *restrict));
_GL_CXXALIASWARN (sigaction);
#elif defined GNULIB_POSIXCHECK #elif defined GNULIB_POSIXCHECK
# undef sigaction # undef sigaction
# if HAVE_RAW_DECL_SIGACTION # if HAVE_RAW_DECL_SIGACTION
...@@ -240,10 +299,6 @@ _GL_WARN_ON_USE (sigaction, "sigaction is unportable - " ...@@ -240,10 +299,6 @@ _GL_WARN_ON_USE (sigaction, "sigaction is unportable - "
#endif #endif
#ifdef __cplusplus
}
#endif
#endif /* _GL_SIGNAL_H */ #endif /* _GL_SIGNAL_H */
#endif /* _GL_SIGNAL_H */ #endif /* _GL_SIGNAL_H */
#endif #endif
...@@ -7,6 +7,7 @@ m4/signal_h.m4 ...@@ -7,6 +7,7 @@ m4/signal_h.m4
Depends-on: Depends-on:
arg-nonnull arg-nonnull
c++defs
include_next include_next
warn-on-use warn-on-use
...@@ -18,7 +19,7 @@ BUILT_SOURCES += signal.h ...@@ -18,7 +19,7 @@ BUILT_SOURCES += signal.h
# We need the following in order to create <signal.h> when the system # We need the following in order to create <signal.h> when the system
# doesn't have a complete one. # doesn't have a complete one.
signal.h: signal.in.h $(WARN_ON_USE_H) $(ARG_NONNULL_H) signal.h: signal.in.h $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
$(AM_V_GEN)rm -f $@-t $@ && \ $(AM_V_GEN)rm -f $@-t $@ && \
{ echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ sed -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
...@@ -33,6 +34,7 @@ signal.h: signal.in.h $(WARN_ON_USE_H) $(ARG_NONNULL_H) ...@@ -33,6 +34,7 @@ signal.h: signal.in.h $(WARN_ON_USE_H) $(ARG_NONNULL_H)
-e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \
-e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \
-e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \
-e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
< $(srcdir)/signal.in.h; \ < $(srcdir)/signal.in.h; \
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment