View Issue Details

IDProjectCategoryView StatusLast Update
0000247PluginsFTP (old)public2007-07-16 16:06
ReporterDiRTy_GaRRyAssigned Toalexy 
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Platformx86OSWindowsOS VersionXP SP2
Product Version1.71 
Target VersionFixed in Version1.71 
Summary0000247: Плагин иногда не может копировать директории с содержимым на UNC пути
DescriptionПлагин не может копировать директории с ftp, когда в качестве оконечной директории указан сетевой путь. Т.е. копировать, то он пытается, но вместо того что бы создать папку в нужном месте он создаёт её в текущей локальной папке, а при копировании содержащихся в папке файлов выдаёт ошибку о невозможности открытия или создания файла. Самое интересное, что иногда он копирует всё нормально, причём, закономерность я так и не смог выявить.
Additional InformationВерсия плагина 1.7.0.0 build 28.10.2005
Прилагаю мультик и лог ftp.
TagsNo tags attached.

Activities

DiRTy_GaRRy

2007-01-17 13:49

developer   bugnote:0000388

В файле ftp_Mix.cpp следует заменить начало функции DoCreateDirectory на следующее:

BOOL DECLSPEC DoCreateDirectory( char *nm )
  { char *m;
     char ch;
     UINT tp;
     int b = 0;

//Skip UNC abs path
    if ( StrCmp( nm, "\\\\?\\",4 ) == 0 )
      b = 4;

//Skip UNC share name
    if ( nm[0] == SLASH_CHAR && nm[1] == SLASH_CHAR ) {
      b = StrPosChr( nm, SLASH_CHAR, b + 2 );
      if ( b == -1 ) {
        Log(( "UNC does not contains resource name" ));
        return FALSE;
      }
      b = StrPosChr( nm, SLASH_CHAR, b + 1 );
      if ( b == -1 )
        return TRUE;
      b += 1;
    }

//Normal
    m = nm + b;
    do{

Вроде работает. Замерджите, пожалуйста.

DiRTy_GaRRy

2007-01-17 16:02

developer   bugnote:0000389

Last edited: 2007-01-17 16:05

Не... лажа... ещё поправить надо :) Завтра доделаю.

alexy

2007-01-18 04:27

administrator   bugnote:0000391

Чёт я не в том порядке прочитал и уже закомитил. Но не страшно. Тока не совсем понимаю в чём баг, логи т.п. ты не приаттачил.

DiRTy_GaRRy

2007-01-18 06:03

developer   bugnote:0000392

Ошибка в том, что эта функция отрезала для сетевых путей часть \\server\share\ и потом пыталась из оставшегося хвоста создавать папки, которые, соотвественно, вместо сетевого пути создавались в текущей папке процесса FAR-а, что влекло за собой сбой прик копировании папок. Вообще эта функция кривая. Тот вариант, что я запостил будет работать только с нормальными путями, \\?\ - локальными путями и UNC путями вида \\server\share\. Она не будет работать (и не работала раньше) с полными UNC-путями \\?\UNC\Server\Share и с volume names вида \\?\Volume{GUID}\. Поддержку полных UNC-путей надо бы доделать, а вот c volume names хз, если не влом будет, то доделаю, ведь на c++ я уже не писал лет так 8. ;-)

P.S. А код у плагина мясной...

DiRTy_GaRRy

2007-01-18 12:08

developer   bugnote:0000393

Last edited: 2007-01-18 12:09

Тэкс... вроде работает со всем. Сделал следующее:
- поддержку всяких там виндовых путей \\?\ \\?\UNC\ \\?\Volume\{Guid}\
- поддержку относительных путей с:\temp\1\..\ итд
- сделал проверку на существование директории перед её созданием

... вроде работает ... сильно не пинайте

P.S. приложил ftp_Mix_DoCreateDirectory.cpp. В нём только одна функция DoCreateDirectory. Её нужно заменить в ftp_Mix.cpp

2007-01-18 12:08

 

ftp_Mix_DoCreateDirectory.cpp (2,565 bytes)

DiRTy_GaRRy

2007-01-18 13:53

developer   bugnote:0000394

Last edited: 2007-01-18 13:54

Поддержку путей вида \\.\ не делал, так как не совсем понял чем они отличаются от \\?\ (чё-то меня MSDN в этой части напугал ;-) ) и к чему это может привести... Надо подумать...

И вообще... что то я разизвращался...

alexy

2007-01-18 21:21

administrator   bugnote:0000395

Так, немного подправил (убрал провеку на существование так как не будет работать в win9x плюс будет глюк если есть такой файл а не папка ну и добавил ещё две мелкие проверки). Закомитил. Проверь пожалуйста что всё ОК и отпишись тут.

alexy

2007-02-04 15:26

administrator   bugnote:0000402

Ало? Можно закрывать?

DiRTy_GaRRy

2007-02-05 02:30

developer   bugnote:0000404

Сорри. Отвлёкся. Да.

Issue History

Date Modified Username Field Change
2006-11-02 04:52 DiRTy_GaRRy New Issue
2007-01-17 13:49 DiRTy_GaRRy Note Added: 0000388
2007-01-17 16:02 DiRTy_GaRRy Note Added: 0000389
2007-01-17 16:05 DiRTy_GaRRy Note Edited: 0000389
2007-01-18 04:27 alexy Note Added: 0000391
2007-01-18 04:27 alexy Status new => assigned
2007-01-18 04:27 alexy Assigned To => alexy
2007-01-18 06:03 DiRTy_GaRRy Note Added: 0000392
2007-01-18 12:08 DiRTy_GaRRy Note Added: 0000393
2007-01-18 12:08 DiRTy_GaRRy File Added: ftp_Mix_DoCreateDirectory.cpp
2007-01-18 12:09 DiRTy_GaRRy Note Edited: 0000393
2007-01-18 13:53 DiRTy_GaRRy Note Added: 0000394
2007-01-18 13:54 DiRTy_GaRRy Note Edited: 0000394
2007-01-18 21:21 alexy Note Added: 0000395
2007-02-04 15:26 alexy Note Added: 0000402
2007-02-05 02:30 DiRTy_GaRRy Note Added: 0000404
2007-02-05 05:00 alexy Status assigned => resolved
2007-02-05 05:00 alexy Resolution open => fixed
2007-02-05 05:00 alexy Fixed in Version => 1.71
2007-07-16 16:06 alexy Status resolved => closed
2013-05-21 00:30 alexy Category FTP => FTP (old)