From 8cb6f21e1aadad2c1e114a7504425029300edb03 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 16 May 2014 16:49:38 +0000 Subject: dir.c: reduce matching * dir.c (glob_helper): reduce matching at non-mgaical path on Windows. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45966 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- dir.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'dir.c') diff --git a/dir.c b/dir.c index fb13be1c80..0a7cdbe889 100644 --- a/dir.c +++ b/dir.c @@ -1404,7 +1404,19 @@ glob_helper( if (magical || recursive) { struct dirent *dp; DIR *dirp; +# if DOSISH + char *plainname = 0; +# endif IF_HAVE_HFS(int hfs_p); +# if DOSISH + if (cur + 1 == end && (*cur)->type <= ALPHA) { + plainname = join_path(path, pathlen, dirsep, (*cur)->str, strlen((*cur)->str)); + if (!plainname) return -1; + dirp = do_opendir(plainname, flags, enc); + GLOB_FREE(plainname); + } + else +# endif dirp = do_opendir(*path ? path : ".", flags, enc); if (dirp == NULL) { # if FNM_SYSCASE || HAVE_HFS @@ -1489,6 +1501,12 @@ glob_helper( } switch (p->type) { case ALPHA: +# ifdef DOSISH + if (plainname) { + *new_end++ = p->next; + break; + } +# endif case MAGICAL: if (fnmatch(p->str, enc, name, flags) == 0) *new_end++ = p->next; -- cgit v1.2.3