int xmp_load_typed_module_from_memory(xmp_context opaque, void *mem, long size, const struct format_loader* format) { struct context_data *ctx = (struct context_data *)opaque; struct module_data *m = &ctx->m; HIO_HANDLE *h; int ret; if ((h = hio_open_mem(mem, size)) == NULL) return -XMP_ERROR_SYSTEM; m->filename = NULL; m->basename = NULL; m->size = size; if (ctx->state > XMP_STATE_UNLOADED) xmp_release_module(opaque); load_prologue(ctx); D_(D_WARN "load"); ret = -XMP_ERROR_FORMAT; if (format->test(h, NULL, 0) == 0) { if ((ret = module_load(h, ctx, format))) xmp_release_module(opaque); } hio_close(h); return ret; }
int xmp_load_module_from_memory(xmp_context opaque, void *mem, long size) { struct context_data *ctx = (struct context_data *)opaque; struct module_data *m = &ctx->m; HIO_HANDLE *h; int ret; /* Use size < 0 for unknown/undetermined size */ if (size == 0) size--; if ((h = hio_open_mem(mem, size)) == NULL) return -XMP_ERROR_SYSTEM; if (ctx->state > XMP_STATE_UNLOADED) xmp_release_module(opaque); m->filename = NULL; m->basename = NULL; m->dirname = NULL; m->size = size; ret = load_module(opaque, h); hio_close(h); return ret; }