View Issue Details

IDProjectCategoryView StatusLast Update
0000390Far ManagerPanelpublic2007-11-30 06:42
ReporterSten Assigned Toalexy  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Fixed in Version1.80 alpha 1 
Summary0000390: Неверный цикл в PluginManager::OpenFilePlugin()
DescriptionКогда на панели файлов жмешь ENTER и установлены плагины, которые должны перехватывать это нажатие, и сами уметь "входить в файлы" (например плагины броузинга архивов), то они не работают. Из-за вот этого куска кода:

HANDLE PluginManager::OpenFilePlugin(const wchar_t *Name, const unsigned char *Data, int DataSize, int OpMode)
{
        ...
        
        for (int i = 0; i < PluginsCount; i++)
        {
                pPlugin = PluginsData[i];

                ...
                
                HANDLE hPlugin = pPlugin->OpenFilePlugin (Name, Data, DataSize, OpMode);

                if ( (hPlugin == (HANDLE)-2) || (hPlugin == INVALID_HANDLE_VALUE) )
                     return hPlugin; // Sten: Странное место!

                PluginHandle *handle = new PluginHandle;
                handle->hPlugin = hPlugin;
                handle->pPlugin = pPlugin;

                return (HANDLE)handle;
        }
}

Там получается, что первый же установленный плагин, в моем случае Compare, который
возвращает hPlugin == INVALID_HANDLE_VALUE, прерывает цикл, и остальные
плагины даже не опрашиваются. Поэтому, я думаю, что в "Странном месте"
вместо return надо вставить continue.

В аттаче приложен соответствующий патч.
TagsNo tags attached.
Build363

Activities

2007-11-30 01:56

 

plugins.cpp.diff (597 bytes)   
Index: plugins.cpp
===================================================================
--- plugins.cpp	(revision 1327)
+++ plugins.cpp	(working copy)
@@ -321,7 +321,6 @@
 	return FALSE;
 }
 
-
 int PluginManager::LoadPlugin (
 		const wchar_t *lpwszModuleName,
 		const FAR_FIND_DATA_EX *fdata,
@@ -585,7 +584,7 @@
 		HANDLE hPlugin = pPlugin->OpenFilePlugin (Name, Data, DataSize, OpMode);
 
 		if ( (hPlugin == (HANDLE)-2) || (hPlugin == INVALID_HANDLE_VALUE) )
-			return hPlugin;
+			continue;
 
 			PluginHandle *handle = new PluginHandle;
 			handle->hPlugin = hPlugin;
plugins.cpp.diff (597 bytes)   

alexy

2007-11-30 06:42

administrator   bugnote:0000883

Не так надо править. Fixed in 363.

Issue History

Date Modified Username Field Change
2007-11-30 01:52 Sten New Issue
2007-11-30 01:56 Sten File Added: plugins.cpp.diff
2007-11-30 06:39 alexy Status new => assigned
2007-11-30 06:39 alexy Assigned To => alexy
2007-11-30 06:42 alexy Build => 363
2007-11-30 06:42 alexy Status assigned => closed
2007-11-30 06:42 alexy Note Added: 0000883
2007-11-30 06:42 alexy Resolution open => fixed
2007-11-30 06:42 alexy Fixed in Version => 1.80 alpha 1