[Ttssh2-commit] [8986] filesys.cpp ファイル名の扱いを Unicode化

Back to archive index
scmno****@osdn***** scmno****@osdn*****
2020年 11月 2日 (月) 00:32:54 JST


Revision: 8986
          https://osdn.net/projects/ttssh2/scm/svn/commits/8986
Author:   zmatsuo
Date:     2020-11-02 00:32:54 +0900 (Mon, 02 Nov 2020)
Log Message:
-----------
filesys.cpp ファイル名の扱いを Unicode化

- ファイル選択ダイアログを Unicode 版に入れ替え
- FileSendStart() の仕様を変更
  - FileSendStart() と FileSendStart2() を整理
- 未使用メンバ削除

Modified Paths:
--------------
    branches/proto_unicode/teraterm/teraterm/filesys.cpp
    branches/proto_unicode/teraterm/teraterm/filesys.h
    branches/proto_unicode/teraterm/teraterm/sendmem.cpp
    branches/proto_unicode/teraterm/teraterm/ttdde.c
    branches/proto_unicode/teraterm/teraterm/vtwin.cpp

-------------- next part --------------
Modified: branches/proto_unicode/teraterm/teraterm/filesys.cpp
===================================================================
--- branches/proto_unicode/teraterm/teraterm/filesys.cpp	2020-11-01 15:32:38 UTC (rev 8985)
+++ branches/proto_unicode/teraterm/teraterm/filesys.cpp	2020-11-01 15:32:54 UTC (rev 8986)
@@ -49,6 +49,7 @@
 #include "helpid.h"
 #include "layer_for_unicode.h"
 #include "codeconv.h"
+#include "asprintf.h"
 
 #include "filesys_log_res.h"
 
@@ -55,17 +56,13 @@
 #include "filesys.h"
 
 typedef struct {
-	HWND HMainWin;
-	HWND HWin;
-	char DlgCaption[40];
+	wchar_t *DlgCaption;
 
-	char *FullName;
+	wchar_t *FullName;
 
 	HANDLE FileHandle;
 	LONG FileSize, ByteCount;
 
-	int ProgStat;
-
 	DWORD StartTime;
 	BOOL FilePause;
 } TFileVar;
@@ -104,8 +101,6 @@
 
 	FTDlg = new CFileTransDlg();
 
-	fv->StartTime = 0;
-	fv->ProgStat = 0;
 	fv->FilePause = FALSE;
 
 	if (FTDlg!=NULL)
@@ -113,15 +108,13 @@
 		CFileTransDlg::Info info;
 		info.UILanguageFile = ts.UILanguageFile;
 		info.OpId = CFileTransDlg::OpSendFile;
-		info.DlgCaption = ToWcharA(fv->DlgCaption);
+		info.DlgCaption = fv->DlgCaption;
 		info.FileName = NULL;
-		info.FullName = ToWcharA(fv->FullName);
+		info.FullName = fv->FullName;
 		info.HideDialog = FALSE;
 		info.HMainWin = HVTWin;
 		FTDlg->Create(hInst, &info);
 		FTDlg->RefreshNum(0, fv->FileSize, fv->ByteCount);
-		free(info.DlgCaption);
-		free(info.FullName);
 	}
 
 	SendDlg = FTDlg; /* File send */
@@ -153,7 +146,6 @@
 	}
 	memset(fv, 0, sizeof(TFileVar));
 	fv->FileHandle = INVALID_HANDLE_VALUE;
-	fv->HMainWin = HVTWin;
 
 	*pfv = fv;
 	return TRUE;
@@ -168,10 +160,14 @@
 	PFileVar fv = *pfv;
 	if (fv->FileHandle != INVALID_HANDLE_VALUE) {
 		CloseHandle(fv->FileHandle);
+		fv->FileHandle = INVALID_HANDLE_VALUE;
 	}
 	if (fv->FullName != NULL) {
 		free(fv->FullName);
+		fv->FullName = NULL;
 	}
+	free(fv->DlgCaption);
+	fv->DlgCaption = NULL;
 	free(fv);
 	*pfv = NULL;
 }
@@ -258,34 +254,36 @@
 	return FALSE;
 }
 
