Skip to content

Commit

Permalink
* io.c (set_outfile): f should be the FILE* from the assigning value.
Browse files Browse the repository at this point in the history
* ext/socket/socket.c (tcp_s_open): should not give default value
  to local_host.

* time.c (time_s_times): move to Process::times.

* file.c (rb_file_s_lchmod): new method File::lchmod.

* file.c (rb_file_s_lchown): new method File::lchown.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1192 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
matz committed Feb 16, 2001
1 parent 9ac8f70 commit e1c29a3
Show file tree
Hide file tree
Showing 10 changed files with 173 additions and 59 deletions.
15 changes: 14 additions & 1 deletion ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
Fri Feb 16 01:44:56 2001 Yukihiro Matsumoto <[email protected]>

* io.c (set_outfile): f should be the FILE* from the assigning value.

* ext/socket/socket.c (tcp_s_open): should not give default value
to local_host.

* time.c (time_s_times): move to Process::times.

* file.c (rb_file_s_lchmod): new method File::lchmod.

* file.c (rb_file_s_lchown): new method File::lchown.

Thu Feb 15 11:33:49 2001 Shugo Maeda <[email protected]>

* lib/cgi/session.rb (close): fixed reversed condition.
Expand Down Expand Up @@ -3271,7 +3284,7 @@ Sat Apr 1 22:50:28 2000 Yukihiro Matsumoto <[email protected]>

Sat Apr 1 21:30:53 2000 WATANABE Hirofumi <[email protected]>

* io.c(rb_io_printf, rb_f_printf): should use rb_io_write.
* io.c (rb_io_printf, rb_f_printf): should use rb_io_write.

Sat Apr 1 00:16:05 2000 Yukihiro Matsumoto <[email protected]>

Expand Down
9 changes: 5 additions & 4 deletions ToDo
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Language Spec.
+ remove scope by block
+ variables appears within block may have independent values.
* Regexp: make /o thread safe.
* decide if begin with rescue or ensure make do..while loop.
* decide whether begin with rescue or ensure make do..while loop.
* a +1 to be a+1, not a(+1).
* unify == and eql? again
* to_i returns nil if str contains no digit.
Expand Down Expand Up @@ -51,6 +51,10 @@ Standard Libraries
- Enume#inject
- Array#fetch
- IO::for_fd
- Process::waitall [ruby-talk:4557]
- Process::Status
- File::lchown, File::lchmod; xxx - still need work for non existing platforms
- move Time::times to Process.
* Enumerable#sort_by for Schwartzian transformation
* String#scanf(?)
* Object#fmt(?)
Expand All @@ -63,16 +67,13 @@ Standard Libraries
* optional stepsize argument for succ()
* Ruby module -- Ruby::Version, Ruby::Interpreter
* introduce Boolean class; super of TrueClass, FalseClass
* Process::waitall [ruby-talk:4557]
* synchronized method - synchronized{...}, synchronized :foo, :bar
* move Time::times to Process.
* Array#&, Array#| to allow duplication. ???
* fork_and_kill_other_threads.
* way to specify immortal (fork endurance) thread;
* or raise ForkException to every thread but fork caller.
* Hash::new{default} or recommend Hash#fetch?
* new user-defined marshal scheme. _dump(dumper), _load(restorer)
* lchown, lchmod, etc.

Extension Libraries

Expand Down
2 changes: 1 addition & 1 deletion configure.in
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ AC_REPLACE_FUNCS(dup2 memmove mkdir strcasecmp strncasecmp strerror strftime\
AC_CHECK_FUNCS(fmod killpg drand48 random wait4 waitpid syscall getcwd chroot\
truncate chsize times utimes fcntl lockf lstat symlink readlink\
setitimer setruid seteuid setreuid setresuid \
setrgid setegid setregid setresgid pause\
setrgid setegid setregid setresgid pause lchown lchmod\
getpgrp setpgrp getpgid setpgid getgroups getpriority getrlimit\
dlopen sigprocmask sigaction _setjmp setsid telldir seekdir fchmod)
AC_STRUCT_TIMEZONE
Expand Down
5 changes: 0 additions & 5 deletions ext/socket/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -895,16 +895,11 @@ tcp_s_open(argc, argv, class)
&local_host, &local_serv);

Check_SafeStr(remote_host);


if (!NIL_P(local_host)) {
Check_SafeStr(local_host);
}

if (NIL_P(local_serv)) {
local_serv = INT2NUM(0);
}

return open_inet(class, remote_host, remote_serv,
local_host, local_serv, INET_CLIENT);
}
Expand Down
85 changes: 85 additions & 0 deletions file.c
Original file line number Diff line number Diff line change
Expand Up @@ -951,6 +951,42 @@ rb_file_chmod(obj, vmode)
return INT2FIX(0);
}

