comparison src/plugin.c @ 12703:df49362e0378

[gaim-migrate @ 15046] This should allow us to load plugin info from pre-1.0.0 plugins. committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Tue, 03 Jan 2006 20:02:58 +0000
parents 2b53185e5d8f
children 69713c02a702
comparison
equal deleted inserted replaced
12702:ba7834d6e2c9 12703:df49362e0378
352 { 352 {
353 gaim_plugin_destroy(plugin); 353 gaim_plugin_destroy(plugin);
354 return NULL; 354 return NULL;
355 } 355 }
356 356
357 if (plugin->info->magic != GAIM_PLUGIN_MAGIC || 357 /* Really old plugins. */
358 plugin->info->major_version != GAIM_MAJOR_VERSION || 358 if (plugin->info->magic != GAIM_PLUGIN_MAGIC)
359 {
360 gaim_debug_error("plugins", "%s is unloadable: plugin magic mismatch %d (need %d)\n",
361 plugin->path, plugin->info->magic, GAIM_PLUGIN_MAGIC);
362
363 if (plugin->info->magic >= 2 && plugin->info->magic <= 4)
364 {
365 struct _GaimPluginInfo2
366 {
367 unsigned int api_version;
368 GaimPluginType type;
369 char *ui_requirement;
370 unsigned long flags;
371 GList *dependencies;
372 GaimPluginPriority priority;
373
374 char *id;
375 char *name;
376 char *version;
377 char *summary;
378 char *description;
379 char *author;
380 char *homepage;
381
382 gboolean (*load)(GaimPlugin *plugin);
383 gboolean (*unload)(GaimPlugin *plugin);
384 void (*destroy)(GaimPlugin *plugin);
385
386 void *ui_info;
387 void *extra_info;
388 GaimPluginUiInfo *prefs_info;
389 GList *(*actions)(GaimPlugin *plugin, gpointer context);
390 } *info2 = (struct _GaimPluginInfo2 *)plugin->info;
391
392 /* This leaks... but only for ancient plugins, so deal with it. */
393 plugin->info = g_new0(GaimPluginInfo, 1);
394
395 /* We don't really need all these to display the plugin info, but
396 * I'm copying them all for good measure. */
397 plugin->info->magic = info2->api_version;
398 plugin->info->type = info2->type;
399 plugin->info->ui_requirement = info2->ui_requirement;
400 plugin->info->flags = info2->flags;
401 plugin->info->dependencies = info2->dependencies;
402 plugin->info->id = info2->id;
403 plugin->info->name = info2->name;
404 plugin->info->version = info2->version;
405 plugin->info->summary = info2->summary;
406 plugin->info->description = info2->description;
407 plugin->info->author = info2->author;
408 plugin->info->homepage = info2->homepage;
409 plugin->info->load = info2->load;
410 plugin->info->unload = info2->unload;
411 plugin->info->destroy = info2->destroy;
412 plugin->info->ui_info = info2->ui_info;
413 plugin->info->extra_info = info2->extra_info;
414
415 if (info2->api_version >= 3)
416 plugin->info->prefs_info = info2->prefs_info;
417
418 if (info2->api_version >= 4)
419 plugin->info->actions = info2->actions;
420
421 plugin->unloadable = TRUE;
422 return plugin;
423 }
424
425 gaim_plugin_destroy(plugin);
426 return NULL;
427 }
428
429 if (plugin->info->major_version != GAIM_MAJOR_VERSION ||
359 plugin->info->minor_version > GAIM_MINOR_VERSION) 430 plugin->info->minor_version > GAIM_MINOR_VERSION)
360 { 431 {
361 plugin->error = g_strdup_printf("ABI version mismatch %d.%d.x (need %d.%d.x)", 432 plugin->error = g_strdup_printf("ABI version mismatch %d.%d.x (need %d.%d.x)",
362 plugin->info->major_version, plugin->info->minor_version, 433 plugin->info->major_version, plugin->info->minor_version,
363 GAIM_MAJOR_VERSION, GAIM_MINOR_VERSION); 434 GAIM_MAJOR_VERSION, GAIM_MINOR_VERSION);