case KIND_BROTLI_PATCH:
{
- struct dec_funcs funcs = { init_brotli, decompress_brotli };
+ struct dec_funcs funcs = { init_brotli, decompress_brotli, free_brotli };
r = apply_patch(parsed.patch_orig, parsed.dest, tar, parsed.dest_size, &funcs);
break;
}
}
return PF_OK;
}
+
+void free_brotli(struct bs_data *data)
+{
+ assert(data);
+ BrotliDecoderState *bstate = (BrotliDecoderState*)data->state;
+ BrotliDecoderDestroyInstance(bstate);
+}
int init_brotli(struct bs_data *data);
int decompress_brotli(struct bs_data *data);
+void free_brotli(struct bs_data *data);
return PF_ERROR_OPEN_FILE;
}
} else if (target_size != data->dest.len) {
- fprintf(stderr, "Declared target size differs from that read from the patch\n");
+ fprintf(stderr, "Declared target size differs from that read from the patch (%ld [patch] != %ld [declared])\n", target_size, data->dest.len);
return PF_ERROR_INVALID_PATCH_FILE;
}
int apply_patch_brotli(const char *source_file, const char *dest_file, TAR *patch_tar, size_t dest_size)
{
- struct dec_funcs funcs = { init_brotli, decompress_brotli };
+ struct dec_funcs funcs = { init_brotli, decompress_brotli, free_brotli };
return apply_patch(source_file, dest_file, patch_tar, dest_size, &funcs);
}