#if defined(HAVE_LCHMOD)
static void
lchmod_internal(path, mode)
const char *path;
int mode;
{
if (lchmod(path, mode) == -1)
rb_sys_fail(path);
}

static VALUE
rb_file_s_lchmod(argc, argv)
int argc;
VALUE *argv;
{
VALUE vmode;
VALUE rest;
int mode, n;

rb_secure(2);
rb_scan_args(argc, argv, "1*", &vmode, &rest);
mode = NUM2INT(vmode);

n = apply2files(lchmod_internal, rest, mode);
return INT2FIX(n);
}
#else
static VALUE
rb_file_s_lchmod(argc, argv)
int argc;
VALUE *argv;
{
rb_notimplement();
}
#endif

struct chown_args {
int owner, group;
};
Expand Down Expand Up @@ -1012,6 +1048,53 @@ rb_file_chown(obj, owner, group)
return INT2FIX(0);
}

#if defined(HAVE_LCHOWN)
static void
lchown_internal(path, args)
const char *path;
struct chown_args *args;
{
if (lchown(path, args->owner, args->group) < 0)
rb_sys_fail(path);
}

static VALUE
rb_file_s_lchown(argc, argv)
int argc;
VALUE *argv;
{
VALUE o, g, rest;
struct chown_args arg;
int n;

rb_secure(2);
rb_scan_args(argc, argv, "2*", &o, &g, &rest);
if (NIL_P(o)) {
arg.owner = -1;
}
else {
arg.owner = NUM2INT(o);
}
if (NIL_P(g)) {
arg.group = -1;
}
else {
arg.group = NUM2INT(g);
}

n = apply2files(lchown_internal, rest, &arg);
return INT2FIX(n);
}
#else
static VALUE
rb_file_s_lchown(argc, argv)
int argc;
VALUE *argv;
{
rb_notimplement();
}
#endif

struct timeval rb_time_timeval();

#if defined(HAVE_UTIMES) && !defined(__CHECKER__)
Expand Down Expand Up @@ -2206,6 +2289,8 @@ Init_File()
rb_define_singleton_method(rb_cFile, "utime", rb_file_s_utime, -1);
rb_define_singleton_method(rb_cFile, "chmod", rb_file_s_chmod, -1);
rb_define_singleton_method(rb_cFile, "chown", rb_file_s_chown, -1);
rb_define_singleton_method(rb_cFile, "lchmod", rb_file_s_lchmod, -1);
rb_define_singleton_method(rb_cFile, "lchown", rb_file_s_lchown, -1);

rb_define_singleton_method(rb_cFile, "link", rb_file_s_link, 2);
rb_define_singleton_method(rb_cFile, "symlink", rb_file_s_symlink, 2);
Expand Down
1 change: 1 addition & 0 deletions intern.h
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,7 @@ void rb_lastline_set _((VALUE));
/* process.c */
int rb_proc_exec _((const char*));
void rb_syswait _((int));
VALUE rb_proc_times _((VALUE));
/* range.c */
VALUE rb_range_new _((VALUE, VALUE, int));
VALUE rb_range_beg_len _((VALUE, long*, long*, long, int));
Expand Down
2 changes: 0 additions & 2 deletions io.c
Original file line number Diff line number Diff line change
Expand Up @@ -2242,8 +2242,6 @@ set_outfile(val, var, orig, stdf)

GetOpenFile(val, fptr);
rb_io_check_writable(fptr);

GetOpenFile(*var, fptr);
f = GetWriteFile(fptr);
dup2(fileno(f), fileno(stdf));

Expand Down
77 changes: 63 additions & 14 deletions process.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,14 @@ struct timeval rb_time_interval _((VALUE));
#undef HAVE_GETPGRP
#endif

#ifdef HAVE_SYS_TIMES_H
#include <sys/times.h>
#endif

#if defined(HAVE_TIMES) || defined(NT)
static VALUE S_Tms;
#endif

static VALUE
get_pid()
{
Expand Down Expand Up @@ -108,7 +116,16 @@ pst_bitand(st1, st2)
}

static VALUE
pst_ifstopped(st)
pst_rshift(st1, st2)
VALUE st1, st2;
{
int status = NUM2INT(st1) >> NUM2INT(st2);

return INT2NUM(status);
}

static VALUE
pst_wifstopped(st)
VALUE st;
{
int status = NUM2INT(st);
Expand All @@ -120,7 +137,7 @@ pst_ifstopped(st)
}

static VALUE
pst_stopsig(st)
pst_wstopsig(st)
VALUE st;
{
int status = NUM2INT(st);
Expand All @@ -129,7 +146,7 @@ pst_stopsig(st)
}

