зеркало из https://github.com/github/ruby.git
dir.c: fix Dir.glob starts with brace
* dir.c (ruby_glob0): expand braces if a glob pattern starts with brace. [ruby-core:91728] [Bug #15649] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67332 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
638c968582
Коммит
0f63d96116
29
dir.c
29
dir.c
|
@ -2433,6 +2433,24 @@ push_caller(const char *path, VALUE val, void *enc)
|
|||
return status;
|
||||
}
|
||||
|
||||
static int ruby_glob0(const char *path, int fd, const char *base, int flags,
|
||||
const ruby_glob_funcs_t *funcs, VALUE arg, rb_encoding *enc);
|
||||
|
||||
struct push_glob0_args {
|
||||
int fd;
|
||||
const char *base;
|
||||
int flags;
|
||||
const ruby_glob_funcs_t *funcs;
|
||||
VALUE arg;
|
||||
};
|
||||
|
||||
static int
|
||||
push_glob0_caller(const char *path, VALUE val, void *enc)
|
||||
{
|
||||
struct push_glob0_args *arg = (struct push_glob0_args *)val;
|
||||
return ruby_glob0(path, arg->fd, arg->base, arg->flags, arg->funcs, arg->arg, enc);
|
||||
}
|
||||
|
||||
static int
|
||||
ruby_glob0(const char *path, int fd, const char *base, int flags,
|
||||
const ruby_glob_funcs_t *funcs, VALUE arg,
|
||||
|
@ -2445,6 +2463,17 @@ ruby_glob0(const char *path, int fd, const char *base, int flags,
|
|||
int status, dirsep = FALSE;
|
||||
|
||||
start = root = path;
|
||||
|
||||
if (*root == '{') {
|
||||
struct push_glob0_args args;
|
||||
args.fd = fd;
|
||||
args.base = base;
|
||||
args.flags = flags;
|
||||
args.funcs = funcs;
|
||||
args.arg = arg;
|
||||
return ruby_brace_expand(path, flags, push_glob0_caller, (VALUE)&args, enc, Qfalse);
|
||||
}
|
||||
|
||||
flags |= FNM_SYSCASE;
|
||||
#if defined DOSISH
|
||||
root = rb_enc_path_skip_prefix(root, root + strlen(root), enc);
|
||||
|
|
|
@ -205,6 +205,14 @@ class TestDir < Test::Unit::TestCase
|
|||
end
|
||||
end
|
||||
|
||||
def test_glob_starts_with_brace
|
||||
Dir.chdir(@root) do
|
||||
bug15649 = '[ruby-core:91728] [Bug #15649]'
|
||||
assert_equal(["#{@root}/a", "#{@root}/b"],
|
||||
Dir.glob("{#{@root}/a,#{@root}/b}"), bug15649)
|
||||
end
|
||||
end
|
||||
|
||||
if Process.const_defined?(:RLIMIT_NOFILE)
|
||||
def test_glob_too_may_open_files
|
||||
assert_separately([], "#{<<-"begin;"}\n#{<<-'end;'}", chdir: @root)
|
||||
|
|
Загрузка…
Ссылка в новой задаче