mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-18 19:41:01 -05:00
Move the two existing DECL/GET_foo_FUNCTION macro sets used for dynamic
linking on Windows into a single global one, which can cope with function renaming. Intended to enable eventual removal of ANSI-specific DoSomethingA references (although I've not removed any). [originally from svn r8738]
This commit is contained in:
@ -73,6 +73,19 @@ struct FontSpec {
|
||||
#define BOXRESULT (DLGWINDOWEXTRA + sizeof(LONG_PTR))
|
||||
#define DF_END 0x0001
|
||||
|
||||
/*
|
||||
* Dynamically linked functions.
|
||||
* This is somewhat circuitous to allow function-renaming macros to be
|
||||
* expanded, principally the ANSI/Unicode DoSomethingA/DoSomethingW.
|
||||
*/
|
||||
#define DECL_WINDOWS_FUNCTION(linkage, rettype, name, params) \
|
||||
typedef rettype (WINAPI *t_##name) params; \
|
||||
linkage t_##name p_##name
|
||||
#define STR1(x) #x
|
||||
#define STR(x) STR1(x)
|
||||
#define GET_WINDOWS_FUNCTION(module, name) \
|
||||
p_##name = module ? (t_##name) GetProcAddress(module, STR(name)) : NULL
|
||||
|
||||
/*
|
||||
* Global variables. Most modules declare these `extern', but
|
||||
* window.c will do `#define PUTTY_DO_GLOBALS' before including this
|
||||
@ -205,16 +218,16 @@ GLOBAL void *logctx;
|
||||
* that module must be exported from it as function pointers. So
|
||||
* here they are.
|
||||
*/
|
||||
extern int (WINAPI *p_WSAAsyncSelect)
|
||||
(SOCKET s, HWND hWnd, u_int wMsg, long lEvent);
|
||||
extern int (WINAPI *p_WSAEventSelect)
|
||||
(SOCKET s, WSAEVENT hEventObject, long lNetworkEvents);
|
||||
extern int (WINAPI *p_select)
|
||||
(int nfds, fd_set FAR * readfds, fd_set FAR * writefds,
|
||||
fd_set FAR *exceptfds, const struct timeval FAR * timeout);
|
||||
extern int (WINAPI *p_WSAGetLastError)(void);
|
||||
extern int (WINAPI *p_WSAEnumNetworkEvents)
|
||||
(SOCKET s, WSAEVENT hEventObject, LPWSANETWORKEVENTS lpNetworkEvents);
|
||||
DECL_WINDOWS_FUNCTION(GLOBAL, int, WSAAsyncSelect,
|
||||
(SOCKET, HWND, u_int, long));
|
||||
DECL_WINDOWS_FUNCTION(GLOBAL, int, WSAEventSelect,
|
||||
(SOCKET, WSAEVENT, long));
|
||||
DECL_WINDOWS_FUNCTION(GLOBAL, int, select,
|
||||
(int, fd_set FAR *, fd_set FAR *,
|
||||
fd_set FAR *, const struct timeval FAR *));
|
||||
DECL_WINDOWS_FUNCTION(GLOBAL, int, WSAGetLastError, (void));
|
||||
DECL_WINDOWS_FUNCTION(GLOBAL, int, WSAEnumNetworkEvents,
|
||||
(SOCKET, WSAEVENT, LPWSANETWORKEVENTS));
|
||||
|
||||
extern int socket_writable(SOCKET skt);
|
||||
|
||||
|
Reference in New Issue
Block a user