static VALUE
pst_ifsignaled(st)
pst_wifsignaled(st)
VALUE st;
{
int status = NUM2INT(st);
Expand All @@ -141,7 +158,7 @@ pst_ifsignaled(st)
}

static VALUE
pst_termsig(st)
pst_wtermsig(st)
VALUE st;
{
int status = NUM2INT(st);
Expand All @@ -150,7 +167,7 @@ pst_termsig(st)
}

static VALUE
pst_ifexited(st)
pst_wifexited(st)
VALUE st;
{
int status = NUM2INT(st);
Expand All @@ -162,7 +179,7 @@ pst_ifexited(st)
}

static VALUE
pst_exitstatus(st)
pst_wexitstatus(st)
VALUE st;
{
int status = NUM2INT(st);
Expand All @@ -171,7 +188,7 @@ pst_exitstatus(st)
}

static VALUE
pst_coredump(st)
pst_wcoredump(st)
VALUE st;
{
#ifdef WCOREDUMP
Expand Down Expand Up @@ -1254,6 +1271,31 @@ proc_setegid(obj, egid)
return egid;
}

VALUE
rb_proc_times(obj)
VALUE obj;
{
#if defined(HAVE_TIMES) && !defined(__CHECKER__)
#ifndef HZ
# ifdef CLK_TCK
# define HZ CLK_TCK
# else
# define HZ 60
# endif
#endif /* HZ */
struct tms buf;

if (times(&buf) == -1) rb_sys_fail(0);
return rb_struct_new(S_Tms,
rb_float_new((double)buf.tms_utime / HZ),
rb_float_new((double)buf.tms_stime / HZ),
rb_float_new((double)buf.tms_cutime / HZ),
rb_float_new((double)buf.tms_cstime / HZ));
#else
rb_notimplement();
#endif
}

VALUE rb_mProcess;

void
Expand Down Expand Up @@ -1297,18 +1339,19 @@ Init_process()

rb_define_method(rb_cProcStatus, "==", pst_equal, 1);
rb_define_method(rb_cProcStatus, "&", pst_bitand, 1);
rb_define_method(rb_cProcStatus, ">>", pst_rshift, 1);
rb_define_method(rb_cProcStatus, "to_i", pst_to_i, 0);
rb_define_method(rb_cProcStatus, "to_int", pst_to_i, 0);
rb_define_method(rb_cProcStatus, "to_s", pst_to_s, 0);
rb_define_method(rb_cProcStatus, "inspect", pst_to_s, 0);

rb_define_method(rb_cProcStatus, "ifstopped?", pst_ifstopped, 0);
rb_define_method(rb_cProcStatus, "stopsig", pst_stopsig, 0);
rb_define_method(rb_cProcStatus, "ifsignaled?", pst_ifsignaled, 0);
rb_define_method(rb_cProcStatus, "termsig", pst_termsig, 0);
rb_define_method(rb_cProcStatus, "ifexited?", pst_ifexited, 0);
rb_define_method(rb_cProcStatus, "exitstatus", pst_exitstatus, 0);
rb_define_method(rb_cProcStatus, "coredump?", pst_coredump, 0);
rb_define_method(rb_cProcStatus, "stopped?", pst_wifstopped, 0);
rb_define_method(rb_cProcStatus, "stopsig", pst_wstopsig, 0);
rb_define_method(rb_cProcStatus, "signaled?", pst_wifsignaled, 0);
rb_define_method(rb_cProcStatus, "termsig", pst_wtermsig, 0);
rb_define_method(rb_cProcStatus, "exited?", pst_wifexited, 0);
rb_define_method(rb_cProcStatus, "exitstatus", pst_wexitstatus, 0);
rb_define_method(rb_cProcStatus, "coredump?", pst_wcoredump, 0);

rb_define_module_function(rb_mProcess, "pid", get_pid, 0);
rb_define_module_function(rb_mProcess, "ppid", get_ppid, 0);
Expand Down Expand Up @@ -1338,4 +1381,10 @@ Init_process()
rb_define_module_function(rb_mProcess, "euid=", proc_seteuid, 1);
rb_define_module_function(rb_mProcess, "egid", proc_getegid, 0);
rb_define_module_function(rb_mProcess, "egid=", proc_setegid, 1);

rb_define_module_function(rb_mProcess, "times", rb_proc_times, 0);

#if defined(HAVE_TIMES) || defined(NT)
S_Tms = rb_struct_define("Tms", "utime", "stime", "cutime", "cstime", 0);
#endif
}
Loading

0 comments on commit e1c29a3

Please sign in to comment.