Skip to content

Commit

Permalink
* file.c (rb_get_path): get path string via "to_path" method if
Browse files Browse the repository at this point in the history
  path object is not a string. [Ruby2]

* gc.c (rb_gc_call_finalizer_at_exit): do not free threads in the
  exit finalizers.

* io.c (rb_io_reopen): should use rb_io_check_io().


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6114 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information
matz committed Apr 7, 2004
1 parent 43db576 commit 4ded52b
Show file tree
Hide file tree
Showing 17 changed files with 221 additions and 110 deletions.
10 changes: 10 additions & 0 deletions ChangeLog
Expand Up @@ -13,6 +13,16 @@ Wed Apr 7 00:24:34 2004 Masatoshi SEKI <m_seki@mva.biglobe.ne.jp>

* test/rinda/test_rinda.rb

Tue Apr 6 18:24:18 2004 Yukihiro Matsumoto <matz@ruby-lang.org>

* file.c (rb_get_path): get path string via "to_path" method if
path object is not a string. [Ruby2]

* gc.c (rb_gc_call_finalizer_at_exit): do not free threads in the
exit finalizers.

* io.c (rb_io_reopen): should use rb_io_check_io().

Tue Apr 6 16:46:09 2004 Tanaka Akira <akr@m17n.org>

* configure.in: check the size of time_t.
Expand Down
60 changes: 48 additions & 12 deletions array.c
Expand Up @@ -16,11 +16,13 @@
#include "util.h"
#include "st.h"

VALUE rb_cArray;
VALUE rb_cArray, rb_cValues;

static ID id_cmp;

#define ARY_DEFAULT_SIZE 16


void
rb_mem_clear(mem, size)
register VALUE *mem;
Expand Down Expand Up @@ -193,17 +195,50 @@ rb_ary_new4(n, elts)
}

VALUE
rb_assoc_new(car, cdr)
VALUE car, cdr;
#ifdef HAVE_STDARG_PROTOTYPES
rb_values_new(long n, ...)
#else
rb_values_new(n, va_alist)
long n;
va_dcl
#endif
{
VALUE ary;
va_list ar;
VALUE val;
long i;

ary = rb_ary_new2(2);
RARRAY(ary)->ptr[0] = car;
RARRAY(ary)->ptr[1] = cdr;
RARRAY(ary)->len = 2;
val = ary_new(rb_cValues, n);
va_init_list(ar, n);
for (i=0; i<n; i++) {
RARRAY(val)->ptr[i] = va_arg(ar, VALUE);
}
va_end(ar);
RARRAY(val)->len = n;

return ary;
return val;
}

VALUE
rb_values_new2(n, elts)
long n;
const VALUE *elts;
{
VALUE val;

val = ary_new(rb_cValues, n);
if (n > 0 && elts) {
MEMCPY(RARRAY(val)->ptr, elts, VALUE, n);
}
RARRAY(val)->len = n;

return val;
}

VALUE
rb_assoc_new(car, cdr)
VALUE car, cdr;
{
return rb_values_new(2, car, cdr);
}

static VALUE
Expand Down Expand Up @@ -905,7 +940,6 @@ rb_ary_indexes(argc, argv, ary)
VALUE new_ary;
long i;

rb_warn("Array#%s is deprecated; use Array#values_at", rb_id2name(rb_frame_last_func()));
new_ary = rb_ary_new2(argc);
for (i=0; i<argc; i++) {
rb_ary_push(new_ary, rb_ary_aref(1, argv+i, ary));
Expand Down Expand Up @@ -1696,7 +1730,7 @@ rb_ary_collect_bang(ary)
}

VALUE
rb_values_at(obj, olen, argc, argv, func)
rb_get_values_at(obj, olen, argc, argv, func)
VALUE obj;
long olen;
int argc;
Expand Down Expand Up @@ -1749,7 +1783,7 @@ rb_ary_values_at(argc, argv, ary)
VALUE *argv;
VALUE ary;
{
return rb_values_at(ary, RARRAY(ary)->len, argc, argv, rb_ary_entry);
return rb_get_values_at(ary, RARRAY(ary)->len, argc, argv, rb_ary_entry);
}

/*
Expand Down Expand Up @@ -3016,4 +3050,6 @@ Init_Array()

id_cmp = rb_intern("<=>");
inspect_key = rb_intern("__inspect_key__");

rb_cValues = rb_define_class("Values", rb_cArray);
}
8 changes: 4 additions & 4 deletions dir.c
Expand Up @@ -379,7 +379,7 @@ dir_initialize(dir, dirname)
{
struct dir_data *dp;

SafeStringValue(dirname);
dirname = rb_get_path(dirname);
Data_Get_Struct(dir, struct dir_data, dp);
if (dp->dir) closedir(dp->dir);
if (dp->path) free(dp->path);
Expand Down Expand Up @@ -744,7 +744,7 @@ dir_s_chdir(argc, argv, obj)

rb_secure(2);
if (rb_scan_args(argc, argv, "01", &path) == 1) {
SafeStringValue(path);
path = rb_get_path(path);
dist = RSTRING(path)->ptr;
}
else {
Expand Down Expand Up @@ -806,8 +806,8 @@ check_dirname(dir)
{
char *path, *pend;

SafeStringValue(*dir);
rb_secure(2);
*dir = rb_get_path(*dir);
path = RSTRING(*dir)->ptr;
if (path && *(pend = rb_path_end(rb_path_skip_prefix(path)))) {
*dir = rb_str_new(path, pend - path);
Expand Down Expand Up @@ -1439,7 +1439,7 @@ rb_push_glob(str, flags)
else
ary = rb_ary_new();

SafeStringValue(str);
str = rb_get_path(str);
buf = xmalloc(RSTRING(str)->len + 1);

p = RSTRING(str)->ptr;
Expand Down
9 changes: 3 additions & 6 deletions eval.c
Expand Up @@ -6385,11 +6385,11 @@ rb_load(fname, wrap)
NODE *saved_cref = ruby_cref;
TMP_PROTECT;

if (wrap && ruby_safe_level >= 4) {
if (wrap && ruby_safe_level >= 4 && OBJ_TAINTED(fname)) {
StringValue(fname);
}
else {
SafeStringValue(fname);
fname = rb_get_path(fname);
}
tmp = rb_find_file(fname);
if (!tmp) {
Expand Down Expand Up @@ -6714,10 +6714,7 @@ rb_require_safe(fname, safe)
} volatile saved;
char *volatile ftptr = 0;

if (OBJ_TAINTED(fname)) {
rb_check_safe_obj(fname);
}
StringValue(fname);
fname = rb_get_path(fname);
saved.vmode = scope_vmode;
saved.node = ruby_current_node;
saved.func = ruby_frame->last_func;
Expand Down
2 changes: 2 additions & 0 deletions ext/zlib/zlib.c
Expand Up @@ -1757,6 +1757,7 @@ gzfile_close(gz, closeflag)
int closeflag;
{
VALUE io = gz->io;

gz->end(gz);
gz->io = Qnil;
gz->orig_name = Qnil;
Expand Down Expand Up @@ -2157,6 +2158,7 @@ gzfile_writer_end(gz)
gzfile_make_footer(gz);

if (ZSTREAM_IS_FINALIZE(&gz->z)) {
if (NIL_P(gz->io)) return;
rb_warn("Zlib::GzipWriter object must be closed explicitly.");
if (OBJ_IS_FREED(gz->io)) {
aborted = 1;
Expand Down

0 comments on commit 4ded52b

Please sign in to comment.