X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=plugins%2Fcdrcimg%2Fcdrcimg.c;h=dd1cf57bca84769aa6e8d71f40838f8b17ede44e;hp=32786f2f707328857950f709bcf5071eab077d41;hb=7d993ee2dec1905c689ec0787f6543247fae665c;hpb=33716956638b56f994b9aadbd70c9c2265acf048 diff --git a/plugins/cdrcimg/cdrcimg.c b/plugins/cdrcimg/cdrcimg.c index 32786f2f..dd1cf57b 100644 --- a/plugins/cdrcimg/cdrcimg.c +++ b/plugins/cdrcimg/cdrcimg.c @@ -13,6 +13,7 @@ #include #include #include +#include #include "cdrcimg.h" @@ -34,6 +35,9 @@ static unsigned int cd_sectors_per_blk; static int cd_compression; static FILE *cd_file; +static int (*pBZ2_bzBuffToBuffDecompress)(char *dest, unsigned int *destLen, char *source, + unsigned int sourceLen, int small, int verbosity); + static struct { unsigned char raw[16][CD_FRAMESIZE_RAW]; unsigned char compressed[CD_FRAMESIZE_RAW * 16 + 100]; @@ -193,7 +197,7 @@ static long CDRreadTrack(unsigned char *time) ret = uncompress2(cdbuffer->raw[0], &cdbuffer_size, cdbuffer->compressed, size); break; case CDRC_BZ: - ret = BZ2_bzBuffToBuffDecompress((char *)cdbuffer->raw, (unsigned int *)&cdbuffer_size, + ret = pBZ2_bzBuffToBuffDecompress((char *)cdbuffer->raw, (unsigned int *)&cdbuffer_size, (char *)cdbuffer->compressed, size, 0, 0); break; default: @@ -276,6 +280,18 @@ static long CDRinit(void) return -1; } } + if (pBZ2_bzBuffToBuffDecompress == NULL) { + void *h = dlopen("/usr/lib/libbz2.so.1", RTLD_LAZY); + if (h == NULL) + h = dlopen("./lib/libbz2.so.1", RTLD_LAZY); + if (h != NULL) { + pBZ2_bzBuffToBuffDecompress = dlsym(h, "BZ2_bzBuffToBuffDecompress"); + if (pBZ2_bzBuffToBuffDecompress == NULL) { + err("dlsym bz2: %s", dlerror()); + dlclose(h); + } + } + } return 0; } @@ -422,6 +438,10 @@ static long CDRopen(void) snprintf(table_fname, sizeof(table_fname), "%s.table", cd_fname); } else if (strcasecmp(ext, ".bz") == 0) { + if (pBZ2_bzBuffToBuffDecompress == NULL) { + err("libbz2 unavailable for .bz2 handling\n"); + return -1; + } cd_compression = CDRC_BZ; tabentry_size = sizeof(u.bztab_entry); snprintf(table_fname, sizeof(table_fname), "%s.index", cd_fname);