[CC'ing bug-gnulib re <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=9076>.]
On 07/13/11 23:54, Joachim Schmitz wrote: > coreutils-8.12 uses SA_RESETHAND and SA_RESTART unconditionally and on HP > NonStop these don't exist. Thanks for reporting this. I think coreutils used to be portable to hosts lacking those symbols, and there's a bit of code in dd.c that still assumes the old backward-compatibility stuff: static void interrupt_handler (int sig) { if (! SA_RESETHAND) signal (sig, SIG_DFL); interrupt_signal = sig; } but I guess it got ripped out at some point, under the mistaken assumption that everybody has SA_RESETHAND nowadays. Here's a proposed patch to gnulib to address this porting problem. * lib/signal.in.h (SA_RESETHAND, SA_RESTART): Default to 0. * doc/posix-functions/sigaction.texi (sigaction): Document this, and document NonStop portability issues. See Joachim Schmitz in <http://lists.gnu.org/archive/html/bug-coreutils/2011-07/msg00062.html>. diff --git a/doc/posix-functions/sigaction.texi b/doc/posix-functions/sigaction.texi index d03e516..583d112 100644 --- a/doc/posix-functions/sigaction.texi +++ b/doc/posix-functions/sigaction.texi @@ -11,6 +11,11 @@ Portability problems fixed by Gnulib: @item This function is missing on some platforms: mingw. + +@item +Some systems do not define the flag SA_NODEFER. +NonStop does not define the flags SA_RESETHAND and SA_RESTART. +Gnulib defines missing flags to zero, which means they have no effect. @end itemize Portability problems not fixed by Gnulib: @@ -33,8 +38,12 @@ missing on some platforms: mingw. @item +Support for SA_RESETHAND is missing on some platforms: +NonStop. + +@item Support for SA_RESTART is missing on some platforms: -mingw. +mingw, NonStop. @item In spite of having SA_SIGACTION, struct sigaction lacks the diff --git a/lib/signal.in.h b/lib/signal.in.h index 93787f7..6765fa3 100644 --- a/lib/signal.in.h +++ b/lib/signal.in.h @@ -417,10 +417,16 @@ _GL_WARN_ON_USE (sigaction, "sigaction is unportable - " # endif #endif -/* Some systems don't have SA_NODEFER. */ +/* Some systems don't have flags. They default to 0, i.e., no effect. */ #ifndef SA_NODEFER # define SA_NODEFER 0 #endif +#ifndef SA_RESETHAND +# define SA_RESETHAND 0 +#endif +#ifndef SA_RESTART +# define SA_RESTART 0 +#endif #endif /* _@GUARD_PREFIX@_SIGNAL_H */