Mercurial > pidgin.yaz
comparison src/plugin.c @ 8749:d7b8eb1f0a18
[gaim-migrate @ 9504]
Bumped up the plugin API version number, and added version numbers for
loader plugins and protocol plugins. Authors will want to update their
plugins, and possibly use GAIM_PLUGIN_API_VERSION, GAIM_PRPL_API_VERSION,
and GAIM_LOADER_API_VERSION constants.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Thu, 22 Apr 2004 01:53:18 +0000 |
parents | fa6395637e2c |
children | 184b8c3b6d09 |
comparison
equal
deleted
inserted
replaced
8748:13d592f485d1 | 8749:d7b8eb1f0a18 |
---|---|
228 gaim_plugin_destroy(plugin); | 228 gaim_plugin_destroy(plugin); |
229 | 229 |
230 return NULL; | 230 return NULL; |
231 } | 231 } |
232 | 232 |
233 if (plugin->info->api_version != GAIM_PLUGIN_API_VERSION) | |
234 { | |
235 gaim_plugin_destroy(plugin); | |
236 | |
237 return NULL; | |
238 } | |
239 | |
233 return plugin; | 240 return plugin; |
234 #else | 241 #else |
235 return NULL; | 242 return NULL; |
236 #endif /* !GAIM_PLUGINS */ | 243 #endif /* !GAIM_PLUGINS */ |
237 } | 244 } |
458 load_queue = g_list_remove(load_queue, plugin); | 465 load_queue = g_list_remove(load_queue, plugin); |
459 | 466 |
460 if (plugin->info != NULL && plugin->info->dependencies != NULL) | 467 if (plugin->info != NULL && plugin->info->dependencies != NULL) |
461 g_list_free(plugin->info->dependencies); | 468 g_list_free(plugin->info->dependencies); |
462 | 469 |
463 if (plugin->native_plugin) { | 470 if (plugin->native_plugin) |
464 | 471 { |
465 if (plugin->info != NULL && plugin->info->type == GAIM_PLUGIN_LOADER) { | 472 if (plugin->info != NULL && plugin->info->type == GAIM_PLUGIN_LOADER) |
473 { | |
474 GaimPluginLoaderInfo *loader_info; | |
466 GList *exts, *l, *next_l; | 475 GList *exts, *l, *next_l; |
467 GaimPlugin *p2; | 476 GaimPlugin *p2; |
468 | 477 |
469 for (exts = GAIM_PLUGIN_LOADER_INFO(plugin)->exts; | 478 loader_info = GAIM_PLUGIN_LOADER_INFO(plugin); |
470 exts != NULL; | 479 |
471 exts = exts->next) { | 480 if (loader_info != NULL && plugin->info->api_version >= 3 && |
472 | 481 loader_info->exts != NULL) |
473 for (l = gaim_plugins_get_all(); l != NULL; l = next_l) { | 482 { |
474 next_l = l->next; | 483 for (exts = GAIM_PLUGIN_LOADER_INFO(plugin)->exts; |
475 | 484 exts != NULL; |
476 p2 = l->data; | 485 exts = exts->next) { |
477 | 486 |
478 if (p2->path != NULL && is_so_file(p2->path, exts->data)) | 487 for (l = gaim_plugins_get_all(); l != NULL; l = next_l) |
479 gaim_plugin_destroy(p2); | 488 { |
489 next_l = l->next; | |
490 | |
491 p2 = l->data; | |
492 | |
493 if (p2->path != NULL && | |
494 is_so_file(p2->path, exts->data)) | |
495 { | |
496 gaim_plugin_destroy(p2); | |
497 } | |
498 } | |
480 } | 499 } |
500 | |
501 g_list_free(loader_info->exts); | |
481 } | 502 } |
482 | |
483 g_list_free(GAIM_PLUGIN_LOADER_INFO(plugin)->exts); | |
484 | 503 |
485 plugin_loaders = g_list_remove(plugin_loaders, plugin); | 504 plugin_loaders = g_list_remove(plugin_loaders, plugin); |
486 } | 505 } |
487 | 506 |
488 if (plugin->info != NULL && plugin->info->destroy != NULL) | 507 if (plugin->info != NULL && plugin->info->destroy != NULL) |
489 plugin->info->destroy(plugin); | 508 plugin->info->destroy(plugin); |
490 | 509 |
491 if (plugin->handle != NULL) | 510 if (plugin->handle != NULL) |
492 g_module_close(plugin->handle); | 511 g_module_close(plugin->handle); |
493 } | 512 } |
494 else { | 513 else |
514 { | |
495 GaimPlugin *loader; | 515 GaimPlugin *loader; |
496 GaimPluginLoaderInfo *loader_info; | 516 GaimPluginLoaderInfo *loader_info; |
497 | 517 |
498 loader = find_loader_for_plugin(plugin); | 518 loader = find_loader_for_plugin(plugin); |
499 | 519 |
500 if (loader != NULL) { | 520 if (loader != NULL) |
521 { | |
501 loader_info = GAIM_PLUGIN_LOADER_INFO(loader); | 522 loader_info = GAIM_PLUGIN_LOADER_INFO(loader); |
502 | 523 |
503 if (loader_info->destroy != NULL) | 524 if (loader_info->destroy != NULL) |
504 loader_info->destroy(plugin); | 525 loader_info->destroy(plugin); |
505 } | 526 } |
868 gaim_plugins_probe(exts->data); | 889 gaim_plugins_probe(exts->data); |
869 } | 890 } |
870 } | 891 } |
871 else if (plugin->info->type == GAIM_PLUGIN_PROTOCOL) | 892 else if (plugin->info->type == GAIM_PLUGIN_PROTOCOL) |
872 { | 893 { |
873 | |
874 /* We'll just load this right now. */ | 894 /* We'll just load this right now. */ |
875 if (!gaim_plugin_load(plugin)) | 895 if (!gaim_plugin_load(plugin)) |
876 { | 896 { |
877 gaim_plugin_destroy(plugin); | 897 gaim_plugin_destroy(plugin); |
878 | 898 |
910 g_return_val_if_fail(plugin != NULL, FALSE); | 930 g_return_val_if_fail(plugin != NULL, FALSE); |
911 | 931 |
912 if (g_list_find(plugins, plugin)) | 932 if (g_list_find(plugins, plugin)) |
913 return TRUE; | 933 return TRUE; |
914 | 934 |
915 if (plugin->info->type == GAIM_PLUGIN_LOADER || | 935 if (plugin->info->type == GAIM_PLUGIN_LOADER) |
916 plugin->info->type == GAIM_PLUGIN_PROTOCOL) | 936 { |
917 { | 937 GaimPluginLoaderInfo *loader_info; |
918 /* Special exception for loader plugins. We want them loaded NOW! */ | 938 |
939 loader_info = GAIM_PLUGIN_LOADER_INFO(plugin); | |
940 | |
941 if (loader_info == NULL || | |
942 loader_info->api_version != GAIM_LOADER_API_VERSION) | |
943 { | |
944 return FALSE; | |
945 } | |
946 | |
947 load_queue = g_list_append(load_queue, plugin); | |
948 } | |
949 else if (plugin->info->type == GAIM_PLUGIN_PROTOCOL) | |
950 { | |
951 GaimPluginProtocolInfo *prpl_info; | |
952 | |
953 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(plugin); | |
954 | |
955 if (prpl_info == NULL || | |
956 prpl_info->api_version != GAIM_PRPL_API_VERSION) | |
957 { | |
958 return FALSE; | |
959 } | |
960 | |
919 load_queue = g_list_append(load_queue, plugin); | 961 load_queue = g_list_append(load_queue, plugin); |
920 } | 962 } |
921 | 963 |
922 plugins = g_list_append(plugins, plugin); | 964 plugins = g_list_append(plugins, plugin); |
923 | 965 |