[Ttssh2-commit] [8912] ログローテート時、新しいファイルにBOMが出力されるよう修正

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 8月 19日 (水) 00:32:24 JST


Revision: 8912
          https://osdn.net/projects/ttssh2/scm/svn/commits/8912
Author:   zmatsuo
Date:     2020-08-19 00:32:23 +0900 (Wed, 19 Aug 2020)
Log Message:
-----------
ログローテート時、新しいファイルにBOMが出力されるよう修正

Modified Paths:
--------------
    trunk/teraterm/teraterm/filesys_log.cpp
    trunk/teraterm/teraterm/filesys_log.h
    trunk/teraterm/teraterm/ttdde.c
    trunk/teraterm/teraterm/vtwin.cpp

-------------- next part --------------
Modified: trunk/teraterm/teraterm/filesys_log.cpp
===================================================================
--- trunk/teraterm/teraterm/filesys_log.cpp	2020-08-18 15:32:15 UTC (rev 8911)
+++ trunk/teraterm/teraterm/filesys_log.cpp	2020-08-18 15:32:23 UTC (rev 8912)
@@ -92,7 +92,8 @@
 
 	PFileTransDlg FLogDlg;
 
-	int log_code;
+	LogCode_t log_code;
+	BOOL bom;
 
 } TFileVar_;
 typedef TFileVar_ *PFileVar_;
@@ -122,6 +123,7 @@
 void LogPut1(BYTE b);
 static void OutputStr(const wchar_t *str);
 static void LogToFile(void);
+static void FLogOutputBOM(void);
 
 static BOOL OpenFTDlg_(PFileVar fv)
 {
@@ -340,7 +342,7 @@
 	GetRB(Dialog, &val, IDC_ALLBUFF_INFIRST, IDC_ALLBUFF_INFIRST);
 	ts.LogAllBuffIncludedInFirst = val;
 
-	ts.LogTimestampType = (GetCurSel(Dialog, IDC_TIMESTAMPTYPE) - 1);
+	ts.LogTimestampType = (WORD)(GetCurSel(Dialog, IDC_TIMESTAMPTYPE) - 1);
 }
 
 /**
@@ -563,7 +565,7 @@
 			work->info->filename = _wcsdup(filename);
 			work->info->append = IsDlgButtonChecked(Dialog, IDC_APPEND) == BST_CHECKED;
 			work->info->bom = IsDlgButtonChecked(Dialog, IDC_BOM) == BST_CHECKED;
-			work->info->code = (int)SendDlgItemMessageA(Dialog, IDC_TEXTCODING_DROPDOWN, CB_GETCURSEL, 0, 0);
+			work->info->code = (LogCode_t)SendDlgItemMessageA(Dialog, IDC_TEXTCODING_DROPDOWN, CB_GETCURSEL, 0, 0);
 			SetLogFlags(Dialog);
 			EndDialog(Dialog, IDOK);
 			break;
@@ -728,6 +730,12 @@
 		*/
 		fv->eLineEnd = Line_FileHead;
 	}
+	else {
+		// \x92NjL\x82ł͂Ȃ\xA2(\x90V\x8BK)\x8Fꍇ\x82\xCD BOM \x82\xF0\x8Fo\x97͂\xB7\x82\xE9
+		if (fv->bom) {
+			FLogOutputBOM();
+		}
+	}
 
 	// Log rotate configuration
 	LogVar->RotateMode = ts.LogRotate;
@@ -911,6 +919,9 @@
 
 	// \x8DăI\x81[\x83v\x83\x93
 	OpenLogFile(LogVar);
+	if (LogVar->bom) {
+		FLogOutputBOM();
+	}
 	if (ts.DeferredLogWriteMode) {
 		StartThread(LogVar);
 	}
@@ -1112,7 +1123,7 @@
 		return;
 	}
 	LogVar->RotateMode = ROTATE_SIZE;
