[Ttssh2-commit] [6448] Paste64 周りのコードの整理

Back to archive index

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;



Ttssh2-commit メーリングリストの案内
Back to archive index