diff --git a/src/core/modules.c b/src/core/modules.c index c625071a..119a8e67 100644 --- a/src/core/modules.c +++ b/src/core/modules.c @@ -247,14 +247,24 @@ MODULE_REC *module_find(const char *name) MODULE_FILE_REC *module_file_find(MODULE_REC *module, const char *name) { GSList *tmp; + char *tmpname, *p; + tmpname = g_strdup(name); + for (p = tmpname; *p != '\0'; p++) { + if (*p == '_') + *p = '-'; + } for (tmp = module->files; tmp != NULL; tmp = tmp->next) { MODULE_FILE_REC *rec = tmp->data; - if (g_strcmp0(rec->name, name) == 0) + if (g_strcmp0(rec->name, name) == 0 || + g_strcmp0(rec->name, tmpname) == 0) { + g_free(tmpname); return rec; + } } + g_free(tmpname); return NULL; } diff --git a/src/core/modules.h b/src/core/modules.h index e3deaee2..1e707c0c 100644 --- a/src/core/modules.h +++ b/src/core/modules.h @@ -24,6 +24,12 @@ # define MODULE_IS_STATIC(rec) TRUE #endif +#define MODULE_ABICHECK(fn_modulename) \ +void fn_modulename ## _abicheck(int *version) \ +{ \ + *version = IRSSI_ABI_VERSION; \ +} + enum { MODULE_ERROR_ALREADY_LOADED, MODULE_ERROR_LOAD, diff --git a/src/fe-common/irc/dcc/fe-dcc.c b/src/fe-common/irc/dcc/fe-dcc.c index 51fb5eea..f5fb3b22 100644 --- a/src/fe-common/irc/dcc/fe-dcc.c +++ b/src/fe-common/irc/dcc/fe-dcc.c @@ -191,3 +191,5 @@ void fe_irc_dcc_deinit(void) command_unbind("dcc", (SIGNAL_FUNC) cmd_dcc); command_unbind("dcc list", (SIGNAL_FUNC) cmd_dcc_list); } + +MODULE_ABICHECK(fe_irc_dcc) diff --git a/src/fe-common/irc/fe-common-irc.c b/src/fe-common/irc/fe-common-irc.c index 0db2d98e..a36d3caa 100644 --- a/src/fe-common/irc/fe-common-irc.c +++ b/src/fe-common/irc/fe-common-irc.c @@ -102,7 +102,7 @@ void fe_common_irc_init(void) irc_completion_init(); settings_check(); - module_register("core", "fe-irc"); + module_register("irc", "fe-common"); fe_irc_modules_init(); } @@ -130,3 +130,5 @@ void fe_common_irc_deinit(void) theme_unregister(); } + +MODULE_ABICHECK(fe_common_irc) diff --git a/src/fe-common/irc/notifylist/fe-notifylist.c b/src/fe-common/irc/notifylist/fe-notifylist.c index 1f136a97..579b1824 100644 --- a/src/fe-common/irc/notifylist/fe-notifylist.c +++ b/src/fe-common/irc/notifylist/fe-notifylist.c @@ -246,3 +246,5 @@ void fe_irc_notifylist_deinit(void) signal_remove("notifylist left", (SIGNAL_FUNC) notifylist_left); signal_remove("notifylist away changed", (SIGNAL_FUNC) notifylist_away); } + +MODULE_ABICHECK(fe_irc_notifylist) diff --git a/src/irc/core/irc-core.c b/src/irc/core/irc-core.c index b5e80f2a..d1a0f72e 100644 --- a/src/irc/core/irc-core.c +++ b/src/irc/core/irc-core.c @@ -125,7 +125,7 @@ void irc_core_init(void) sasl_init(); settings_check(); - module_register("core", "irc"); + module_register("irc", "core"); } void irc_core_deinit(void) @@ -149,3 +149,5 @@ void irc_core_deinit(void) chat_protocol_unregister("IRC"); } + +MODULE_ABICHECK(irc_core) diff --git a/src/irc/dcc/dcc.c b/src/irc/dcc/dcc.c index 006a2b77..4c276ac6 100644 --- a/src/irc/dcc/dcc.c +++ b/src/irc/dcc/dcc.c @@ -597,3 +597,4 @@ void irc_dcc_deinit(void) g_source_remove(dcc_timeouttag); } +MODULE_ABICHECK(irc_dcc) diff --git a/src/irc/flood/flood.c b/src/irc/flood/flood.c index 886a266c..a7425b90 100644 --- a/src/irc/flood/flood.c +++ b/src/irc/flood/flood.c @@ -346,3 +346,5 @@ void irc_flood_deinit(void) signal_remove("server connected", (SIGNAL_FUNC) flood_init_server); signal_remove("server destroyed", (SIGNAL_FUNC) flood_deinit_server); } + +MODULE_ABICHECK(irc_flood) diff --git a/src/irc/notifylist/notifylist.c b/src/irc/notifylist/notifylist.c index 475e92c8..158b4dea 100644 --- a/src/irc/notifylist/notifylist.c +++ b/src/irc/notifylist/notifylist.c @@ -358,3 +358,5 @@ void irc_notifylist_deinit(void) notifylist_destroy_all(); } + +MODULE_ABICHECK(irc_notifylist) diff --git a/src/perl/perl-common.c b/src/perl/perl-common.c index 6fd1705b..a2c7ffe4 100644 --- a/src/perl/perl-common.c +++ b/src/perl/perl-common.c @@ -584,6 +584,9 @@ static void perl_register_protocol(CHAT_PROTOCOL_REC *rec) chat_type = chat_protocol_lookup(rec->name); g_return_if_fail(chat_type >= 0); + if (rec->not_initialized) + return; + name = g_ascii_strdown(rec->name,-1); *name = *(rec->name); diff --git a/tests/irc/flood/test-796.c b/tests/irc/flood/test-796.c index 6f0f3ac8..9e8aeee7 100644 --- a/tests/irc/flood/test-796.c +++ b/tests/irc/flood/test-796.c @@ -31,9 +31,13 @@ #include #include -/* irc.c */ -void irc_init(void); -void irc_deinit(void); +/* flood.c */ +void irc_flood_init(void); +void irc_flood_deinit(void); + +/* irc-core.c */ +void irc_core_init(void); +void irc_core_deinit(void); /* irc-session.c */ void irc_session_init(void); @@ -72,7 +76,8 @@ static void server_destroy_flood_set_up(ServerDestroyFloodData *fixture, const v { args_execute(0, NULL); core_init(); - irc_init(); + irc_core_init(); + irc_flood_init(); fe_common_core_init(); fe_common_irc_init(); signal_emit("irssi init finished", 0); @@ -90,7 +95,8 @@ static void server_destroy_flood_tear_down(ServerDestroyFloodData *fixture, cons command_unbind("echo", (SIGNAL_FUNC) cmd_echo); fe_common_irc_deinit(); fe_common_core_deinit(); - irc_deinit(); + irc_flood_deinit(); + irc_core_deinit(); core_deinit(); }