diff --git a/src/api.cpp b/src/api.cpp index b432d2ec..1461ba94 100644 --- a/src/api.cpp +++ b/src/api.cpp @@ -364,9 +364,9 @@ BOSS_API unsigned int boss_get_plugin_tags (boss_db db, const char * plugin, *numTags_removed = 0; boost::unordered_set tagsAdded, tagsRemoved; - std::list::iterator it = std::find(db->metadata.begin(), db->metadata.end(), boss::Plugin(plugin)); - if (it != db->metadata.end()) { - std::list tags = it->Tags(); + std::list::iterator pluginIt = std::find(db->metadata.begin(), db->metadata.end(), boss::Plugin(plugin)); + if (pluginIt != db->metadata.end()) { + std::list tags = pluginIt->Tags(); for (std::list::const_iterator it=tags.begin(), endIt=tags.end(); it != endIt; ++it) { if (it->IsAddition()) tagsAdded.insert(it->Name()); @@ -375,8 +375,8 @@ BOSS_API unsigned int boss_get_plugin_tags (boss_db db, const char * plugin, } } - it = std::find(db->userMetadata.begin(), db->userMetadata.end(), boss::Plugin(plugin)); - if (it != db->userMetadata.end()) { + pluginIt = std::find(db->userMetadata.begin(), db->userMetadata.end(), boss::Plugin(plugin)); + if (pluginIt != db->userMetadata.end()) { *userlistModified = true; } @@ -440,13 +440,36 @@ BOSS_API unsigned int boss_get_plugin_messages (boss_db db, const char * plugin, *messages = NULL; *numMessages = 0; - std::list::iterator it = std::find(db->metadata.begin(), db->metadata.end(), boss::Plugin(plugin)); - if (it == db->metadata.end()) { - it = std::find(db->userMetadata.begin(), db->userMetadata.end(), boss::Plugin(plugin)); - if (it == db->userMetadata.end()) - return BOSS_API_OK; + std::list pluginMessages; + std::list::iterator pluginIt = std::find(db->metadata.begin(), db->metadata.end(), boss::Plugin(plugin)); + if (pluginIt != db->metadata.end()) { + pluginMessages = pluginIt->Messages(); } + pluginIt = std::find(db->userMetadata.begin(), db->userMetadata.end(), boss::Plugin(plugin)); + if (pluginIt != db->userMetadata.end()) { + } + + db->extMessageArraySize = pluginMessages.size(); + try { + db->extMessageArray = new boss_message[db->extMessageArraySize]; + int i = 0; + for (std::list::const_iterator it=pluginMessages.begin(), endIt=pluginMessages.end(); it != endIt; ++it) { + if (it->Type() == "say") + db->extMessageArray[i].type = BOSS_API_MESSAGE_SAY; + else if (it->Type() == "warn") + db->extMessageArray[i].type = BOSS_API_MESSAGE_WARN; + else if (it->Type() == "error") + db->extMessageArray[i].type = BOSS_API_MESSAGE_ERROR; + db->extMessageArray[i].message = ToNewCString(it->Content()); + } + } catch (std::bad_alloc /*&e*/) { + return BOSS_API_ERROR_INVALID_ARGS; + } + + *messages = db->extMessageArray; + *numMessages = db->extMessageArraySize; + return BOSS_API_OK; }