1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 1999-12-01 09:24:48 +00:00
parent 40517ecac8
commit a3f29338ad
13 changed files with 336 additions and 108 deletions

View file

@ -1,3 +1,32 @@
Wed Dec 1 09:47:33 1999 Kazunori NISHI <kazunori@swlab.csce.kyushu-u.ac.jp>
* string.c (rb_str_split_method): should increment end too.
Tue Nov 30 18:00:45 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* marshal.c: MARSHAL_MINOR incremented; format version is 4.2.
* marshal.c (w_object): distinguish class and module.
* marshal.c (w_object): save hash's default value.
* marshal.c (r_object): restore hash's default value.
Tue Nov 30 01:46:18 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* re.c (rb_reg_source): generated source string must be tainted if
regex is tainted.
* file.c (rb_file_s_basename): basename should not be tainted
unless the original path is tainted.
* file.c (rb_file_s_dirname): ditto.
Mon Nov 29 20:42:13 1999 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
* file.c (stat_new): Struct::Stat -> File::Stat; Stat is no longer
a Struct.
Mon Nov 29 15:28:52 1999 Yukihiro Matsumoto <matz@netlab.co.jp> Mon Nov 29 15:28:52 1999 Yukihiro Matsumoto <matz@netlab.co.jp>
* variable.c (rb_path2class): evaluated value from path should be * variable.c (rb_path2class): evaluated value from path should be

View file

@ -20,7 +20,7 @@ typedef unsigned short USHORT;
#define BIGRAD (1L << BITSPERDIG) #define BIGRAD (1L << BITSPERDIG)
#define DIGSPERINT ((unsigned int)(sizeof(long)/sizeof(short))) #define DIGSPERINT ((unsigned int)(sizeof(long)/sizeof(short)))
#define BIGUP(x) ((unsigned long)(x) << BITSPERDIG) #define BIGUP(x) ((unsigned long)(x) << BITSPERDIG)
#define BIGDN(x) (((x)<0) ? ~((~(x))>>BITSPERDIG) : (x)>>BITSPERDIG) #define BIGDN(x) RSHIFT(x,BITSPERDIG)
#define BIGLO(x) ((USHORT)((x) & (BIGRAD-1))) #define BIGLO(x) ((USHORT)((x) & (BIGRAD-1)))
static VALUE static VALUE

View file

@ -325,6 +325,7 @@ exc_to_s(exc)
VALUE mesg = rb_iv_get(exc, "mesg"); VALUE mesg = rb_iv_get(exc, "mesg");
if (NIL_P(mesg)) return rb_class_path(CLASS_OF(exc)); if (NIL_P(mesg)) return rb_class_path(CLASS_OF(exc));
if (OBJ_TAINTED(exc)) OBJ_TAINT(mesg);
return mesg; return mesg;
} }

View file

@ -15,8 +15,8 @@ class TkEntry<TkLabel
def create_self def create_self
tk_call 'entry', @path tk_call 'entry', @path
end end
def scrollcommand(cmd) def xscrollcommand(cmd=Proc.new)
configure 'scrollcommand', cmd configure_cmd 'xscrollcommand', cmd
end end
def delete(s, e=None) def delete(s, e=None)
@ -45,7 +45,7 @@ class TkEntry<TkLabel
tk_send 'selection', 'adjust', index tk_send 'selection', 'adjust', index
end end
def selection_clear def selection_clear
tk_send 'selection', 'clear', 'end' tk_send 'selection', 'clear'
end end
def selection_from(index) def selection_from(index)
tk_send 'selection', 'from', index tk_send 'selection', 'from', index

282
file.c
View file

