svnno****@sourc*****
svnno****@sourc*****
2016年 7月 15日 (金) 18:33:33 JST
Revision: 6448 http://sourceforge.jp/projects/ttssh2/scm/svn/commits/6448 Author: doda Date: 2016-07-15 18:33:33 +0900 (Fri, 15 Jul 2016) Log Message: ----------- Paste64 周りのコードの整理 Modified Paths: -------------- trunk/teraterm/teraterm/clipboar.c -------------- next part -------------- Modified: trunk/teraterm/teraterm/clipboar.c =================================================================== --- trunk/teraterm/teraterm/clipboar.c 2016-07-15 09:33:31 UTC (rev 6447) +++ trunk/teraterm/teraterm/clipboar.c 2016-07-15 09:33:33 UTC (rev 6448) @@ -236,10 +236,9 @@ { HANDLE tmpHandle = NULL; char *tmpPtr = NULL; - int len, hlen, flen, blen; + int len, header_len, footer_len, b64_len; UINT Cf; LPWSTR tmpPtrWide = NULL; - int mb_len; if (! cv.Ready) { return; @@ -282,60 +281,55 @@ } } - if (Cf == CF_UNICODETEXT) { - if (tmpHandle) { + + if (tmpHandle) { + if (Cf == CF_UNICODETEXT) { if ((tmpPtrWide = GlobalLock(tmpHandle)) != NULL) { - hlen = strlen(header); - flen = strlen(footer); - mb_len = WideCharToMultiByte(CP_ACP, 0, tmpPtrWide, -1, 0, 0, NULL, NULL); - blen = (mb_len + 2) / 3 * 4 + hlen + flen + 1; - if ((CBMemHandle = GlobalAlloc(GHND, blen)) != NULL) { - if ((CBMemPtr = GlobalLock(CBMemHandle)) != NULL) { - if (hlen > 0) { - strncpy_s(CBMemPtr, blen, header, _TRUNCATE); - } - tmpPtr = (char *)calloc(sizeof(char), mb_len); - WideCharToMultiByte(CP_ACP, 0, tmpPtrWide, -1, tmpPtr, mb_len, NULL, NULL); - b64encode(CBMemPtr + hlen, blen - hlen, tmpPtr, mb_len-1); - free(tmpPtr); - if (flen > 0) { - strncat_s(CBMemPtr, blen, footer, _TRUNCATE); - } - TalkStatus=IdTalkCB; - GlobalUnlock(CBMemPtr); - CBMemPtr = NULL; - } + len = WideCharToMultiByte(CP_ACP, 0, tmpPtrWide, -1, 0, 0, NULL, NULL); + if ((tmpPtr = (char *)calloc(sizeof(char), len)) != NULL) { + WideCharToMultiByte(CP_ACP, 0, tmpPtrWide, -1, tmpPtr, len, NULL, NULL); } + // WideCharToMultiByte \x82œ\xBE\x82\xE7\x82\xEA\x82\xE9\x82͖̂\x96\x94\xF6\x82\xCC \0 \x8D\x9E\x82݂̒\xB7\x82\xB3 + // \0 \x82\xF0\x83G\x83\x93\x83R\x81[\x83h\x91ΏۂɊ܂߂Ȃ\xA2\x88ׂ\xC9 1 \x8C\xB8\x82炷 + len--; GlobalUnlock(tmpPtrWide); } - CloseClipboard(); } - } - else { - if (tmpHandle) { + else { if ((tmpPtr = GlobalLock(tmpHandle)) != NULL) { - hlen = strlen(header); - flen = strlen(footer); len = strlen(tmpPtr); - blen = (len + 2) / 3 * 4 + hlen + flen + 1; - if ((CBMemHandle = GlobalAlloc(GHND, blen)) != NULL) { - if ((CBMemPtr = GlobalLock(CBMemHandle)) != NULL) { - if (hlen > 0) { - strncpy_s(CBMemPtr, blen, header, _TRUNCATE); - } - b64encode(CBMemPtr + hlen, blen - hlen, tmpPtr, len); - if (flen > 0) { - strncat_s(CBMemPtr, blen, footer, _TRUNCATE); - } - TalkStatus=IdTalkCB; - GlobalUnlock(CBMemPtr); - CBMemPtr = NULL; + } + } + + if (tmpPtr) { + header_len = strlen(header); + footer_len = strlen(footer); + + b64_len = (len + 2) / 3 * 4 + header_len + footer_len + 1; + + if ((CBMemHandle = GlobalAlloc(GHND, b64_len)) != NULL) { + if ((CBMemPtr = GlobalLock(CBMemHandle)) != NULL) { + if (header_len > 0) { + strncpy_s(CBMemPtr, b64_len, header, _TRUNCATE); } + b64encode(CBMemPtr + header_len, b64_len - header_len, tmpPtr, len); + if (footer_len > 0) { + strncat_s(CBMemPtr, b64_len, footer, _TRUNCATE); + } + TalkStatus=IdTalkCB; + GlobalUnlock(CBMemPtr); + CBMemPtr = NULL; } + } + + if (Cf == CF_UNICODETEXT) { + free(tmpPtr); + } + else { GlobalUnlock(tmpPtr); } - CloseClipboard(); } + CloseClipboard(); } CBRetrySend = FALSE;