FFFTPのソースコードです。
修订版 | e9287654de8df4b44ca76c58fdee7056c9499b68 (tree) |
---|---|
时间 | 2011-11-12 19:39:24 |
作者 | s_kawamoto <s_kawamoto@user...> |
Commiter | s_kawamoto |
Fix bugs of automatic detection for Kanji code of filenames.
@@ -921,6 +921,8 @@ typedef struct { | ||
921 | 921 | int KanjiCode; /* ホストの漢字コード (KANJI_xxx) */ |
922 | 922 | int KanaCnv; /* 半角カナを全角に変換(YES/NO) */ |
923 | 923 | int NameKanjiCode; /* ファイル名の漢字コード (KANJI_xxx) */ |
924 | + // UTF-8対応 | |
925 | + int CurNameKanjiCode; /* 自動判別後のファイル名の漢字コード (KANJI_xxx) */ | |
924 | 926 | int NameKanaCnv; /* ファイル名の半角カナを全角に変換(YES/NO) */ |
925 | 927 | int Pasv; /* PASVモード (YES/NO) */ |
926 | 928 | int FireWall; /* FireWallを使う (YES/NO) */ |
@@ -106,8 +106,6 @@ static int TryConnect = NO; | ||
106 | 106 | static SOCKET CmdCtrlSocket = INVALID_SOCKET; |
107 | 107 | static SOCKET TrnCtrlSocket = INVALID_SOCKET; |
108 | 108 | static HOSTDATA CurHost; |
109 | -// UTF-8対応 | |
110 | -static int TmpNameKanjiCode; | |
111 | 109 | |
112 | 110 | /* 接続中の接続先、SOCKSサーバのアドレス情報を保存しておく */ |
113 | 111 | /* この情報はlistenソケットを取得する際に用いる */ |
@@ -161,7 +159,7 @@ void ConnectProc(int Type, int Num) | ||
161 | 159 | InitPWDcommand(); |
162 | 160 | CopyHostFromList(AskCurrentHost(), &CurHost); |
163 | 161 | // UTF-8対応 |
164 | - TmpNameKanjiCode = CurHost.NameKanjiCode; | |
162 | + CurHost.CurNameKanjiCode = CurHost.NameKanjiCode; | |
165 | 163 | |
166 | 164 | if(ConnectRas(CurHost.Dialup, CurHost.DialupAlways, CurHost.DialupNotify, CurHost.DialEntry) == FFFTP_SUCCESS) |
167 | 165 | { |
@@ -188,13 +186,10 @@ void ConnectProc(int Type, int Num) | ||
188 | 186 | TrnCtrlSocket = CmdCtrlSocket; |
189 | 187 | |
190 | 188 | // UTF-8対応 |
191 | - if(TmpNameKanjiCode == KANJI_AUTO) | |
189 | + if(CurHost.CurNameKanjiCode == KANJI_AUTO) | |
192 | 190 | { |
193 | 191 | if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE) |
194 | - { | |
195 | - SetCache(999, ""); | |
196 | - TmpNameKanjiCode = AnalyzeNameKanjiCode(999); | |
197 | - } | |
192 | + CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999); | |
198 | 193 | } |
199 | 194 | |
200 | 195 | if(CmdCtrlSocket != INVALID_SOCKET) |
@@ -256,7 +251,7 @@ void QuickConnectProc(void) | ||
256 | 251 | InitPWDcommand(); |
257 | 252 | CopyDefaultHost(&CurHost); |
258 | 253 | // UTF-8対応 |
259 | - TmpNameKanjiCode = CurHost.NameKanjiCode; | |
254 | + CurHost.CurNameKanjiCode = CurHost.NameKanjiCode; | |
260 | 255 | if(SplitUNCpath(Tmp, CurHost.HostAdrs, CurHost.RemoteInitDir, File, CurHost.UserName, CurHost.PassWord, &CurHost.Port) == FFFTP_SUCCESS) |
261 | 256 | { |
262 | 257 | if(strlen(CurHost.UserName) == 0) |
@@ -282,13 +277,10 @@ void QuickConnectProc(void) | ||
282 | 277 | TrnCtrlSocket = CmdCtrlSocket; |
283 | 278 | |
284 | 279 | // UTF-8対応 |
285 | - if(TmpNameKanjiCode == KANJI_AUTO) | |
280 | + if(CurHost.CurNameKanjiCode == KANJI_AUTO) | |
286 | 281 | { |
287 | 282 | if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE) |
288 | - { | |
289 | - SetCache(999, ""); | |
290 | - TmpNameKanjiCode = AnalyzeNameKanjiCode(999); | |
291 | - } | |
283 | + CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999); | |
292 | 284 | } |
293 | 285 | |
294 | 286 | if(CmdCtrlSocket != INVALID_SOCKET) |
@@ -449,7 +441,7 @@ void DirectConnectProc(char *unc, int Kanji, int Kana, int Fkanji, int TrMode) | ||
449 | 441 | CurHost.NameKanjiCode = Fkanji; |
450 | 442 | CurHost.KanaCnv = YES; /* とりあえず */ |
451 | 443 | // UTF-8対応 |
452 | - TmpNameKanjiCode = CurHost.NameKanjiCode; | |
444 | + CurHost.CurNameKanjiCode = CurHost.NameKanjiCode; | |
453 | 445 | |
454 | 446 | SetHostKanaCnvImm(CurHost.KanaCnv); |
455 | 447 | SetHostKanjiCodeImm(CurHost.KanjiCode); |
@@ -469,13 +461,10 @@ void DirectConnectProc(char *unc, int Kanji, int Kana, int Fkanji, int TrMode) | ||
469 | 461 | TrnCtrlSocket = CmdCtrlSocket; |
470 | 462 | |
471 | 463 | // UTF-8対応 |
472 | - if(TmpNameKanjiCode == KANJI_AUTO) | |
464 | + if(CurHost.CurNameKanjiCode == KANJI_AUTO) | |
473 | 465 | { |
474 | 466 | if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE) |
475 | - { | |
476 | - SetCache(999, ""); | |
477 | - TmpNameKanjiCode = AnalyzeNameKanjiCode(999); | |
478 | - } | |
467 | + CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999); | |
479 | 468 | } |
480 | 469 | |
481 | 470 | if(CmdCtrlSocket != INVALID_SOCKET) |
@@ -536,7 +525,7 @@ void HistoryConnectProc(int MenuCmd) | ||
536 | 525 | InitPWDcommand(); |
537 | 526 | CopyHistoryToHost(&Hist, &CurHost); |
538 | 527 | // UTF-8対応 |
539 | - TmpNameKanjiCode = CurHost.NameKanjiCode; | |
528 | + CurHost.CurNameKanjiCode = CurHost.NameKanjiCode; | |
540 | 529 | |
541 | 530 | if(ConnectRas(CurHost.Dialup, CurHost.DialupAlways, CurHost.DialupNotify, CurHost.DialEntry) == FFFTP_SUCCESS) |
542 | 531 | { |
@@ -560,13 +549,10 @@ void HistoryConnectProc(int MenuCmd) | ||
560 | 549 | TrnCtrlSocket = CmdCtrlSocket; |
561 | 550 | |
562 | 551 | // UTF-8対応 |
563 | - if(TmpNameKanjiCode == KANJI_AUTO) | |
552 | + if(CurHost.CurNameKanjiCode == KANJI_AUTO) | |
564 | 553 | { |
565 | 554 | if(DoDirListCmdSkt("", "", 999, &CancelFlg) == FTP_COMPLETE) |
566 | - { | |
567 | - SetCache(999, ""); | |
568 | - TmpNameKanjiCode = AnalyzeNameKanjiCode(999); | |
569 | - } | |
555 | + CurHost.CurNameKanjiCode = AnalyzeNameKanjiCode(999); | |
570 | 556 | } |
571 | 557 | |
572 | 558 | if(CmdCtrlSocket != INVALID_SOCKET) |
@@ -719,7 +705,7 @@ int AskHostNameKanji(void) | ||
719 | 705 | // CopyHostFromListInConnect(AskCurrentHost(), &CurHost); |
720 | 706 | // |
721 | 707 | // return(CurHost.NameKanjiCode); |
722 | - return(TmpNameKanjiCode); | |
708 | + return(CurHost.CurNameKanjiCode); | |
723 | 709 | } |
724 | 710 | |
725 | 711 |
@@ -1053,6 +1039,8 @@ int ReConnectTrnSkt(SOCKET *Skt, int *CancelCheckWork) | ||
1053 | 1039 | HostData.UseFTPIS = NO; |
1054 | 1040 | if(HostData.CryptMode != CRYPT_SFTP) |
1055 | 1041 | HostData.UseSFTP = NO; |
1042 | + // UTF-8対応 | |
1043 | + HostData.CurNameKanjiCode = HostData.NameKanjiCode; | |
1056 | 1044 | // 暗号化通信対応 |
1057 | 1045 | // 同時接続対応 |
1058 | 1046 | // if((*Skt = DoConnect(CurHost.HostAdrs, CurHost.UserName, CurHost.PassWord, CurHost.Account, CurHost.Port, CurHost.FireWall, NO, CurHost.Security)) != INVALID_SOCKET) |
@@ -1625,10 +1613,10 @@ static SOCKET DoConnectCrypt(int CryptMode, HOSTDATA* HostData, char *Host, char | ||
1625 | 1613 | HostData->Feature |= FEATURE_EPRT | FEATURE_EPSV; |
1626 | 1614 | } |
1627 | 1615 | // UTF-8対応 |
1628 | - if(TmpNameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8)) | |
1616 | + if(HostData->CurNameKanjiCode == KANJI_AUTO && (HostData->Feature & FEATURE_UTF8)) | |
1629 | 1617 | { |
1630 | 1618 | if((Sts = command(ContSock, Reply, CancelCheckWork, "OPTS UTF8 ON")) == 200) |
1631 | - TmpNameKanjiCode = KANJI_UTF8N; | |
1619 | + HostData->CurNameKanjiCode = KANJI_UTF8N; | |
1632 | 1620 | } |
1633 | 1621 | } |
1634 | 1622 | } |
@@ -5507,6 +5507,7 @@ int AnalyzeNameKanjiCode(int Num) | ||
5507 | 5507 | { |
5508 | 5508 | if((ListType = AnalizeFileInfo(Str)) != LIST_UNKNOWN) |
5509 | 5509 | { |
5510 | + strcpy(Name, ""); | |
5510 | 5511 | Node = ResolvFileInfo(Str, ListType | LIST_RAW_NAME, Name, &Size, &Time, &Attr, Owner, &Link, &InfoExist); |
5511 | 5512 | p = Name; |
5512 | 5513 | while(*p != '\0') |
@@ -1298,6 +1298,8 @@ void CopyDefaultHost(HOSTDATA *Set) | ||
1298 | 1298 | Set->KanjiCode = KANJI_NOCNV; |
1299 | 1299 | Set->KanaCnv = YES; |
1300 | 1300 | Set->NameKanjiCode = KANJI_NOCNV; |
1301 | + // UTF-8対応 | |
1302 | + Set->CurNameKanjiCode = KANJI_NOCNV; | |
1301 | 1303 | Set->NameKanaCnv = NO; |
1302 | 1304 | Set->Pasv = YES; |
1303 | 1305 | Set->FireWall = NO; |