diff --git a/ChangeLog b/ChangeLog index 7b5648259c..0fbca60a39 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Tue Mar 30 18:25:52 2010 Nobuyoshi Nakada + + * file.c (rb_file_dirname): split from rb_file_s_dirname. + + * load.c (rb_f_require_relative): use absolute path instead of + expanded path. + Tue Mar 30 13:57:08 2010 Akinori MUSHA * process.c (proc_daemon): Process.daemon should raise an error on diff --git a/file.c b/file.c index 557085e1aa..af2730a12f 100644 --- a/file.c +++ b/file.c @@ -3428,8 +3428,14 @@ rb_file_s_basename(int argc, VALUE *argv) * File.dirname("/home/gumby/work/ruby.rb") #=> "/home/gumby/work" */ -VALUE +static VALUE rb_file_s_dirname(VALUE klass, VALUE fname) +{ + return rb_file_dirname(fname); +} + +VALUE +rb_file_dirname(VALUE fname) { const char *name, *root, *p; VALUE dirname; diff --git a/include/ruby/intern.h b/include/ruby/intern.h index 1ae13ee73b..c53728eec8 100644 --- a/include/ruby/intern.h +++ b/include/ruby/intern.h @@ -355,6 +355,7 @@ VALUE rb_file_s_expand_path(int, VALUE *); VALUE rb_file_expand_path(VALUE, VALUE); VALUE rb_file_s_absolute_path(int, VALUE *); VALUE rb_file_absolute_path(VALUE, VALUE); +VALUE rb_file_dirname(VALUE fname); void rb_file_const(const char*, VALUE); int rb_file_load_ok(const char *); int rb_find_file_ext_safe(VALUE*, const char* const*, int); diff --git a/load.c b/load.c index 2c391a1b86..8742d28b2e 100644 --- a/load.c +++ b/load.c @@ -452,13 +452,12 @@ VALUE rb_f_require_relative(VALUE obj, VALUE fname) { VALUE rb_current_realfilepath(void); - VALUE rb_file_s_dirname(VALUE klass, VALUE fname); VALUE base = rb_current_realfilepath(); if (NIL_P(base)) { rb_raise(rb_eLoadError, "cannot infer basepath"); } - base = rb_file_s_dirname(rb_cFile, base); - return rb_require_safe(rb_file_expand_path(fname, base), rb_safe_level()); + base = rb_file_dirname(base); + return rb_require_safe(rb_file_absolute_path(fname, base), rb_safe_level()); } static int