소스 검색

Fix up signal handling

Eric Andersen 23 년 전
부모
커밋
8fee51d63a
5개의 변경된 파일140개의 추가작업 그리고 2개의 파일을 삭제
  1. 4 2
      libc/signal/Makefile
  2. 35 0
      libc/signal/sigaddset.c
  3. 33 0
      libc/signal/sigdelset.c
  4. 35 0
      libc/signal/sigemptyset.c
  5. 33 0
      libc/signal/sigismem.c

+ 4 - 2
libc/signal/Makefile

@@ -24,9 +24,11 @@ TOPDIR=../
 include $(TOPDIR)Rules.mak
 LIBC=$(TOPDIR)libc.a
 
-CSRC=bsd_sig.c raise.c sigblock.c siggtmsk.c sigjmp.c signal.c sigpause.c sigstmsk.c
-
+CSRC=bsd_sig.c raise.c sigblock.c siggtmsk.c sigjmp.c signal.c \
+	sigpause.c sigstmsk.c sigaddset.c sigdelset.c \
+	sigismem.c sigemptyset.c
 COBJS=$(patsubst %.c,%.o, $(CSRC))
+
 OBJS=$(COBJS)
 
 all: $(OBJS) $(LIBC)

+ 35 - 0
libc/signal/sigaddset.c

@@ -0,0 +1,35 @@
+/* Copyright (C) 1991, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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.
+
+   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 <errno.h>
+#include <features.h>
+#define _EXTERN_INLINE
+#define __USE_EXTERN_INLINES   1
+#include "signal.h"
+
+
+/* Add SIGNO to SET.  */
+int sigaddset ( sigset_t *set, int signo)
+{
+  if (set == NULL || signo <= 0 || signo >= NSIG) {
+      errno = EINVAL;
+      return -1;
+    }
+
+  return __sigaddset (set, signo);
+}

+ 33 - 0
libc/signal/sigdelset.c

@@ -0,0 +1,33 @@
+/* Copyright (C) 1991, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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.
+
+   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 "errno.h"
+#define _EXTERN_INLINE
+#define __USE_EXTERN_INLINES   1
+#include "signal.h"
+
+/* Add SIGNO to SET.  */
+int sigdelset ( sigset_t *set, int signo)
+{
+  if (set == NULL || signo <= 0 || signo >= NSIG) {
+      errno = EINVAL;
+      return -1;
+    }
+
+  return __sigdelset (set, signo);
+}

+ 35 - 0
libc/signal/sigemptyset.c

@@ -0,0 +1,35 @@
+/* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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.
+
+   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 <errno.h>
+#include <signal.h>
+#include <string.h>
+
+/* Clear all signals from SET.  */
+int
+sigemptyset ( sigset_t *set)
+{
+  if (set == NULL) {
+      errno = EINVAL;
+      return -1;
+    }
+
+  memset (set, 0, sizeof (sigset_t));
+
+  return 0;
+}

+ 33 - 0
libc/signal/sigismem.c

@@ -0,0 +1,33 @@
+/* Copyright (C) 1991, 1996 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   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.
+
+   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 "errno.h"
+#define _EXTERN_INLINE
+#define __USE_EXTERN_INLINES   1
+#include "signal.h"
+
+/* Return 1 if SIGNO is in SET, 0 if not.  */
+int sigismember ( const sigset_t *set, int signo)
+{
+  if (set == NULL || signo <= 0 || signo >= NSIG) {
+      errno=EINVAL;
+      return -1;
+    }
+
+  return __sigismember (set, signo);
+}