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)