@ -70,7 +70,7 @@ char *strrchr _((const char*,const char));
VALUE rb_cFile; VALUE rb_cFile;
VALUE rb_mFileTest; VALUE rb_mFileTest;
static VALUE sStat; static VALUE rb_cStat;
static int static int
apply2files(func, vargs, arg) apply2files(func, vargs, arg)
@ -118,33 +118,139 @@ static VALUE
stat_new(st) stat_new(st)
struct stat *st; struct stat *st;
{ {
struct stat *nst;
if (!st) rb_bug("stat_new() called with bad value"); if (!st) rb_bug("stat_new() called with bad value");
return rb_struct_new(sStat,
INT2FIX((int)st->st_dev), nst = ALLOC(struct stat);
INT2FIX((int)st->st_ino), *nst = *st;
INT2FIX((int)st->st_mode), return Data_Wrap_Struct(rb_cStat, NULL, free, nst);
INT2FIX((int)st->st_nlink), }
INT2FIX((int)st->st_uid),
INT2FIX((int)st->st_gid), static struct stat*
get_stat(self)
VALUE self;
{
struct stat* st;
Data_Get_Struct(self, struct stat, st);
if (!st) rb_bug("collapsed File::Stat");
return st;
}
static VALUE
rb_stat_cmp(self, other)
VALUE self, other;
{
time_t t1 = get_stat(self)->st_mtime;
time_t t2 = get_stat(other)->st_mtime;
if (t1 == t2)
return INT2FIX(0);
else if (t1 < t2)
return INT2FIX(-1);
else
return INT2FIX(1);
}
static VALUE
rb_stat_dev(self)
VALUE self;
{
return INT2FIX((int)get_stat(self)->st_dev);
}
static VALUE
rb_stat_ino(self)
VALUE self;
{
return INT2FIX((int)get_stat(self)->st_ino);
}
static VALUE
rb_stat_mode(self)
VALUE self;
{
return INT2FIX((int)get_stat(self)->st_mode);
}
static VALUE
rb_stat_nlink(self)
VALUE self;
{
return INT2FIX((int)get_stat(self)->st_nlink);
}
static VALUE
rb_stat_uid(self)
VALUE self;
{
return INT2FIX((int)get_stat(self)->st_uid);
}
static VALUE
rb_stat_gid(self)
VALUE self;
{
return INT2FIX((int)get_stat(self)->st_gid);
}
static VALUE
rb_stat_rdev(self)
VALUE self;
{
#ifdef HAVE_ST_RDEV #ifdef HAVE_ST_RDEV
INT2FIX((int)st->st_rdev), return INT2FIX((int)get_stat(self)->st_rdev);
#else #else
INT2FIX(0), return INT2FIX(0);
#endif #endif
INT2FIX((int)st->st_size), }
static VALUE
rb_stat_size(self)
VALUE self;
{
return INT2FIX((int)get_stat(self)->st_size);
}
static VALUE
rb_stat_blksize(self)
VALUE self;
{
#ifdef HAVE_ST_BLKSIZE #ifdef HAVE_ST_BLKSIZE
INT2FIX((int)st->st_blksize), return INT2FIX((int)get_stat(self)->st_blksize);
#else #else
INT2FIX(0), return INT2FIX(0);
#endif #endif
}
static VALUE
rb_stat_blocks(self)
VALUE self;
{
#ifdef HAVE_ST_BLOCKS #ifdef HAVE_ST_BLOCKS
INT2FIX((int)st->st_blocks), return INT2FIX((int)get_stat(self)->st_blocks);
#else #else
INT2FIX(0), return INT2FIX(0);
#endif #endif
rb_time_new(st->st_atime, 0), }
rb_time_new(st->st_mtime, 0),
rb_time_new(st->st_ctime, 0)); static VALUE
rb_stat_atime(self)
VALUE self;
{
return rb_time_new(get_stat(self)->st_atime, 0);
}
static VALUE
rb_stat_mtime(self)
VALUE self;
{
return rb_time_new(get_stat(self)->st_mtime, 0);
}
static VALUE
rb_stat_ctime(self)
VALUE self;
{
return rb_time_new(get_stat(self)->st_ctime, 0);
} }
static int static int
@ -1211,7 +1317,7 @@ rb_file_s_basename(argc, argv)
int argc; int argc;
VALUE *argv; VALUE *argv;
{ {
VALUE fname, fext; VALUE fname, fext, basename;
char *name, *p, *ext; char *name, *p, *ext;
int f; int f;
@ -1232,7 +1338,9 @@ rb_file_s_basename(argc, argv)
f = rmext(p, ext); f = rmext(p, ext);
if (f) return rb_str_new(p, f); if (f) return rb_str_new(p, f);
} }
return rb_tainted_str_new2(p); basename = rb_str_new2(p);
if (OBJ_TAINTED(fname)) OBJ_TAINT(basename);
return basename;
} }
static VALUE static VALUE
@ -1240,6 +1348,7 @@ rb_file_s_dirname(obj, fname)
VALUE obj, fname; VALUE obj, fname;
{ {
char *name, *p; char *name, *p;
VALUE dirname;
name = STR2CSTR(fname); name = STR2CSTR(fname);
p = strrchr(name, '/'); p = strrchr(name, '/');
@ -1248,7 +1357,9 @@ rb_file_s_dirname(obj, fname)
} }
if (p == name) if (p == name)
p++; p++;
return rb_tainted_str_new(name, p - name); dirname = rb_str_new(name, p - name);
if (OBJ_TAINTED(fname)) OBJ_TAINT(dirname);
return dirname;
} }
static VALUE static VALUE
@ -1549,25 +1660,18 @@ rb_f_test(argc, argv)
return Qnil; /* not reached */ return Qnil; /* not reached */
} }
static ID rb_st_mode;
static ID rb_st_size;
static ID rb_st_uid;
static ID rb_st_gid;
#define ST_MODE(obj) FIX2INT(rb_funcall3((obj), rb_st_mode, 0, 0))
static VALUE static VALUE
rb_stat_ftype(obj) rb_stat_ftype(obj)
VALUE obj; VALUE obj;
{ {
return rb_file_ftype(ST_MODE(obj)); return rb_file_ftype(get_stat(obj)->st_mode);
} }
static VALUE static VALUE
rb_stat_d(obj) rb_stat_d(obj)
VALUE obj; VALUE obj;
{ {
if (S_ISDIR(ST_MODE(obj))) return Qtrue; if (S_ISDIR(get_stat(obj)->st_mode)) return Qtrue;
return Qfalse; return Qfalse;
} }
@ -1576,7 +1680,7 @@ rb_stat_p(obj)
VALUE obj; VALUE obj;
{ {
#ifdef S_IFIFO #ifdef S_IFIFO
if (S_ISFIFO(ST_MODE(obj))) return Qtrue; if (S_ISFIFO(get_stat(obj)->st_mode)) return Qtrue;
#endif #endif
return Qfalse; return Qfalse;
@ -1587,7 +1691,7 @@ rb_stat_l(obj)
VALUE obj; VALUE obj;
{ {
#ifdef S_ISLNK #ifdef S_ISLNK
if (S_ISLNK(ST_MODE(obj))) return Qtrue; if (S_ISLNK(get_stat(obj)->st_mode)) return Qtrue;
#endif #endif
return Qfalse; return Qfalse;
@ -1598,7 +1702,7 @@ rb_stat_S(obj)
VALUE obj; VALUE obj;
{ {
#ifdef S_ISSOCK #ifdef S_ISSOCK
if (S_ISSOCK(ST_MODE(obj))) return Qtrue; if (S_ISSOCK(get_stat(obj)->st_mode)) return Qtrue;
#endif #endif
return Qfalse; return Qfalse;
@ -1609,7 +1713,7 @@ rb_stat_b(obj)
VALUE obj; VALUE obj;
{ {
#ifdef S_ISBLK #ifdef S_ISBLK
if (S_ISBLK(ST_MODE(obj))) return Qtrue; if (S_ISBLK(get_stat(obj)->st_mode)) return Qtrue;
#endif #endif
return Qfalse; return Qfalse;
@ -1619,7 +1723,7 @@ static VALUE
rb_stat_c(obj) rb_stat_c(obj)
VALUE obj; VALUE obj;
{ {
if (S_ISBLK(ST_MODE(obj))) return Qtrue; if (S_ISBLK(get_stat(obj)->st_mode)) return Qtrue;
return Qfalse; return Qfalse;
} }
@ -1628,7 +1732,7 @@ static VALUE
rb_stat_owned(obj) rb_stat_owned(obj)
VALUE obj; VALUE obj;
{ {
if (FIX2INT(rb_funcall3(obj, rb_st_uid, 0, 0)) == geteuid()) return Qtrue; if (get_stat(obj)->st_uid == geteuid()) return Qtrue;
return Qfalse; return Qfalse;
} }
@ -1636,7 +1740,7 @@ static VALUE
rb_stat_rowned(obj) rb_stat_rowned(obj)
VALUE obj; VALUE obj;
{ {
if (FIX2INT(rb_funcall3(obj, rb_st_uid, 0, 0)) == getuid()) return Qtrue; if (get_stat(obj)->st_uid == getuid()) return Qtrue;
return Qfalse; return Qfalse;
} }
@ -1645,7 +1749,7 @@ rb_stat_grpowned(obj)
VALUE obj; VALUE obj;
{ {
#ifndef NT #ifndef NT
if (FIX2INT(rb_funcall3(obj, rb_st_gid, 0, 0)) == getegid()) return Qtrue; if (get_stat(obj)->st_gid == getegid()) return Qtrue;
#endif #endif
return Qfalse; return Qfalse;
} }
@ -1654,7 +1758,7 @@ static VALUE
rb_stat_r(obj) rb_stat_r(obj)
VALUE obj; VALUE obj;
{ {
mode_t mode = ST_MODE(obj); mode_t mode = get_stat(obj)->st_mode;
#ifdef S_IRUSR #ifdef S_IRUSR
if (rb_stat_owned(obj)) if (rb_stat_owned(obj))
@ -1674,14 +1778,14 @@ static VALUE
rb_stat_R(obj) rb_stat_R(obj)
VALUE obj; VALUE obj;
{ {
mode_t mode = ST_MODE(obj); mode_t mode = get_stat(obj)->st_mode;
#ifdef S_IRUSR #ifdef S_IRUSR
if (rb_stat_rowned(obj)) if (rb_stat_rowned(obj))
return mode & S_IRUSR ? Qtrue : Qfalse; return mode & S_IRUSR ? Qtrue : Qfalse;
#endif #endif
#ifdef S_IRGRP #ifdef S_IRGRP
if (group_member(FIX2INT(rb_funcall3(obj, rb_st_gid, 0, 0)))) if (group_member(get_stat(obj)->st_gid))
return mode & S_IRGRP ? Qtrue : Qfalse; return mode & S_IRGRP ? Qtrue : Qfalse;
#endif #endif
#ifdef S_IROTH #ifdef S_IROTH
@ -1694,7 +1798,7 @@ static VALUE
rb_stat_w(obj) rb_stat_w(obj)
VALUE obj; VALUE obj;
{ {
mode_t mode = ST_MODE(obj); mode_t mode = get_stat(obj)->st_mode;
#ifdef S_IRUSR #ifdef S_IRUSR
if (rb_stat_owned(obj)) if (rb_stat_owned(obj))
@ -1714,14 +1818,14 @@ static VALUE
rb_stat_W(obj) rb_stat_W(obj)
VALUE obj; VALUE obj;
{ {
mode_t mode = ST_MODE(obj); mode_t mode = get_stat(obj)->st_mode;
#ifdef S_IRUSR #ifdef S_IRUSR
if (rb_stat_rowned(obj)) if (rb_stat_rowned(obj))
return mode & S_IWUSR ? Qtrue : Qfalse; return mode & S_IWUSR ? Qtrue : Qfalse;
#endif #endif
#ifdef S_IRGRP #ifdef S_IRGRP
if (group_member(FIX2INT(rb_funcall3(obj, rb_st_gid, 0, 0)))) if (group_member(get_stat(obj)->st_gid))
return mode & S_IWGRP ? Qtrue : Qfalse; return mode & S_IWGRP ? Qtrue : Qfalse;
#endif #endif
#ifdef S_IROTH #ifdef S_IROTH
@ -1734,7 +1838,7 @@ static VALUE
rb_stat_x(obj) rb_stat_x(obj)
VALUE obj; VALUE obj;
{ {
mode_t mode = ST_MODE(obj); mode_t mode = get_stat(obj)->st_mode;
#ifdef S_IRUSR #ifdef S_IRUSR
if (rb_stat_owned(obj)) if (rb_stat_owned(obj))
@ -1754,14 +1858,14 @@ static VALUE
rb_stat_X(obj) rb_stat_X(obj)
VALUE obj; VALUE obj;
{ {
mode_t mode = ST_MODE(obj); mode_t mode = get_stat(obj)->st_mode;
#ifdef S_IRUSR #ifdef S_IRUSR
if (rb_stat_rowned(obj)) if (rb_stat_rowned(obj))
return mode & S_IXUSR ? Qtrue : Qfalse; return mode & S_IXUSR ? Qtrue : Qfalse;
#endif #endif
#ifdef S_IRGRP #ifdef S_IRGRP
if (group_member(FIX2INT(rb_funcall3(obj, rb_st_gid, 0, 0)))) if (group_member(get_stat(obj)->st_gid))
return mode & S_IXGRP ? Qtrue : Qfalse; return mode & S_IXGRP ? Qtrue : Qfalse;
#endif #endif
#ifdef S_IROTH #ifdef S_IROTH
@ -1774,7 +1878,7 @@ static VALUE
rb_stat_f(obj) rb_stat_f(obj)
VALUE obj; VALUE obj;
{ {
if (S_ISREG(ST_MODE(obj))) return Qtrue; if (S_ISREG(get_stat(obj)->st_mode)) return Qtrue;
return Qfalse; return Qfalse;
} }
@ -1782,7 +1886,7 @@ static VALUE
rb_stat_z(obj) rb_stat_z(obj)
VALUE obj; VALUE obj;
{ {
if (rb_funcall3(obj, rb_st_size, 0, 0) == INT2FIX(0)) return Qtrue; if (get_stat(obj)->st_size == 0) return Qtrue;
return Qfalse; return Qfalse;
} }
@ -1790,10 +1894,10 @@ static VALUE
rb_stat_s(obj) rb_stat_s(obj)
VALUE obj; VALUE obj;
{ {
VALUE size = rb_funcall3(obj, rb_st_size, 0, 0); int size = get_stat(obj)->st_size;
if (size == INT2FIX(0)) return Qnil; if (size == 0) return Qnil;
return size; return INT2FIX(size);
} }
static VALUE static VALUE
@ -1801,7 +1905,7 @@ rb_stat_suid(obj)
VALUE obj; VALUE obj;
{ {
#ifdef S_ISUID #ifdef S_ISUID
if (ST_MODE(obj) & S_ISUID) return Qtrue; if (get_stat(obj)->st_mode & S_ISUID) return Qtrue;
#endif #endif
return Qfalse; return Qfalse;
} }
@ -1811,7 +1915,7 @@ rb_stat_sgid(obj)
VALUE obj; VALUE obj;
{ {
#ifndef NT #ifndef NT
if (ST_MODE(obj) & S_ISGID) return Qtrue; if (get_stat(obj)->st_mode & S_ISGID) return Qtrue;
#endif #endif
return Qfalse; return Qfalse;
} }
@ -1821,7 +1925,7 @@ rb_stat_sticky(obj)
VALUE obj; VALUE obj;
{ {
#ifdef S_ISVTX #ifdef S_ISVTX
if (ST_MODE(obj) & S_ISVTX) return Qtrue; if (get_stat(obj)->st_mode & S_ISVTX) return Qtrue;
#endif #endif
return Qnil; return Qnil;
} }
@ -1934,39 +2038,49 @@ Init_File()
rb_define_global_function("test", rb_f_test, -1); rb_define_global_function("test", rb_f_test, -1);
sStat = rb_struct_define("Stat", "dev", "ino", "mode", rb_cStat = rb_define_class_under(rb_cFile, "Stat", rb_cObject);
"nlink", "uid", "gid", "rdev",
"size", "blksize", "blocks",
"atime", "mtime", "ctime", 0);
rb_st_mode = rb_intern("mode"); rb_include_module(rb_cStat, rb_mComparable);
rb_st_size = rb_intern("size");
rb_st_uid = rb_intern("uid");
rb_st_gid = rb_intern("gid");
rb_define_method(sStat, "ftype", rb_stat_ftype, 0); rb_define_method(rb_cStat, "<=>", rb_stat_cmp, 1);
rb_define_method(sStat, "directory?", rb_stat_d, 0); rb_define_method(rb_cStat, "dev", rb_stat_dev, 0);
rb_define_method(sStat, "readable?", rb_stat_r, 0); rb_define_method(rb_cStat, "ino", rb_stat_ino, 0);
rb_define_method(sStat, "readable_real?", rb_stat_R, 0); rb_define_method(rb_cStat, "mode", rb_stat_mode, 0);
rb_define_method(sStat, "writable?", rb_stat_w, 0); rb_define_method(rb_cStat, "nlink", rb_stat_nlink, 0);
rb_define_method(sStat, "writable_real?", rb_stat_W, 0); rb_define_method(rb_cStat, "uid", rb_stat_uid, 0);
rb_define_method(sStat, "executable?", rb_stat_x, 0); rb_define_method(rb_cStat, "gid", rb_stat_gid, 0);
rb_define_method(sStat, "executable_real?", rb_stat_X, 0); rb_define_method(rb_cStat, "rdev", rb_stat_rdev, 0);
rb_define_method(sStat, "file?", rb_stat_f, 0); rb_define_method(rb_cStat, "size", rb_stat_size, 0);
rb_define_method(sStat, "zero?", rb_stat_z, 0); rb_define_method(rb_cStat, "blksize", rb_stat_blksize, 0);
rb_define_method(sStat, "size?", rb_stat_s, 0); rb_define_method(rb_cStat, "blocks", rb_stat_blocks, 0);
rb_define_method(sStat, "owned?", rb_stat_owned, 0); rb_define_method(rb_cStat, "atime", rb_stat_atime, 0);
rb_define_method(sStat, "grpowned?", rb_stat_grpowned, 0); rb_define_method(rb_cStat, "mtime", rb_stat_mtime, 0);
rb_define_method(rb_cStat, "ctime", rb_stat_ctime, 0);
rb_define_method(sStat, "pipe?", rb_stat_p, 0); rb_define_method(rb_cStat, "ftype", rb_stat_ftype, 0);
rb_define_method(sStat, "symlink?", rb_stat_l, 0);
rb_define_method(sStat, "socket?", rb_stat_S, 0);
rb_define_method(sStat, "blockdev?", rb_stat_b, 0); rb_define_method(rb_cStat, "directory?", rb_stat_d, 0);
rb_define_method(sStat, "chardev?", rb_stat_c, 0); rb_define_method(rb_cStat, "readable?", rb_stat_r, 0);
rb_define_method(rb_cStat, "readable_real?", rb_stat_R, 0);
rb_define_method(rb_cStat, "writable?", rb_stat_w, 0);
rb_define_method(rb_cStat, "writable_real?", rb_stat_W, 0);
rb_define_method(rb_cStat, "executable?", rb_stat_x, 0);
rb_define_method(rb_cStat, "executable_real?", rb_stat_X, 0);
rb_define_method(rb_cStat, "file?", rb_stat_f, 0);
rb_define_method(rb_cStat, "zero?", rb_stat_z, 0);
rb_define_method(rb_cStat, "size?", rb_stat_s, 0);
rb_define_method(rb_cStat, "owned?", rb_stat_owned, 0);
rb_define_method(rb_cStat, "grpowned?", rb_stat_grpowned, 0);
rb_define_method(sStat, "setuid?", rb_stat_suid, 0); rb_define_method(rb_cStat, "pipe?", rb_stat_p, 0);
rb_define_method(sStat, "setgid?", rb_stat_sgid, 0); rb_define_method(rb_cStat, "symlink?", rb_stat_l, 0);
rb_define_method(sStat, "sticky?", rb_stat_sticky, 0); rb_define_method(rb_cStat, "socket?", rb_stat_S, 0);
rb_define_method(rb_cStat, "blockdev?", rb_stat_b, 0);
rb_define_method(rb_cStat, "chardev?", rb_stat_c, 0);
rb_define_method(rb_cStat, "setuid?", rb_stat_suid, 0);
rb_define_method(rb_cStat, "setgid?", rb_stat_sgid, 0);
rb_define_method(rb_cStat, "sticky?", rb_stat_sticky, 0);
} }

8
hash.c
View file

@ -689,8 +689,12 @@ static VALUE
hash_to_s(hash) hash_to_s(hash)
VALUE hash; VALUE hash;
{ {
VALUE str;
if (rb_inspecting_p(hash)) return rb_str_new2("{...}"); if (rb_inspecting_p(hash)) return rb_str_new2("{...}");
return rb_ary_to_s(rb_hash_to_a(hash)); str = rb_ary_to_s(rb_hash_to_a(hash));
if (OBJ_TAINTED(hash)) OBJ_TAINT(str);
return hash;
} }
static VALUE static VALUE
@ -798,7 +802,7 @@ equal_i(key, val1, data)
{ {
VALUE val2; VALUE val2;
if (val1 == Qnil) return ST_CONTINUE; if (key == Qnil) return ST_CONTINUE;
if (!st_lookup(data->tbl, key, &val2)) { if (!st_lookup(data->tbl, key, &val2)) {
data->result = Qfalse; data->result = Qfalse;
return ST_STOP; return ST_STOP;

View file

@ -5,7 +5,7 @@ $Date$
CGI.rb CGI.rb
Version 1.00 Version 1.01
Copyright (C) 1999 Network Applied Communication Laboratory, Inc. Copyright (C) 1999 Network Applied Communication Laboratory, Inc.
@ -182,7 +182,7 @@ class CGI
EOL = CR + LF EOL = CR + LF
v = $-v v = $-v
$-v = false $-v = false
VERSION = "1.00" VERSION = "1.01"
RELEASE_DATE = "$Date$" RELEASE_DATE = "$Date$"
$-v = v $-v = v
@ -958,6 +958,7 @@ convert string charset, and set language to "ja".
# - - # - -
def nn_element_def(element) def nn_element_def(element)
<<-END.gsub(/element\.downcase/n, element.downcase).gsub(/element\.upcase/n, element.upcase) <<-END.gsub(/element\.downcase/n, element.downcase).gsub(/element\.upcase/n, element.upcase)
attributes.delete_if{|k,v| v == nil }
"<element.upcase" + attributes.collect{|name, value| "<element.upcase" + attributes.collect{|name, value|
" " + CGI::escapeHTML(name) + " " + CGI::escapeHTML(name) +
if true == value if true == value
@ -978,6 +979,7 @@ convert string charset, and set language to "ja".
# - O EMPTY # - O EMPTY
def nOE_element_def(element) def nOE_element_def(element)
<<-END.gsub(/element\.downcase/n, element.downcase).gsub(/element\.upcase/n, element.upcase) <<-END.gsub(/element\.downcase/n, element.downcase).gsub(/element\.upcase/n, element.upcase)
attributes.delete_if{|k,v| v == nil }
"<element.upcase" + attributes.collect{|name, value| "<element.upcase" + attributes.collect{|name, value|
" " + CGI::escapeHTML(name) + " " + CGI::escapeHTML(name) +
if true == value if true == value
@ -992,7 +994,8 @@ convert string charset, and set language to "ja".
# O O or - O # O O or - O
def nO_element_def(element) def nO_element_def(element)
<<-END.gsub(/element\.downcase/n, element.downcase).gsub(/element\.upcase/n, element.upcase) <<-END.gsub(/element\.downcase/n, element.downcase).gsub(/element\.upcase/n, element.upcase)
"<element.upcase" + attributes.collect{|name, value| attributes.delete_if{|k,v| v == nil }
"<element.upcase" + attributes.collect{|name, value|
" " + CGI::escapeHTML(name) + " " + CGI::escapeHTML(name) +
if true == value if true == value
"" ""
@ -1834,9 +1837,26 @@ convert string charset, and set language to "ja".
def initialize(type = "query") def initialize(type = "query")
@params = nil
@cookies = nil
@output_cookies = nil
@output_hidden = nil
extend QueryExtension extend QueryExtension
initialize_query()
# @params, @cookies initialized in initialize_query #if defined? CGI::PARAMS
# @params = "C" + (CGI::PARAMS.nil? ? nil : CGI::PARAMS.dup).inspect
# @cookies = "C" + (CGI::COOKIES.nil? ? nil : CGI::COOKIES.dup).inspect
#else
initialize_query()
# @params, @cookies initialized in initialize_query
# eval "PARAMS = @params.nil? ? nil : @params.dup"
# eval "COOKIES = @cookies.nil? ? nil : @cookies.dup"
# at_exit {
# remove_const(PARAMS)
# remove_const(COOKIES)
# }
#end
case type case type
when "html3" when "html3"
@ -1860,6 +1880,12 @@ end
== HISTRY == HISTRY
=== Version 1.01 - wakou
1999/11/29 21:35:58
- support for ruby 1.5.0 (1999-11-20)
=== Version 1.00 - wakou === Version 1.00 - wakou
1999/09/13 23:00:58 1999/09/13 23:00:58

View file

@ -17,7 +17,7 @@ double strtod();
#endif #endif
#define MARSHAL_MAJOR 4 #define MARSHAL_MAJOR 4
#define MARSHAL_MINOR 1 #define MARSHAL_MINOR 2
#define TYPE_NIL '0' #define TYPE_NIL '0'
#define TYPE_TRUE 'T' #define TYPE_TRUE 'T'
@ -33,8 +33,11 @@ double strtod();
#define TYPE_REGEXP '/' #define TYPE_REGEXP '/'
#define TYPE_ARRAY '[' #define TYPE_ARRAY '['
#define TYPE_HASH '{' #define TYPE_HASH '{'
#define TYPE_HASH_DEF '}'
#define TYPE_STRUCT 'S' #define TYPE_STRUCT 'S'
#define TYPE_MODULE 'M' #define TYPE_MODULE_OLD 'M'
#define TYPE_CLASS 'c'
#define TYPE_MODULE 'm'
#define TYPE_SYMBOL ':' #define TYPE_SYMBOL ':'
#define TYPE_SYMLINK ';' #define TYPE_SYMLINK ';'
@ -260,8 +263,15 @@ w_object(obj, arg, limit)
} }
switch (BUILTIN_TYPE(obj)) { switch (BUILTIN_TYPE(obj)) {
case T_MODULE:
case T_CLASS: case T_CLASS:
w_byte(TYPE_CLASS, arg);
{
VALUE path = rb_class_path(obj);
w_bytes(RSTRING(path)->ptr, RSTRING(path)->len, arg);
}
return;
case T_MODULE:
w_byte(TYPE_MODULE, arg); w_byte(TYPE_MODULE, arg);
{ {
VALUE path = rb_class_path(obj); VALUE path = rb_class_path(obj);
@ -320,9 +330,17 @@ w_object(obj, arg, limit)
case T_HASH: case T_HASH:
w_uclass(obj, rb_cHash, arg); w_uclass(obj, rb_cHash, arg);
w_byte(TYPE_HASH, arg); if (!NIL_P(RHASH(obj)->ifnone)) {
w_byte(TYPE_HASH_DEF, arg);
}
else {
w_byte(TYPE_HASH, arg);
}
w_long(RHASH(obj)->tbl->num_entries, arg); w_long(RHASH(obj)->tbl->num_entries, arg);
st_foreach(RHASH(obj)->tbl, hash_each, &c_arg); st_foreach(RHASH(obj)->tbl, hash_each, &c_arg);
if (!NIL_P(RHASH(obj)->ifnone)) {
w_object(RHASH(obj)->ifnone, arg, limit);
}
break; break;
case T_STRUCT: case T_STRUCT:
@ -706,6 +724,7 @@ r_object(arg)
} }
case TYPE_HASH: case TYPE_HASH:
case TYPE_HASH_DEF:
{ {
int len = r_long(arg); int len = r_long(arg);
@ -716,6 +735,9 @@ r_object(arg)
VALUE value = r_object(arg); VALUE value = r_object(arg);
rb_hash_aset(v, key, value); rb_hash_aset(v, key, value);
} }
if (type = TYPE_HASH_DEF) {
RHASH(v)->ifnone = r_object(arg);
}
return v; return v;
} }
@ -788,13 +810,39 @@ r_object(arg)
} }
break; break;
case TYPE_MODULE: case TYPE_MODULE_OLD:
{ {
char *buf; char *buf;
r_bytes(buf, arg); r_bytes(buf, arg);
return r_regist(rb_path2class(buf), arg); return r_regist(rb_path2class(buf), arg);
} }
case TYPE_CLASS:
{
VALUE c;
char *buf;
r_bytes(buf, arg);
c = rb_path2class(buf);
if (TYPE(c) != T_CLASS) {
rb_raise(rb_eTypeError, "%s is not a class", buf);
}
return r_regist(c, arg);
}
case TYPE_MODULE:
{
VALUE m;
char *buf;
r_bytes(buf, arg);
m = rb_path2class(buf);
if (TYPE(m) != T_CLASS) {
rb_raise(rb_eTypeError, "%s is not a module", buf);
}
return r_regist(m, arg);
}
default: default:
rb_raise(rb_eArgError, "dump format error(0x%x)", type); rb_raise(rb_eArgError, "dump format error(0x%x)", type);
break; break;

View file

@ -18,7 +18,7 @@
;;; "Mode for editing ruby source files") ;;; "Mode for editing ruby source files")
;;; (setq auto-mode-alist ;;; (setq auto-mode-alist
;;; (append '(("\\.rb$" . ruby-mode)) auto-mode-alist)) ;;; (append '(("\\.rb$" . ruby-mode)) auto-mode-alist))
;;; (setq interpreter-mode-alist (append '(("^#!.*ruby" . ruby-mode)) ;;; (setq interpreter-mode-alist (append '(("ruby" . ruby-mode))
;;; interpreter-mode-alist)) ;;; interpreter-mode-alist))
;;; ;;;
;;; (2) set to road inf-ruby and set inf-ruby key definition in ruby-mode. ;;; (2) set to road inf-ruby and set inf-ruby key definition in ruby-mode.
@ -35,6 +35,9 @@
;;; HISTORY ;;; HISTORY
;;; senda - 8 Apr 1998: Created. ;;; senda - 8 Apr 1998: Created.
;;; $Log$ ;;; $Log$
;;; Revision 1.3 1999/12/01 09:24:18 matz
;;; 19991201
;;;
;;; Revision 1.2 1999/08/13 05:45:18 matz ;;; Revision 1.2 1999/08/13 05:45:18 matz
;;; 1.4.0 ;;; 1.4.0
;;; ;;;

7
re.c
View file

@ -275,7 +275,9 @@ static VALUE
rb_reg_source(re) rb_reg_source(re)
VALUE re; VALUE re;
{ {
return rb_str_new(RREGEXP(re)->str,RREGEXP(re)->len); VALUE str = rb_str_new(RREGEXP(re)->str,RREGEXP(re)->len);
if (OBJ_TAINTED(re)) OBJ_TAINT(str);
return str;
} }
static VALUE static VALUE
@ -715,7 +717,8 @@ match_to_s(match)
{ {
VALUE str = rb_reg_last_match(match); VALUE str = rb_reg_last_match(match);
if (NIL_P(str)) return rb_str_new(0,0); if (NIL_P(str)) str = rb_str_new(0,0);
if (OBJ_TAINTED(match)) OBJ_TAINT(str);
return str; return str;
} }

View file

@ -81,7 +81,7 @@ class Board
elsif y < 0 then 0 elsif y < 0 then 0
elsif y >= @hi then 0 elsif y >= @hi then 0
else else
@data[x*@wi+y] @data[y*@wi+x]
end end
end end
def count(x,y) def count(x,y)

View file

@ -2055,7 +2055,7 @@ rb_str_split_method(argc, argv, str)
if (!NIL_P(limit) && lim <= ++i) break; if (!NIL_P(limit) && lim <= ++i) break;
} }
end++; end++;
if (ismbchar(*ptr)) ptr++; if (ismbchar(*ptr)) {ptr++; end++;}
} }
} }
} }

View file

@ -1,4 +1,4 @@
#define RUBY_VERSION "1.5.0" #define RUBY_VERSION "1.5.0"
#define RUBY_RELEASE_DATE "1999-11-17" #define RUBY_RELEASE_DATE "1999-12-01"
#define RUBY_VERSION_CODE 150 #define RUBY_VERSION_CODE 150
#define RUBY_RELEASE_CODE 19991117 #define RUBY_RELEASE_CODE 19991201