static char SSLRootCAFilePath[FMAX_PATH+1];\r
// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策\r
static DWORD MainThreadId;\r
+// ポータブル版判定\r
+static char PortableFilePath[FMAX_PATH+1];\r
+int PortableVersion;\r
\r
\r
/*===== グローバルなワーク =====*/\r
// 暗号化通信対応\r
BYTE CertificateCacheHash[MAX_CERT_CACHE_HASH][20];\r
BYTE SSLRootCAFileHash[20];\r
+// ファイルアイコン表示対応\r
+int DispFileIcon = NO;\r
+// ディレクトリ自動作成\r
+int MakeAllDir = YES;\r
+\r
\r
\r
\r
\r
// プロセス保護\r
#ifdef ENABLE_PROCESS_PROTECTION\r
- DWORD ProtectLevel;\r
- char* pCommand;\r
- char Option[FMAX_PATH+1];\r
- ProtectLevel = PROCESS_PROTECTION_NONE;\r
- pCommand = lpszCmdLine;\r
- while(pCommand = GetToken(pCommand, Option))\r
{\r
- if(strcmp(Option, "--protect") == 0)\r
- {\r
- ProtectLevel = PROCESS_PROTECTION_DEFAULT;\r
- break;\r
- }\r
- else if(strcmp(Option, "--protect-high") == 0)\r
- {\r
- ProtectLevel = PROCESS_PROTECTION_HIGH;\r
- break;\r
- }\r
- else if(strcmp(Option, "--protect-medium") == 0)\r
- {\r
- ProtectLevel = PROCESS_PROTECTION_MEDIUM;\r
- break;\r
- }\r
- else if(strcmp(Option, "--protect-low") == 0)\r
+ DWORD ProtectLevel;\r
+ char* pCommand;\r
+ char Option[FMAX_PATH+1];\r
+ ProtectLevel = PROCESS_PROTECTION_NONE;\r
+ pCommand = lpszCmdLine;\r
+ while(pCommand = GetToken(pCommand, Option))\r
{\r
- ProtectLevel = PROCESS_PROTECTION_LOW;\r
- break;\r
+ if(strcmp(Option, "--protect") == 0)\r
+ {\r
+ ProtectLevel = PROCESS_PROTECTION_DEFAULT;\r
+ break;\r
+ }\r
+ else if(strcmp(Option, "--protect-high") == 0)\r
+ {\r
+ ProtectLevel = PROCESS_PROTECTION_HIGH;\r
+ break;\r
+ }\r
+ else if(strcmp(Option, "--protect-medium") == 0)\r
+ {\r
+ ProtectLevel = PROCESS_PROTECTION_MEDIUM;\r
+ break;\r
+ }\r
+ else if(strcmp(Option, "--protect-low") == 0)\r
+ {\r
+ ProtectLevel = PROCESS_PROTECTION_LOW;\r
+ break;\r
+ }\r
}\r
- }\r
- if(ProtectLevel != PROCESS_PROTECTION_NONE)\r
- {\r
- SetProcessProtectionLevel(ProtectLevel);\r
- if(!InitializeLoadLibraryHook())\r
+ if(ProtectLevel != PROCESS_PROTECTION_NONE)\r
{\r
- MessageBox(NULL, MSGJPN321, "FFFTP", MB_OK | MB_ICONERROR);\r
- return 0;\r
- }\r
+ SetProcessProtectionLevel(ProtectLevel);\r
+ if(!InitializeLoadLibraryHook())\r
+ {\r
+ MessageBox(NULL, MSGJPN321, "FFFTP", MB_OK | MB_ICONERROR);\r
+ return 0;\r
+ }\r
#ifndef _DEBUG\r
- if(IsDebuggerPresent())\r
- {\r
- MessageBox(NULL, MSGJPN322, "FFFTP", MB_OK | MB_ICONERROR);\r
- return 0;\r
- }\r
+ if(IsDebuggerPresent())\r
+ {\r
+ MessageBox(NULL, MSGJPN322, "FFFTP", MB_OK | MB_ICONERROR);\r
+ return 0;\r
+ }\r
#endif\r
- if(!UnloadUntrustedModule())\r
- {\r
- MessageBox(NULL, MSGJPN323, "FFFTP", MB_OK | MB_ICONERROR);\r
- return 0;\r
- }\r
+ if(!UnloadUntrustedModule())\r
+ {\r
+ MessageBox(NULL, MSGJPN323, "FFFTP", MB_OK | MB_ICONERROR);\r
+ return 0;\r
+ }\r
#ifndef _DEBUG\r
- if(RestartProtectedProcess(" --restart"))\r
- return 0;\r
+ if(RestartProtectedProcess(" --restart"))\r
+ return 0;\r
#endif\r
- if(!EnableLoadLibraryHook(TRUE))\r
- {\r
- MessageBox(NULL, MSGJPN324, "FFFTP", MB_OK | MB_ICONERROR);\r
- return 0;\r
+ if(!EnableLoadLibraryHook(TRUE))\r
+ {\r
+ MessageBox(NULL, MSGJPN324, "FFFTP", MB_OK | MB_ICONERROR);\r
+ return 0;\r
+ }\r
}\r
+ else\r
+ InitializeLoadLibraryHook();\r
}\r
- else\r
- InitializeLoadLibraryHook();\r
#endif\r
\r
// マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策\r
LoadOpenSSL();\r
#endif\r
\r
+ // SFTP対応\r
+ LoadPuTTY();\r
+\r
Ret = FALSE;\r
hWndFtp = NULL;\r
hInstFtp = hInstance;\r
#ifdef USE_OPENSSL\r
FreeOpenSSL();\r
#endif\r
+ // SFTP対応\r
+ FreePuTTY();\r
OleUninitialize();\r
return(Ret);\r
}\r
char PwdBuf[FMAX_PATH+1];\r
int useDefautPassword = 0; /* 警告文表示用 */\r
int masterpass;\r
+ // ポータブル版判定\r
+ int ImportPortable;\r
\r
sts = FFFTP_FAIL;\r
\r
ForceIni = YES;\r
RegType = REGTYPE_INI;\r
}\r
+ // ポータブル版判定\r
+ GetModuleFileName(NULL, PortableFilePath, FMAX_PATH);\r
+ strcpy(GetFileName(PortableFilePath), "portable");\r
+ CheckPortableVersion();\r
+ ImportPortable = NO;\r
+ if(PortableVersion == YES)\r
+ {\r
+ ForceIni = YES;\r
+ RegType = REGTYPE_INI;\r
+ if(IsRegAvailable() == YES && IsIniAvailable() == NO)\r
+ {\r
+ if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(ini_from_reg_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
+ {\r
+ ImportPortable = YES;\r
+ ForceIni = NO;\r
+ RegType = REGTYPE_REG;\r
+ }\r
+ }\r
+ }\r
\r
// AllocConsole();\r
\r
/* 2010.02.01 genta マスターパスワードを入力させる\r
-z オプションがあるときは最初だけスキップ\r
-z オプションがないときは,デフォルトパスワードをまず試す\r
- LoadRegistory()する\r
+ LoadRegistry()する\r
パスワードが不一致なら再入力するか尋ねる.\r
(破損していた場合はさせない)\r
*/\r
\r
if(masterpass != 0)\r
{\r
- LoadRegistory();\r
+ LoadRegistry();\r
+\r
+ // ポータブル版判定\r
+ if(ImportPortable == YES)\r
+ {\r
+ ForceIni = YES;\r
+ RegType = REGTYPE_INI;\r
+ }\r
\r
// 暗号化通信対応\r
SetSSLTimeoutCallback(TimeOut * 1000, SSLTimeoutCallback);\r
DispWindowTitle();\r
// SourceForge.JPによるフォーク\r
// SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.");\r
- SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.\r\nCopyright (C) 2011 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, unarist, Asami, fortran90, tomo1192).");\r
+ SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators.\r\nCopyright (C) 2011-2012 FFFTP Project (Hiromichi Matsushima, Suguru Kawamoto, IWAMOTO Kouichi, vitamin0x, unarist, Asami, fortran90, tomo1192, Yuji Tanaka, Moriguchi Hirokazu).");\r
\r
if(ForceIni)\r
SetTaskMsg("%s%s", MSGJPN283, IniPath);\r
\r
case MENU_DCLICK :\r
if(hWndCurFocus == GetLocalHwnd())\r
+ // ローカルフォルダを開く\r
+// DoubleClickProc(WIN_LOCAL, YES, -1);\r
+ DoubleClickProc(WIN_LOCAL, NO, -1);\r
+ else\r
+ {\r
+ SuppressRefresh = 1;\r
+ // ローカルフォルダを開く\r
+// DoubleClickProc(WIN_REMOTE, YES, -1);\r
+ DoubleClickProc(WIN_REMOTE, NO, -1);\r
+ SuppressRefresh = 0;\r
+ }\r
+ break;\r
+\r
+ // ローカルフォルダを開く\r
+ case MENU_OPEN :\r
+ if(hWndCurFocus == GetLocalHwnd())\r
DoubleClickProc(WIN_LOCAL, YES, -1);\r
else\r
{\r
\r
case MENU_DOWNLOAD :\r
SetCurrentDirAsDirHist();\r
- DownLoadProc(NO, NO, NO);\r
+ DownloadProc(NO, NO, NO);\r
break;\r
\r
case MENU_DOWNLOAD_AS :\r
SetCurrentDirAsDirHist();\r
- DownLoadProc(YES, NO, NO);\r
+ DownloadProc(YES, NO, NO);\r
break;\r
\r
case MENU_DOWNLOAD_AS_FILE :\r
SetCurrentDirAsDirHist();\r
- DownLoadProc(NO, YES, NO);\r
+ DownloadProc(NO, YES, NO);\r
break;\r
\r
case MENU_DOWNLOAD_ALL :\r
SetCurrentDirAsDirHist();\r
- DownLoadProc(NO, NO, YES);\r
+ DownloadProc(NO, NO, YES);\r
break;\r
\r
case MENU_DOWNLOAD_NAME :\r
SetCurrentDirAsDirHist();\r
- InputDownLoadProc();\r
+ InputDownloadProc();\r
break;\r
\r
case MENU_UPLOAD :\r
SetCurrentDirAsDirHist();\r
- UpLoadListProc(NO, NO);\r
+ UploadListProc(NO, NO);\r
break;\r
\r
case MENU_UPLOAD_AS :\r
SetCurrentDirAsDirHist();\r
- UpLoadListProc(YES, NO);\r
+ UploadListProc(YES, NO);\r
break;\r
\r
case MENU_UPLOAD_ALL :\r
SetCurrentDirAsDirHist();\r
- UpLoadListProc(NO, YES);\r
+ UploadListProc(NO, YES);\r
break;\r
\r
case MENU_MIRROR_UPLOAD :\r
\r
case MENU_REGSAVE :\r
GetListTabWidth();\r
- SaveRegistory();\r
+ SaveRegistry();\r
SaveSettingsToFile();\r
break;\r
\r
case MENU_REGINIT :\r
if(DialogBox(hInstFtp, MAKEINTRESOURCE(reginit_dlg), hWnd, ExeEscDialogProc) == YES)\r
{\r
- ClearRegistory();\r
+ ClearRegistry();\r
+ // ポータブル版判定\r
+ ClearIni();\r
SaveExit = NO;\r
PostMessage(hWnd, WM_CLOSE, 0, 0L);\r
}\r
LocalRbuttonMenu(1);\r
break;\r
\r
+#if defined(HAVE_TANDEM)\r
+ case MENU_SWITCH_OSS :\r
+ SwitchOSSProc();\r
+ break;\r
+#endif\r
+\r
default :\r
if((LOWORD(wParam) >= MENU_BMARK_TOP) &&\r
(LOWORD(wParam) < MENU_BMARK_TOP+100))\r
case MENU_DOWNLOAD :\r
lpttt->lpszText = MSGJPN157;\r
break;\r
+#if defined(HAVE_TANDEM)\r
+ case MENU_DOWNLOAD_AS :\r
+ lpttt->lpszText = MSGJPN065;\r
+ break;\r
\r
+ case MENU_UPLOAD_AS :\r
+ lpttt->lpszText = MSGJPN064;\r
+ break;\r
+#endif\r
case MENU_UPLOAD :\r
lpttt->lpszText = MSGJPN158;\r
break;\r
if(SaveExit == YES)\r
{\r
GetListTabWidth();\r
- SaveRegistory();\r
+ SaveRegistry();\r
+ // ポータブル版判定\r
+ if(RegType == REGTYPE_REG)\r
+ ClearIni();\r
\r
if((CacheEntry > 0) && (CacheSave == YES))\r
SaveCache();\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
if(Win == WIN_LOCAL)\r
{\r
- if((App != -1) || (Type == NODE_FILE))\r
+ // ローカルフォルダを開く\r
+// if((App != -1) || (Type == NODE_FILE))\r
+ if((App != -1) || (Type == NODE_FILE) || (Mode == YES))\r
{\r
if((DclickOpen == YES) || (Mode == YES))\r
{\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
/* 不正なパスを検出 */\r
if(CheckPathViolation(&MainTransPkt) == NO)\r
{\r
-// if((Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO)) == 429)\r
+// if((Sts = DoDownload(AskCmdCtrlSkt(), &MainTransPkt, NO)) == 429)\r
// {\r
// ReConnectCmdSkt();\r
// 同時接続対応\r
CancelFlg = NO;\r
- Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO, &CancelFlg);\r
+ Sts = DoDownload(AskCmdCtrlSkt(), &MainTransPkt, NO, &CancelFlg);\r
// }\r
}\r
\r
DoPrintf("ShellExecute - %s", Fname);\r
ShellExecute(NULL, "open", Fname, NULL, CurDir, SW_SHOW);\r
}\r
+ // ローカルフォルダを開く\r
+ else if((App == -1) && (GetFileAttributes(Fname) & FILE_ATTRIBUTE_DIRECTORY))\r
+ {\r
+ MakeDistinguishableFileName(ComLine, Fname);\r
+ DoPrintf("ShellExecute - %s", Fname);\r
+ ShellExecute(NULL, "open", ComLine, NULL, Fname, SW_SHOW);\r
+ }\r
else\r
{\r
App = max1(0, App);\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, "\xF0\x1B\x48\x26\x67\x44\x3A\xFF\x0A\x16\xD3\xBB\x8A\x33\xEB\x70\x6D\x75\xA6\x0D", 20) == 0\r
+ if(memcmp(&Hash, &SSLRootCAFileHash, 20) == 0 || memcmp(&Hash, "\x63\xAC\x6C\x43\xCE\xD6\x5B\xCF\x33\xB9\x45\x70\xC3\x9B\x8C\x91\x19\x0D\xEF\xE6", 20) == 0\r
|| DialogBox(GetFtpInst(), MAKEINTRESOURCE(updatesslroot_dlg), GetMainHwnd(), ExeEscDialogProc) == YES)\r
{\r
memcpy(&SSLRootCAFileHash, &Hash, 20);\r
if(GetCurrentThreadId() != MainThreadId)\r
return FALSE;\r
return TRUE;\r
-}
\ No newline at end of file
+}\r
+\r
+// ファイルアイコン表示対応\r
+int AskDispFileIcon(void)\r
+{\r
+ return(DispFileIcon);\r
+}\r
+\r
+// ポータブル版判定\r
+void CheckPortableVersion()\r
+{\r
+ HANDLE hFile;\r
+ if((hFile = CreateFile(PortableFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE)\r
+ {\r
+ PortableVersion = YES;\r
+ CloseHandle(hFile);\r
+ }\r
+ else\r
+ PortableVersion = NO;\r
+}\r
+\r
+int AskPortableVersion(void)\r
+{\r
+ return(PortableVersion);\r
+}\r
+\r