PathMatchSpecの挙動

Windows上でワイルドカードを処理するAPIがPathMatchSpecである。
http://msdn.microsoft.com/en-us/library/bb773727(VS.85).aspx
しかしここに載っているサンプルがあまりにもセンスが悪い。

ということでテストコードを書いた。コードは後述。結果は以下。

"somepath.html" , "somepath?html" => true
"somepath.html" , "" => true
"somepath.html" , "(null)" => false
"" , "*" => true
"" , "a" => false
"somepath" , "*." => false
"somepath" , "*.*" => true
"hoge\fuga.html" , "hoge*" => true
"hoge\fuga.html" , "hoge*html" => true
"hoge\fuga.html" , "hoge\*" => true

コードはこんな。

#include <stdio.h>
#include <Shlwapi.h>
#pragma comment(lib, "shlwapi.lib")

void test(const wchar_t* path, const wchar_t* spec){
	wprintf(L"\"%s\" , \"%s\" => %s\n"
		, path, spec
		, ::PathMatchSpec(path, spec)?L"true":L"false");
}

int main(const int &){
	test(L"somepath.html", L"somepath?html");
	test(L"somepath.html", L"");
	test(L"somepath.html", NULL);
	test(L"", L"*");
	test(L"", L"a");
	test(L"somepath", L"*.");
	test(L"somepath", L"*.*");
	test(L"hoge\\fuga.html", L"hoge*");
	test(L"hoge\\fuga.html", L"hoge*html");
	test(L"hoge\\fuga.html", L"hoge\\*");
}