From bd0c733b77b561f4d12daccebf06a7c71917000b Mon Sep 17 00:00:00 2001 From: Yukihiro Matsumoto Date: Tue, 20 Dec 1994 00:46:19 +0900 Subject: version 0.63 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.63.tar.gz Tue Dec 20 00:46:19 1994 Yukihiro Matsumoto (matz@dyna) * 0.63 released * eval.c(rb_call): superの呼び出しで落ちる.argc, argvの設定を忘れ ていた. * parse.y(read_escape): 展開エラー. * variable.c: 定義済みの変数のhookを変更しないように. --- process.c | 437 +------------------------------------------------------------- 1 file changed, 3 insertions(+), 434 deletions(-) (limited to 'process.c') diff --git a/process.c b/process.c index e0eb41965c..375ca640ec 100644 --- a/process.c +++ b/process.c @@ -3,7 +3,7 @@ process.c - $Author: matz $ - $Date: 1994/12/19 08:30:10 $ + $Date: 1994/12/20 05:07:11 $ created at: Tue Aug 10 14:30:50 JST 1993 Copyright (C) 1994 Yukihiro Matsumoto @@ -255,437 +255,6 @@ Fsystem(obj, str) return status; } -static struct signals { - char *signm; - int signo; -} siglist [] = { -#ifdef SIGHUP - "HUP", SIGHUP, -#endif -#ifdef SIGINT - "INT", SIGINT, -#endif -#ifdef SIGQUIT - "QUIT", SIGQUIT, -#endif -#ifdef SIGILL - "ILL", SIGILL, -#endif -#ifdef SIGTRAP - "TRAP", SIGTRAP, -#endif -#ifdef SIGIOT - "IOT", SIGIOT, -#endif -#ifdef SIGABRT - "ABRT", SIGABRT, -#endif -#ifdef SIGEMT - "EMT", SIGEMT, -#endif -#ifdef SIGFPE - "FPE", SIGFPE, -#endif -#ifdef SIGKILL - "KILL", SIGKILL, -#endif -#ifdef SIGBUS - "BUS", SIGBUS, -#endif -#ifdef SIGSEGV - "SEGV", SIGSEGV, -#endif -#ifdef SIGSYS - "SYS", SIGSYS, -#endif -#ifdef SIGPIPE - "PIPE", SIGPIPE, -#endif -#ifdef SIGALRM - "ALRM", SIGALRM, -#endif -#ifdef SIGTERM - "TERM", SIGTERM, -#endif -#ifdef SIGURG - "URG", SIGURG, -#endif -#ifdef SIGSTOP - "STOP", SIGSTOP, -#endif -#ifdef SIGTSTP - "TSTP", SIGTSTP, -#endif -#ifdef SIGCONT - "CONT", SIGCONT, -#endif -#ifdef SIGCHLD - "CHLD", SIGCHLD, -#endif -#ifdef SIGCLD - "CLD", SIGCLD, -#else -# ifdef SIGCHLD - "CLD", SIGCHLD, -# endif -#endif -#ifdef SIGTTIN - "TTIN", SIGTTIN, -#endif -#ifdef SIGTTOU - "TTOU", SIGTTOU, -#endif -#ifdef SIGIO - "IO", SIGIO, -#endif -#ifdef SIGXCPU - "XCPU", SIGXCPU, -#endif -#ifdef SIGXFSZ - "XFSZ", SIGXFSZ, -#endif -#ifdef SIGVTALRM - "VTALRM", SIGVTALRM, -#endif -#ifdef SIGPROF - "PROF", SIGPROF, -#endif -#ifdef SIGWINCH - "WINCH", SIGWINCH, -#endif -#ifdef SIGUSR1 - "USR1", SIGUSR1, -#endif -#ifdef SIGUSR2 - "USR2", SIGUSR2, -#endif -#ifdef SIGLOST - "LOST", SIGLOST, -#endif -#ifdef SIGMSG - "MSG", SIGMSG, -#endif -#ifdef SIGPWR - "PWR", SIGPWR, -#endif -#ifdef SIGPOLL - "POLL", SIGPOLL, -#endif -#ifdef SIGDANGER - "DANGER", SIGDANGER, -#endif -#ifdef SIGMIGRATE - "MIGRATE", SIGMIGRATE, -#endif -#ifdef SIGPRE - "PRE", SIGPRE, -#endif -#ifdef SIGGRANT - "GRANT", SIGGRANT, -#endif -#ifdef SIGRETRACT - "RETRACT", SIGRETRACT, -#endif -#ifdef SIGSOUND - "SOUND", SIGSOUND, -#endif - NULL, 0, -}; - -static int -signm2signo(nm) - char *nm; -{ - struct signals *sigs; - - for (sigs = siglist; sigs->signm; sigs++) - if (strcmp(sigs->signm, nm) == 0) - return sigs->signo; - return 0; -} - -static VALUE -Fkill(argc, argv) - int argc; - VALUE *argv; -{ - int sig; - int i; - - if (argc < 2) - Fail("wrong # of arguments -- kill(sig, pid...)"); - switch (TYPE(argv[0])) { - case T_FIXNUM: - sig = FIX2UINT(argv[0]); - break; - - case T_STRING: - { - int negative = 0; - - char *s = RSTRING(argv[0])->ptr; - if (*s == '-') { - negative++; - s++; - } - if (strncmp("SIG", s, 3) == 0) - s += 3; - if((sig = signm2signo(s)) == 0) - Fail("Unrecognized signal name `%s'", s); - - if (negative) - sig = -sig; - } - break; - - default: - Fail("bad signal type %s", rb_class2name(CLASS_OF(argv[0]))); - break; - } - - if (sig < 0) { - sig = -sig; - for (i=1; i= NSIG || trap_list[sig] == Qnil) - Fail("trap_handler: Bad signal %d", sig); - -#ifndef HAVE_BSD_SIGNALS - signal(sig, sighandle); -#endif - -#ifdef SAFE_SIGHANDLE - if (trap_immediate) - rb_trap_eval(trap_list[sig]); - else { - trap_pending++; - trap_pending_list[sig]++; - } -#else - rb_trap_eval(trap_list[sig]); -#endif -} - -void -rb_trap_exit() -{ - if (trap_list[0]) - rb_trap_eval(trap_list[0]); -} - -#if defined(SAFE_SIGHANDLE) -rb_trap_exec() -{ - int i; - - trap_pending = 0; - for (i=0; i - -#ifdef SYS_read -int -read(fd, buf, nbytes) - int fd, nbytes; - char *buf; -{ - int res; - - trap_immediate++; - res = syscall(SYS_read, fd, buf, nbytes); - trap_immediate = 0; - return res; -} -#endif /* SYS_read */ - -#ifdef SYS_wait -int -wait(status) - union wait *status; -{ - int res; - - trap_immediate++; - res = syscall(SYS_wait, status); - trap_immediate =0; - return res; -} -#endif /* SYS_wait */ - -#ifdef SYS_sigpause -int -sigpause(mask) - int mask; -{ - int res; - - trap_immediate++; - res = syscall(SYS_sigpause, mask); - trap_immediate =0; - return res; -} -#endif /* SYS_sigpause */ - -/* linux syscall(select) doesn't work file. */ -#if defined(SYS_select) && !defined(linux) -#include - -int -select(nfds, readfds, writefds, exceptfds, timeout) - int nfds; - fd_set *readfds, *writefds, *exceptfds; - struct timeval *timeout; -{ - int res; - - trap_immediate++; - res = syscall(SYS_select, nfds, readfds, writefds, exceptfds, timeout); - trap_immediate =0; - return res; -} -#endif /* SYS_select */ - -#endif /* HAVE_SYSCALL_H */ -#endif /* SAFE_SIGHANDLE */ - -static VALUE -Ftrap(argc, argv) - int argc; - VALUE *argv; -{ - RETSIGTYPE (*func)(); - VALUE command; - int i, sig; -#ifdef HAVE_SIGPROCMASK - sigset_t mask; -#else - int mask; -#endif - - if (argc < 2) - Fail("wrong # of arguments -- kill(cmd, sig...)"); - - /* disable interrupt */ -#ifdef HAVE_SIGPROCMASK - sigfillset(&mask); - sigprocmask(SIG_BLOCK, &mask, &mask); -#else - mask = sigblock(~0); -#endif - - func = sighandle; - - if (argv[0] == Qnil) { - func = SIG_IGN; - command = Qnil; - } - else { - Check_Type(argv[0], T_STRING); - command = argv[0]; - if (RSTRING(argv[0])->len == 0) { - func = SIG_IGN; - } - else if (RSTRING(argv[0])->len == 7) { - if (strncmp(RSTRING(argv[0])->ptr, "SIG_IGN", 7) == 0) { - func = SIG_IGN; - } - else if (strncmp(RSTRING(argv[0])->ptr, "SIG_DFL", 7) == 0) { - func = SIG_DFL; - } - else if (strncmp(RSTRING(argv[0])->ptr, "DEFAULT", 7) == 0) { - func = SIG_DFL; - } - } - else if (RSTRING(argv[0])->len == 6) { - if (strncmp(RSTRING(argv[0])->ptr, "IGNORE", 6) == 0) { - func = SIG_IGN; - } - } - } - if (func == SIG_IGN || func == SIG_DFL) - command = Qnil; - - for (i=1; iptr; - - if (strncmp("SIG", s, 3) == 0) - s += 3; - sig = signm2signo(s); - if (sig == 0 && strcmp(s, "EXIT") != 0) - Fail("Invalid signal SIG%s", s); - } - else { - sig = NUM2INT(argv[i]); - } - if (sig < 0 || sig > NSIG) - Fail("Invalid signal no %d", sig); - - signal(sig, sighandle); - trap_list[sig] = command; - /* enable at least specified signal. */ -#ifdef HAVE_SIGPROCMASK - sigdelset(&mask, sig); -#else - mask &= ~sigmask(sig); -#endif - } - /* disable interrupt */ -#ifdef HAVE_SIGPROCMASK - sigprocmask(SIG_SETMASK, &mask, NULL); -#else - sigsetmask(mask); -#endif - return Qnil; -} - Fsleep(argc, argv) int argc; VALUE *argv; @@ -901,6 +470,8 @@ Fproc_setegid(obj, egid) VALUE rb_readonly_hook(); VALUE M_Process; +extern VALUE Fkill(); + Init_process() { extern VALUE C_Kernel; @@ -913,8 +484,6 @@ Init_process() rb_define_private_method(C_Kernel, "wait", Fwait, 0); rb_define_private_method(C_Kernel, "waitpid", Fwaitpid, 2); rb_define_private_method(C_Kernel, "system", Fsystem, 1); - rb_define_private_method(C_Kernel, "kill", Fkill, -1); - rb_define_private_method(C_Kernel, "trap", Ftrap, -1); rb_define_private_method(C_Kernel, "sleep", Fsleep, -1); M_Process = rb_define_module("Process"); -- cgit v1.2.3