diff options
author | Reuben Thomas <rrt@sc3d.org> | 2021-11-08 15:00:35 +0000 |
---|---|---|
committer | Reuben Thomas <rrt@sc3d.org> | 2021-11-08 15:02:14 +0000 |
commit | b82bf88737c91465bd6fc1fe4a9e1f66b2e33852 (patch) | |
tree | 4039e8d46bea088fa6311d0f6e1a6734bcd6a554 | |
parent | 41e116b44d3765662bf71ed00dbf40e0cfd5ea3b (diff) | |
download | enchant-b82bf88737c91465bd6fc1fe4a9e1f66b2e33852.tar.gz |
Make request_dict member of provider mandatory
-rw-r--r-- | src/lib.c | 30 | ||||
-rw-r--r-- | tests/mock_provider.cpp | 8 |
2 files changed, 21 insertions, 17 deletions
@@ -773,17 +773,19 @@ enchant_provider_is_valid(EnchantProvider * provider) else if (provider->identify == NULL) g_warning ("EnchantProvider's identify method cannot be NULL\n"); else if (!g_utf8_validate((*provider->identify)(provider), -1, NULL)) - g_warning ("EnchantProvider's identify method does not return valid UTF-8.\n"); + g_warning ("EnchantProvider's identify method does not return valid UTF-8\n"); else if (provider->describe == NULL) g_warning ("EnchantProvider's describe method cannot be NULL\n"); else if (!g_utf8_validate((*provider->describe)(provider), -1, NULL)) - g_warning ("EnchantProvider's describe method does not return valid UTF-8.\n"); + g_warning ("EnchantProvider's describe method does not return valid UTF-8\n"); else if (provider->dispose == NULL) g_warning ("EnchantProvider's dispose method cannot be NULL\n"); else if (provider->dispose_dict == NULL) g_warning ("EnchantProvider's dispose_dict method cannot be NULL\n"); else if (provider->list_dicts == NULL) g_warning ("EnchantProvider's list_dicts method cannot be NULL\n"); + else if (provider->request_dict == NULL) + g_warning ("EnchantProvider's request_dict method cannot be NULL\n"); else return 1; @@ -1078,21 +1080,17 @@ _enchant_broker_request_dict (EnchantBroker * broker, const char *const tag) { EnchantProvider * provider = (EnchantProvider *) listIter->data; - if (provider->request_dict) - { - dict = (*provider->request_dict) (provider, tag); - - if (dict) - { + dict = (*provider->request_dict) (provider, tag); - EnchantSession *session = enchant_session_new (provider, tag); - EnchantDictPrivateData *enchant_dict_private_data = g_new0 (EnchantDictPrivateData, 1); - enchant_dict_private_data->reference_count = 1; - enchant_dict_private_data->session = session; - dict->enchant_private_data = (void *)enchant_dict_private_data; - g_hash_table_insert (broker->dict_map, (gpointer)strdup (tag), dict); - break; - } + if (dict) + { + EnchantSession *session = enchant_session_new (provider, tag); + EnchantDictPrivateData *enchant_dict_private_data = g_new0 (EnchantDictPrivateData, 1); + enchant_dict_private_data->reference_count = 1; + enchant_dict_private_data->session = session; + dict->enchant_private_data = (void *)enchant_dict_private_data; + g_hash_table_insert (broker->dict_map, (gpointer)strdup (tag), dict); + break; } } g_slist_free (list); diff --git a/tests/mock_provider.cpp b/tests/mock_provider.cpp index f48176b..6f94720 100644 --- a/tests/mock_provider.cpp +++ b/tests/mock_provider.cpp @@ -31,6 +31,12 @@ mock_provider_dispose(EnchantProvider *me) g_free(me);
}
+static EnchantDict *
+mock_provider_request_dict(EnchantProvider *, const char *const)
+{
+ return NULL;
+}
+
static void
mock_provider_dispose_dict(EnchantProvider *me, EnchantDict *dict)
{
@@ -88,7 +94,7 @@ init_enchant_provider(void) provider = g_new0(EnchantProvider, 1);
provider->dispose = mock_provider_dispose; //although this is technically optional, it will result in a memory leak
- provider->request_dict = NULL;
+ provider->request_dict = mock_provider_request_dict; // this is required or module won't load
provider->dispose_dict = mock_provider_dispose_dict;
provider->identify = hasIdentify ? mock_provider_identify : NULL; // this is required or module won't load
provider->describe = hasDescribe ? mock_provider_describe : NULL; // this is required or module won't load
|