From 34f19098068439da352e5dbac4e431220557f812 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Fri, 8 Jul 2011 01:51:49 +0200 Subject: [PATCH] pthread_sigmask: Fix return value. * lib/signal.in.h (pthread_sigmask): Declare. Don't define as a macro. * lib/pthread_sigmask.c: New file. * modules/pthread_sigmask (Files): Add it. (configure.ac): Invoke AC_LIBOBJ. --- ChangeLog | 8 ++++++++ lib/pthread_sigmask.c | 29 +++++++++++++++++++++++++++++ lib/signal.in.h | 4 ++-- modules/pthread_sigmask | 4 ++++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 lib/pthread_sigmask.c diff --git a/ChangeLog b/ChangeLog index a81276a183..2f03121bb8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2011-07-07 Bruno Haible + + pthread_sigmask: Fix return value. + * lib/signal.in.h (pthread_sigmask): Declare. Don't define as a macro. + * lib/pthread_sigmask.c: New file. + * modules/pthread_sigmask (Files): Add it. + (configure.ac): Invoke AC_LIBOBJ. + 2011-07-07 Eric Blake getopt: more portable argv creation diff --git a/lib/pthread_sigmask.c b/lib/pthread_sigmask.c new file mode 100644 index 0000000000..1f460f13c4 --- /dev/null +++ b/lib/pthread_sigmask.c @@ -0,0 +1,29 @@ +/* POSIX compatible signal blocking for threads. + Copyright (C) 2011 Free Software Foundation, Inc. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +#include + +/* Specification. */ +#include + +#include + +int +pthread_sigmask (int how, const sigset_t *new_mask, sigset_t *old_mask) +{ + int ret = sigprocmask (how, new_mask, old_mask); + return (ret < 0 ? errno : 0); +} diff --git a/lib/signal.in.h b/lib/signal.in.h index 01987a7aff..5049b1da0d 100644 --- a/lib/signal.in.h +++ b/lib/signal.in.h @@ -104,8 +104,8 @@ typedef void (*sighandler_t) (int); #if @GNULIB_PTHREAD_SIGMASK@ # if @REPLACE_PTHREAD_SIGMASK@ -# undef pthread_sigmask -# define pthread_sigmask sigprocmask +_GL_FUNCDECL_SYS (pthread_sigmask, int, + (int how, const sigset_t *new_mask, sigset_t *old_mask)); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_sigmask diff --git a/modules/pthread_sigmask b/modules/pthread_sigmask index d117b2ddd2..59cce93791 100644 --- a/modules/pthread_sigmask +++ b/modules/pthread_sigmask @@ -2,6 +2,7 @@ Description: POSIX compatible signal blocking for threads. Files: +lib/pthread_sigmask.c m4/pthread_sigmask.m4 Depends-on: @@ -10,6 +11,9 @@ sigprocmask [test $REPLACE_PTHREAD_SIGMASK = 1] configure.ac: gl_PTHREAD_SIGMASK +if test $REPLACE_PTHREAD_SIGMASK = 1; then + AC_LIBOBJ([pthread_sigmask]) +fi gl_SIGNAL_MODULE_INDICATOR([pthread_sigmask]) Makefile.am: -- 2.30.2