aboutsummaryrefslogtreecommitdiffstats
path: root/dir.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-07-09 01:20:20 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-07-09 01:20:20 +0000
commit7dc8c7b065305ec774784fe29b4aaa2358e3d25e (patch)
tree08e7127d98a6593b8e3b22b259b4f1ffe4dac67d /dir.c
parent2cf1c410d5efc4cf9d258c7893c7315a35f2bb70 (diff)
downloadruby-7dc8c7b065305ec774784fe29b4aaa2358e3d25e.tar.gz
dir.c: fix directory glob
* dir.c (glob_helper): fix directory glob which resulted in lacking the first byte. adjust the length of basename to be appended as well as removing the heading path, not the length of the joined path. [ruby-dev:50588] [Bug #14899] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63909 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/dir.c b/dir.c
index a7874bc73d..1670a476ee 100644
--- a/dir.c
+++ b/dir.c
@@ -2068,10 +2068,11 @@ glob_helper(
if (status) return status;
}
if (match_dir && pathtype == path_directory) {
- const char *subpath = path + baselen + (baselen && path[baselen] == '/');
- char *tmp = join_path(subpath, namelen, dirsep, "", 0);
+ int seplen = (baselen && path[baselen] == '/');
+ const char *subpath = path + baselen + seplen;
+ char *tmp = join_path(subpath, namelen - seplen, dirsep, "", 0);
if (!tmp) return -1;
- status = glob_call_func(funcs->match, tmp + (baselen ? dirsep : 0), arg, enc);
+ status = glob_call_func(funcs->match, tmp, arg, enc);
GLOB_FREE(tmp);
if (status) return status;
}