Closed mattn closed 9 years ago
えと、問題点は見えてまして -R
のオプションに限った話ではないんです。
https://github.com/vim-jp/ctags/blob/master/strlist.c#L250
Windows には fnmatch が無いので *.js
とか指定しても strcmp で判定されてしまうので動かなくて当然なのです。
Windows の場合だと PathMatchSpec という関数でワイルドカードマッチ出来ますのでそれで対応する予定です。
http://msdn.microsoft.com/en-us/library/windows/desktop/bb773727(v=vs.85).aspx
これで直りました。
diff --git a/mk_mingw.mak b/mk_mingw.mak
index 2b3a3ca..fa43785 100644
--- a/mk_mingw.mak
+++ b/mk_mingw.mak
@@ -12,7 +12,7 @@ DEFINES = -DWIN32 $(REGEX_DEFINES) -DHAVE_ICONV
INCLUDES = -I. -Ignu_regex
CC = gcc
OBJEXT = o
-LDFLAGS = -liconv
+LDFLAGS = -liconv -lshlwapi
OBJECTS += $(REGEX_SOURCES:%.c=%.o)
ctags.exe: OPT = -O4
diff --git a/strlist.c b/strlist.c
index e92f603..fdebe99 100644
--- a/strlist.c
+++ b/strlist.c
@@ -17,8 +17,13 @@
#include <string.h>
#ifdef HAVE_FNMATCH_H
# include <fnmatch.h>
+#elif defined(_WIN32)
+/* NOTE: including shlwapi.h makes compilation error because it contains
+ * boolean type definition. So use extern here. */
+int __stdcall PathMatchSpecA(const char* const, const char* const);
#endif
+
#include "debug.h"
#include "read.h"
#include "routines.h"
@@ -253,6 +258,8 @@ static boolean fileNameMatched (
const char* const pattern = vStringValue (vpattern);
#if defined (HAVE_FNMATCH)
return (boolean) (fnmatch (pattern, fileName, 0) == 0);
+#elif defined (_WIN32)
+ return (boolean) (PathMatchSpecA (fileName, pattern) != 0);
#elif defined (CASE_INSENSITIVE_FILENAMES)
return (boolean) (strcasecmp (pattern, fileName) == 0);
#else
本リポジトリの encoding-option ブランチに対して作成しています。
こちらについてはオフィシャルで修正されるべきかなーと思いますので後日オフィシャル向けのパッチを提出する予定です。
まったく的外れなコメントをしてしまいました。失礼しました。 PathMatchSpec というライブラリ関数があるのですね。勉強なります。 オフィシャル向けのパッチが出てくるのを楽しみに待っています。
feedback を付けましたが、オフィシャル動作で直ってるなら閉じます。
universal-ctags では直っているので閉じます。
で js がマッチしてしまう。