Commit 36de7bd7 authored by Andy Moreton's avatar Andy Moreton Committed by Ken Brown

Define get_proc_addr in Cygwin-w32 build

* src/w32common.h (get_proc_addr, DEF_DLL_FN, LOAD_DLL_FN): Move
definitions here from src/w32.h.
* src/decompress.c [WINDOWSNT]:
* src/gnutls.c [WINDOWSNT]:
* src/image.c [WINDOWSNT]:
* src/json.c [WINDOWSNT]:
* src/lcms.c [WINDOWSNT]:
* src/w32font.c [WINDOWSNT]:
* src/w32uniscribe.c:
* src/xml.c [WINDOWSNT]: Include w32common.h.
parent 21397837
......@@ -30,6 +30,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#ifdef WINDOWSNT
# include <windows.h>
# include "w32common.h"
# include "w32.h"
DEF_DLL_FN (int, inflateInit2_,
......
......@@ -58,6 +58,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
# ifdef WINDOWSNT
# include <windows.h>
# include "w32common.h"
# include "w32.h"
# endif
......
......@@ -77,6 +77,7 @@ typedef struct x_bitmap_record Bitmap_Record;
/* We need (or want) w32.h only when we're _not_ compiling for Cygwin. */
#ifdef WINDOWSNT
# include "w32common.h"
# include "w32.h"
#endif
......
......@@ -34,6 +34,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#ifdef WINDOWSNT
# include <windows.h>
# include "w32common.h"
# include "w32.h"
DEF_DLL_FN (void, json_set_alloc_funcs,
......
......@@ -34,6 +34,7 @@ typedef struct
#ifdef WINDOWSNT
# include <windows.h>
# include "w32common.h"
# include "w32.h"
DEF_DLL_FN (cmsFloat64Number, cmsCIE2000DeltaE,
......
......@@ -164,10 +164,6 @@ extern void reset_standard_handles (int in, int out,
/* Return the string resource associated with KEY of type TYPE. */
extern LPBYTE w32_get_resource (const char * key, LPDWORD type);
/* Load a function from a DLL. Defined in this file. */
typedef void (* VOIDFNPTR) (void);
INLINE VOIDFNPTR get_proc_addr (HINSTANCE handle, LPCSTR fname);
extern void release_listen_threads (void);
extern void init_ntproc (int);
extern void term_ntproc (int);
......@@ -245,33 +241,4 @@ extern ssize_t emacs_gnutls_push (gnutls_transport_ptr_t p,
const void* buf, size_t sz);
#endif /* HAVE_GNUTLS */
/* Load a function address from a DLL. Cast the result via "VOIDFNPTR"
to pacify -Wcast-function-type in GCC 8.1. */
INLINE VOIDFNPTR
get_proc_addr (HINSTANCE handle, LPCSTR fname)
{
return (VOIDFNPTR) GetProcAddress (handle, fname);
}
/* Define a function that will be loaded from a DLL. The variable
arguments should contain the argument list for the function, and
optionally be followed by function attributes. For example:
DEF_DLL_FN (void, png_longjmp, (png_structp, int) PNG_NORETURN);
*/
#define DEF_DLL_FN(type, func, ...) \
typedef type (CDECL *W32_PFN_##func) __VA_ARGS__; \
static W32_PFN_##func fn_##func
/* Load a function from the DLL. */
#define LOAD_DLL_FN(lib, func) \
do \
{ \
fn_##func = (W32_PFN_##func) get_proc_addr (lib, #func); \
if (!fn_##func) \
return false; \
} \
while (false)
#endif /* EMACS_W32_H */
......@@ -50,4 +50,34 @@ extern int os_subtype;
/* Cache system info, e.g., the NT page size. */
extern void cache_system_info (void);
typedef void (* VOIDFNPTR) (void);
/* Load a function address from a DLL. Cast the result via VOIDFNPTR
to pacify -Wcast-function-type in GCC 8.1. The return value must
be cast to the correct function pointer type. */
INLINE VOIDFNPTR
get_proc_addr (HINSTANCE handle, LPCSTR fname)
{
return (VOIDFNPTR) GetProcAddress (handle, fname);
}
/* Define a function that will be loaded from a DLL. The variable
arguments should contain the argument list for the function, and
optionally be followed by function attributes. For example:
DEF_DLL_FN (void, png_longjmp, (png_structp, int) PNG_NORETURN);
*/
#define DEF_DLL_FN(type, func, ...) \
typedef type (CDECL *W32_PFN_##func) __VA_ARGS__; \
static W32_PFN_##func fn_##func
/* Load a function from the DLL. */
#define LOAD_DLL_FN(lib, func) \
do \
{ \
fn_##func = (W32_PFN_##func) get_proc_addr (lib, #func); \
if (!fn_##func) \
return false; \
} \
while (false)
#endif /* W32COMMON_H */
......@@ -29,6 +29,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "coding.h" /* for ENCODE_SYSTEM, DECODE_SYSTEM */
#include "w32font.h"
#ifdef WINDOWSNT
#include "w32common.h"
#include "w32.h"
#endif
......
......@@ -36,6 +36,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#include "composite.h"
#include "font.h"
#include "w32font.h"
#include "w32common.h"
struct uniscribe_font_info
{
......
......@@ -31,6 +31,7 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
#ifdef WINDOWSNT
# include <windows.h>
# include "w32common.h"
# include "w32.h"
DEF_DLL_FN (htmlDocPtr, htmlReadMemory,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment