|
Ruby
2.0.0p481(2014-05-08revision45883)
|
#include "ruby/config.h"#include <stdlib.h>#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/file.h>#include <fcntl.h>#include <errno.h>#include <pwd.h>#include <ctype.h>#include "ruby/ruby.h"#include "ruby/io.h"#include "ruby/util.h"#include "internal.h"#include <signal.h>
Go to the source code of this file.
Data Structures | |
| struct | pty_info |
| struct | child_info |
Defines | |
| #define | WIFSTOPPED(status) (((status) & 0xff) == 0x7f) |
| #define | DEVICELEN 16 |
| #define | ERROR_EXIT(str) |
Functions | |
| static VALUE | echild_status (VALUE self) |
| static void | getDevice (int *, int *, char[DEVICELEN], int) |
| static int | chfunc (void *data, char *errbuf, size_t errbuf_len) |
| static void | establishShell (int argc, VALUE *argv, struct pty_info *info, char SlaveName[DEVICELEN]) |
| static int | no_mesg (char *slavedevice, int nomesg) |
| static int | get_device_once (int *master, int *slave, char SlaveName[DEVICELEN], int nomesg, int fail) |
| static VALUE | pty_close_pty (VALUE assoc) |
| static VALUE | pty_open (VALUE klass) |
| static VALUE | pty_detach_process (struct pty_info *info) |
| static VALUE | pty_getpty (int argc, VALUE *argv, VALUE self) |
| NORETURN (static void raise_from_check(pid_t pid, int status)) | |
| static void | raise_from_check (pid_t pid, int status) |
| static VALUE | pty_check (int argc, VALUE *argv, VALUE self) |
| void | Init_pty () |
Variables | |
| static VALUE | eChildExited |
| static VALUE | cPTY |
| #define DEVICELEN 16 |
Definition at line 46 of file pty.c.
Referenced by get_device_once(), pty_getpty(), and pty_open().
| #define ERROR_EXIT | ( | str | ) |
do { \ strlcpy(errbuf, (str), errbuf_len); \ return -1; \ } while (0)
Referenced by chfunc().
| #define WIFSTOPPED | ( | status | ) | (((status) & 0xff) == 0x7f) |
Definition at line 28 of file pty.c.
Referenced by raise_from_check().
| static int chfunc | ( | void * | data, |
| char * | errbuf, | ||
| size_t | errbuf_len | ||
| ) | [static] |
Definition at line 86 of file pty.c.
References dup2(), child_info::eargp, ERROR_EXIT, getuid(), ioctl(), child_info::master, rb_cloexec_open(), rb_exec_async_signal_safe(), rb_update_max_fd(), seteuid(), child_info::slave, and child_info::slavename.
Referenced by establishShell(), and rb_f_system().
| static VALUE echild_status | ( | VALUE | self | ) | [static] |
Definition at line 66 of file pty.c.
References rb_intern, and rb_ivar_get().
Referenced by Init_pty().
| static void establishShell | ( | int | argc, |
| VALUE * | argv, | ||
| struct pty_info * | info, | ||
| char | SlaveName[DEVICELEN] | ||
| ) | [static] |
Definition at line 151 of file pty.c.
References chfunc(), pty_info::child_pid, child_info::eargp, errno, child_info::execarg_obj, pty_info::fd, getDevice(), getenv(), getuid(), child_info::master, NULL, Qnil, rb_execarg_fixup(), rb_execarg_get(), rb_execarg_new(), rb_fork_async_signal_safe(), RB_GC_GUARD, rb_jump_tag(), rb_str_new2(), rb_sys_fail(), child_info::slave, and child_info::slavename.
Referenced by pty_getpty().
| static int get_device_once | ( | int * | master, |
| int * | slave, | ||
| char | SlaveName[DEVICELEN], | ||
| int | nomesg, | ||
| int | fail | ||
| ) | [static] |
Definition at line 219 of file pty.c.
References chown(), DEVICELEN, getgid(), getuid(), ioctl(), mode_t, name, no_mesg(), NULL, O_CLOEXEC, rb_cloexec_open(), rb_eRuntimeError, rb_fd_fix_cloexec(), rb_raise(), rb_update_max_fd(), signal(), snprintf, and strlcpy().
Referenced by getDevice().
| static void getDevice | ( | int * | master, |
| int * | slave, | ||
| char | SlaveName[DEVICELEN], | ||
| int | nomesg | ||
| ) | [static] |
Definition at line 450 of file pty.c.
References get_device_once(), and rb_gc().
Referenced by establishShell(), and pty_open().
| void Init_pty | ( | ) |
Definition at line 739 of file pty.c.
References echild_status(), eChildExited, pty_check(), pty_getpty(), pty_open(), rb_define_class_under(), rb_define_method(), rb_define_module(), rb_define_module_function(), rb_define_singleton_method(), and rb_eRuntimeError.
| static int no_mesg | ( | char * | slavedevice, |
| int | nomesg | ||
| ) | [static] |
Definition at line 210 of file pty.c.
Referenced by get_device_once().
| NORETURN | ( | static void | raise_from_checkpid_t pid, int status | ) |
Definition at line 654 of file pty.c.
References Qnil, raise_from_check(), rb_last_status_get(), rb_scan_args(), rb_waitpid(), RTEST, and WNOHANG.
Referenced by Init_pty().
| static VALUE pty_close_pty | ( | VALUE | assoc | ) | [static] |
Definition at line 459 of file pty.c.
References Qnil, rb_ary_entry(), rb_io_close(), RB_TYPE_P, RFILE, and T_FILE.
Referenced by pty_open().
| static VALUE pty_detach_process | ( | struct pty_info * | info | ) | [static] |
Definition at line 535 of file pty.c.
References pty_info::child_pid, Qnil, and rb_detach_process().
Referenced by pty_getpty().
| static VALUE pty_getpty | ( | int | argc, |
| VALUE * | argv, | ||
| VALUE | self | ||
| ) | [static] |
Definition at line 570 of file pty.c.
References pty_info::child_pid, DEVICELEN, establishShell(), pty_info::fd, FMODE_SYNC, MakeOpenFile, pty_detach_process(), Qnil, rb_ary_new2(), rb_ary_store(), rb_block_given_p(), rb_cFile, rb_cloexec_dup(), rb_ensure(), rb_io_mode_flags, rb_obj_alloc(), rb_obj_freeze(), rb_str_new_cstr(), rb_sys_fail(), rb_update_max_fd(), and rb_yield().
Referenced by Init_pty().
Definition at line 505 of file pty.c.
References DEVICELEN, rb_io_t::fd, FMODE_DUPLEX, FMODE_READWRITE, FMODE_SYNC, FMODE_TTY, getDevice(), MakeOpenFile, rb_io_t::mode, rb_io_t::pathv, pty_close_pty(), rb_assoc_new(), rb_block_given_p(), rb_cFile, rb_cIO, rb_ensure(), rb_obj_alloc(), rb_obj_freeze(), rb_sprintf(), rb_str_new_cstr(), and rb_yield().
Referenced by Init_pty().
| static void raise_from_check | ( | pid_t | pid, |
| int | status | ||
| ) | [static] |
Definition at line 609 of file pty.c.
References eChildExited, kill(), msg, rb_exc_new3(), rb_exc_raise(), rb_iv_set(), rb_last_status_get(), rb_sprintf(), and WIFSTOPPED.
Referenced by pty_check().
VALUE eChildExited [static] |
Definition at line 60 of file pty.c.
Referenced by Init_pty(), and raise_from_check().
1.7.6.1