-static char *_GetTransFname(HWND hWnd, const char *caption, LPLONG Option)
+static wchar_t *_GetTransFname(HWND hWnd, const wchar_t *caption, LPLONG Option)
 {
 	WORD optw;
 	wchar_t TempDir[MAX_PATH];
-	char FileName[MAX_PATH];
+	wchar_t FileName[MAX_PATH];
 	const char *UILanguageFile = ts.UILanguageFile;
 
 	/* save current dir */
 	_GetCurrentDirectoryW(_countof(TempDir), TempDir);
 
-	char FileDirExpanded[MAX_PATH];
-	ExpandEnvironmentStrings(ts.FileDir, FileDirExpanded, sizeof(FileDirExpanded));
-	PCHAR CurDir = FileDirExpanded;
+	wchar_t FileDirExpanded[MAX_PATH];
+	wchar_t *FileDir = ToWcharA(ts.FileDir);
+	_ExpandEnvironmentStringsW(FileDir, FileDirExpanded, _countof(FileDirExpanded));
+	wchar_t *CurDir = FileDirExpanded;
+	free(FileDir);
 
-	char *FNFilter = GetCommonDialogFilterA(ts.FileSendFilter, UILanguageFile);
-
-	OPENFILENAME ofn = {};
-	ofn.lStructSize = get_OPENFILENAME_SIZE();
+	wchar_t *FNFilter = GetCommonDialogFilterW(ts.FileSendFilter, UILanguageFile);
+	FileName[0] = 0;
+	OPENFILENAMEW ofn = {};
+	ofn.lStructSize = get_OPENFILENAME_SIZEW();
 	ofn.hwndOwner   = hWnd;
 	ofn.lpstrFilter = FNFilter;
 	ofn.nFilterIndex = 1;
 	ofn.lpstrFile = FileName;
-	ofn.nMaxFile = sizeof(FileName);
+	ofn.nMaxFile = _countof(FileName);
 	ofn.lpstrInitialDir = CurDir;
 
 	ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
 	ofn.Flags |= OFN_ENABLETEMPLATE | OFN_ENABLEHOOK | OFN_EXPLORER | OFN_ENABLESIZING;
-	ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FOPT);
+	ofn.lpTemplateName = MAKEINTRESOURCEW(IDD_FOPT);
 
 	ofn.lpfnHook = TransFnHook;
 	optw = (WORD)*Option;
@@ -297,7 +295,7 @@
 
 	ofn.hInstance = hInst;
 
-	BOOL Ok = GetOpenFileName(&ofn);
+	BOOL Ok = _GetOpenFileNameW(&ofn);
 	free(FNFilter);
 
 	if (Ok) {
@@ -306,60 +304,63 @@
 	/* restore dir */
 	_SetCurrentDirectoryW(TempDir);
 
-	char *ret = NULL;
+	wchar_t *ret = NULL;
 	if (Ok) {
-		ret = _strdup(FileName);
+		ret = _wcsdup(FileName);
 	}
 	return ret;
 }
 
