Allow architecture plug-ins to (de)initialize

This commit is contained in:
Pierre Pronchery 2011-09-27 22:16:09 +00:00
parent 6f523f4836
commit b1038cab42

View File

@ -85,6 +85,9 @@ Arch * arch_new(char const * name)
Plugin * handle; Plugin * handle;
ArchPlugin * plugin; ArchPlugin * plugin;
#ifdef DEBUG
fprintf(stderr, "DEBUG: %s(\"%s\")\n", __func__, name);
#endif
if((handle = plugin_new(LIBDIR, PACKAGE, "arch", name)) == NULL) if((handle = plugin_new(LIBDIR, PACKAGE, "arch", name)) == NULL)
return NULL; return NULL;
if((plugin = plugin_lookup(handle, "arch_plugin")) == NULL) if((plugin = plugin_lookup(handle, "arch_plugin")) == NULL)
@ -121,6 +124,9 @@ Arch * arch_new(char const * name)
/* arch_delete */ /* arch_delete */
void arch_delete(Arch * arch) void arch_delete(Arch * arch)
{ {
#ifdef DEBUG
fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif
plugin_delete(arch->handle); plugin_delete(arch->handle);
object_delete(arch); object_delete(arch);
} }
@ -517,6 +523,7 @@ int arch_exit(Arch * arch)
arch->buffer_cnt = 0; arch->buffer_cnt = 0;
arch->buffer_pos = 0; arch->buffer_pos = 0;
memset(&arch->helper, 0, sizeof(arch->helper)); memset(&arch->helper, 0, sizeof(arch->helper));
arch->plugin->helper = NULL;
return 0; return 0;
} }
@ -528,6 +535,8 @@ int arch_init(Arch * arch, char const * filename, FILE * fp)
fprintf(stderr, "DEBUG: %s(\"%s\", %p)\n", __func__, filename, fprintf(stderr, "DEBUG: %s(\"%s\", %p)\n", __func__, filename,
(void *)fp); (void *)fp);
#endif #endif
if(arch->plugin->helper != NULL)
arch_exit(arch);
arch->base = 0; arch->base = 0;
arch->filename = filename; arch->filename = filename;
arch->fp = fp; arch->fp = fp;
@ -546,6 +555,8 @@ int arch_init(Arch * arch, char const * filename, FILE * fp)
arch->helper.seek = _arch_seek; arch->helper.seek = _arch_seek;
arch->helper.write = _arch_write; arch->helper.write = _arch_write;
arch->plugin->helper = &arch->helper; arch->plugin->helper = &arch->helper;
if(arch->plugin->init != NULL && arch->plugin->init(arch->plugin) != 0)
return -1;
return 0; return 0;
} }
@ -556,6 +567,8 @@ int arch_init_buffer(Arch * arch, char const * buffer, size_t size)
#ifdef DEBUG #ifdef DEBUG
fprintf(stderr, "DEBUG: %s()\n", __func__); fprintf(stderr, "DEBUG: %s()\n", __func__);
#endif #endif
if(arch->plugin->helper != NULL)
arch_exit(arch);
arch->base = 0; arch->base = 0;
arch->filename = "buffer"; arch->filename = "buffer";
arch->fp = NULL; arch->fp = NULL;
@ -574,6 +587,8 @@ int arch_init_buffer(Arch * arch, char const * buffer, size_t size)
arch->helper.read = _arch_read_buffer; arch->helper.read = _arch_read_buffer;
arch->helper.seek = _arch_seek_buffer; arch->helper.seek = _arch_seek_buffer;
arch->plugin->helper = &arch->helper; arch->plugin->helper = &arch->helper;
if(arch->plugin->init != NULL && arch->plugin->init(arch->plugin) != 0)
return -1;
return 0; return 0;
} }