summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-08-03 02:14:51 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-08-03 02:14:51 +0000
commit83a31e9e90b978d73cbcfa4c1b5e936bb395bafe (patch)
tree6333fe4b82ca513d3c33aebf183aec5086b5cef0
parent432e6805e1b14bc374724ab9fd03559811b871fb (diff)
dir.c: relax base option
* dir.c (dir_glob_options): relax base option. ignore when nil or an empty string as :base option. [Feature #13056] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59476 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--dir.c3
-rw-r--r--test/ruby/test_dir.rb3
2 files changed, 5 insertions, 1 deletions
diff --git a/dir.c b/dir.c
index 017f715080..c02c071b97 100644
--- a/dir.c
+++ b/dir.c
@@ -2466,7 +2466,7 @@ dir_glob_options(VALUE opt, VALUE *base, int *flags)
kw[0] = rb_intern("base");
if (flags) kw[1] = rb_intern("flags");
rb_get_kwargs(opt, kw, 0, flags ? 2 : 1, args);
- if (args[0] == Qundef) {
+ if (args[0] == Qundef || NIL_P(args[0])) {
*base = Qnil;
}
#if USE_OPENDIR_AT
@@ -2476,6 +2476,7 @@ dir_glob_options(VALUE opt, VALUE *base, int *flags)
#endif
else {
GlobPathValue(args[0], TRUE);
+ if (!RSTRING_LEN(args[0])) args[0] = Qnil;
*base = args[0];
}
if (flags && args[1] != Qundef) {
diff --git a/test/ruby/test_dir.rb b/test/ruby/test_dir.rb
index 9f8b8183dc..1c338030f3 100644
--- a/test/ruby/test_dir.rb
+++ b/test/ruby/test_dir.rb
@@ -206,6 +206,9 @@ class TestDir < Test::Unit::TestCase
files = %w[a/foo.c c/bar.c]
files.each {|n| File.write(File.join(@root, n), "")}
assert_equal(files, Dir.glob("*/*.c", base: @root).sort)
+ assert_equal(files, Dir.chdir(@root) {Dir.glob("*/*.c", base: ".").sort})
+ assert_equal(files, Dir.chdir(@root) {Dir.glob("*/*.c", base: "").sort})
+ assert_equal(files, Dir.chdir(@root) {Dir.glob("*/*.c", base: nil).sort})
end
def test_glob_base_dir