-	LogVar->RotateSize = size;
+	LogVar->RotateSize = (LONG)size;
 }
 
 /**
@@ -1212,7 +1223,7 @@
  *	FLogGetLogFilename() \x82\xE2 FLogOpenDialog() \x82\xC5
  *	\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0\x8E擾\x82ł\xAB\x82\xE9\x81B
  */
-BOOL FLogOpen(const wchar_t *fname)
+BOOL FLogOpen(const wchar_t *fname, LogCode_t code, BOOL bom)
 {
 	BOOL ret;
 
@@ -1231,8 +1242,9 @@
 	fv->FileHandle = INVALID_HANDLE_VALUE;
 	fv->LogThread = INVALID_HANDLE_VALUE;
 	fv->eLineEnd = Line_LineHead;
-	fv->log_code = 0;	// UTF-8
 
+	fv->log_code = code;
+	fv->bom = bom;
 	ret = LogStart(fname);
 	if (ret == FALSE) {
 		FileTransEnd_();
@@ -1490,7 +1502,9 @@
 		return;
 	}
 
+	// \x8Ds\x93\xAA\x82\xA9?(\x89\xFC\x8Ds\x82\xF0\x8Fo\x97͂\xB5\x82\xBD\x92\xBC\x8C\xE3)
 	if (ts.LogTimestamp && fv->eLineEnd) {
+		// \x83^\x83C\x83\x80\x83X\x83^\x83\x93\x83v\x82\xF0\x8Fo\x97\xCD
 		fv->eLineEnd = Line_Other; /* clear endmark*/
 		wchar_t* strtime = TimeStampStr();
 		FLogWriteStr(strtime);
@@ -1498,7 +1512,7 @@
 	}
 
 	switch(fv->log_code) {
-	case 0: {
+	case LOG_UTF8: {
 		// UTF-8
 		char u8_buf[4];
 		size_t u8_len = UTF32ToUTF8(u32, u8_buf, _countof(u8_buf));
@@ -1508,14 +1522,14 @@
 		}
 		break;
 	}
-	case 1:
-	case 2: {
+	case LOG_UTF16LE:
+	case LOG_UTF16BE: {
 		// UTF-16
 		wchar_t u16[2];
 		size_t u16_len = UTF32ToUTF16(u32, u16, _countof(u16));
 		size_t i;
 		for (i = 0; i < u16_len; i++) {
-			if (fv->log_code == 1) {
+			if (fv->log_code == LOG_UTF16LE) {
 				// UTF-16LE
 				LogPut1(u16[i] & 0xff);
 				LogPut1((u16[i] >> 8) & 0xff);
@@ -1534,7 +1548,7 @@
 	}
 }
 
-void FLogOutputBOM(void)
+static void FLogOutputBOM(void)
 {
 	PFileVar fv = LogVar;
 	DWORD wrote;
@@ -1566,12 +1580,6 @@
 	}
 }
 
-void FLogSetCode(int code)
-{
-	PFileVar fv = LogVar;
-	fv->log_code = code;
-}
-
 static void OutputStr(const wchar_t *str)
 {
 	size_t len;

Modified: trunk/teraterm/teraterm/filesys_log.h
===================================================================
--- trunk/teraterm/teraterm/filesys_log.h	2020-08-18 15:32:15 UTC (rev 8911)
+++ trunk/teraterm/teraterm/filesys_log.h	2020-08-18 15:32:23 UTC (rev 8912)
@@ -39,12 +39,19 @@
  */
 #define FILESYS_LOG_FREE_SPACE	(30*2)
 
+// log\x83t\x83@\x83C\x83\x8B\x82̕\xB6\x8E\x9A\x83R\x81[\x83h
+typedef enum LogCode {
+	LOG_UTF8,
+	LOG_UTF16LE,
+	LOG_UTF16BE,
+} LogCode_t;
+
 // log
 typedef struct {
 	wchar_t *filename;		// [in] \x83t\x83@\x83C\x83\x8B\x96\xBC\x8F\x89\x8A\xFA\x92l(NULL=default) [out] \x93\xFC\x97̓t\x83@\x83C\x83\x8B\x96\xBC\x81Afree()\x82\xB7\x82邱\x82\xC6
 	BOOL append;			// TRUE/FALSE = append/new(overwrite)
 	BOOL bom;				// TRUE = BOM\x82\xA0\x82\xE8
-	int code;				// 0/1/2 = UTF-8/UTF-16LE/UTF-16BE
+	LogCode_t code;
 } FLogDlgInfo_t;
 BOOL FLogOpenDialog(HINSTANCE hInst, HWND hWnd, FLogDlgInfo_t *info);
 void FLogAddCommentDlg(HINSTANCE hInst, HWND hWnd);
@@ -56,7 +63,7 @@
 void FLogRotateRotate(int step);
 void FLogRotateHalt(void);
 void FLogClose(void);
-BOOL FLogOpen(const wchar_t *fname);
+BOOL FLogOpen(const wchar_t *fname, LogCode_t code, BOOL bom);
 BOOL FLogIsOpend(void);
 BOOL FLogIsOpendText(void);
 BOOL FLogIsOpendBin(void);
@@ -70,9 +77,6 @@
 int FLogGetFreeCount(void);
 void FLogWriteFile(void);
 void FLogPutUTF32(unsigned int u32);
-void FLogSetCode(int code);
-void FLogOutputBOM(void);
-//void LogPut1(BYTE b);
 void FLogOutputAllBuffer(void);
 
 #ifdef __cplusplus

Modified: trunk/teraterm/teraterm/ttdde.c
===================================================================
--- trunk/teraterm/teraterm/ttdde.c	2020-08-18 15:32:15 UTC (rev 8911)
+++ trunk/teraterm/teraterm/ttdde.c	2020-08-18 15:32:23 UTC (rev 8912)
@@ -585,7 +585,7 @@
 		else {
 			wchar_t *ParamFileNameW = ToWcharU8(ParamFileName);
 			wchar_t *log_filenameW = FLogGetLogFilename(ParamFileNameW);
-			BOOL ret = FLogOpen(log_filenameW);
+			BOOL ret = FLogOpen(log_filenameW, LOG_UTF8, FALSE);
 			free(log_filenameW);
 			free(ParamFileNameW);
 			strncpy_s(ParamFileName, sizeof(ParamFileName), ret ? "1" : "0", _TRUNCATE);

Modified: trunk/teraterm/teraterm/vtwin.cpp
===================================================================
--- trunk/teraterm/teraterm/vtwin.cpp	2020-08-18 15:32:15 UTC (rev 8911)
+++ trunk/teraterm/teraterm/vtwin.cpp	2020-08-18 15:32:23 UTC (rev 8912)
@@ -3585,7 +3585,7 @@
 		}
 		if (ts.LogFN[0]!=0) {
 			wchar_t *fnW = ToWcharA(ts.LogFN);
-			FLogOpen(fnW);
+			FLogOpen(fnW, LOG_UTF8, FALSE);
 			free(fnW);
 		}
 	}
@@ -4135,13 +4135,9 @@
 			// \x83t\x83@\x83C\x83\x8B\x8D폜
 			_DeleteFileW(filename);
 		}
-		BOOL r = FLogOpen(filename);
+		BOOL r = FLogOpen(filename, info.code, info.bom);
 		if (r != FALSE) {
 			if (FLogIsOpendText()) {
-				FLogSetCode(info.code);
-				if (info.bom) {
-					FLogOutputBOM();
-				}
 				// \x8C\xBB\x8D݃o\x83b\x83t\x83@\x82ɂ\xA0\x82\xE9\x83f\x81[\x83^\x82\xF0\x82\xB7\x82ׂď\x91\x82\xAB\x8Fo\x82\xB5\x82Ă\xA9\x82\xE7\x81A
 				// \x83\x8D\x83O\x8D̎\xE6\x82\xF0\x8AJ\x8En\x82\xB7\x82\xE9\x81B
 				// (2013.9.29 yutaka)


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