Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Apr 1998 19:32:48 +0000
From:      Niall Smart <rotel@indigo.ie>
To:        James Raynard <fhackers@jraynard.demon.co.uk>, rotel@indigo.ie
Cc:        joelh@gnu.org, freebsd-hackers@FreeBSD.ORG
Subject:   Re: PR kern/1144
Message-ID:  <199804171832.TAA02993@indigo.ie>
In-Reply-To: James Raynard <fhackers@jraynard.demon.co.uk> "Re: PR kern/1144" (Apr 15,  8:49pm)

next in thread | previous in thread | raw e-mail | index | archive | help
On Apr 15,  8:49pm, James Raynard wrote:
} Subject: Re: PR kern/1144
> On Wed, Apr 15, 1998 at 02:03:43AM +0000, Niall Smart wrote:
> > On Apr 1n,  9:17pm, James Raynard wrote:
> > > 
> > > In his reply to my original PR, bde posted a macro that did what you
> > > suggest for integer arguments (is this not in the PR database?).
> > 
> > Nope.  Still got it?
> 
> Yep.  Note there's a followup as well.

Thanks for the information.

I noticed you closed off the PR... given that OpenBSD, NetBSD,
Solaris, glibc and IRIX are all POSIX compliant in this regard, do
we really want to break ranks?  I don't think saving a few microseconds
is worth it.  I've appended patches in case I can convince you to
change your mind. :)

Thanks,

Niall


*** /usr/src/lib/libc/gen/sigsetops.c	Mon Jan  5 00:11:29 1998
--- sigsetops.c	Fri Apr 17 19:15:19 1998
***************
*** 38,43 ****
--- 38,47 ----
  #endif /* LIBC_SCCS and not lint */
  
  #include <signal.h>
+ #include <errno.h>
+ 
+ /* These functions used to be defined as macro's, undef them here in case 
+    someone ends up pulling in an old /usr/include/signal.h */
  
  #undef sigemptyset
  #undef sigfillset
***************
*** 66,71 ****
--- 70,80 ----
  	sigset_t *set;
  	int signo;
  {
+ 	if (signo <= 0 || signo >= NSIG) {
+ 		errno = EINVAL;
+ 		return -1;
+ 	}
+ 
  	*set |= sigmask(signo);
  	return (0);
  }
***************
*** 75,80 ****
--- 84,94 ----
  	sigset_t *set;
  	int signo;
  {
+ 	if (signo <= 0 || signo >= NSIG) {
+ 		errno = EINVAL;
+ 		return -1;
+ 	}
+ 
  	*set &= ~sigmask(signo);
  	return (0);
  }
***************
*** 84,88 ****
--- 98,107 ----
  	const sigset_t *set;
  	int signo;
  {
+ 	if (signo <= 0 || signo >= NSIG) {
+ 		errno = EINVAL;
+ 		return -1;
+ 	}
+ 
  	return ((*set & sigmask(signo)) != 0);
  }
*** /usr/src/include/signal.h	Fri Jun 28 05:27:04 1996
--- signal.h	Thu Apr 16 12:26:15 1998
***************
*** 73,85 ****
  #endif /* !_ANSI_SOURCE */
  __END_DECLS
  
- #ifndef _ANSI_SOURCE
- /* List definitions after function declarations, or Reiser cpp gets upset. */
- #define	sigaddset(set, signo)	(*(set) |= 1 << ((signo) - 1), 0)
- #define	sigdelset(set, signo)	(*(set) &= ~(1 << ((signo) - 1)), 0)
- #define	sigemptyset(set)	(*(set) = 0, 0)
- #define	sigfillset(set)		(*(set) = ~(sigset_t)0, 0)
- #define	sigismember(set, signo)	((*(set) & (1 << ((signo) - 1))) != 0)
- #endif /* !_ANSI_SOURCE */
- 
  #endif /* !_SIGNAL_H_ */
--- 73,76 ----
*** /usr/src/lib/libc/gen/sigsetops.3	Tue Feb 17 16:38:15 1998
--- sigsetops.3	Fri Apr 17 19:23:37 1998
***************
*** 89,109 ****
  function returns whether a specified signal
  .Fa signo
  is contained in the signal set.
- .Pp
- These functions
- are provided as macros in the include file <signal.h>.
- Actual functions are available
- if their names are undefined (with #undef
- .Em name ) .
  .Sh RETURN VALUES
  The
  .Fn sigismember
! function returns 1
! if the signal is a member of the set,
! 0 otherwise.
! The other functions return 0.
  .Sh ERRORS
! Currently no errors are detected.
  .Sh SEE ALSO
  .Xr kill 2 ,
  .Xr sigaction 2 ,
--- 89,120 ----
  function returns whether a specified signal
  .Fa signo
  is contained in the signal set.
  .Sh RETURN VALUES
  The
+ .Fn sigfillset
+ and
+ .Fn sigemptyset
+ functions return 0.
+ The functions
+ .Fn sigaddset
+ and
+ .Fn sigdelset
+ return -1 and set
+ .Va errno
+ on failure or return 0 on success.
+ The
  .Fn sigismember
! function returns -1 and sets
! .Va errno
! on failure, otherwise it returns 1 if the signal is a member of the set,
! or 0 if it is not.
  .Sh ERRORS
! .Bl -tag -width Er
! .It Bq Er EINVAL
! The specified signal
! .Fa signo
! is not a valid signal number.
! .El
  .Sh SEE ALSO
  .Xr kill 2 ,
  .Xr sigaction 2 ,

-- 
Niall Smart.         finger njs3@doc.ic.ac.uk for PGP key
FreeBSD: Turning PC's into Workstations.  www.freebsd.org

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199804171832.TAA02993>