View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000761 | Double Commander | Plugins | public | 2013-11-21 14:26 | 2019-06-08 15:29 |
Reporter | Skomorokh | Assigned To | Alexx2000 | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Projection | none | ETA | none | ||
Platform | PC | OS | Windows | OS Version | ALL |
Product Version | 0.5.7 | Product Build | 5310 | ||
Summary | 0000761: Error in list of file names that return plugin; Ошибки в именах файлов, получаемых с ftp сервера. | ||||
Description | Plugin must return ANSI strings but strings are UTF8. Плагин должен возвращать имена файлов в ANSI, а вместо этого возвращает в UTF8. | ||||
Steps To Reproduce | Open ftp where exist non english file names for example russian. Зайти на ftp, на котором находятся файлы с именами, отличными от англ., например с русскими символами. | ||||
Tags | No tags attached. | ||||
Attached Files | ftp_plug.patch (5,874 bytes)
--- D:/lazarus/!/ftp_plug0/ftpfunc_ok.pas �� �� 20 23:53:49 2013 +++ D:/lazarus/!/ftp_plug0/ftpfunc.pas �� ��� 19 19:11:56 2012 @@ -111,9 +111,7 @@ var implementation uses - IniFiles, StrUtils, FtpUtils, FtpConfDlg, syncobjs, ssl_openssl//; - //+++ - ,FileUtil; + IniFiles, StrUtils, FtpUtils, FtpConfDlg, syncobjs, ssl_openssl; var ActiveConnectionList, ConnectionList: TStringList; @@ -391,13 +389,11 @@ end; function EditConnection(ConnectionName: AnsiString): Boolean; var I: Integer; - I_AC:Integer;//++ begin Result:= False; if HasDialogAPI then begin I := ConnectionList.IndexOf(ConnectionName); - I_AC := ActiveConnectionList.IndexOf(ConnectionName); if I >= 0 then begin gConnection:= TConnection(ConnectionList.Objects[I]); @@ -410,14 +406,6 @@ begin Password:= EmptyStr; end; WriteConnectionList; - - ConnectionList[I] := gConnection.ConnectionName;//+++ - if I_AC >= 0 then//+++ - begin//+++ - TFTPSendEx(ActiveConnectionList.Objects[I_AC]).Logout;//+++ - TFTPSendEx(ActiveConnectionList.Objects[I_AC]).Free;//+++ - ActiveConnectionList.Delete(I_AC);//+++ - end;//+++ Result:= True; end; gConnection:= nil; @@ -478,12 +466,10 @@ var sConnName: AnsiString; begin Result := False; - if (ExtractFileDir(sPath) = PathDelim) then Exit; sConnName := ExtractConnectionName(sPath); RemotePath := ExtractRemoteFileName(sPath); Result:= FtpConnect(sConnName, FtpSend); - end; function LocalFindNext(Hdl: THandle; var FindData: TWin32FindData): Boolean; @@ -498,7 +484,7 @@ begin FillChar(FindData, SizeOf(FindData), 0); if I < RootCount then begin - StrPCopy(FindData.cFileName, UTF8ToSys(RootList[I]));//+++ + StrPCopy(FindData.cFileName, RootList[I]); FindData.dwFileAttributes := 0; Inc(ListRec^.Index); Result := True; @@ -506,7 +492,7 @@ begin else if I - RootCount < ConnectionList.Count then begin Connection := TConnection(ConnectionList.Objects[I - RootCount]); - StrPCopy(FindData.cFileName, UTF8ToSys(Connection.ConnectionName));//+++ + StrPCopy(FindData.cFileName, Connection.ConnectionName); FindData.dwFileAttributes := FILE_ATTRIBUTE_NORMAL; Inc(ListRec^.Index); Result := True; @@ -526,7 +512,7 @@ begin if I < FtpList.Count then begin FillChar(FindData, SizeOf(FindData), 0); - StrPCopy(FindData.cFileName, UTF8ToSys(FtpList.Items[I].FileName));//+++ + StrPCopy(FindData.cFileName, FtpList.Items[I].FileName); FindData.dwFileAttributes := FindData.dwFileAttributes or FILE_ATTRIBUTE_UNIX_MODE; if FtpList.Items[I].Directory then FindData.dwFileAttributes := FindData.dwFileAttributes or FILE_ATTRIBUTE_DIRECTORY @@ -563,9 +549,6 @@ var sPath: AnsiString; FtpSend: TFTPSendEx; begin - - Path:=PChar(SysToUTF8(Path));//+++ - New(ListRec); ListRec.Path := Path; ListRec.Index := 0; @@ -635,8 +618,6 @@ begin Result:= FS_EXEC_YOURSELF; if (RemoteName = '') then Exit; - RemoteName:=PChar(SysToUTF8(RemoteName));//+++ - if Verb = 'open' then begin if (ExtractFileDir(RemoteName) = PathDelim) then // root path @@ -698,9 +679,6 @@ begin if not Move then Exit; - OldName:=PChar(SysToUTF8(OldName));//+++ - NewName:=PChar(SysToUTF8(NewName));//+++ - if (ExtractFileDir(OldName) = PathDelim) and (AnsiChar(OldName[1]) <> '<') then begin I:= ConnectionList.IndexOf(OldName + 1); @@ -709,18 +687,9 @@ begin else begin TConnection(ConnectionList.Objects[I]).ConnectionName:= ExtractFileName(NewName); - ConnectionList[I] := ExtractFileName(NewName);//+++ WriteConnectionList; Result:= FS_FILE_OK; end; - I:= ActiveConnectionList.IndexOf(OldName);//+++ - if I >= 0 then//+++ - begin//+++ - TFTPSendEx(ActiveConnectionList.Objects[I]).Logout;//+++ - TFTPSendEx(ActiveConnectionList.Objects[I]).Free;//+++ - ActiveConnectionList.Delete(I);//+++ - end;//+++ - end else if GetConnectionByPath(OldName, FtpSend, sOldName) then begin @@ -741,9 +710,6 @@ var FtpSend: TFTPSendEx; begin Result := FS_FILE_READERROR; - - RemoteName:=PChar(SysToUTF8(RemoteName));//+++ - if GetConnectionByPath(RemoteName, FtpSend, sFileName) then begin FtpSend.DataStream.Clear; @@ -769,9 +735,6 @@ var FtpSend: TFTPSendEx; begin Result := FS_FILE_WRITEERROR; - - RemoteName:=PChar(SysToUTF8(RemoteName));//+++ - if GetConnectionByPath(RemoteName, FtpSend, sFileName) then begin FtpSend.DataStream.Clear; @@ -804,9 +767,6 @@ var FtpSend: TFTPSendEx; begin Result := False; - - RemoteName:=PChar(SysToUTF8(RemoteName));//+++ - // if root path then delete connection if (ExtractFileDir(RemoteName) = PathDelim) and (AnsiChar(RemoteName[1]) <> '<') then Result:= DeleteConnection(ExtractConnectionName(RemoteName)) @@ -820,9 +780,6 @@ var FtpSend: TFTPSendEx; begin Result := False; - - RemoteDir:=PChar(SysToUTF8(RemoteDir));//+++ - if GetConnectionByPath(RemoteDir, FtpSend, sPath) then Result := FtpSend.CreateDir(sPath); end; @@ -833,9 +790,6 @@ var FtpSend: TFTPSendEx; begin Result := False; - - RemoteName:=PChar(SysToUTF8(RemoteName));//+++ - if GetConnectionByPath(RemoteName, FtpSend, sPath) then Result := FtpSend.DeleteDir(sPath); end; @@ -846,9 +800,6 @@ var sTemp: AnsiString; begin Result := False; - - DisconnectRoot:=PChar(SysToUTF8(DisconnectRoot));//+++ - if GetConnectionByPath(DisconnectRoot, FtpSend, sTemp) then begin Result := FtpSend.Logout; | ||||
Fixed in Revision | 6017 - 6020 | ||||
Operating system | Windows | ||||
Widgetset | Win32 | ||||
Architecture | 32-bit, 64-bit | ||||
|
Это исправляет лишь частный случай, когда сервер работает с кодировкой UTF-8. Если же сервер использует к примеру кодировку CP1251, то уже будет некорректно. Правильное решение это сделать выбор кодировки для соединения (типа как в TC). Вообще я планирую переписать FTP с нуля, для более глубокой интеграции в DC. |
Date Modified | Username | Field | Change |
---|---|---|---|
2013-11-21 14:26 | Skomorokh | New Issue | |
2013-11-21 14:26 | Skomorokh | File Added: ftp_plug.patch | |
2013-12-30 10:19 | Alexx2000 | Note Added: 0001210 | |
2013-12-30 10:19 | Alexx2000 | Status | new => feedback |
2015-05-03 11:48 | Alexx2000 | Fixed in Revision | => 6017 |
2015-05-03 11:48 | Alexx2000 | Assigned To | => Alexx2000 |
2015-05-03 11:48 | Alexx2000 | Status | feedback => resolved |
2015-05-03 11:48 | Alexx2000 | Resolution | open => fixed |
2015-05-03 11:56 | Alexx2000 | Fixed in Revision | 6017 => 6017, 6018 |
2015-05-03 11:58 | Alexx2000 | Relationship added | duplicate of 0000693 |
2015-05-03 13:01 | Alexx2000 | Fixed in Revision | 6017, 6018 => 6017 - 6020 |
2019-06-08 15:29 | Alexx2000 | Status | resolved => closed |