From 0c5ecdc449ce581b56090758d5bb5673763ea909 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 20 Jan 1997 02:49:49 +0000 Subject: update from main arhive 970119 Mon Jan 20 03:02:50 1997 Ulrich Drepper * Make-dist: Update and reformat copyright. * Makeconfig: Likewise. * assert/Makefile: Likewise. * bare/Makefile: Likewise. * ctype/Makefile: Likewise. * dirent/Makefile: Likewise. * gmon/Makefile: Likewise. * gnulib/Makefile: Likewise. * grp/Makefile: Likewise. * hurd/Makefile: Likewise. * intl/Makefile: Likewise. * mach/Makefile: Likewise. * malloc/Makefile: Likewise. * manual/Makefile: Likewise. * math/Makefile: Likewise. * po/Makefile: Likewise. * pwd/Makefile: Likewise. * resource/Makefile: Likewise. * setjmp/Makefile: Likewise. * socket/Makefile: Likewise. * string/Makefile: Likewise. * sunrpc/Makefile: Likewise. * sysdeps/alpha/Makefile: Likewise. * sysdeps/gnu/Makefile: Likewise. * sysdeps/m68k/fpu/switch/Makefile: Likewise. * sysdeps/m68k/fpu/switch/68881-sw.h: Likewise. * sysdeps/m68k/fpu/switch/switch.c: Likewise. * sysdeps/mach/Makefile: Likewise. * sysdeps/hurd/Makefile: Likewise. * sysdeps/sparc/Makefile: Likewise. * sysdeps/standalone/i960/nindy960/Makefile: Likewise. * sysdeps/standalone/m68k/m68020/mvme136/Makefile: Likewise. * sysdeps/unix/common/Makefile: Likewise. * sysdeps/unix/sysv/Makefile: Likewise. * sysdeps/unix/sysv/irix4/Makefile: Likewise. * sysdeps/unix/sysv/sco3.2/Makefile: Likewise. * sysdeps/unix/sysv/sysv4/Makefile: Likewise. * sysdeps/vax/Makefile: Likewise. * sysvipc/Makefile: Likewise. * wcsmbs/Makefile: Likewise. * wctype/Makefile: Likewise. * elf/rtld.c (dl_main): Objects in LD_PRELOAD environment variable are separated according to Sun docs by white space not colon. * locale/C-time.c (_nl_C_LC_TIME): Use empty string to initialize fields which are not defined for the C locale. * sysdeps/m68k/fpu/switch/Makefile: Don't use ansidecl.h in constructed files. * sysdeps/m68k/fpu/switch/68881-sw.h: Likewise. * sysdeps/m68k/fpu/switch/switch.c: Likewise. Sun Jan 19 19:43:31 1997 Andreas Jaeger * time/strptime.c: Provide prototype for strptime_internal. Sun Jan 19 23:46:27 1997 Ulrich Drepper * glibcbug.in: We don't guarantee confidential handling. Set field to always contain `no'. Sun Jan 19 21:28:01 1997 Philippe De Muyter * intl/explodename.c: Include sys/types.h. * intl/l10nflist.c: Likewise. Sat Jan 18 22:15:26 1997 Richard Henderson * config.make.in (install_root): New variable to make it easy to install glibc somewhere other than /. * shlib-versions: alpha-*-linux-* libc=6.1. Since sigset_t no longer fits in a register, we can't pass in the thread's initial mask so easily. Take this opportunity to simplify the clone implementation by only accepting a single void* argument. * sysdeps/unix/sysv/linux/alpha/clone.S: Only take one argument. * sysdeps/unix/sysv/linux/i386/clone.S: Likewise. * sysdeps/unix/sysv/linux/m68k/clone.S: Likewise. * sysdeps/unix/sysv/linux/sparc/clone.S: Likewise. * sysdeps/unix/sysv/linux/schedbits.h: Update clone prototypes. * sysdeps/unix/sysv/linux/alpha/ioctl-types.h: Remove. Default Linux version should be sufficient. * sysdeps/unix/sysv/linux/alpha/sigprocmask.c: The osf_sigprocmask system call wants the sigset dereferenced. * sysdeps/unix/sysv/linux/alpha/syscalls.list: Add entries for __syscall_ustat and __syscall_xmknod. * sysdeps/unix/sysv/linux/alpha/xmknod.c: Include sys/sysmacros.h. * sysdeps/unix/sysv/linux/sigset.h: Use longs instead of ints. * sysdeps/unix/sysv/linux/tcsetattr.c: Fix pointer dereferences. * sysdeps/unix/sysv/linux/alpha/sigsuspend.c: Add comment about dependency to kernel type. * sysdeps/unix/sysv/linux/alpha/termbits.h: Correct comment. --- sysdeps/unix/sysv/linux/alpha/sigprocmask.c | 65 +++++++++++++++++------------ 1 file changed, 38 insertions(+), 27 deletions(-) (limited to 'sysdeps/unix/sysv/linux/alpha/sigprocmask.c') diff --git a/sysdeps/unix/sysv/linux/alpha/sigprocmask.c b/sysdeps/unix/sysv/linux/alpha/sigprocmask.c index a1d5636fcb..7fb58f1d80 100644 --- a/sysdeps/unix/sysv/linux/alpha/sigprocmask.c +++ b/sysdeps/unix/sysv/linux/alpha/sigprocmask.c @@ -1,48 +1,59 @@ -/* Copyright (C) 1993, 1995 Free Software Foundation, Inc. +/* Copyright (C) 1993, 1995, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. Contributed by David Mosberger (davidm@azstarnet.com). -The GNU C Library is free software; you can redistribute it and/or -modify it under the terms of the GNU Library General Public License as -published by the Free Software Foundation; either version 2 of the -License, or (at your option) any later version. + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. -The GNU C Library 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 -Library General Public License for more details. + The GNU C Library 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 + Library General Public License for more details. -You should have received a copy of the GNU Library General Public -License along with the GNU C Library; see the file COPYING.LIB. If -not, write to the Free Software Foundation, Inc., 675 Mass Ave, -Cambridge, MA 02139, USA. */ + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ #include #include +/* When there is kernel support for more than 64 signals, we'll have to + switch to a new system call convention here. */ + extern unsigned long __osf_sigprocmask (int how, unsigned long newmask); int __sigprocmask (int how, const sigset_t *set, sigset_t *oset) { - sigset_t setval; + unsigned long int setval; long result; - if (set) { - setval = *set; - } else { - sigemptyset(&setval); - how = SIG_BLOCK; /* ensure blocked mask doesn't get changed */ - } - result = __osf_sigprocmask(how, setval); - if (result == -1) { - /* if there are ever more than 63 signals, we need to recode this + if (set) + { + setval = set->__val[0]; + } + else + { + setval = 0; + how = SIG_BLOCK; /* ensure blocked mask doesn't get changed */ + } + result = __osf_sigprocmask (how, setval); + if (result == -1) + /* If there are ever more than 63 signals, we need to recode this in assembler since we wouldn't be able to distinguish a mask of all 1s from -1, but for now, we're doing just fine... */ return result; - } - if (oset) { - *oset = result; - } + + if (oset) + { + oset->__val[0] = result; + result = _SIGSET_NWORDS; + while (--result > 0) + oset->__val[result] = 0; + } return 0; } -- cgit 1.4.1