OSDN Git Service

Fix bugs of character code conversion of filenames.
authors_kawamoto <s_kawamoto@users.sourceforge.jp>
Fri, 4 Nov 2011 11:13:10 +0000 (20:13 +0900)
committers_kawamoto <s_kawamoto@users.sourceforge.jp>
Fri, 4 Nov 2011 11:13:10 +0000 (20:13 +0900)
Enhance routines for canceling or aborting.

FFFTP_Eng_Release/FFFTP.exe
Release/FFFTP.exe
filelist.c
main.c
remote.c

index efacc0d..dac5ae6 100644 (file)
Binary files a/FFFTP_Eng_Release/FFFTP.exe and b/FFFTP_Eng_Release/FFFTP.exe differ
index 1b7f803..5317d74 100644 (file)
Binary files a/Release/FFFTP.exe and b/Release/FFFTP.exe differ
index 813da3d..4b798fa 100644 (file)
@@ -4830,11 +4830,12 @@ static int ResolvFileInfo(char *Str, int ListType, char *Fname, LONGLONG *Size,
 \r
                                if(strchr("dl", *Str) != NULL)\r
                                {\r
-                                       if((_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "/") == 0) ||\r
-                                          (_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "\\") == 0))\r
-                                       {\r
-                                               *(Fname + strlen(Fname) - 1) = NUL;\r
-                                       }\r
+                                       // 0x5Cが含まれる文字列を扱えないバグ修正\r
+//                                     if((_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "/") == 0) ||\r
+//                                        (_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "\\") == 0))\r
+//                                     {\r
+//                                             *(Fname + strlen(Fname) - 1) = NUL;\r
+//                                     }\r
                                        Ret = NODE_DIR;\r
                                        if(*Str == 'l')\r
                                                *Link = YES;\r
@@ -4904,6 +4905,10 @@ static int ResolvFileInfo(char *Str, int ListType, char *Fname, LONGLONG *Size,
                        Ret = NODE_NONE;\r
                else\r
                        ChangeFnameRemote2Local(Fname, FMAX_PATH);\r
+               // 0x5Cが含まれる文字列を扱えないバグ修正\r
+               if((_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "/") == 0)\r
+                       || (_mbscmp(_mbsninc(Fname, _mbslen(Fname) - 1), "\\") == 0))\r
+                       *(Fname + strlen(Fname) - 1) = NUL;\r
        }\r
        return(Ret);\r
 }\r
diff --git a/main.c b/main.c
index 1273199..36e3d1d 100644 (file)
--- a/main.c
+++ b/main.c
@@ -2151,6 +2151,11 @@ static void ChangeDir(int Win, char *Path)
        char Local[FMAX_PATH+1];\r
        char Remote[FMAX_PATH+1];\r
 \r
+       // 同時接続対応\r
+       CancelFlg = NO;\r
+\r
+       // デッドロック対策\r
+       DisableUserOpe();\r
        Sync = AskSyncMoveMode();\r
        if(Sync == YES)\r
        {\r
@@ -2182,6 +2187,8 @@ static void ChangeDir(int Win, char *Path)
                                GetRemoteDirForWnd(CACHE_NORMAL, &CancelFlg);\r
                }\r
        }\r
+       // デッドロック対策\r
+       EnableUserOpe();\r
        return;\r
 }\r
 \r
index cab68b0..0613fcb 100644 (file)
--- a/remote.c
+++ b/remote.c
@@ -239,9 +239,12 @@ static int DoPWD(char *Buf)
                if(strlen(Tmp) < FMAX_PATH)\r
                {\r
                        strcpy(Buf, Tmp);\r
-                       ReplaceAll(Buf, '\\', '/');\r
+                       // 0x5Cが含まれる文字列を扱えないバグ修正\r
+//                     ReplaceAll(Buf, '\\', '/');\r
                        ChangeSepaRemote2Local(Buf);\r
                        ChangeFnameRemote2Local(Buf, FMAX_PATH);\r
+                       // 0x5Cが含まれる文字列を扱えないバグ修正\r
+                       ReplaceAll(Buf, '\\', '/');\r
                }\r
                else\r
                        Sts = FTP_ERROR*100;\r
@@ -1324,13 +1327,21 @@ int ChangeFnameRemote2Local(char *Fname, int Max)
        char *Buf;\r
        char *Pos;\r
        CODECONVINFO cInfo;\r
+       // バッファ上書きバグ対策\r
+       char *Buf2;\r
 \r
        Sts = FFFTP_FAIL;\r
        if((Buf = malloc(Max)) != NULL)\r
        {\r
+       // バッファ上書きバグ対策\r
+       if((Buf2 = malloc(strlen(Fname) + 1)) != NULL)\r
+       {\r
                InitCodeConvInfo(&cInfo);\r
                cInfo.KanaCnv = NO;                     //AskHostNameKana();\r
-               cInfo.Str = Fname;\r
+               // バッファ上書きバグ対策\r
+//             cInfo.Str = Fname;\r
+               strcpy(Buf2, Fname);\r
+               cInfo.Str = Buf2;\r
                cInfo.StrLen = strlen(Fname);\r
                cInfo.Buf = Buf;\r
                cInfo.BufSize = Max - 1;\r
@@ -1432,8 +1443,13 @@ int ChangeFnameRemote2Local(char *Fname, int Max)
 //                             strcpy(Pos, Buf);\r
 //                             break;\r
                }\r
-               free(Buf);\r
+               // バッファ上書きバグ対策\r
+               free(Buf2);\r
                Sts = FFFTP_SUCCESS;\r
+               }\r
+               free(Buf);\r
+               // バッファ上書きバグ対策\r
+//             Sts = FFFTP_SUCCESS;\r
        }\r
        return(Sts);\r
 }\r
@@ -1456,13 +1472,21 @@ int ChangeFnameLocal2Remote(char *Fname, int Max)
        char *Buf;\r
        char *Pos;\r
        CODECONVINFO cInfo;\r
+       // バッファ上書きバグ対策\r
+       char *Buf2;\r
 \r
        Sts = FFFTP_FAIL;\r
        if((Buf = malloc(Max)) != NULL)\r
        {\r
+       // バッファ上書きバグ対策\r
+       if((Buf2 = malloc(strlen(Fname) + 1)) != NULL)\r
+       {\r
                InitCodeConvInfo(&cInfo);\r
                cInfo.KanaCnv = AskHostNameKana();\r
-               cInfo.Str = Fname;\r
+               // バッファ上書きバグ対策\r
+//             cInfo.Str = Fname;\r
+               strcpy(Buf2, Fname);\r
+               cInfo.Str = Buf2;\r
                cInfo.StrLen = strlen(Fname);\r
                cInfo.Buf = Buf;\r
                cInfo.BufSize = Max - 1;\r
@@ -1587,8 +1611,13 @@ int ChangeFnameLocal2Remote(char *Fname, int Max)
 //                             strcpy(Pos, Buf);\r
 //                             break;\r
                }\r
-               free(Buf);\r
+               // バッファ上書きバグ対策\r
+               free(Buf2);\r
                Sts = FFFTP_SUCCESS;\r
+               }\r
+               free(Buf);\r
+               // バッファ上書きバグ対策\r
+//             Sts = FFFTP_SUCCESS;\r
        }\r
        return(Sts);\r
 }\r