OSDN Git Service

Fix bugs of automatic detection for Kanji code of filenames.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Sat, 12 Nov 2011 10:39:24 +0000 (19:39 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Sat, 12 Nov 2011 10:39:24 +0000 (19:39 +0900)
FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
common.h
connect.c
filelist.c
hostman.c

index ff13c9f..b482dfb 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index 9f6beb7..85befd5 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index c9064ce..c9a450a 100644 (file)
--- a/common.h
+++ b/common.h
@@ -921,6 +921,8 @@ typedef struct {
        int KanjiCode;                                          /* ホストの漢字コード (KANJI_xxx) */\r
        int KanaCnv;                                            /* 半角カナを全角に変換(YES/NO) */\r
        int NameKanjiCode;                                      /* ファイル名の漢字コード (KANJI_xxx) */\r
+       // UTF-8対応\r
+       int CurNameKanjiCode;                           /* 自動判別後のファイル名の漢字コード (KANJI_xxx) */\r
        int NameKanaCnv;                                        /* ファイル名の半角カナを全角に変換(YES/NO) */\r
        int Pasv;                                                       /* PASVモード (YES/NO) */\r
        int FireWall;                                           /* FireWallを使う (YES/NO) */\r
index dfbf5e0..38284b1 100644 (file)
--- a/connect.c
+++ b/connect.c
@@ -106,8 +106,6 @@ static int TryConnect = NO;
 static SOCKET CmdCtrlSocket = INVALID_SOCKET;\r
 static SOCKET TrnCtrlSocket = INVALID_SOCKET;\r
 static HOSTDATA CurHost;\r
-// UTF-8対応\r
-static int TmpNameKanjiCode;\r
 \r
 /* 接続中の接続先、SOCKSサーバのアドレス情報を保存しておく */\r
 /* この情報はlistenソケットを取得する際に用いる */\r
@@ -161,7 +159,7 @@ void ConnectProc(int Type, int Num)
                InitPWDcommand();\r
                CopyHostFromList(AskCurrentHost(), &CurHost);\r
                // UTF-8対応\r
-               TmpNameKanjiCode = CurHost.NameKanjiCode;\r
+               CurHost.CurNameKanjiCode = CurHost.NameKanjiCode;\r
 \r
                if(ConnectRas(CurHost.Dialup, CurHost.DialupAlways, CurHost.DialupNotify, CurHost.DialEntry) == FFFTP_SUCCESS)\r
                {\r
@@ -188,13 +186,10 @@ void ConnectProc(int Type, int Num)
                        TrnCtrlSocket = CmdCtrlSocket;\r
 \r
                        // UTF-8対応\r
-                       if(TmpNameKanjiCode == KANJI_AUTO)\r
+                       if(CurHost.CurNameKanjiCode == KANJI_AUTO)\r
                        {\r
                                if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
-                               {\r
-                                       SetCache(999, "");\r
-                                       TmpNameKanjiCode = AnalyzeNameKanjiCode(999);\r
-                               }\r
+                                       CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
                        }\r
 \r
                        if(CmdCtrlSocket != INVALID_SOCKET)\r
@@ -256,7 +251,7 @@ void QuickConnectProc(void)
                InitPWDcommand();\r
                CopyDefaultHost(&CurHost);\r
                // UTF-8対応\r
-               TmpNameKanjiCode = CurHost.NameKanjiCode;\r
+               CurHost.CurNameKanjiCode = CurHost.NameKanjiCode;\r
                if(SplitUNCpath(Tmp, CurHost.HostAdrs, CurHost.RemoteInitDir, File, CurHost.UserName, CurHost.PassWord, &CurHost.Port) == FFFTP_SUCCESS)\r
                {\r
                        if(strlen(CurHost.UserName) == 0)\r
@@ -282,13 +277,10 @@ void QuickConnectProc(void)
                        TrnCtrlSocket = CmdCtrlSocket;\r
 \r
                        // UTF-8対応\r
-                       if(TmpNameKanjiCode == KANJI_AUTO)\r
+                       if(CurHost.CurNameKanjiCode == KANJI_AUTO)\r
                        {\r
                                if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
-                               {\r
-                                       SetCache(999, "");\r
-                                       TmpNameKanjiCode = AnalyzeNameKanjiCode(999);\r
-                               }\r
+                                       CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
                        }\r
 \r
                        if(CmdCtrlSocket != INVALID_SOCKET)\r
@@ -449,7 +441,7 @@ void DirectConnectProc(char *unc, int Kanji, int Kana, int Fkanji, int TrMode)
                CurHost.NameKanjiCode = Fkanji;\r
                CurHost.KanaCnv = YES;                  /* とりあえず */\r
                // UTF-8対応\r
-               TmpNameKanjiCode = CurHost.NameKanjiCode;\r
+               CurHost.CurNameKanjiCode = CurHost.NameKanjiCode;\r
 \r
                SetHostKanaCnvImm(CurHost.KanaCnv);\r
                SetHostKanjiCodeImm(CurHost.KanjiCode);\r
@@ -469,13 +461,10 @@ void DirectConnectProc(char *unc, int Kanji, int Kana, int Fkanji, int TrMode)
                TrnCtrlSocket = CmdCtrlSocket;\r
 \r
                // UTF-8対応\r
-               if(TmpNameKanjiCode == KANJI_AUTO)\r
+               if(CurHost.CurNameKanjiCode == KANJI_AUTO)\r
                {\r
                        if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
-                       {\r
-                               SetCache(999, "");\r
-                               TmpNameKanjiCode = AnalyzeNameKanjiCode(999);\r
-                       }\r
+                               CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
                }\r
 \r
                if(CmdCtrlSocket != INVALID_SOCKET)\r
@@ -536,7 +525,7 @@ void HistoryConnectProc(int MenuCmd)
                InitPWDcommand();\r
                CopyHistoryToHost(&Hist, &CurHost);\r
                // UTF-8対応\r
-               TmpNameKanjiCode = CurHost.NameKanjiCode;\r
+               CurHost.CurNameKanjiCode = CurHost.NameKanjiCode;\r
 \r
                if(ConnectRas(CurHost.Dialup, CurHost.DialupAlways, CurHost.DialupNotify, CurHost.DialEntry) == FFFTP_SUCCESS)\r
                {\r
@@ -560,13 +549,10 @@ void HistoryConnectProc(int MenuCmd)
                        TrnCtrlSocket = CmdCtrlSocket;\r
 \r
                        // UTF-8対応\r
-                       if(TmpNameKanjiCode == KANJI_AUTO)\r
+                       if(CurHost.CurNameKanjiCode == KANJI_AUTO)\r
                        {\r
                                if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE)\r
-                               {\r
-                                       SetCache(999, "");\r
-                                       TmpNameKanjiCode = AnalyzeNameKanjiCode(999);\r
-                               }\r
+                                       CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999);\r
                        }\r
 \r
                        if(CmdCtrlSocket != INVALID_SOCKET)\r
@@ -719,7 +705,7 @@ int AskHostNameKanji(void)
 //             CopyHostFromListInConnect(AskCurrentHost(), &CurHost);\r
 //\r
 //     return(CurHost.NameKanjiCode);\r
-       return(TmpNameKanjiCode);\r
+       return(CurHost.CurNameKanjiCode);\r
 }\r
 \r
 \r
@@ -1053,6 +1039,8 @@ int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork)
                HostData.UseFTPIS = NO;\r
        if(HostData.CryptMode != CRYPT_SFTP)\r
                HostData.UseSFTP = NO;\r
+       // UTF-8対応\r
+       HostData.CurNameKanjiCode = HostData.NameKanjiCode;\r
        // 暗号化通信対応\r
        // 同時接続対応\r
 //     if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET)\r
@@ -1625,10 +1613,10 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char
                                        HostData->Feature |= FEATURE_EPRT | FEATURE_EPSV;\r
                        }\r
                        // UTF-8対応\r
