static void CheckResizeFrame(WPARAM Keys, int x, int y);\r
static void DispDirInfo(void);\r
static void DeleteAlltempFile(void);\r
-static BOOL CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
+// 64ビット対応\r
+//static BOOL CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
+static INT_PTR CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);\r
static int EnterMasterPasswordAndSet( int Res, HWND hWnd );\r
\r
/*===== ローカルなワーク =====*/\r
\r
// 暗号化通信対応\r
static char SSLRootCAFilePath[FMAX_PATH+1];\r
+// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策\r
+static DWORD MainThreadId;\r
\r
\r
/*===== グローバルなワーク =====*/\r
InitializeLoadLibraryHook();\r
#endif\r
\r
+ // マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策\r
#ifdef DISABLE_MULTI_CPUS\r
SetProcessAffinityMask(GetCurrentProcess(), 1);\r
#endif\r
+ MainThreadId = GetCurrentThreadId();\r
\r
// yutaka\r
if(OleInitialize(NULL) != S_OK){\r
if((Sts == 0) || (Sts == -1))\r
break;\r
\r
- if(!HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg))\r
+ // 64ビット対応\r
+// if(!HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg))\r
+ if(!HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD_PTR)&Msg))\r
{ \r
/* ディレクトリ名の表示コンボボックスでBSやRETが効くように */\r
/* コンボボックス内ではアクセラレータを無効にする */\r
aes_init();\r
srand(GetTickCount());\r
\r
- HtmlHelp(NULL, NULL, HH_INITIALIZE, (DWORD)&dwCookie);\r
+ // 64ビット対応\r
+// HtmlHelp(NULL, NULL, HH_INITIALIZE, (DWORD)&dwCookie);\r
+ HtmlHelp(NULL, NULL, HH_INITIALIZE, (DWORD_PTR)&dwCookie);\r
\r
SaveUpdateBellInfo();\r
\r
{\r
Accel = LoadAccelerators(hInstFtp, MAKEINTRESOURCE(ffftp_accel));\r
\r
- GetTempPath(FMAX_PATH, TmpPath);\r
+ // 環境依存の不具合対策\r
+// GetTempPath(FMAX_PATH, TmpPath);\r
+ GetAppTempPath(TmpPath);\r
+ _mkdir(TmpPath);\r
+ SetYenTail(TmpPath);\r
\r
GetModuleFileName(NULL, HelpPath, FMAX_PATH);\r
strcpy(GetFileName(HelpPath), "ffftp.chm");\r
WinPosX = CW_USEDEFAULT;\r
WinPosY = 0;\r
}\r
- // UTF-8対応\r
- // ユーザー定義のクラスはデフォルトのWNDPROCがShift_JIS専用のため\r
-// hWndFtp = CreateWindow(FtpClassStr, "FFFTP",\r
-// WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,\r
-// WinPosX, WinPosY, WinWidth, WinHeight,\r
-// HWND_DESKTOP, 0, hInstFtp, NULL);\r
- hWndFtp = CreateWindowA(FtpClassStr, "FFFTP",\r
+ hWndFtp = CreateWindow(FtpClassStr, "FFFTP",\r
WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS,\r
WinPosX, WinPosY, WinWidth, WinHeight,\r
HWND_DESKTOP, 0, hInstFtp, NULL);\r
{\r
PAINTSTRUCT ps;\r
LPTOOLTIPTEXT lpttt;\r
+ // UTF-8対応\r
+ LPTOOLTIPTEXTW wlpttt;\r
RECT Rect;\r
\r
int TmpTransType;\r
switch(((LPNMHDR)lParam)->code)\r
{\r
/* ツールチップコントロールメッセージの処理 */\r
- case TTN_NEEDTEXT:\r
+ // UTF-8対応\r
+// case TTN_NEEDTEXT:\r
+ case TTN_NEEDTEXTW:\r
lpttt = (LPTOOLTIPTEXT)lParam;\r
+ // UTF-8対応\r
+ // lptttは単なる警告回避用\r
+ wlpttt = (LPTOOLTIPTEXTW)lParam;\r
lpttt->hinst = hInstFtp;\r
switch(lpttt->hdr.idFrom)\r
{\r
lpttt->lpszText = MSGJPN176;\r
break;\r
}\r
- // UTF-8からShift_JISへ変換\r
+ // UTF-8対応\r
+ // UTF-8からUTF-16 LEへ変換\r
{\r
static wchar_t StringBufferUTF16[1024];\r
- static char StringBufferSJIS[1024];\r
if(lpttt->lpszText)\r
{\r
MtoW(StringBufferUTF16, sizeof(StringBufferUTF16)/ sizeof(wchar_t), lpttt->lpszText, -1);\r
- WtoA(StringBufferSJIS, sizeof(StringBufferSJIS)/ sizeof(char), StringBufferUTF16, -1);\r
- lpttt->lpszText = StringBufferSJIS;\r
+ wlpttt->lpszText = StringBufferUTF16;\r
}\r
}\r
break;\r
\r
static void ExitProc(HWND hWnd)\r
{\r
+ // 環境依存の不具合対策\r
+ char Tmp[FMAX_PATH+1];\r
+\r
CancelFlg = YES;\r
\r
CloseTransferThread();\r
else\r
DeleteCache();\r
\r
+ // 環境依存の不具合対策\r
+ GetAppTempPath(Tmp);\r
+ SetYenTail(Tmp);\r
+ strcat(Tmp, "file");\r
+ _rmdir(Tmp);\r
+ GetAppTempPath(Tmp);\r
+ _rmdir(Tmp);\r
+\r
if(RasClose == YES)\r
{\r
DisconnectRas(RasCloseNotify);\r
\r
strcpy(Remote, TmpPath);\r
SetYenTail(Remote);\r
+ // 環境依存の不具合対策\r
+ strcat(Remote, "file");\r
+ _mkdir(Remote);\r
+ SetYenTail(Remote);\r
if (UseDiffViewer == YES) {\r
strcat(Remote, "remote.");\r
}\r
* BOOL TRUE/FALSE\r
*----------------------------------------------------------------------------*/\r
\r
-static BOOL CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+// 64ビット対応\r
+//static BOOL CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
+static INT_PTR CALLBACK AboutDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)\r
{\r
static char Tmp[80];\r
int Ver;\r
Ret = NO;\r
while(PeekMessage(&Msg, NULL, 0, 0, PM_REMOVE))\r
{\r
- if(!HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg))\r
+ // マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策\r
+// if(!HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg))\r
+ // 64ビット対応\r
+// if(!IsMainThread() || !HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&Msg))\r
+ if(!IsMainThread() || !HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD_PTR)&Msg))\r
{\r
/* ディレクトリ名の表示コンボボックスでBSやRETが効くように */\r
/* コンボボックス内ではアクセラレータを無効にする */\r
BOOL __stdcall SSLConfirmCallback(BOOL* pbAborted, BOOL bVerified, LPCSTR Certificate, LPCSTR CommonName)\r
{\r
BOOL bResult;\r
- int i;\r
uint32 Hash[5];\r
+ int i;\r
char* pm0;\r
bResult = FALSE;\r
sha_memory((char*)Certificate, (uint32)(strlen(Certificate) * sizeof(char)), (uint32*)&Hash);\r
+ // sha.cはビッグエンディアンのため\r
+ for(i = 0; i < 5; i++)\r
+ Hash[i] = _byteswap_ulong(Hash[i]);\r
i = 0;\r
while(i < MAX_CERT_CACHE_HASH)\r
{\r
DWORD Size;\r
BYTE* pBuffer;\r
uint32 Hash[5];\r
+ int i;\r
bResult = FALSE;\r
if((hFile = CreateFile(SSLRootCAFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)\r
{\r
if(ReadFile(hFile, pBuffer, Size, &Size, NULL))\r
{\r
sha_memory((char*)pBuffer, (uint32)Size, (uint32*)&Hash);\r
+ // sha.cはビッグエンディアンのため\r
+ for(i = 0; i < 5; i++)\r
+ Hash[i] = _byteswap_ulong(Hash[i]);\r
// 同梱する"ssl.pem"に合わせてSHA1ハッシュ値を変更すること\r
- if(memcmp(&Hash, &SSLRootCAFileHash, 20) == 0 || memcmp(&Hash, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 20) == 0\r
+ if(memcmp(&Hash, &SSLRootCAFileHash, 20) == 0 || memcmp(&Hash, "\xF0\x1B\x48\x26\x67\x44\x3A\xFF\x0A\x16\xD3\xBB\x8A\x33\xEB\x70\x6D\x75\xA6\x0D", 20) == 0\r
|| DialogBox(GetFtpInst(), MAKEINTRESOURCE(updatesslroot_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
{\r
memcpy(&SSLRootCAFileHash, &Hash, 20);\r
return bResult;\r
}\r
\r
+// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策\r
+BOOL IsMainThread()\r
+{\r
+ if(GetCurrentThreadId() != MainThreadId)\r
+ return FALSE;\r
+ return TRUE;\r
+}
\ No newline at end of file