diff options
Diffstat (limited to 'src/package.c')
-rw-r--r-- | src/package.c | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/src/package.c b/src/package.c index f91f62f..6596694 100644 --- a/src/package.c +++ b/src/package.c @@ -599,7 +599,7 @@ int apk_sign_ctx_process_file(struct apk_sign_ctx *ctx, ctx->signature.pkey = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL); if (ctx->signature.pkey != NULL) { ctx->md = md; - ctx->signature.data = apk_blob_from_istream(is, fi->size); + apk_blob_from_istream(is, fi->size, &ctx->signature.data); } BIO_free(bio); @@ -974,28 +974,24 @@ void apk_pkg_free(struct apk_package *pkg) free(pkg); } -int apk_ipkg_add_script(struct apk_installed_package *ipkg, - struct apk_istream *is, - unsigned int type, unsigned int size) +static int apk_ipkg_assign_script(struct apk_installed_package *ipkg, unsigned int type, apk_blob_t b) { - void *ptr; - int r; - - if (type >= APK_SCRIPT_MAX) + if (type >= APK_SCRIPT_MAX) { + free(b.ptr); return -1; - - ptr = malloc(size); - r = apk_istream_read(is, ptr, size); - if (r < 0) { - free(ptr); - return r; } - - if (ipkg->script[type].ptr) - free(ipkg->script[type].ptr); - ipkg->script[type].ptr = ptr; - ipkg->script[type].len = size; + if (ipkg->script[type].ptr) free(ipkg->script[type].ptr); + ipkg->script[type] = b; return 0; + } + +int apk_ipkg_add_script(struct apk_installed_package *ipkg, + struct apk_istream *is, + unsigned int type, unsigned int size) +{ + apk_blob_t b; + apk_blob_from_istream(is, size, &b); + return apk_ipkg_assign_script(ipkg, type, b); } static inline int make_dirs(int root_fd, const char *dirname, mode_t dirmode, mode_t parentmode) |