OSDN Git Service

Remove PuTTY to prepare for release 1.99.
[ffftp/ffftp.git] / mbswrapper.c
index a051543..0651173 100644 (file)
@@ -578,6 +578,48 @@ int PutNextCharW(LPWSTR lpString, LPWSTR pLimit, LPWSTR* ppNext, DWORD Code)
        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
@@ -715,6 +757,7 @@ int MultiByteToWideCharAlternative(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiB
        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
@@ -731,8 +774,9 @@ int MultiByteToWideCharAlternative(UINT CodePage, DWORD dwFlags, LPCSTR lpMultiB
                        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
@@ -752,6 +796,7 @@ int WideCharToMultiByteAlternative(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideC
        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
@@ -768,8 +813,9 @@ int WideCharToMultiByteAlternative(UINT CodePage, DWORD dwFlags, LPCWSTR lpWideC
                        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
@@ -894,6 +940,18 @@ END_ROUTINE
        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
@@ -1225,7 +1283,7 @@ START_ROUTINE
                                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
@@ -2380,6 +2438,30 @@ END_ROUTINE
        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