diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2014-12-26 09:32:06 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2014-12-28 00:33:27 -0800 |
commit | e092accb6bb8aea08dab1796d707b3adce55a38c (patch) | |
tree | f3f2bad267ce9f3f2ec61441a03447027ae3a3ea /src/decompress.c | |
parent | 1505643bb70ce66e86d6c72902fe7e9199e93606 (diff) | |
download | emacs-e092accb6bb8aea08dab1796d707b3adce55a38c.tar.gz |
Wrap dll functions more simply
* decompress.c, gnutls.c, image.c, xml.c:
If WINDOWSNT, use '#define FOO fn_FOO' to wrap dll functions,
rather than the inverse when not WINDOWSNT. This isolates the
fn_* business into the WINDOWSNT-specific section of the code,
which makes it easier to maintain the generic code.
* decompress.c (DEF_ZLIB_FN, LOAD_ZLIB_FN):
* gnutls.c (DEF_GNUTLS_FN, LOAD_GNUTLS_FN):
* image.c (DEF_IMGLIB_FN, LOAD_IMGLIB_FN):
* xml.c (DEF_XML2_FN, LOAD_XML2_FN):
Remove. All uses replaced by DEF_DLL_FN.
* w32.h (DEF_DLL_FN, LOAD_DLL_FN): New macros.
Diffstat (limited to 'src/decompress.c')
-rw-r--r-- | src/decompress.c | 51 |
1 files changed, 19 insertions, 32 deletions
diff --git a/src/decompress.c b/src/decompress.c index 24ce852245c..f86aa6facbf 100644 --- a/src/decompress.c +++ b/src/decompress.c @@ -31,26 +31,14 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ static Lisp_Object Qzlib_dll; #ifdef WINDOWSNT -#include <windows.h> -#include "w32.h" +# include <windows.h> +# include "w32.h" -/* Macro for defining functions that will be loaded from the zlib DLL. */ -#define DEF_ZLIB_FN(rettype,func,args) static rettype (FAR CDECL *fn_##func)args - -/* Macro for loading zlib functions from the library. */ -#define LOAD_ZLIB_FN(lib,func) { \ - fn_##func = (void *) GetProcAddress (lib, #func); \ - if (!fn_##func) return false; \ - } - -DEF_ZLIB_FN (int, inflateInit2_, - (z_streamp strm, int windowBits, const char *version, int stream_size)); - -DEF_ZLIB_FN (int, inflate, - (z_streamp strm, int flush)); - -DEF_ZLIB_FN (int, inflateEnd, - (z_streamp strm)); +DEF_DLL_FN (int, inflateInit2_, + (z_streamp strm, int windowBits, const char *version, + int stream_size)); +DEF_DLL_FN (int, inflate, (z_streamp strm, int flush)); +DEF_DLL_FN (int, inflateEnd, (z_streamp strm)); static bool zlib_initialized; @@ -62,20 +50,19 @@ init_zlib_functions (void) if (!library) return false; - LOAD_ZLIB_FN (library, inflateInit2_); - LOAD_ZLIB_FN (library, inflate); - LOAD_ZLIB_FN (library, inflateEnd); + LOAD_DLL_FN (library, inflateInit2_); + LOAD_DLL_FN (library, inflate); + LOAD_DLL_FN (library, inflateEnd); return true; } -#define fn_inflateInit2(strm, windowBits) \ - fn_inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) - -#else /* !WINDOWSNT */ +# undef inflate +# undef inflateEnd +# undef inflateInit2_ -#define fn_inflateInit2 inflateInit2 -#define fn_inflate inflate -#define fn_inflateEnd inflateEnd +# define inflate fn_inflate +# define inflateEnd fn_inflateEnd +# define inflateInit2_ fn_inflateInit2_ #endif /* WINDOWSNT */ @@ -90,7 +77,7 @@ static void unwind_decompress (void *ddata) { struct decompress_unwind_data *data = ddata; - fn_inflateEnd (data->stream); + inflateEnd (data->stream); /* Delete any uncompressed data already inserted on error. */ if (data->start) @@ -167,7 +154,7 @@ This function can be called only in unibyte buffers. */) /* The magic number 32 apparently means "autodetect both the gzip and zlib formats" according to zlib.h. */ - if (fn_inflateInit2 (&stream, MAX_WBITS + 32) != Z_OK) + if (inflateInit2 (&stream, MAX_WBITS + 32) != Z_OK) return Qnil; unwind_data.start = iend; @@ -197,7 +184,7 @@ This function can be called only in unibyte buffers. */) stream.avail_in = avail_in; stream.next_out = GPT_ADDR; stream.avail_out = avail_out; - inflate_status = fn_inflate (&stream, Z_NO_FLUSH); + inflate_status = inflate (&stream, Z_NO_FLUSH); pos_byte += avail_in - stream.avail_in; decompressed = avail_out - stream.avail_out; insert_from_gap (decompressed, decompressed, 0); |