Fix CID 885 by creating the image struct later.
Also small style fixes. Added a TODO about unloading the addon. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38240 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -251,48 +251,62 @@ BMailChainRunner::Init()
|
|||||||
);
|
);
|
||||||
|
|
||||||
_status->Lock();
|
_status->Lock();
|
||||||
_statview = _status->NewStatusView(desc.String(),_chain->ChainDirection() == outbound);
|
_statview = _status->NewStatusView(desc.String(), _chain->ChainDirection() == outbound);
|
||||||
_status->Unlock();
|
_status->Unlock();
|
||||||
|
|
||||||
BMessage settings;
|
BMessage settings;
|
||||||
for (int32 i = 0; _chain->GetFilter(i,&settings,&addon) >= B_OK; i++) {
|
for (int32 i = 0; _chain->GetFilter(i, &settings, &addon) >= B_OK; i++) {
|
||||||
struct filter_image *image = new struct filter_image;
|
|
||||||
BPath path(&addon);
|
BPath path(&addon);
|
||||||
BMailFilter *(* instantiate)(BMessage *,BMailChainRunner *);
|
BMailFilter *(*instantiate)(BMessage*, BMailChainRunner*);
|
||||||
|
|
||||||
image->id = load_add_on(path.Path());
|
image_id imageId = load_add_on(path.Path());
|
||||||
|
|
||||||
if (image->id < B_OK) {
|
if (imageId < B_OK) {
|
||||||
BString error;
|
BString error;
|
||||||
MDR_DIALECT_CHOICE (
|
MDR_DIALECT_CHOICE (
|
||||||
error << "Error loading the mail addon " << path.Path() << " from chain " << _chain->Name() << ": " << strerror(image->id);
|
error << "Error loading the mail addon "
|
||||||
|
<< path.Path() << " from chain " << _chain->Name()
|
||||||
|
<< ": " << strerror(imageId);
|
||||||
ShowError(error.String());,
|
ShowError(error.String());,
|
||||||
error << "メールアドオン " << path.Path() << " を " << _chain->Name() << "から読み込む際にエラーが発生しました: " << strerror(image->id);
|
error << "メールアドオン " << path.Path()
|
||||||
|
<< " を " << _chain->Name()
|
||||||
|
<< "から読み込む際にエラーが発生しました: "
|
||||||
|
<< strerror(imageId);
|
||||||
|
|
||||||
ShowError(error.String());
|
ShowError(error.String());
|
||||||
)
|
)
|
||||||
return image->id;
|
return imageId;
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t err = get_image_symbol(image->id,"instantiate_mailfilter",B_SYMBOL_TYPE_TEXT,(void **)&instantiate);
|
status_t err = get_image_symbol(imageId,
|
||||||
|
"instantiate_mailfilter", B_SYMBOL_TYPE_TEXT,
|
||||||
|
(void **)&instantiate);
|
||||||
if (err < B_OK) {
|
if (err < B_OK) {
|
||||||
BString error;
|
BString error;
|
||||||
MDR_DIALECT_CHOICE (
|
MDR_DIALECT_CHOICE (
|
||||||
error << "Error loading the mail addon " << path.Path() << " from chain " << _chain->Name()
|
error << "Error loading the mail addon " << path.Path()
|
||||||
|
<< " from chain " << _chain->Name()
|
||||||
<< ": the addon does not seem to be a mail addon (missing symbol instantiate_mailfilter).";
|
<< ": the addon does not seem to be a mail addon (missing symbol instantiate_mailfilter).";
|
||||||
ShowError(error.String());,
|
ShowError(error.String());,
|
||||||
error << "メールアドオン " << path.Path() << " を " << _chain->Name() << "から読み込む際にエラーが発生しました"
|
error << "メールアドオン " << path.Path() << " を "
|
||||||
<< ": そのアドオンはメールアドオンではないようです(instantiate_mailfilterシンボルがありません)";
|
<< _chain->Name() << "から読み込む際にエラーが発生しました"
|
||||||
|
<< ": そのアドオンはメールアドオンではないようです(instantiate_mailfilterシンボルがありません)";
|
||||||
ShowError(error.String());
|
ShowError(error.String());
|
||||||
)
|
)
|
||||||
|
|
||||||
err = -1;
|
err = -1;
|
||||||
|
|
||||||
|
// TODO: unload_add_on() ?
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
filter_image* image = new filter_image;
|
||||||
|
|
||||||
|
image->id = imageId;
|
||||||
image->settings = new BMessage(settings);
|
image->settings = new BMessage(settings);
|
||||||
|
image->settings->AddInt32("chain", _chain->ID());
|
||||||
image->settings->AddInt32("chain",_chain->ID());
|
image->filter = (*instantiate)(image->settings, this);
|
||||||
image->filter = (*instantiate)(image->settings,this);
|
|
||||||
addons.AddItem(image);
|
addons.AddItem(image);
|
||||||
|
|
||||||
if ((big_err = image->filter->InitCheck()) != B_OK) {
|
if ((big_err = image->filter->InitCheck()) != B_OK) {
|
||||||
@@ -303,6 +317,7 @@ BMailChainRunner::Init()
|
|||||||
return big_err;
|
return big_err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
BMailChainRunner::MessageReceived(BMessage *msg)
|
BMailChainRunner::MessageReceived(BMessage *msg)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user