-                       if(TmpNameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8))\r
+                       if(HostData->CurNameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8))\r
                        {\r
                                if((Sts = command(ContSock, Reply, CancelCheckWork, "OPTS UTF8 ON")) == 200)\r
-                                       TmpNameKanjiCode = KANJI_UTF8N;\r
+                                       HostData->CurNameKanjiCode = KANJI_UTF8N;\r
                        }\r
                }\r
        }\r
index 320480c..363446d 100644 (file)
@@ -5507,6 +5507,7 @@ int AnalyzeNameKanjiCode(int Num)
                {\r
                        if((ListType = AnalizeFileInfo(Str)) != LIST_UNKNOWN)\r
                        {\r
+                               strcpy(Name, "");\r
                                Node = ResolvFileInfo(Str, ListType | LIST_RAW_NAME, Name, &Size, &Time, &Attr, Owner, &Link, &InfoExist);\r
                                p = Name;\r
                                while(*p != '\0')\r
index 9896688..1638e70 100644 (file)
--- a/hostman.c
+++ b/hostman.c
@@ -1298,6 +1298,8 @@ void CopyDefaultHost(HOSTDATA *Set)
        Set->KanjiCode = KANJI_NOCNV;\r
        Set->KanaCnv = YES;\r
        Set->NameKanjiCode = KANJI_NOCNV;\r
+       // UTF-8対応\r
+       Set->CurNameKanjiCode = KANJI_NOCNV;\r
        Set->NameKanaCnv = NO;\r
        Set->Pasv = YES;\r
        Set->FireWall = NO;\r