Allow architecture plug-ins to (de)initialize
This commit is contained in:
parent
6f523f4836
commit
b1038cab42
15
src/arch.c
15
src/arch.c
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user