summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-03-30 09:26:09 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-03-30 09:26:09 +0000
commit38af94c6abaaa20aeaa1ffafbe3f6ff962f63eaa (patch)
treeee5ca5d6f52312d1d6fd79c8e1f01ad3014ca45d
parent635bdf6f13712b7bb536a469734a5b4446e1923e (diff)
* file.c (rb_file_dirname): split from rb_file_s_dirname.
* load.c (rb_f_require_relative): use absolute path instead of expanded path. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27111 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rw-r--r--file.c8
-rw-r--r--include/ruby/intern.h1
-rw-r--r--load.c5
4 files changed, 17 insertions, 4 deletions
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 <nobu@ruby-lang.org>
+
+ * 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 <knu@iDaemons.org>
* 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,9 +3428,15 @@ 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