aboutsummaryrefslogtreecommitdiffstats
path: root/dir.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-06-03 22:12:24 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-06-03 22:12:24 +0000
commit4056e6adde5b0623c602e5ddc5e34d5b5db11235 (patch)
tree6f9c935edf020670616d4f668e39d1433198adf1 /dir.c
parent7cae1b34eb510ddfab024325480b0a15a688d3be (diff)
downloadruby-4056e6adde5b0623c602e5ddc5e34d5b5db11235.tar.gz
dir.c: FNM_SHORTNAME
* dir.c (dirent_match): match short names only when FNM_SHORTNAME flag is given, for the backward compatibility, and the new behavior is often dangerous. [ruby-core:69435] [Bug #11206] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50760 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'dir.c')
-rw-r--r--dir.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/dir.c b/dir.c
index a6934bda6a..8aadef4bf9 100644
--- a/dir.c
+++ b/dir.c
@@ -157,6 +157,11 @@ has_nonascii(const char *ptr, size_t len)
#else
#define FNM_SYSCASE 0
#endif
+#if _WIN32
+#define FNM_SHORTNAME 0x20
+#else
+#define FNM_SHORTNAME 0
+#endif
#define FNM_NOMATCH 1
#define FNM_ERROR 2
@@ -1595,7 +1600,7 @@ dirent_match(const char *pat, rb_encoding *enc, const char *name, const struct d
{
if (fnmatch(pat, enc, name, flags) == 0) return 1;
#ifdef _WIN32
- if (dp->d_altname) {
+ if (dp->d_altname && (flags & FNM_SHORTNAME)) {
if (fnmatch(pat, enc, dp->d_altname, flags) == 0) return 1;
}
#endif
@@ -2636,4 +2641,11 @@ Init_Dir(void)
* 0.
*/
rb_file_const("FNM_SYSCASE", INT2FIX(FNM_SYSCASE));
+
+ /* Document-const: File::Constants::FNM_SHORTNAME
+ *
+ * Makes patterns to match short names if existing. Valid only
+ * on Microsoft Windows.
+ */
+ rb_file_const("FNM_SHORTNAME", INT2FIX(FNM_SHORTNAME));
}