[Ttssh2-commit] [4768] スペース等が含まれている場合にスキップするようにした。

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2011年 12月 6日 (火) 17:17:56 JST


Revision: 4768
          http://sourceforge.jp/projects/ttssh2/svn/view?view=rev&revision=4768
Author:   doda
Date:     2011-12-06 17:17:56 +0900 (Tue, 06 Dec 2011)
Log Message:
-----------
スペース等が含まれている場合にスキップするようにした。

Modified Paths:
--------------
    trunk/teraterm/common/ttlib.c

-------------- next part --------------
Modified: trunk/teraterm/common/ttlib.c
===================================================================
--- trunk/teraterm/common/ttlib.c	2011-12-04 12:50:16 UTC (rev 4767)
+++ trunk/teraterm/common/ttlib.c	2011-12-06 08:17:56 UTC (rev 4768)
@@ -10,6 +10,7 @@
 #include <stdio.h>
 #include "tttypes.h"
 #include <shlobj.h>
+#include <ctype.h>
 
 // for _ismbblead
 #include <mbctype.h>
@@ -41,50 +42,50 @@
 
 int b64decode(PCHAR dst, int dsize, PCHAR src)
 {
-	unsigned int b;
+	unsigned int b = 0;
 	char c;
-	int len = 0;
+	int len = 0, state = 0;
 
-	if (src == NULL || dst == NULL || dsize == 0) {
+	if (src == NULL || dst == NULL || dsize == 0)
 		return 0;
-	}
 
 	while (1) {
-		if ((c = b64dec_table[*src++]) == -1) {
-			break;
+		if (isspace(*src)) {
+			src++;
+			continue;
 		}
-		b = c << 18;
 
-		if ((c = b64dec_table[*src++]) == -1) {
+		if ((c = b64dec_table[*src++]) == -1)
 			break;
-		}
-		b |= c << 12;
 
-		dst[len++] = (b >> 16) & 0xff;
-		if (len >= dsize) {
-			break;
-		}
+		b = (b << 6) | c;
+		state++;
 
-		if ((c = b64dec_table[*src++]) == -1) {
-			break;
+		if (state == 4) {
+			if (dsize > len)
+				dst[len++] = (b >> 16) & 0xff;
+			if (dsize > len)
+				dst[len++] = (b >> 8) & 0xff;
+			if (dsize > len)
+				dst[len++] = b & 0xff;
+			state = 0;
+			if (dsize <= len)
+				break;
 		}
-		b |= c << 6;
+	}
 
-		dst[len++] = (b >> 8) & 0xff;
-		if (len >= dsize) {
-			break;
-		}
-
-		if ((c = b64dec_table[*src++]) == -1) {
-			break;
-		}
-		b |= c;
-
-		dst[len++] = b & 0xff;
-		if (len >= dsize) {
-			break;
-		}
+	if (state == 2) {
+		b <<= 4;
+		if (dsize > len)
+			dst[len++] = (b >> 8) & 0xff;
 	}
+	else if (state == 3) {
+		b <<= 6;
+		if (dsize > len)
+			dst[len++] = (b >> 16) & 0xff;
+		if (dsize > len)
+			dst[len++] = (b >> 8) & 0xff;
+	}
 	return len;
 }
 



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