https://bugs.ruby-lang.org/https://bugs.ruby-lang.org/favicon.ico?17113305112015-06-02T02:49:50ZRuby Issue Tracking SystemRuby master - Bug #11206: short file name match incompatibilityhttps://bugs.ruby-lang.org/issues/11206?journal_id=527102015-06-02T02:49:50Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul></ul><p>Conflict with <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: can't glob win32 short pathname (Closed)" href="https://bugs.ruby-lang.org/issues/10819">#10819</a>.<br>
Can these reach a compromise?</p> Ruby master - Bug #11206: short file name match incompatibilityhttps://bugs.ruby-lang.org/issues/11206?journal_id=527152015-06-02T05:43:18Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul></ul><p>Running these commands as the administrator would fix the problem:</p>
<ol>
<li><code>fsutil 8dot3name set 1</code></li>
<li><code>fsutil 8dot3name strip /s /f c:\</code></li>
</ol> Ruby master - Bug #11206: short file name match incompatibilityhttps://bugs.ruby-lang.org/issues/11206?journal_id=527162015-06-02T12:18:50Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul></ul><p>For better or worse, extension names are something special things on Windows, so what about matching extension of long names, but not short names?</p>
<pre><code class="diff syntaxhl" data-language="diff"><span class="gh">diff --git i/dir.c w/dir.c
index a6934bd..2b03a72 100644
</span><span class="gd">--- i/dir.c
</span><span class="gi">+++ w/dir.c
</span><span class="p">@@ -1596,7 +1596,21 @@</span> 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) {
<span class="gd">- if (fnmatch(pat, enc, dp->d_altname, flags) == 0) return 1;
</span><span class="gi">+ const char *altname = dp->d_altname;
+ long altextlen = strlen(dp->d_altname);
+ const char *altext = ruby_enc_find_extname(altname, &altextlen, enc);
+ if (altext) {
+ long extlen = NAMLEN(dp);
+ const char *ext = ruby_enc_find_extname(name, &extlen, enc);
+ if (ext) {
+ char *tmpname = ALLOCA_N(char, altext - altname + extlen + 1);
+ memcpy(tmpname, altname, altext - altname);
+ memcpy(tmpname + (altext - altname), ext, extlen);
+ tmpname[altext - altname + extlen] = '\0';
+ altname = tmpname;
+ }
+ }
+ if (fnmatch(pat, enc, altname, flags) == 0) return 1;
</span> }
#endif
return 0;
</code></pre> Ruby master - Bug #11206: short file name match incompatibilityhttps://bugs.ruby-lang.org/issues/11206?journal_id=527172015-06-02T12:29:51Zusa (Usaku NAKAMURA)usa@garbagecollect.jp
<ul></ul><p>IMO, ruby should offer an option to users to select matching short names or not. (maybe File::FNM_SHORTNAME, or somehow.)<br>
And, the default should not match short names.</p> Ruby master - Bug #11206: short file name match incompatibilityhttps://bugs.ruby-lang.org/issues/11206?journal_id=527262015-06-03T08:17:43Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul></ul><p><a href="https://github.com/ruby/ruby/compare/trunk...nobu:bug/11206-fnm_shortname" class="external">https://github.com/ruby/ruby/compare/trunk...nobu:bug/11206-fnm_shortname</a></p> Ruby master - Bug #11206: short file name match incompatibilityhttps://bugs.ruby-lang.org/issues/11206?journal_id=527272015-06-03T09:14:59Zusa (Usaku NAKAMURA)usa@garbagecollect.jp
<ul></ul><p>Seems good.<br>
Thank you, nobu. Commit it, please.</p> Ruby master - Bug #11206: short file name match incompatibilityhttps://bugs.ruby-lang.org/issues/11206?journal_id=527322015-06-03T22:12:50Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li></ul><p>Applied in changeset r50760.</p>
<hr>
<p>dir.c: FNM_SHORTNAME</p>
<ul>
<li>dir.c (dirent_match): match short names only when FNM_SHORTNAME<br>
flag is given, for the backward compatibility, and the new<br>
behavior is often dangerous. <a href="/issues/11206">[ruby-core:69435]</a> [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: short file name match incompatibility (Closed)" href="https://bugs.ruby-lang.org/issues/11206">#11206</a>]</li>
</ul> Ruby master - Bug #11206: short file name match incompatibilityhttps://bugs.ruby-lang.org/issues/11206?journal_id=527332015-06-03T22:19:20Zusa (Usaku NAKAMURA)usa@garbagecollect.jp
<ul><li><strong>Related to</strong> <i><a class="issue tracker-1 status-5 priority-4 priority-default closed" href="/issues/10819">Bug #10819</a>: can't glob win32 short pathname </i> added</li></ul> Ruby master - Bug #11206: short file name match incompatibilityhttps://bugs.ruby-lang.org/issues/11206?journal_id=527352015-06-03T22:19:41Zusa (Usaku NAKAMURA)usa@garbagecollect.jp
<ul><li><strong>Backport</strong> changed from <i>2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN</i> to <i>2.0.0: DONTNEED, 2.1: DONTNEED, 2.2: UNKNOWN</i></li></ul>