From bb5cf0fcf7abafa7648734696320d5fa3bdb1e0a Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 23 Sep 2011 20:51:07 +0300 Subject: [PATCH] get rid of hard libbz2 dependency it just keeps getting in my way when trying to run this elsewhere. --- Makefile | 2 +- plugins/cdrcimg/cdrcimg.c | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 5a7b278e..fa1f6732 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ TARGET = pcsx ARCH = $(shell $(CC) -v 2>&1 | grep -i 'target:' | awk '{print $$2}' | awk -F '-' '{print $$1}') CFLAGS += -Wall -ggdb -Ifrontend -ffast-math -LDFLAGS += -lz -lpthread -ldl -lpng -lbz2 +LDFLAGS += -lz -lpthread -ldl -lpng ifndef DEBUG CFLAGS += -O2 -DNDEBUG endif 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); -- 2.39.2