// 暗号化通信対応\r
extern BYTE CertificateCacheHash[MAX_CERT_CACHE_HASH][20];\r
extern BYTE SSLRootCAFileHash[20];\r
+// ファイルアイコン表示対応\r
+extern int DispFileIcon;\r
+// ディレクトリ自動作成\r
+extern int MakeAllDir;\r
\r
/*----- マスタパスワードの設定 ----------------------------------------------\r
*\r
IsMasterPasswordError = PASSWORD_OK;\r
}\r
\r
+// セキュリティ強化\r
+void GetMasterPassword(char* Password)\r
+{\r
+ strcpy(Password, SecretKey);\r
+}\r
+\r
/*----- マスタパスワードの状態取得 ----------------------------------------------\r
*\r
* Parameter\r
* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void SaveRegistory(void)\r
+void SaveRegistry(void)\r
{\r
void *hKey3;\r
void *hKey4;\r
\r
WriteMultiStringToReg(hKey4, "DefAttr", DefAttrList);\r
\r
- GetTempPath(FMAX_PATH, Str);\r
+ // 環境依存の不具合対策\r
+// GetTempPath(FMAX_PATH, Str);\r
+ GetAppTempPath(Str);\r
+ SetYenTail(Str);\r
SaveStr(hKey4, "Tmp", TmpPath, Str);\r
\r
WriteBinaryToReg(hKey4, "Hdlg", &HostDlgSize, sizeof(SIZE));\r
StrCatOut((char*)&SSLRootCAFileHash, sizeof(SSLRootCAFileHash), Buf);\r
EncodePassword(Buf, Str);\r
WriteStringToReg(hKey4, "RootCertHash", Str);\r
+ // ファイルアイコン表示対応\r
+ WriteIntValueToReg(hKey4, "ListIcon", DispFileIcon);\r
+ // ディレクトリ自動作成\r
+ WriteIntValueToReg(hKey4, "MakeDir", MakeAllDir);\r
}\r
CloseSubKey(hKey4);\r
}\r
* NO: 読み出し失敗(設定無し)\r
*----------------------------------------------------------------------------*/\r
\r
-int LoadRegistory(void)\r
+int LoadRegistry(void)\r
{\r
void *hKey3;\r
void *hKey4;\r
if(ReadMultiStringFromReg(hKey4, "AsciiFile", AsciiExt, ASCII_EXT_LEN+1) == FFFTP_FAIL)\r
{\r
/* 旧ASCIIモードの拡張子の設定を新しいものに変換 */\r
- ReadStringFromReg(hKey4, "Ascii", Str, ASCII_EXT_LEN+1);\r
- memset(AsciiExt, NUL, ASCII_EXT_LEN+1);\r
+ // アスキーモード判別の改良\r
+// ReadStringFromReg(hKey4, "Ascii", Str, ASCII_EXT_LEN+1);\r
+// memset(AsciiExt, NUL, ASCII_EXT_LEN+1);\r
+ Str[0] = NUL;\r
+ if(ReadStringFromReg(hKey4, "Ascii", Str, ASCII_EXT_LEN+1) == FFFTP_SUCCESS)\r
+ memset(AsciiExt, NUL, ASCII_EXT_LEN+1);\r
Pos = Str;\r
while(*Pos != NUL)\r
{\r
Pos++;\r
}\r
}\r
+ // アスキーモード判別の改良\r
+ if(Version < 1986)\r
+ {\r
+ Pos = "*.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";\r
+ while(*Pos != NUL)\r
+ {\r
+ Pos2 = AsciiExt;\r
+ while(*Pos2 != NUL)\r
+ {\r
+ if(_stricmp(Pos2, Pos) == 0)\r
+ break;\r
+ Pos2 = strchr(Pos2, NUL) + 1;\r
+ }\r
+ if(*Pos2 == NUL)\r
+ {\r
+ if((StrMultiLen(AsciiExt) + strlen(Pos) + 2) < ASCII_EXT_LEN)\r
+ strncpy(AsciiExt + StrMultiLen(AsciiExt), Pos, strlen(Pos) + 2);\r
+ }\r
+ Pos = strchr(Pos, NUL) + 1;\r
+ }\r
+ }\r
\r
ReadIntValueFromReg(hKey4, "LowUp", &FnameCnv);\r
ReadIntValueFromReg(hKey4, "Tout", &TimeOut);\r
// 同時接続対応\r
ReadIntValueFromReg(hKey5, "ThreadCount", &Host.MaxThreadCount);\r
ReadIntValueFromReg(hKey5, "ReuseCmdSkt", &Host.ReuseCmdSkt);\r
+ // 1.98d以前で同時接続数が1より大きい場合はソケットの再利用なし\r
+ if(Version < 1985)\r
+ {\r
+ if(Host.MaxThreadCount > 1)\r
+ Host.ReuseCmdSkt = NO;\r
+ }\r
// MLSD対応\r
ReadIntValueFromReg(hKey5, "MLSD", &Host.UseMLSD);\r
// IPv6対応\r
ReadStringFromReg(hKey4, "RootCertHash", Str, PRIVATE_KEY_LEN*4+1);\r
DecodePassword(Str, Buf);\r
StrReadIn(Buf, sizeof(SSLRootCAFileHash), (char*)&SSLRootCAFileHash);\r
+ // ファイルアイコン表示対応\r
+ ReadIntValueFromReg(hKey4, "ListIcon", &DispFileIcon);\r
+ // ディレクトリ自動作成\r
+ ReadIntValueFromReg(hKey4, "MakeDir", &MakeAllDir);\r
\r
CloseSubKey(hKey4);\r
}\r
* YES/NO=設定無し\r
*----------------------------------------------------------------------------*/\r
\r
-DWORD LoadHideDriveListRegistory(void)\r
+DWORD LoadHideDriveListRegistry(void)\r
{\r
HKEY hKey1;\r
HKEY hKey2;\r
* なし\r
*----------------------------------------------------------------------------*/\r
\r
-void ClearRegistory(void)\r
+void ClearRegistry(void)\r
{\r
HKEY hKey2;\r
HKEY hKey3;\r
}\r
\r
\r
+// ポータブル版判定\r
+void ClearIni(void)\r
+{\r
+// FILE *Strm;\r
+// if((Strm = fopen(AskIniFilePath(), "rt")) != NULL)\r
+// {\r
+// fclose(Strm);\r
+// MoveFileToTrashCan(AskIniFilePath());\r
+// }\r
+ DeleteFile(AskIniFilePath());\r
+ return;\r
+}\r
+\r
+\r
/*----- 設定をファイルに保存 --------------------------------------------------\r
*\r
* Parameter\r
{\r
REGDATATBL *Pos;\r
REGDATATBL *Next;\r
- FILE *Strm;\r
+ // ポータブル版判定\r
+// FILE *Strm;\r
\r
if(TmpRegType == REGTYPE_REG)\r
{\r
RegCloseKey(Handle);\r
\r
/* INIファイルを削除 */\r
- if((Strm = fopen(AskIniFilePath(), "rt")) != NULL)\r
- {\r
- fclose(Strm);\r
- MoveFileToTrashCan(AskIniFilePath());\r
- }\r
+ // ポータブル版判定\r
+// if((Strm = fopen(AskIniFilePath(), "rt")) != NULL)\r
+// {\r
+// fclose(Strm);\r
+// MoveFileToTrashCan(AskIniFilePath());\r
+// }\r
}\r
else\r
{\r
if(WriteOutRegToFile(Handle) == TRUE)\r
{\r
// /* レジストリをクリア */\r
-// ClearRegistory();\r
+// ClearRegistry();\r
}\r
}\r
/* テーブルを削除 */\r
switch(IniKanjiCode)\r
{\r
case KANJI_NOCNV:\r
- TempSize = min1(Size-1, strlen(Pos));\r
+ TempSize = min1(Size - 2, strlen(Pos));\r
TempSize = StrReadIn(Pos, TempSize, Str);\r
*(Str + TempSize) = NUL;\r
+ *(Str + TempSize + 1) = NUL;\r
Sts = FFFTP_SUCCESS;\r
if(!CheckMultiStringM(Str))\r
break;\r
}\r
return rndValue;\r
}\r
+\r
+// ポータブル版判定\r
+int IsRegAvailable()\r
+{\r
+ int Sts;\r
+ void* h;\r
+ Sts = NO;\r
+ SetRegType(REGTYPE_REG);\r
+ if(OpenReg("FFFTP", &h) == FFFTP_SUCCESS)\r
+ {\r
+ CloseReg(h);\r
+ Sts = YES;\r
+ }\r
+ return Sts;\r
+}\r
+\r
+int IsIniAvailable()\r
+{\r
+ int Sts;\r
+ void* h;\r
+ Sts = NO;\r
+ SetRegType(REGTYPE_INI);\r
+ if(OpenReg("FFFTP", &h) == FFFTP_SUCCESS)\r
+ {\r
+ CloseReg(h);\r
+ Sts = YES;\r
+ }\r
+ return Sts;\r
+}\r
+\r