X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=main.c;h=60ef00587d597bbf8e64439c5454c2b2fffcd518;hb=aa3eb353c0bf24065b8a44e7238cdcf72c814d6f;hp=51d8b354816bea8480356f7105ab601b0acc0d0b;hpb=19f7cced5712c402119825eb556f3dac6aee54f9;p=ffftp%2Fffftp.git diff --git a/main.c b/main.c index 51d8b35..60ef005 100644 --- a/main.c +++ b/main.c @@ -128,7 +128,9 @@ char FilterStr[FILTER_EXT_LEN+1] = { "*" }; int CancelFlg; -static int SuppressRefresh = 0; +// 外部アプリケーションへドロップ後にローカル側のファイル一覧に作業フォルダが表示されるバグ対策 +//static int SuppressRefresh = 0; +int SuppressRefresh = 0; static DWORD dwCookie; @@ -136,6 +138,11 @@ static DWORD dwCookie; static char SSLRootCAFilePath[FMAX_PATH+1]; // マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策 static DWORD MainThreadId; +// ポータブル版判定 +static char PortableFilePath[FMAX_PATH+1]; +static int PortableVersion; +// ローカル側自動更新 +HANDLE ChangeNotification = INVALID_HANDLE_VALUE; /*===== グローバルなワーク =====*/ @@ -171,7 +178,9 @@ int TransMode = TYPE_X; int ConnectOnStart = YES; int DebugConsole = NO; int SaveWinPos = NO; -char AsciiExt[ASCII_EXT_LEN+1] = { "*.txt\0*.html\0*.htm\0*.cgi\0*.pl\0" }; +// アスキーモード判別の改良 +//char AsciiExt[ASCII_EXT_LEN+1] = { "*.txt\0*.html\0*.htm\0*.cgi\0*.pl\0" }; +char AsciiExt[ASCII_EXT_LEN+1] = { "*.txt\0*.html\0*.htm\0*.cgi\0*.pl\0*.js\0*.vbs\0*.css\0*.rss\0*.rdf\0*.xml\0*.xhtml\0*.xht\0*.shtml\0*.shtm\0*.sh\0*.py\0*.rb\0*.properties\0*.sql\0*.asp\0*.aspx\0*.php\0*.htaccess\0" }; int RecvMode = TRANS_DLG; int SendMode = TRANS_DLG; int MoveMode = MOVE_DLG; @@ -201,7 +210,9 @@ int FwallSecurity = SECURITY_AUTO; int FwallResolv = NO; int FwallLower = NO; int FwallDelimiter = '@'; -int PasvDefault = NO; +// ルータ対策 +//int PasvDefault = NO; +int PasvDefault = YES; char MirrorNoTrn[MIRROR_LEN+1] = { "*.bak\0" }; char MirrorNoDel[MIRROR_LEN+1] = { "" }; int MirrorFnameCnv = NO; @@ -233,6 +244,8 @@ BYTE CertificateCacheHash[MAX_CERT_CACHE_HASH][20]; BYTE SSLRootCAFileHash[20]; // ファイルアイコン表示対応 int DispFileIcon = NO; +// ディレクトリ自動作成 +int MakeAllDir = YES; @@ -258,66 +271,68 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi // プロセス保護 #ifdef ENABLE_PROCESS_PROTECTION - DWORD ProtectLevel; - char* pCommand; - char Option[FMAX_PATH+1]; - ProtectLevel = PROCESS_PROTECTION_NONE; - pCommand = lpszCmdLine; - while(pCommand = GetToken(pCommand, Option)) { - if(strcmp(Option, "--protect") == 0) + DWORD ProtectLevel; + char* pCommand; + char Option[FMAX_PATH+1]; + ProtectLevel = PROCESS_PROTECTION_NONE; + pCommand = lpszCmdLine; + while(pCommand = GetToken(pCommand, Option)) { - ProtectLevel = PROCESS_PROTECTION_DEFAULT; - break; - } - else if(strcmp(Option, "--protect-high") == 0) - { - ProtectLevel = PROCESS_PROTECTION_HIGH; - break; - } - else if(strcmp(Option, "--protect-medium") == 0) - { - ProtectLevel = PROCESS_PROTECTION_MEDIUM; - break; - } - else if(strcmp(Option, "--protect-low") == 0) - { - ProtectLevel = PROCESS_PROTECTION_LOW; - break; + if(strcmp(Option, "--protect") == 0) + { + ProtectLevel = PROCESS_PROTECTION_DEFAULT; + break; + } + else if(strcmp(Option, "--protect-high") == 0) + { + ProtectLevel = PROCESS_PROTECTION_HIGH; + break; + } + else if(strcmp(Option, "--protect-medium") == 0) + { + ProtectLevel = PROCESS_PROTECTION_MEDIUM; + break; + } + else if(strcmp(Option, "--protect-low") == 0) + { + ProtectLevel = PROCESS_PROTECTION_LOW; + break; + } } - } - if(ProtectLevel != PROCESS_PROTECTION_NONE) - { - SetProcessProtectionLevel(ProtectLevel); - if(!InitializeLoadLibraryHook()) + if(ProtectLevel != PROCESS_PROTECTION_NONE) { - MessageBox(NULL, MSGJPN321, "FFFTP", MB_OK | MB_ICONERROR); - return 0; - } + SetProcessProtectionLevel(ProtectLevel); + if(!InitializeLoadLibraryHook()) + { + MessageBox(NULL, MSGJPN321, "FFFTP", MB_OK | MB_ICONERROR); + return 0; + } #ifndef _DEBUG - if(IsDebuggerPresent()) - { - MessageBox(NULL, MSGJPN322, "FFFTP", MB_OK | MB_ICONERROR); - return 0; - } + if(IsDebuggerPresent()) + { + MessageBox(NULL, MSGJPN322, "FFFTP", MB_OK | MB_ICONERROR); + return 0; + } #endif - if(!UnloadUntrustedModule()) - { - MessageBox(NULL, MSGJPN323, "FFFTP", MB_OK | MB_ICONERROR); - return 0; - } + if(!UnloadUntrustedModule()) + { + MessageBox(NULL, MSGJPN323, "FFFTP", MB_OK | MB_ICONERROR); + return 0; + } #ifndef _DEBUG - if(RestartProtectedProcess(" --restart")) - return 0; + if(RestartProtectedProcess(" --restart")) + return 0; #endif - if(!EnableLoadLibraryHook(TRUE)) - { - MessageBox(NULL, MSGJPN324, "FFFTP", MB_OK | MB_ICONERROR); - return 0; + if(!EnableLoadLibraryHook(TRUE)) + { + MessageBox(NULL, MSGJPN324, "FFFTP", MB_OK | MB_ICONERROR); + return 0; + } } + else + InitializeLoadLibraryHook(); } - else - InitializeLoadLibraryHook(); #endif // マルチコアCPUの特定環境下でファイル通信中にクラッシュするバグ対策 @@ -339,9 +354,6 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi LoadOpenSSL(); #endif - // SFTP対応 - LoadPuTTY(); - Ret = FALSE; hWndFtp = NULL; hInstFtp = hInstance; @@ -377,8 +389,6 @@ int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLi #ifdef USE_OPENSSL FreeOpenSSL(); #endif - // SFTP対応 - FreePuTTY(); OleUninitialize(); return(Ret); } @@ -405,6 +415,8 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow) char PwdBuf[FMAX_PATH+1]; int useDefautPassword = 0; /* 警告文表示用 */ int masterpass; + // ポータブル版判定 + int ImportPortable; sts = FFFTP_FAIL; @@ -442,13 +454,32 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow) ForceIni = YES; RegType = REGTYPE_INI; } + // ポータブル版判定 + GetModuleFileName(NULL, PortableFilePath, FMAX_PATH); + strcpy(GetFileName(PortableFilePath), "portable"); + CheckPortableVersion(); + ImportPortable = NO; + if(PortableVersion == YES) + { + ForceIni = YES; + RegType = REGTYPE_INI; + if(IsRegAvailable() == YES && IsIniAvailable() == NO) + { + if(DialogBox(GetFtpInst(), MAKEINTRESOURCE(ini_from_reg_dlg), GetMainHwnd(), ExeEscDialogProc) == YES) + { + ImportPortable = YES; + ForceIni = NO; + RegType = REGTYPE_REG; + } + } + } // AllocConsole(); /* 2010.02.01 genta マスターパスワードを入力させる -z オプションがあるときは最初だけスキップ -z オプションがないときは,デフォルトパスワードをまず試す - LoadRegistory()する + LoadRegistry()する パスワードが不一致なら再入力するか尋ねる. (破損していた場合はさせない) */ @@ -493,7 +524,14 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow) if(masterpass != 0) { - LoadRegistory(); + LoadRegistry(); + + // ポータブル版判定 + if(ImportPortable == YES) + { + ForceIni = YES; + RegType = REGTYPE_INI; + } // 暗号化通信対応 SetSSLTimeoutCallback(TimeOut * 1000, SSLTimeoutCallback); @@ -542,7 +580,7 @@ static int InitApp(LPSTR lpszCmdLine, int cmdShow) DispWindowTitle(); // SourceForge.JPによるフォーク // SetTaskMsg("FFFTP Ver." VER_STR " Copyright(C) 1997-2010 Sota & cooperators."); - 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, Yuji Tanaka)."); + 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)."); if(ForceIni) SetTaskMsg("%s%s", MSGJPN283, IniPath); @@ -865,10 +903,34 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA switch (message) { + // ローカル側自動更新 + case WM_CREATE : + SetTimer(hWnd, 1, 1000, NULL); + break; + + // ローカル側自動更新 // 自動切断対策 case WM_TIMER : - if(wParam == 1) + switch(wParam) + { + case 1: + if(WaitForSingleObject(ChangeNotification, 0) == WAIT_OBJECT_0) + { + if(AskUserOpeDisabled() == NO) + { + FILELIST* Base; + FindNextChangeNotification(ChangeNotification); + Base = NULL; + MakeSelectedFileList(WIN_LOCAL, NO, NO, &Base, &CancelFlg); + GetLocalDirForWnd(); + SelectFileInList(GetLocalHwnd(), SELECT_LIST, Base); + } + } + break; + case 2: NoopProc(); + break; + } break; case WM_COMMAND : @@ -880,20 +942,20 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA { case MENU_CONNECT : // 自動切断対策 - KillTimer(hWnd, 1); + KillTimer(hWnd, 2); ConnectProc(DLG_TYPE_CON, -1); // 自動切断対策 if(AskNoopInterval() > 0) - SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL); + SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL); break; case MENU_CONNECT_NUM : // 自動切断対策 - KillTimer(hWnd, 1); + KillTimer(hWnd, 2); ConnectProc(DLG_TYPE_CON, (int)lParam); // 自動切断対策 if(AskNoopInterval() > 0) - SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL); + SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL); if(AskConnecting() == YES) { if(HIWORD(wParam) & OPT_MIRROR) @@ -915,20 +977,20 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA case MENU_SET_CONNECT : // 自動切断対策 - KillTimer(hWnd, 1); + KillTimer(hWnd, 2); ConnectProc(DLG_TYPE_SET, -1); // 自動切断対策 if(AskNoopInterval() > 0) - SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL); + SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL); break; case MENU_QUICK : // 自動切断対策 - KillTimer(hWnd, 1); + KillTimer(hWnd, 2); QuickConnectProc(); // 自動切断対策 if(AskNoopInterval() > 0) - SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL); + SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL); break; case MENU_DISCONNECT : @@ -963,11 +1025,11 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA case MENU_HIST_19 : case MENU_HIST_20 : // 自動切断対策 - KillTimer(hWnd, 1); + KillTimer(hWnd, 2); HistoryConnectProc(LOWORD(wParam)); // 自動切断対策 if(AskNoopInterval() > 0) - SetTimer(hWnd, 1, AskNoopInterval() * 1000, NULL); + SetTimer(hWnd, 2, AskNoopInterval() * 1000, NULL); break; case MENU_UPDIR : @@ -979,6 +1041,22 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA case MENU_DCLICK : if(hWndCurFocus == GetLocalHwnd()) + // ローカルフォルダを開く +// DoubleClickProc(WIN_LOCAL, YES, -1); + DoubleClickProc(WIN_LOCAL, NO, -1); + else + { + SuppressRefresh = 1; + // ローカルフォルダを開く +// DoubleClickProc(WIN_REMOTE, YES, -1); + DoubleClickProc(WIN_REMOTE, NO, -1); + SuppressRefresh = 0; + } + break; + + // ローカルフォルダを開く + case MENU_OPEN : + if(hWndCurFocus == GetLocalHwnd()) DoubleClickProc(WIN_LOCAL, YES, -1); else { @@ -1022,6 +1100,9 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case MENU_REMOTE_UPDIR : + // デッドロック対策 + if(AskUserOpeDisabled() == YES) + break; SuppressRefresh = 1; SetCurrentDirAsDirHist(); ChangeDir(WIN_REMOTE, ".."); @@ -1029,6 +1110,9 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case MENU_LOCAL_UPDIR : + // デッドロック対策 + if(AskUserOpeDisabled() == YES) + break; SetCurrentDirAsDirHist(); ChangeDir(WIN_LOCAL, ".."); break; @@ -1047,42 +1131,42 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA case MENU_DOWNLOAD : SetCurrentDirAsDirHist(); - DownLoadProc(NO, NO, NO); + DownloadProc(NO, NO, NO); break; case MENU_DOWNLOAD_AS : SetCurrentDirAsDirHist(); - DownLoadProc(YES, NO, NO); + DownloadProc(YES, NO, NO); break; case MENU_DOWNLOAD_AS_FILE : SetCurrentDirAsDirHist(); - DownLoadProc(NO, YES, NO); + DownloadProc(NO, YES, NO); break; case MENU_DOWNLOAD_ALL : SetCurrentDirAsDirHist(); - DownLoadProc(NO, NO, YES); + DownloadProc(NO, NO, YES); break; case MENU_DOWNLOAD_NAME : SetCurrentDirAsDirHist(); - InputDownLoadProc(); + InputDownloadProc(); break; case MENU_UPLOAD : SetCurrentDirAsDirHist(); - UpLoadListProc(NO, NO); + UploadListProc(NO, NO); break; case MENU_UPLOAD_AS : SetCurrentDirAsDirHist(); - UpLoadListProc(YES, NO); + UploadListProc(YES, NO); break; case MENU_UPLOAD_ALL : SetCurrentDirAsDirHist(); - UpLoadListProc(NO, YES); + UploadListProc(NO, YES); break; case MENU_MIRROR_UPLOAD : @@ -1231,6 +1315,9 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case MENU_REFRESH : + // デッドロック対策 + if(AskUserOpeDisabled() == YES) + break; // 同時接続対応 CancelFlg = NO; SuppressRefresh = 1; @@ -1253,10 +1340,16 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case REFRESH_LOCAL : + // デッドロック対策 + if(AskUserOpeDisabled() == YES) + break; GetLocalDirForWnd(); break; case REFRESH_REMOTE : + // デッドロック対策 + if(AskUserOpeDisabled() == YES) + break; // 同時接続対応 CancelFlg = NO; SuppressRefresh = 1; @@ -1309,11 +1402,15 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case MENU_SELECT_ALL : - SelectFileInList(hWndCurFocus, SELECT_ALL); + // ローカル側自動更新 +// SelectFileInList(hWndCurFocus, SELECT_ALL); + SelectFileInList(hWndCurFocus, SELECT_ALL, NULL); break; case MENU_SELECT : - SelectFileInList(hWndCurFocus, SELECT_REGEXP); + // ローカル側自動更新 +// SelectFileInList(hWndCurFocus, SELECT_REGEXP); + SelectFileInList(hWndCurFocus, SELECT_REGEXP, NULL); break; case MENU_FIND : @@ -1325,6 +1422,9 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case MENU_DOTFILE : + // デッドロック対策 + if(AskUserOpeDisabled() == YES) + break; // 同時接続対応 CancelFlg = NO; DotFile ^= 1; @@ -1343,7 +1443,7 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA case MENU_REGSAVE : GetListTabWidth(); - SaveRegistory(); + SaveRegistry(); SaveSettingsToFile(); break; @@ -1359,7 +1459,9 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA case MENU_REGINIT : if(DialogBox(hInstFtp, MAKEINTRESOURCE(reginit_dlg), hWnd, ExeEscDialogProc) == YES) { - ClearRegistory(); + ClearRegistry(); + // ポータブル版判定 + ClearIni(); SaveExit = NO; PostMessage(hWnd, WM_CLOSE, 0, 0L); } @@ -1371,9 +1473,34 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA if( DialogBox(hInstFtp, MAKEINTRESOURCE(forcepasschange_dlg), hWnd, ExeEscDialogProc) != YES){ break; } + // セキュリティ強化 + if(EnterMasterPasswordAndSet(newmasterpasswd_dlg, hWnd) != 0) + SetTaskMsg(MSGJPN303); } - if( EnterMasterPasswordAndSet( newmasterpasswd_dlg, hWnd ) != 0 ){ - SetTaskMsg( MSGJPN303 ); + // セキュリティ強化 +// if( EnterMasterPasswordAndSet( newmasterpasswd_dlg, hWnd ) != 0 ){ +// SetTaskMsg( MSGJPN303 ); +// } + else if(GetMasterPasswordStatus() == PASSWORD_OK) + { + char Password[MAX_PASSWORD_LEN + 1]; + GetMasterPassword(Password); + SetMasterPassword(NULL); + while(ValidateMasterPassword() == YES && GetMasterPasswordStatus() == PASSWORD_UNMATCH) + { + if(EnterMasterPasswordAndSet(masterpasswd_dlg, NULL) == 0) + break; + } + if(GetMasterPasswordStatus() == PASSWORD_OK && EnterMasterPasswordAndSet(newmasterpasswd_dlg, hWnd) != 0) + { + SetTaskMsg(MSGJPN303); + SaveRegistry(); + } + else + { + SetMasterPassword(Password); + ValidateMasterPassword(); + } } break; @@ -1652,7 +1779,10 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case WM_REFRESH_LOCAL_FLG : - PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(REFRESH_LOCAL, 0), 0); + // 外部アプリケーションへドロップ後にローカル側のファイル一覧に作業フォルダが表示されるバグ対策 +// PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(REFRESH_LOCAL, 0), 0); + if(SuppressRefresh == 0) + PostMessage(hWnd, WM_COMMAND, MAKEWPARAM(REFRESH_LOCAL, 0), 0); break; case WM_REFRESH_REMOTE_FLG : @@ -1666,6 +1796,10 @@ static LRESULT CALLBACK FtpWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARA break; case WM_DESTROY : + // ローカル側自動更新 + KillTimer(hWnd, 1); + if(ChangeNotification != INVALID_HANDLE_VALUE) + FindCloseChangeNotification(ChangeNotification); // WSACleanup(); // DestroyWindow(hWndFtp); PostQuitMessage(0); @@ -1740,6 +1874,18 @@ static void StartupProc(char *Cmd) if(CmdOption & OPT_SAVEON) SuppressSave = NO; + // UTF-8対応 + if(CmdOption & OPT_SJIS) + Kanji = KANJI_SJIS; + if(CmdOption & OPT_UTF8N) + Kanji = KANJI_UTF8N; + if(CmdOption & OPT_UTF8BOM) + Kanji = KANJI_UTF8BOM; + if(CmdOption & OPT_SJIS_NAME) + FnameKanji = KANJI_SJIS; + if(CmdOption & OPT_UTF8N_NAME) + FnameKanji = KANJI_UTF8N; + if(Sts == 0) { if(ConnectOnStart == YES) @@ -1811,9 +1957,14 @@ static int AnalyzeComLine(char *Str, int *AutoConnect, int *CmdOption, char *unc *CmdOption |= OPT_MIRROR; else if((strcmp(&Tmp[1], "d") == 0) || (strcmp(&Tmp[1], "-mirrordown") == 0)) *CmdOption |= OPT_MIRRORDOWN; - else if((strcmp(&Tmp[1], "e") == 0) || (strcmp(&Tmp[1], "-euc") == 0)) + // 廃止予定 +// else if((strcmp(&Tmp[1], "e") == 0) || (strcmp(&Tmp[1], "-euc") == 0)) +// *CmdOption |= OPT_EUC; +// else if((strcmp(&Tmp[1], "j") == 0) || (strcmp(&Tmp[1], "-jis") == 0)) +// *CmdOption |= OPT_JIS; + else if((strcmp(&Tmp[1], "eu") == 0) || (strcmp(&Tmp[1], "e") == 0) || (strcmp(&Tmp[1], "-euc") == 0)) *CmdOption |= OPT_EUC; - else if((strcmp(&Tmp[1], "j") == 0) || (strcmp(&Tmp[1], "-jis") == 0)) + else if((strcmp(&Tmp[1], "ji") == 0) || (strcmp(&Tmp[1], "j") == 0) || (strcmp(&Tmp[1], "-jis") == 0)) *CmdOption |= OPT_JIS; else if((strcmp(&Tmp[1], "a") == 0) || (strcmp(&Tmp[1], "-ascii") == 0)) *CmdOption |= OPT_ASCII; @@ -1827,9 +1978,14 @@ static int AnalyzeComLine(char *Str, int *AutoConnect, int *CmdOption, char *unc *CmdOption |= OPT_QUIT; else if((strcmp(&Tmp[1], "k") == 0) || (strcmp(&Tmp[1], "-kana") == 0)) *CmdOption |= OPT_KANA; - else if((strcmp(&Tmp[1], "u") == 0) || (strcmp(&Tmp[1], "-eucname") == 0)) + // 廃止予定 +// else if((strcmp(&Tmp[1], "u") == 0) || (strcmp(&Tmp[1], "-eucname") == 0)) +// *CmdOption |= OPT_EUC_NAME; +// else if((strcmp(&Tmp[1], "i") == 0) || (strcmp(&Tmp[1], "-jisname") == 0)) +// *CmdOption |= OPT_JIS_NAME; + else if((strcmp(&Tmp[1], "eun") == 0) || (strcmp(&Tmp[1], "u") == 0) || (strcmp(&Tmp[1], "-eucname") == 0)) *CmdOption |= OPT_EUC_NAME; - else if((strcmp(&Tmp[1], "i") == 0) || (strcmp(&Tmp[1], "-jisname") == 0)) + else if((strcmp(&Tmp[1], "jin") == 0) || (strcmp(&Tmp[1], "i") == 0) || (strcmp(&Tmp[1], "-jisname") == 0)) *CmdOption |= OPT_JIS_NAME; else if((strcmp(&Tmp[1], "n") == 0) || (strcmp(&Tmp[1], "-ini") == 0)) { @@ -1899,6 +2055,17 @@ static int AnalyzeComLine(char *Str, int *AutoConnect, int *CmdOption, char *unc { } #endif + // UTF-8対応 + else if((strcmp(&Tmp[1], "sj") == 0) || (strcmp(&Tmp[1], "-sjis") == 0)) + *CmdOption |= OPT_SJIS; + else if((strcmp(&Tmp[1], "u8") == 0) || (strcmp(&Tmp[1], "-utf8") == 0)) + *CmdOption |= OPT_UTF8N; + else if((strcmp(&Tmp[1], "8b") == 0) || (strcmp(&Tmp[1], "-utf8bom") == 0)) + *CmdOption |= OPT_UTF8BOM; + else if((strcmp(&Tmp[1], "sjn") == 0) || (strcmp(&Tmp[1], "-sjisname") == 0)) + *CmdOption |= OPT_SJIS_NAME; + else if((strcmp(&Tmp[1], "u8n") == 0) || (strcmp(&Tmp[1], "-utf8name") == 0)) + *CmdOption |= OPT_UTF8N_NAME; else { SetTaskMsg(MSGJPN180, Tmp); @@ -2066,7 +2233,10 @@ static void ExitProc(HWND hWnd) if(SaveExit == YES) { GetListTabWidth(); - SaveRegistory(); + SaveRegistry(); + // ポータブル版判定 + if(RegType == REGTYPE_REG) + ClearIni(); if((CacheEntry > 0) && (CacheSave == YES)) SaveCache(); @@ -2127,7 +2297,9 @@ void DoubleClickProc(int Win, int Mode, int App) if(Win == WIN_LOCAL) { - if((App != -1) || (Type == NODE_FILE)) + // ローカルフォルダを開く +// if((App != -1) || (Type == NODE_FILE)) + if((App != -1) || (Type == NODE_FILE) || (Mode == YES)) { if((DclickOpen == YES) || (Mode == YES)) { @@ -2204,12 +2376,12 @@ void DoubleClickProc(int Win, int Mode, int App) /* 不正なパスを検出 */ if(CheckPathViolation(&MainTransPkt) == NO) { -// if((Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO)) == 429) +// if((Sts = DoDownload(AskCmdCtrlSkt(), &MainTransPkt, NO)) == 429) // { // ReConnectCmdSkt(); // 同時接続対応 CancelFlg = NO; - Sts = DoDownLoad(AskCmdCtrlSkt(), &MainTransPkt, NO, &CancelFlg); + Sts = DoDownload(AskCmdCtrlSkt(), &MainTransPkt, NO, &CancelFlg); // } } @@ -2573,6 +2745,13 @@ void ExecViewer(char *Fname, int App) DoPrintf("ShellExecute - %s", Fname); ShellExecute(NULL, "open", Fname, NULL, CurDir, SW_SHOW); } + // ローカルフォルダを開く + else if((App == -1) && (GetFileAttributes(Fname) & FILE_ATTRIBUTE_DIRECTORY)) + { + MakeDistinguishableFileName(ComLine, Fname); + DoPrintf("ShellExecute - %s", Fname); + ShellExecute(NULL, "open", ComLine, NULL, Fname, SW_SHOW); + } else { App = max1(0, App); @@ -3069,7 +3248,7 @@ BOOL LoadSSLRootCAFile() for(i = 0; i < 5; i++) Hash[i] = _byteswap_ulong(Hash[i]); // 同梱する"ssl.pem"に合わせてSHA1ハッシュ値を変更すること - 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 + if(memcmp(&Hash, &SSLRootCAFileHash, 20) == 0 || memcmp(&Hash, "\x45\xBF\x6E\x22\xC1\x7C\xEC\x8D\xAB\x3D\x13\x7F\x2B\x93\x1C\x79\x04\x5B\x07\x0C", 20) == 0 || DialogBox(GetFtpInst(), MAKEINTRESOURCE(updatesslroot_dlg), GetMainHwnd(), ExeEscDialogProc) == YES) { memcpy(&SSLRootCAFileHash, &Hash, 20); @@ -3098,3 +3277,21 @@ int AskDispFileIcon(void) return(DispFileIcon); } +// ポータブル版判定 +void CheckPortableVersion() +{ + HANDLE hFile; + if((hFile = CreateFile(PortableFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL)) != INVALID_HANDLE_VALUE) + { + PortableVersion = YES; + CloseHandle(hFile); + } + else + PortableVersion = NO; +} + +int AskPortableVersion(void) +{ + return(PortableVersion); +} +