From b82bf88737c91465bd6fc1fe4a9e1f66b2e33852 Mon Sep 17 00:00:00 2001 From: Reuben Thomas Date: Mon, 8 Nov 2021 15:00:35 +0000 Subject: Make request_dict member of provider mandatory --- src/lib.c | 30 ++++++++++++++---------------- tests/mock_provider.cpp | 8 +++++++- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/lib.c b/src/lib.c index 6ffee68..4d91c7c 100644 --- a/src/lib.c +++ b/src/lib.c @@ -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 -- cgit v1.2.1