OSDN Git Service

Fix bugs of corruption during conversion from Shift_JIS to UTF-8.
[ffftp/ffftp.git] / mbswrapper.c
index 4bc022c..fa04fee 100644 (file)
@@ -715,6 +715,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 +732,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 +754,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 +771,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