[Ttssh2-commit] [8899] ログに関するAPIをUnicode化した

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


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);


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