From 832079f0a6c679af944f0e6ec286a4da20293436 Mon Sep 17 00:00:00 2001 From: Spoike Date: Mon, 17 Feb 2014 15:31:47 +0000 Subject: [PATCH] Fixed dynamic linking issues... properly. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4616 fc73d0e0-1445-4013-8a0c-d673dee63da5 --- engine/client/image.c | 51 ++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/engine/client/image.c b/engine/client/image.c index 960806cd3..d87be4e3d 100644 --- a/engine/client/image.c +++ b/engine/client/image.c @@ -766,18 +766,30 @@ qboolean LibPNG_Init(void) {(void **) &qpng_get_error_ptr, "png_get_error_ptr"}, {NULL, NULL} }; - - if (!LIBPNG_LOADED()) + static qboolean tried; + if (!tried) { - #ifdef _WIN32 - libpng_handle = Sys_LoadLibrary("libpng"STRINGIFY(PNG_LIBPNG_VER_DLLNUM), pngfuncs); - #else - libpng_handle = Sys_LoadLibrary("libpng.so."STRINGIFY(PNG_LIBPNG_VER_SONUM), pngfuncs); - #endif - } -// if (!LIBPNG_LOADED()) -// libpng_handle = Sys_LoadLibrary("libpng", pngfuncs); + tried = true; + if (!LIBPNG_LOADED()) + { + char *libname; + #ifdef _WIN32 + libname = va("libpng%i", PNG_LIBPNG_VER_DLLNUM); + #else + if (PNG_LIBPNG_VER_SONUM == 0) + libname = "libpng.so"; + else + libname = va("libpng.so.%i", PNG_LIBPNG_VER_SONUM); + #endif + libpng_handle = Sys_LoadLibrary(libname, pngfuncs); + if (!libpng_handle) + Con_Printf("Unable to load %s\n", libname); + } + +// if (!LIBPNG_LOADED()) +// libpng_handle = Sys_LoadLibrary("libpng", pngfuncs); + } #endif return LIBPNG_LOADED(); } @@ -819,7 +831,6 @@ static void VARGS png_onwarning(png_structp png_ptr, png_const_charp warning_msg Con_Printf("libpng %s: %s\n", err->fname, warning_msg); } -qbyte *png_rgba; qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, const char *fname) { qbyte header[8], **rowpointers = NULL, *data = NULL; @@ -831,6 +842,9 @@ qbyte *ReadPNGFile(qbyte *buf, int length, int *width, int *height, const char * png_uint_32 pngwidth, pngheight; struct pngerr errctx; + if (!LibPNG_Init()) + return NULL; + memcpy(header, buf, 8); errctx.fname = fname; @@ -842,23 +856,23 @@ error: if (rowpointers) BZ_Free(rowpointers); qpng_destroy_read_struct(&png, &pnginfo, NULL); - return (png_rgba = NULL); + return NULL; } if (qpng_sig_cmp(header, 0, 8)) { - return (png_rgba = NULL); + return NULL; } if (!(png = qpng_create_read_struct(PNG_LIBPNG_VER_STRING, &errctx, png_onerror, png_onwarning))) { - return (png_rgba = NULL); + return NULL; } if (!(pnginfo = qpng_create_info_struct(png))) { qpng_destroy_read_struct(&png, &pnginfo, NULL); - return (png_rgba = NULL); + return NULL; } ri.data=buf; @@ -915,7 +929,7 @@ error: { Con_Printf ("Bad PNG color depth and/or bpp (%s)\n", fname); qpng_destroy_read_struct(&png, &pnginfo, NULL); - return (png_rgba = NULL); + return NULL; } data = BZF_Malloc(*height * rowbytes); @@ -932,7 +946,7 @@ error: qpng_destroy_read_struct(&png, &pnginfo, NULL); BZ_Free(rowpointers); - return (png_rgba = data); + return data; } @@ -951,6 +965,9 @@ int Image_WritePNG (char *filename, int compression, qbyte *pixels, int width, i if (!FS_NativePath(filename, FS_GAMEONLY, name, sizeof(name))) return false; + if (!LibPNG_Init()) + return false; + if (!(fp = fopen (name, "wb"))) { FS_CreatePath (filename, FS_GAMEONLY);