Revision: 8899 https://osdn.net/projects/ttssh2/scm/svn/commits/8899 Author: zmatsuo Date: 2020-08-19 00:29:19 +0900 (Wed, 19 Aug 2020) Log Message: ----------- ログに関するAPIをUnicode化した - FLogOpen(), FLogGetFilename(), FLogGetLogFilename() - FLogGetLogFilename() の内部は ANSI のまま - ファイル名に Unicode が使用できるようになった - ログファイルが作成できなかった時の MessageBox を vtwin.cpp に移動 - ftdlg.cpp のファイル名表示を Unicode 化 Modified Paths: -------------- trunk/teraterm/common/ttlib.c trunk/teraterm/common/ttlib.h trunk/teraterm/teraterm/filesys.h trunk/teraterm/teraterm/filesys_log.cpp trunk/teraterm/teraterm/ftdlg.cpp trunk/teraterm/teraterm/ftdlg.h trunk/teraterm/teraterm/ttdde.c trunk/teraterm/teraterm/vtwin.cpp -------------- next part -------------- Modified: trunk/teraterm/common/ttlib.c =================================================================== --- trunk/teraterm/common/ttlib.c 2020-08-18 15:28:03 UTC (rev 8898) +++ trunk/teraterm/common/ttlib.c 2020-08-18 15:29:19 UTC (rev 8899) @@ -50,7 +50,7 @@ dwMajorVersion dwMinorVersion dwPlatformId Windows95 4 0 VER_PLATFORM_WIN32_WINDOWS -Windows98 4 10 VER_PLATFORM_WIN32_WINDOWS +Windows98 4 10 VER_PLATFORM_WIN32_WINDOWS WindowsMe 4 90 VER_PLATFORM_WIN32_WINDOWS WindowsNT4.0 4 0 VER_PLATFORM_WIN32_NT Windows2000 5 0 VER_PLATFORM_WIN32_NT @@ -80,7 +80,7 @@ "AUX", "CLOCK$", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "CON", "CONFIG$", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9", "NUL", "PRN", - ".", "..", + ".", "..", NULL }; @@ -215,10 +215,13 @@ return len; } -BOOL GetFileNamePos(PCHAR PathName, int far *DirLen, int far *FNPos) +BOOL GetFileNamePos(const char *PathName, int far *DirLen, int far *FNPos) { BYTE b; - LPTSTR Ptr, DirPtr, FNPtr, PtrOld; + const char *Ptr; + const char *DirPtr; + const char *FNPtr; + const char *PtrOld; *DirLen = 0; *FNPos = 0; @@ -749,7 +752,7 @@ } } -void ConvFName(PCHAR HomeDir, PCHAR Temp, int templen, PCHAR DefExt, PCHAR FName, int destlen) +void ConvFName(const char *HomeDir, PCHAR Temp, int templen, const char *DefExt, PCHAR FName, int destlen) { // destlen = sizeof FName int DirLen, FNPos; @@ -898,7 +901,7 @@ if (sscanf_s(T, "%d", &v) != 1) { v = defval; } - + return v; } @@ -1043,7 +1046,7 @@ /* Get SetupFName */ GetDefaultSetupFName(HomeDir, SetupFName, sizeof(SetupFName)); - + /* Get LanguageFile name */ GetPrivateProfileString("Tera Term", entry, "off", Temp, sizeof(Temp), SetupFName); @@ -1113,9 +1116,9 @@ bi.ulFlags = 0; bi.lpfn = setDefaultFolder; bi.lParam = (LPARAM)def; - // \x83t\x83H\x83\x8B\x83_\x91I\x91\xF0\x83_\x83C\x83A\x83\x8D\x83O\x82̕\\x8E\xA6 + // \x83t\x83H\x83\x8B\x83_\x91I\x91\xF0\x83_\x83C\x83A\x83\x8D\x83O\x82̕\\x8E\xA6 pidlBrowse = SHBrowseForFolderA(&bi); - if (pidlBrowse != NULL) { + if (pidlBrowse != NULL) { // PIDL\x8C`\x8E\xAE\x82̖߂\xE8\x92l\x82̃t\x83@\x83C\x83\x8B\x83V\x83X\x83e\x83\x80\x82̃p\x83X\x82ɕϊ\xB7 if (SHGetPathFromIDListA(pidlBrowse, buf)) { // \x8E擾\x90\xAC\x8C\xF7 Modified: trunk/teraterm/common/ttlib.h =================================================================== --- trunk/teraterm/common/ttlib.h 2020-08-18 15:28:03 UTC (rev 8898) +++ trunk/teraterm/common/ttlib.h 2020-08-18 15:29:19 UTC (rev 8899) @@ -1,6 +1,6 @@ /* * Copyright (C) 1994-1998 T. Teranishi - * (C) 2006-2019 TeraTerm Project + * (C) 2006-2020 TeraTerm Project * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -41,7 +41,7 @@ #define DllExport __declspec(dllexport) #endif -BOOL GetFileNamePos(PCHAR PathName, int far *DirLen, int far *FNPos); +BOOL GetFileNamePos(const char *PathName, int far *DirLen, int far *FNPos); DllExport BOOL ExtractFileName(PCHAR PathName, PCHAR FileName, int destlen); DllExport BOOL ExtractDirName(PCHAR PathName, PCHAR DirName); void FitFileName(PCHAR FileName, int destlen, const char *DefExt); @@ -65,7 +65,7 @@ int isInvalidStrftimeChar(PCHAR FName); void deleteInvalidStrftimeChar(PCHAR FName); void ParseStrftimeFileName(PCHAR FName, int destlen); -void ConvFName(PCHAR HomeDir, PCHAR Temp, int templen, PCHAR DefExt, PCHAR FName, int destlen); +void ConvFName(const char *HomeDir, PCHAR Temp, int templen, const char *DefExt, PCHAR FName, int destlen); void RestoreNewLine(PCHAR Text); size_t RestoreNewLineW(wchar_t *Text); BOOL GetNthString(PCHAR Source, int Nth, int Size, PCHAR Dest); @@ -139,7 +139,7 @@ * \x83V\x83\x8A\x83A\x83\x8B\x83|\x81[\x83g\x8A֘A\x82̐ݒ\xE8\x92\xE8\x8B` */ enum serial_port_conf { - COM_DATABIT, + COM_DATABIT, COM_PARITY, COM_STOPBIT, COM_FLOWCTRL, Modified: trunk/teraterm/teraterm/filesys.h =================================================================== --- trunk/teraterm/teraterm/filesys.h 2020-08-18 15:28:03 UTC (rev 8898) +++ trunk/teraterm/teraterm/filesys.h 2020-08-18 15:29:19 UTC (rev 8899) @@ -108,13 +108,13 @@ void FLogRotateHalt(void); void FLogAddCommentDlg(HINSTANCE hInst, HWND hWnd); void FLogClose(void); -BOOL FLogOpen(const char *fname); +BOOL FLogOpen(const wchar_t *fname); BOOL FLogIsOpend(void); void FLogWriteStr(const char *str); void FLogInfo(char *param_ptr, size_t param_len); -const char *FLogGetFilename(void); +const wchar_t *FLogGetFilename(void); BOOL FLogOpenDialog(HINSTANCE hInst, HWND hWnd, FLogDlgInfo_t *info); -char *FLogGetLogFilename(const char *log_filename); +wchar_t *FLogGetLogFilename(const wchar_t *log_filename); BOOL FLogIsPause(void); void FLogWindow(int nCmdShow); void FLogShowDlg(void); Modified: trunk/teraterm/teraterm/filesys_log.cpp =================================================================== --- trunk/teraterm/teraterm/filesys_log.cpp 2020-08-18 15:28:03 UTC (rev 8898) +++ trunk/teraterm/teraterm/filesys_log.cpp 2020-08-18 15:29:19 UTC (rev 8899) @@ -50,13 +50,14 @@ #include "layer_for_unicode.h" #include "layer_for_unicode_crt.h" #include "codeconv.h" +#include "asprintf.h" #include "filesys_log_res.h" #include "filesys.h" typedef struct { - char FullName[MAX_PATH]; - int DirLen; + wchar_t *FullName; + wchar_t *FileName; BOOL FileOpen; HANDLE FileHandle; @@ -63,12 +64,6 @@ LONG FileSize, ByteCount; BOOL OverWrite; - BOOL Success; - BOOL NoMsg; - - char LogDefaultPath[MAX_PATH]; - BOOL HideDialog; - DWORD StartTime; // log rotate @@ -116,41 +111,32 @@ static BOOL OpenFTDlg_(PFileVar fv) { - PFileTransDlg FTDlg; + PFileTransDlg FTDlg = new CFileTransDlg(); + if (FTDlg == NULL) { + return FALSE; + } - FTDlg = new CFileTransDlg(); + wchar_t *DlgCaption; + wchar_t uimsg[MAX_UIMSG]; +#define TitLogW L"Log" + get_lang_msgW("FILEDLG_TRANS_TITLE_LOG", uimsg, _countof(uimsg), TitLogW, ts.UILanguageFile); + aswprintf(&DlgCaption, L"Tera Term: %s", uimsg); - fv->StartTime = 0; - cv.FilePause &= ~OpLog; + CFileTransDlgInfo info; + info.UILanguageFile = ts.UILanguageFile; + info.OpId = OpLog; + info.DlgCaption = DlgCaption; + info.FileName = fv->FileName; + info.FullName = fv->FullName; + info.HideDialog = ts.LogHideDialog ? TRUE : FALSE; + info.HMainWin = HVTWin; + FTDlg->Create(hInst, &info); + FTDlg->RefreshNum(0, fv->FileSize, fv->ByteCount); - if (ts.LogHideDialog) - fv->HideDialog = TRUE; + FLogDlg = FTDlg; - if (FTDlg!=NULL) - { - char DlgCaption[40]; - strncpy_s(DlgCaption, _countof(DlgCaption),"Tera Term: ", _TRUNCATE); - char uimsg[MAX_UIMSG]; - get_lang_msg("FILEDLG_TRANS_TITLE_LOG", uimsg, sizeof(uimsg), TitLog, ts.UILanguageFile); - strncat_s(DlgCaption, _countof(DlgCaption), uimsg, _TRUNCATE); - - CFileTransDlgInfo info; - info.UILanguageFile = ts.UILanguageFile; - info.OpId = OpLog; - info.DlgCaption = DlgCaption; - info.FileName = &fv->FullName[fv->DirLen]; - info.FullName = fv->FullName; - info.HideDialog = fv->HideDialog; - info.HMainWin = HVTWin; - FTDlg->Create(hInst, &info); - FTDlg->RefreshNum(fv->StartTime, fv->FileSize, fv->ByteCount); - } - - FLogDlg = FTDlg; /* Log */ - - fv->StartTime = GetTickCount(); - - return (FTDlg!=NULL); + free(DlgCaption); + return TRUE; } /** @@ -652,23 +638,25 @@ return FALSE; } -static BOOL LogStart(const char *fname) +static BOOL LogStart(const wchar_t *fname) { unsigned tid; - strncpy_s(LogVar->FullName, sizeof(LogVar->FullName), fname, _TRUNCATE); + LogVar->FullName = _wcsdup(fname); if (! LoadTTFILE()) return FALSE; - //(*SetFileVar)(LogVar); - { - int i; - char c; - PFileVar fv = LogVar; - GetFileNamePos(fv->FullName,&(fv->DirLen),&i); - c = fv->FullName[fv->DirLen]; - if (c=='\\'||c=='/') fv->DirLen++; + PFileVar fv = LogVar; + wchar_t *p = wcsrchr(fv->FullName, L'\\'); + if (p == NULL) { + p = wcsrchr(fv->FullName, L'/'); } + if (p == NULL) { + fv->FileName = _wcsdup(fv->FullName); + } + else { + fv->FileName = _wcsdup(p++); + } FixLogOption(); if (ts.LogBinary > 0) @@ -702,8 +690,8 @@ if (!ts.LogLockExclusive) { dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; } - LogVar->FileHandle = CreateFile(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL, - OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL, + OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (LogVar->FileHandle != INVALID_HANDLE_VALUE){ SetFilePointer(LogVar->FileHandle, 0, NULL, FILE_END); /* 2007.05.24 Gentaro @@ -718,20 +706,12 @@ if (!ts.LogLockExclusive) { dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; } - LogVar->FileHandle = CreateFile(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); } LogVar->FileOpen = (LogVar->FileHandle != INVALID_HANDLE_VALUE); if (! LogVar->FileOpen) { - char msg[128]; - - // \x83t\x83@\x83C\x83\x8B\x83I\x81[\x83v\x83\x93\x83G\x83\x89\x81[\x8E\x9E\x82̃\x81\x83b\x83Z\x81[\x83W\x95\\x8E\xA6\x82\xF0\x92lj\xC1\x82\xB5\x82\xBD\x81B(2008.7.9 yutaka) - if (LogVar->NoMsg == FALSE) { - _snprintf_s(msg, sizeof(msg), _TRUNCATE, "Can not create a `%s' file. (%d)", LogVar->FullName, GetLastError()); - MessageBox(NULL, msg, "Tera Term: File open error", MB_OK | MB_ICONERROR); - } - FileTransEnd_(); return FALSE; } @@ -756,6 +736,9 @@ return FALSE; } + cv.FilePause &= ~OpLog; + LogVar->StartTime = GetTickCount(); + // \x92x\x89\x84\x8F\x91\x82\xAB\x8D\x9E\x82ݗp\x83X\x83\x8C\x83b\x83h\x82\xF0\x8BN\x82\xB1\x82\xB7\x81B // (2013.4.19 yutaka) // DeferredLogWriteThread \x83X\x83\x8C\x83b\x83h\x82\xAA\x8BN\x8F\xB0\x82\xB5\x82āA\x83X\x83\x8C\x83b\x83h\x83L\x83\x85\x81[\x82\xAA\x8D쐬\x82\xB3\x82\xEA\x82\xE9\x82\xE6\x82\xE8\x91O\x82ɁA @@ -901,8 +884,6 @@ static void LogRotate(void) { int loopmax = 10000; // XXX - char filename[1024]; - char newfile[1024], oldfile[1024]; int i, k; int dwShareMode = FILE_SHARE_READ; unsigned tid; @@ -933,8 +914,11 @@ loopmax = LogVar->RotateStep; for (i = 1 ; i <= loopmax ; i++) { - _snprintf_s(filename, sizeof(filename), _TRUNCATE, "%s.%d", LogVar->FullName, i); - if (_access_s(filename, 0) != 0) + wchar_t *filename; + aswprintf(&filename, L"%s.%d", LogVar->FullName, i); + DWORD attr = _GetFileAttributesW(filename); + free(filename); + if ((attr != INVALID_FILE_ATTRIBUTES) && ((attr & FILE_ATTRIBUTE_DIRECTORY) == 0)) break; } if (i > loopmax) { @@ -944,15 +928,19 @@ // \x95ʃt\x83@\x83C\x83\x8B\x82Ƀ\x8A\x83l\x81[\x83\x80\x81B for (k = i-1 ; k >= 0 ; k--) { + wchar_t *oldfile; if (k == 0) - strncpy_s(oldfile, sizeof(oldfile), LogVar->FullName, _TRUNCATE); + oldfile = _wcsdup(LogVar->FullName); else - _snprintf_s(oldfile, sizeof(oldfile), _TRUNCATE, "%s.%d", LogVar->FullName, k); - _snprintf_s(newfile, sizeof(newfile), _TRUNCATE, "%s.%d", LogVar->FullName, k+1); - remove(newfile); - if (rename(oldfile, newfile) != 0) { + aswprintf(&oldfile, L"%s.%d", LogVar->FullName, k); + wchar_t *newfile; + aswprintf(&newfile, L"%s.%d", LogVar->FullName, k+1); + _DeleteFileW(newfile); + if (_MoveFileW(oldfile, newfile) == 0) { OutputDebugPrintf("%s: rename %d\n", __FUNCTION__, errno); } + free(oldfile); + free(newfile); } // \x8DăI\x81[\x83v\x83\x93 @@ -959,8 +947,8 @@ if (!ts.LogLockExclusive) { dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE; } - LogVar->FileHandle = CreateFile(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL, - CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + LogVar->FileHandle = _CreateFileW(LogVar->FullName, GENERIC_WRITE, dwShareMode, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); // \x92x\x89\x84\x8F\x91\x82\xAB\x8D\x9E\x82ݗp\x83X\x83\x8C\x83b\x83h\x82\xF0\x8BN\x82\xB1\x82\xB7\x81B // (2013.4.19 yutaka) @@ -1131,7 +1119,6 @@ } if (FLogIsPause() || cv.ProtoFlag) return; if (FLogDlg!=NULL) - //FLogDlg->RefreshNum(LogVar); FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount); @@ -1209,6 +1196,8 @@ if (LogVar != NULL) { CloseFileSync(LogVar); + free(LogVar->FullName); + free(LogVar->FileName); free(LogVar); LogVar = NULL; } @@ -1224,6 +1213,9 @@ */ void FLogPause(BOOL Pause) { + if (LogVar == NULL) { + return; + } if (FLogDlg!=NULL) FLogDlg->ChangeButton(Pause); FileTransPause(OpLog, Pause); @@ -1334,7 +1326,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 char *fname) +BOOL FLogOpen(const wchar_t *fname) { BOOL ret; @@ -1353,13 +1345,7 @@ fv->FileOpen = FALSE; fv->OverWrite = ((ts.FTFlag & FT_RENAME) == 0); - fv->Success = FALSE; - fv->NoMsg = FALSE; - fv->HideDialog = FALSE; - LogVar->DirLen = 0; - LogVar->NoMsg = TRUE; - ret = LogStart(fname); return ret; } @@ -1380,7 +1366,6 @@ LogVar->ByteCount = LogVar->ByteCount + len; if (FLogDlg!=NULL) - //FLogDlg->RefreshNum(LogVar); FLogDlg->RefreshNum(LogVar->StartTime, LogVar->FileSize, LogVar->ByteCount); } } @@ -1394,7 +1379,9 @@ + ((ts.LogTypePlainText != 0) << 2) + ((ts.LogTimestamp != 0) << 3) + ((ts.LogHideDialog != 0) << 4); - strncpy_s(param_ptr + 1, param_len - 1, LogVar->FullName, _TRUNCATE); + char *filenameU8 = ToU8W(LogVar->FullName); + strncpy_s(param_ptr + 1, param_len - 1, filenameU8, _TRUNCATE); + free(filenameU8); } else { param_ptr[0] = '0' - 1; @@ -1405,7 +1392,7 @@ /** * \x8C\xBB\x8D݂̃\x8D\x83O\x83t\x83@\x83C\x83\x8B\x96\xBC\x82\xF0\x8E擾 */ -const char *FLogGetFilename() +const wchar_t *FLogGetFilename(void) { if (LogVar == NULL) { return NULL; @@ -1423,11 +1410,7 @@ BOOL FLogOpenDialog(HINSTANCE hInst, HWND hWnd, FLogDlgInfo_t *info) { LogDlgWork_t *work = (LogDlgWork_t *)calloc(sizeof(LogDlgWork_t), 1); - char *filenameA = ToCharW(info->filename); - char *srcfnameA = FLogGetLogFilename(filenameA); - wchar_t *srcfnameW = ToWcharA(srcfnameA); - free(filenameA); - free(srcfnameA); + wchar_t *srcfnameW = FLogGetLogFilename(info->filename); work->info = info; work->info->filename = srcfnameW; work->pts = &ts; @@ -1452,11 +1435,11 @@ * @return \x83t\x83\x8B\x83p\x83X\x83t\x83@\x83C\x83\x8B\x96\xBC * \x95s\x97v\x82ɂȂ\xC1\x82\xBD\x82\xE7 free() \x82\xB7\x82邱\x82\xC6 */ -char *FLogGetLogFilename(const char *log_filename) +wchar_t *FLogGetLogFilename(const wchar_t *log_filename) { // \x83t\x83H\x83\x8B\x83_ char FileDirExpanded[MAX_PATH]; - char *logdir; + const char *logdir; if (strlen(ts.LogDefaultPath) > 0) { logdir = ts.LogDefaultPath; } @@ -1474,7 +1457,9 @@ strncpy_s(base_name, _countof(base_name), ts.LogDefaultName, _TRUNCATE); } else { - strncpy_s(base_name, _countof(base_name), log_filename, _TRUNCATE); + char *filenameA = ToCharW(log_filename); + strncpy_s(base_name, _countof(base_name), filenameA, _TRUNCATE); + free(filenameA); } // \x83t\x83\x8B\x83p\x83X\x89\xBB @@ -1483,7 +1468,7 @@ ParseStrftimeFileName(full_path, sizeof(full_path)); ConvertLogname(full_path, sizeof(full_path)); - return _strdup(full_path); + return ToWcharA(full_path); } BOOL FLogIsPause() Modified: trunk/teraterm/teraterm/ftdlg.cpp =================================================================== --- trunk/teraterm/teraterm/ftdlg.cpp 2020-08-18 15:28:03 UTC (rev 8898) +++ trunk/teraterm/teraterm/ftdlg.cpp 2020-08-18 15:29:19 UTC (rev 8899) @@ -44,6 +44,7 @@ #include "teraterml.h" #include "helpid.h" #include "filesys.h" +#include "codeconv.h" ///////////////////////////////////////////////////////////////////////////// // CFileTransDlg dialog @@ -73,9 +74,9 @@ UILanguageFile = info->UILanguageFile; OpId = info->OpId; - DlgCaption = _strdup(info->DlgCaption); - FileName = _strdup(info->FileName); - FullName = _strdup(info->FullName); + DlgCaption = _wcsdup(info->DlgCaption); + FileName = _wcsdup(info->FileName); + FullName = _wcsdup(info->FullName); HideDialog = info->HideDialog; HMainWin = info->HMainWin; @@ -123,14 +124,17 @@ info.UILanguageFile = pts->UILanguageFile; info.OpId = fv->OpId; - info.DlgCaption = _strdup(fv->DlgCaption); - info.FileName = _strdup(&fv->FullName[fv->DirLen]); - info.FullName = _strdup(fv->FullName); + info.DlgCaption = ToWcharA(fv->DlgCaption); + info.FileName = ToWcharA(&fv->FullName[fv->DirLen]); + info.FullName = ToWcharA(fv->FullName); info.HideDialog = fv->HideDialog; info.HMainWin = fv->HMainWin; BOOL r = Create(hInstance, &info); fv->HWin = m_hWnd; fv->ProgStat = ProgStat; + free(info.DlgCaption); + free(info.FileName); + free(info.FullName); return r; } @@ -234,9 +238,9 @@ ModifyStyleEx(0, WS_EX_NOACTIVATE | WS_EX_APPWINDOW); } - SetWindowText(DlgCaption); - SetDlgItemText(IDC_TRANSFNAME, FileName); - SetDlgItemText(IDC_EDIT_FULLPATH, FullName); + SetWindowTextW(DlgCaption); + SetDlgItemTextW(IDC_TRANSFNAME, FileName); + SetDlgItemTextW(IDC_EDIT_FULLPATH, FullName); SetDlgTexts(m_hWnd, TextInfos, _countof(TextInfos), UILanguageFile); Modified: trunk/teraterm/teraterm/ftdlg.h =================================================================== --- trunk/teraterm/teraterm/ftdlg.h 2020-08-18 15:28:03 UTC (rev 8898) +++ trunk/teraterm/teraterm/ftdlg.h 2020-08-18 15:29:19 UTC (rev 8899) @@ -37,9 +37,9 @@ typedef struct { const char *UILanguageFile; WORD OpId; - char *DlgCaption; - char *FileName; - char *FullName; + wchar_t *DlgCaption; + wchar_t *FileName; + wchar_t *FullName; BOOL HideDialog; HWND HMainWin; } CFileTransDlgInfo; @@ -70,9 +70,9 @@ WORD OpId; int ProgStat; // \x83v\x83\x8D\x83O\x83\x8C\x83X\x83o\x81[\x82̐i\x92\xBB\x82\xAA\x96߂\xE7\x82Ȃ\xA2\x82悤\x8BL\x89\xAF\x82\xB5\x82Ă\xA8\x82\xAD BOOL HideDialog; - char *DlgCaption; - char *FileName; - char *FullName; + wchar_t *DlgCaption; + wchar_t *FileName; + wchar_t *FullName; HWND HMainWin; }; Modified: trunk/teraterm/teraterm/ttdde.c =================================================================== --- trunk/teraterm/teraterm/ttdde.c 2020-08-18 15:28:03 UTC (rev 8898) +++ trunk/teraterm/teraterm/ttdde.c 2020-08-18 15:29:19 UTC (rev 8899) @@ -583,11 +583,11 @@ return DDE_FNOTPROCESSED; } else { - char *ParamFileNameA = ToCharU8(ParamFileName); - char *log_filenameA = FLogGetLogFilename(ParamFileNameA); - BOOL ret = FLogOpen(log_filenameA); - free(log_filenameA); - free(ParamFileNameA); + wchar_t *ParamFileNameW = ToWcharU8(ParamFileName); + wchar_t *log_filenameW = FLogGetLogFilename(ParamFileNameW); + BOOL ret = FLogOpen(log_filenameW); + free(log_filenameW); + free(ParamFileNameW); strncpy_s(ParamFileName, sizeof(ParamFileName), ret ? "1" : "0", _TRUNCATE); } break; Modified: trunk/teraterm/teraterm/vtwin.cpp =================================================================== --- trunk/teraterm/teraterm/vtwin.cpp 2020-08-18 15:28:03 UTC (rev 8898) +++ trunk/teraterm/teraterm/vtwin.cpp 2020-08-18 15:29:19 UTC (rev 8899) @@ -97,6 +97,7 @@ #include "sendfiledlg.h" #include "setting.h" #include "broadcast.h" +#include "asprintf.h" #include "initguid.h" //#include "Usbiodef.h" @@ -3575,12 +3576,16 @@ /* Auto start logging or /L= option */ if (ts.LogAutoStart || ts.LogFN[0] != 0) { if (ts.LogFN[0] == 0) { - char *filename = FLogGetLogFilename(NULL); - strncpy_s(ts.LogFN, sizeof(ts.LogFN), filename, _TRUNCATE); - free(filename); + wchar_t *filenameW = FLogGetLogFilename(NULL); + char *filenameA = ToCharW(filenameW); + strncpy_s(ts.LogFN, sizeof(ts.LogFN), filenameA, _TRUNCATE); + free(filenameA); + free(filenameW); } if (ts.LogFN[0]!=0) { - FLogOpen(ts.LogFN); + wchar_t *fnW = ToWcharA(ts.LogFN); + FLogOpen(fnW); + free(fnW); } } @@ -4124,20 +4129,28 @@ info.filename = NULL; BOOL r = FLogOpenDialog(hInst, m_hWnd, &info); if (r) { + const wchar_t *filename = info.filename; if (!info.append) { // \x83t\x83@\x83C\x83\x8B\x8D폜 - _DeleteFileW(info.filename); + _DeleteFileW(filename); } TermLogSetCode(info.code); - char *filenameA = ToCharW(info.filename); - free(info.filename); - BOOL r = FLogOpen(filenameA); + BOOL r = FLogOpen(filename); if (r != FALSE) { if (info.bom) { TermLogOutputBOM(); } } - free(filenameA); + else { + // \x83\x8D\x83O\x82ł\xAB\x82Ȃ\xA2 + static const TTMessageBoxInfoW mbinfo = { + "Tera Term", + NULL, L"Tera Term: File open error", + NULL, L"Can not create a `%s' file." + }; + TTMessageBoxW(m_hWnd, &mbinfo, MB_OK | MB_ICONERROR, ts.UILanguageFile, filename); + } + free(info.filename); } } @@ -4149,8 +4162,7 @@ // \x83\x8D\x83O\x82̉{\x97\x97 (2005.1.29 yutaka) void CVTWindow::OnViewLog() { - char command[MAX_PATH*2+3]; // command "filename" - STARTUPINFO si; + STARTUPINFOW si; PROCESS_INFORMATION pi; if(!FLogIsOpend()) { @@ -4157,24 +4169,28 @@ return; } - const char *file = FLogGetFilename(); + const wchar_t *filename = FLogGetFilename(); memset(&si, 0, sizeof(si)); - GetStartupInfo(&si); + GetStartupInfoW(&si); memset(&pi, 0, sizeof(pi)); - _snprintf_s(command, sizeof(command), _TRUNCATE, "\"%s\" \"%s\"", ts.ViewlogEditor, file); + wchar_t *command; + wchar_t *ViewlogEditor = ToWcharA(ts.ViewlogEditor); + aswprintf(&command, L"\"%s\" \"%s\"", ViewlogEditor, filename); + free(ViewlogEditor); - if (CreateProcess(NULL, command, NULL, NULL, FALSE, 0, - NULL, NULL, &si, &pi) == 0) { - wchar_t buf[80]; - wchar_t uimsgW[MAX_UIMSG]; - wchar_t uimsgW2[MAX_UIMSG]; - get_lang_msgW("MSG_ERROR", uimsgW, _countof(uimsgW), L"ERROR", ts.UILanguageFile); - get_lang_msgW("MSG_VIEW_LOGFILE_ERROR", uimsgW2, _countof(uimsgW2), - L"Can't view logging file. (%d)", ts.UILanguageFile); - _snwprintf_s(buf, _countof(buf), _TRUNCATE, uimsgW2, GetLastError()); - _MessageBoxW(NULL, buf, uimsgW, MB_OK | MB_ICONWARNING); + BOOL r = _CreateProcessW(NULL, command, NULL, NULL, FALSE, 0, + NULL, NULL, &si, &pi); + free(command); + if (r == 0) { + DWORD error = GetLastError(); + static const TTMessageBoxInfoW mbinfo = { + "Tera Term", + "MSG_ERROR", L"ERROR", + "MSG_VIEW_LOGFILE_ERROR", L"Can't view logging file. (%d)" + }; + TTMessageBoxW(m_hWnd, &mbinfo, MB_OK | MB_ICONWARNING, ts.UILanguageFile, error); } else { CloseHandle(pi.hThread); CloseHandle(pi.hProcess);