Skip to content

Commit

Permalink
Merge pull request #1455 from sanomari/fix_#1449
Browse files Browse the repository at this point in the history
#1449を訂正してADSを使えるにする
  • Loading branch information
sanomari authored Nov 2, 2020
2 parents 8acb720 + 6fa946c commit 7cc6497
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 7 deletions.
12 changes: 7 additions & 5 deletions sakura_core/util/file.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@
#include "StdAfx.h"
#include <io.h>
#include "file.h"

#include <Shlwapi.h>

#include "charset/CharPointer.h"
#include "util/module.h"
#include "util/window.h"
Expand All @@ -49,12 +52,11 @@ bool fexist(LPCWSTR pszPath)
*/
bool IsInvalidFilenameChars( const std::wstring_view& strPath )
{
// ファイル名に使えない文字
constexpr const wchar_t invalidFilenameChars[] = L":*?\"<>|";
// ファイル名に使えない文字(ADSを使えるように':'は除外する)
constexpr const wchar_t invalidFilenameChars[] = L"*?\"<>|";

// 文字列中の最後のパス区切り位置を検出してファイル名を抽出する
const auto lastPathSep = strPath.find_last_of( L"\\/" );
const auto strFilename = lastPathSep == std::wstring_view::npos ? strPath : strPath.substr( lastPathSep + 1 );
// 文字列中のファイル名を抽出する
std::wstring_view strFilename = ::PathFindFileNameW( strPath.data() );

// ファイル名に使えない文字が含まれる場合、trueを返す
return ::wcscspn( strFilename.data(), invalidFilenameChars ) < strFilename.length();
Expand Down
2 changes: 1 addition & 1 deletion tests/unittests/test-ccommandline.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -851,8 +851,8 @@ TEST(CCommandLine, ParseFileNameIncludesInvalidFilenameChars)
{
// ファイル名に使えない文字 = "\\/:*?\"<>|"
// このうち、\\と/はパス区切りのため実質対象外になる。
// このうち、:は代替データストリーム(ADS)の識別記号のため対象外とする。
const std::wstring_view badNames[] = {
L"localhost:8080",
L"test*.txt",
L"test?.txt",
L"test\".txt",
Expand Down
3 changes: 2 additions & 1 deletion tests/unittests/test-file.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ TEST( file, IsInvalidFilenameChars )
EXPECT_FALSE(IsInvalidFilenameChars(L"C:\\"));
EXPECT_FALSE(IsInvalidFilenameChars(L"C:/"));

EXPECT_TRUE(IsInvalidFilenameChars(L"localhost:8080"));
EXPECT_FALSE(IsInvalidFilenameChars(L"test:001.txt"));

EXPECT_TRUE(IsInvalidFilenameChars(L"test*.txt"));
EXPECT_TRUE(IsInvalidFilenameChars(L"test?.txt"));
EXPECT_TRUE(IsInvalidFilenameChars(L"test\".txt"));
Expand Down

0 comments on commit 7cc6497

Please sign in to comment.