-void FileSendStart(void)
+BOOL FileSendStart(const wchar_t *filename, int binary)
 {
-	if (! cv.Ready || FSend) return;
+	if (SendVar != NULL) {
+		return FALSE;
+	}
+	if (! cv.Ready || FSend) {
+		return FALSE;
+	}
 	if (cv.ProtoFlag)
 	{
 		FreeFileVar(&SendVar);
-		return;
+		return FALSE;
 	}
-
-	if (SendVar == NULL) {
-		if (! NewFileVar(&SendVar)) {
-			return;
-		}
+	if (!NewFileVar(&SendVar)) {
+		return FALSE;
 	}
 
 	FSend = TRUE;
 	PFileVar fv = SendVar;
 
-	char uimsg[MAX_UIMSG];
-	const char *UILanguageFile = ts.UILanguageFile;
-	strncpy_s(fv->DlgCaption, sizeof(fv->DlgCaption),"Tera Term: ", _TRUNCATE);
-	get_lang_msg("FILEDLG_TRANS_TITLE_SENDFILE", uimsg, sizeof(uimsg), TitSendFile, UILanguageFile);
-	strncat_s(fv->DlgCaption, sizeof(fv->DlgCaption), uimsg, _TRUNCATE);
+	wchar_t uimsg[MAX_UIMSG];
+	get_lang_msgW("FILEDLG_TRANS_TITLE_SENDFILE", uimsg, _countof(uimsg), L"Send file", ts.UILanguageFile);
+	aswprintf(&(fv->DlgCaption), L"Tera Term: %s", uimsg);
 
-	if (SendVar->FullName == NULL) {
-		// \x83t\x83@\x83C\x83\x8B\x82\xAA\x90ݒ肳\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x8Fꍇ
+	if (filename != NULL) {
+		SendVar->FullName = _wcsdup(filename);
+		ts.TransBin = binary;
+	}
+	else {
+		// \x83t\x83@\x83C\x83\x8B\x82\xAA\x8Ew\x92肳\x82\xEA\x82Ă\xA2\x82Ȃ\xA2\x8Fꍇ
 		LONG Option = 0;
 		if (ts.TransBin)
 			Option |= LOGDLG_BINARY;
-		char *filename = _GetTransFname(fv->HMainWin, fv->DlgCaption, &Option);
+		wchar_t *filename = _GetTransFname(HVTWin, fv->DlgCaption, &Option);
 		if (filename == NULL) {
 			FileSendEnd();
-			return;
+			return FALSE;
 		}
 		SendVar->FullName = filename;
-		free(filename);
 		ts.TransBin = CheckFlag(Option, LOGDLG_BINARY);
 	}
 
-	SendVar->FileHandle = CreateFile(SendVar->FullName, GENERIC_READ, FILE_SHARE_READ, NULL,
-	                                 OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
+	SendVar->FileHandle = _CreateFileW(SendVar->FullName, GENERIC_READ, FILE_SHARE_READ, NULL,
+									   OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN, NULL);
 	if (SendVar->FileHandle == INVALID_HANDLE_VALUE) {
 		FileSendEnd();
-		return;
+		return FALSE;
 	}
 	SendVar->ByteCount = 0;
-	SendVar->FileSize = GetFSize(SendVar->FullName);
+	SendVar->FileSize = (LONG)GetFSize64H(SendVar->FileHandle);
 
 	TalkStatus = IdTalkFile;
 	FileRetrySend = FALSE;
@@ -380,23 +381,11 @@
 		BinaryMode = ts.TransBin;
 	}
 
-	if (! OpenFTDlg(SendVar))
+	if (! OpenFTDlg(SendVar)) {
 		FileSendEnd();
-}
-
-BOOL FileSendStart2(const char *filename, int binary)
-{
-	if (SendVar != NULL) {
 		return FALSE;
 	}
-	if (!NewFileVar(&SendVar)) {
-		return FALSE;
-	}
 
-	SendVar->FullName = _strdup(filename);
-	ts.TransBin = binary;
-	FileSendStart();
-
 	return TRUE;
 }
 

Modified: branches/proto_unicode/teraterm/teraterm/filesys.h
===================================================================
--- branches/proto_unicode/teraterm/teraterm/filesys.h	2020-11-01 15:32:38 UTC (rev 8985)
+++ branches/proto_unicode/teraterm/teraterm/filesys.h	2020-11-01 15:32:54 UTC (rev 8986)
@@ -37,8 +37,7 @@
 BOOL IsSendVarNULL(void);
 BOOL IsFileVarNULL(void);
 
-void FileSendStart(void);
-BOOL FileSendStart2(const char *filename, int binary);
+BOOL FileSendStart(const wchar_t *filename, int binary);
 void FileSend(void);
 void FileSendEnd(void);
 void FileSendPause(BOOL Pause);

Modified: branches/proto_unicode/teraterm/teraterm/sendmem.cpp
===================================================================
--- branches/proto_unicode/teraterm/teraterm/sendmem.cpp	2020-11-01 15:32:38 UTC (rev 8985)
+++ branches/proto_unicode/teraterm/teraterm/sendmem.cpp	2020-11-01 15:32:54 UTC (rev 8986)
@@ -643,9 +643,7 @@
 	(void)delay_tick;
 	(void)send_max;
 
-	char *FileNameA = ToCharW(filename);
-	BOOL r = FileSendStart2(FileNameA, binary == FALSE ? 0 : 1);
-	free(FileNameA);
+	BOOL r = FileSendStart(filename, binary == FALSE ? 0 : 1);
 	return r;
 }
 #else

Modified: branches/proto_unicode/teraterm/teraterm/ttdde.c
===================================================================
--- branches/proto_unicode/teraterm/teraterm/ttdde.c	2020-11-01 15:32:38 UTC (rev 8985)
+++ branches/proto_unicode/teraterm/teraterm/ttdde.c	2020-11-01 15:32:54 UTC (rev 8986)
@@ -611,13 +611,17 @@
 	case CmdSendBreak:
 		PostMessage(HVTWin,WM_USER_ACCELCOMMAND,IdBreak,0);
 		break;
-	case CmdSendFile:
-		if (FileSendStart2(ParamFileName, ParamBinaryFlag)) {
+	case CmdSendFile: {
+		wchar_t *ParamFileNameW = ToWcharU8(ParamFileName);
+		BOOL r = FileSendStart(ParamFileNameW, ParamBinaryFlag);
+		free(ParamFileNameW);
+		if (r) {
 			DdeCmnd = TRUE;
 		}
 		else
 			return DDE_FNOTPROCESSED;
 		break;
+	}
 	case CmdSendKCode:
 		w = HexStr2Word(ParamFileName);
 		c = HexStr2Word(&ParamFileName[4]);

Modified: branches/proto_unicode/teraterm/teraterm/vtwin.cpp
===================================================================
--- branches/proto_unicode/teraterm/teraterm/vtwin.cpp	2020-11-01 15:32:38 UTC (rev 8985)
+++ branches/proto_unicode/teraterm/teraterm/vtwin.cpp	2020-11-01 15:32:54 UTC (rev 8986)
@@ -4290,7 +4290,7 @@
 #if 1
 	// file send same as teraterm 4
 	HelpId = HlpFileSend;
-	FileSendStart();
+	FileSendStart(NULL, 0);
 #else
 	// new file send
 	SetDialogFont(ts.DialogFontName, ts.DialogFontPoint, ts.DialogFontCharSet,


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