return Count;\r
}\r
\r
+// マルチバイト文字列のコードポイントの個数を取得\r
+int GetCodeCountM(LPCSTR lpString, int CharCount)\r
+{\r
+ int Count;\r
+ LPCSTR pLimit;\r
+ DWORD Code;\r
+ Count = 0;\r
+ if(CharCount == -1)\r
+ pLimit = lpString + strlen(lpString);\r
+ else\r
+ pLimit = lpString + CharCount;\r
+ while(lpString < pLimit)\r
+ {\r
+ Code = GetNextCharM(lpString, pLimit, &lpString);\r
+ if(Code == 0x80000000)\r
+ continue;\r
+ Count++;\r
+ }\r
+ return Count;\r
+}\r
+\r
+// ワイド文字列のコードポイントの個数を取得\r
+int GetCodeCountW(LPCWSTR lpString, int CharCount)\r
+{\r
+ int Count;\r
+ LPCWSTR pLimit;\r
+ DWORD Code;\r
+ Count = 0;\r
+ if(CharCount == -1)\r
+ pLimit = lpString + wcslen(lpString);\r
+ else\r
+ pLimit = lpString + CharCount;\r
+ while(lpString < pLimit)\r
+ {\r
+ Code = GetNextCharW(lpString, pLimit, &lpString);\r
+ if(Code == 0x80000000)\r
+ continue;\r
+ Count++;\r
+ }\r
+ return Count;\r
+}\r
+\r
// マルチバイト文字列の冗長表現を修正\r
// 修正があればTRUEを返す\r
// 修正後の文字列の長さは元の文字列の長さ以下のためpDstとpSrcに同じ値を指定可能\r
LPCSTR pMultiLimit;\r
LPWSTR pWideLimit;\r
DWORD Code;\r
+ int TempCount;\r
WCHAR Temp[8];\r
if(CodePage != CP_UTF8 || dwFlags != 0)\r
return MultiByteToWideChar(CodePage, dwFlags, lpMultiByteStr, cbMultiByte, lpWideCharStr, cchWideChar);\r
continue;\r
if(lpWideCharStr)\r
{\r
- WideCount += PutNextCharW(lpWideCharStr, pWideLimit, &lpWideCharStr, Code);\r
- if(lpWideCharStr >= pWideLimit)\r
+ TempCount = PutNextCharW(lpWideCharStr, pWideLimit, &lpWideCharStr, Code);\r
+ WideCount += TempCount;\r
+ if(TempCount == 0 && lpWideCharStr >= pWideLimit)\r
{\r
WideCount = 0;\r
break;\r
LPCWSTR pWideLimit;\r
LPSTR pMultiLimit;\r
DWORD Code;\r
+ int TempCount;\r
CHAR Temp[8];\r
if(CodePage != CP_UTF8 || dwFlags != 0)\r
return WideCharToMultiByte(CodePage, dwFlags, lpWideCharStr, cchWideChar, lpMultiByteStr, cbMultiByte, lpDefaultChar, lpUsedDefaultChar);\r
continue;\r
if(lpMultiByteStr)\r
{\r
- MultiCount += PutNextCharM(lpMultiByteStr, pMultiLimit, &lpMultiByteStr, Code);\r
- if(lpMultiByteStr >= pMultiLimit)\r
+ TempCount = PutNextCharM(lpMultiByteStr, pMultiLimit, &lpMultiByteStr, Code);\r
+ MultiCount += TempCount;\r
+ if(TempCount == 0 && lpMultiByteStr >= pMultiLimit)\r
{\r
MultiCount = 0;\r
break;\r
return r;\r
}\r
\r
+HANDLE FindFirstChangeNotificationM(LPCSTR lpPathName, BOOL bWatchSubtree, DWORD dwNotifyFilter)\r
+{\r
+ HANDLE r = INVALID_HANDLE_VALUE;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(lpPathName, -1);\r
+ r = FindFirstChangeNotificationW(pw0, bWatchSubtree, dwNotifyFilter);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
DWORD GetLogicalDriveStringsM(DWORD nBufferLength, LPSTR lpBuffer)\r
{\r
DWORD r = 0;\r
wLVFindInfo.lParam = pmLVFindInfo->lParam;\r
wLVFindInfo.pt = pmLVFindInfo->pt;\r
wLVFindInfo.vkDirection = pmLVFindInfo->vkDirection;\r
- r = SendMessageW(hWnd, LVM_FINDITEMW, wParam, (LPARAM)&wLVItem);\r
+ r = SendMessageW(hWnd, LVM_FINDITEMW, wParam, (LPARAM)&wLVFindInfo);\r
break;\r
case LVM_GETCOLUMNA:\r
pmLVColumn = (LVCOLUMNA*)lParam;\r
return r;\r
}\r
\r
+BOOL CreateDirectoryM(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes)\r
+{\r
+ BOOL r = FALSE;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(lpPathName, -1);\r
+ r = CreateDirectoryW(pw0, lpSecurityAttributes);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
+BOOL RemoveDirectoryM(LPCSTR lpPathName)\r
+{\r
+ BOOL r = FALSE;\r
+ wchar_t* pw0 = NULL;\r
+START_ROUTINE\r
+ pw0 = DuplicateMtoW(lpPathName, -1);\r
+ r = RemoveDirectoryW(pw0);\r
+END_ROUTINE\r
+ FreeDuplicatedString(pw0);\r
+ return r;\r
+}\r
+\r
int mkdirM(const char * _Path)\r
{\r
int r = -1;\r