From ef2e944ed33347fd4c7f82c31e63f3747b62e29e Mon Sep 17 00:00:00 2001 From: Frediano Ziglio <freddy77@gmail.com> Date: Wed, 11 Dec 2024 06:11:17 +0000 Subject: [PATCH] tds: Use inline for tds_socket_init and tds_socket_done For historical reasons a lot of macros were used instead of inline functions. We already use in other places inline functions so it's no more a portable issue. The implementation of these function is small and we don't need additional headers. This allows reuse in code not linking all libtds library (like ODBC tests). Signed-off-by: Frediano Ziglio <freddy77@gmail.com> --- include/freetds/sysdep_private.h | 36 ++++++++++++++++++++++---------- src/apps/tsql.c | 4 ++-- src/odbc/unittests/freeclose.c | 5 +---- src/odbc/unittests/timeout3.c | 5 +---- src/odbc/winsetup.c | 6 +++--- src/tds/mem.c | 3 +-- src/tds/net.c | 16 -------------- win32/initnet.c | 2 +- 8 files changed, 34 insertions(+), 43 deletions(-) diff --git a/include/freetds/sysdep_private.h b/include/freetds/sysdep_private.h index f5edeee5a4..be6bfb49f6 100644 --- a/include/freetds/sysdep_private.h +++ b/include/freetds/sysdep_private.h @@ -60,10 +60,19 @@ typedef int pid_t; #define CLOSESOCKET(a) closesocket((a)) #define IOCTLSOCKET(a,b,c) ioctlsocket((a), (b), (c)) #define SOCKLEN_T int -TDS_EXTERN_C int tds_socket_init(void); -#define INITSOCKET() tds_socket_init() -TDS_EXTERN_C void tds_socket_done(void); -#define DONESOCKET() tds_socket_done() +static inline int +tds_socket_init(void) +{ + WSADATA wsadata; + + return WSAStartup(MAKEWORD(2, 2), &wsadata); +} + +static inline void +tds_socket_done(void) +{ + WSACleanup(); +} #define NETDB_REENTRANT 1 /* BSD-style netdb interface is reentrant */ #define TDSSOCK_EINTR WSAEINTR @@ -153,13 +162,18 @@ typedef DWORD pid_t; #define TDSSOCK_ECONNRESET ECONNRESET #endif -#ifndef INITSOCKET -#define INITSOCKET() 0 -#endif /* !INITSOCKET */ - -#ifndef DONESOCKET -#define DONESOCKET() do { } while(0) -#endif /* !DONESOCKET */ +#ifndef _WIN32 +static inline int +tds_socket_init(void) +{ + return 0; +} + +static inline void +tds_socket_done(void) +{ +} +#endif #ifndef READSOCKET # ifdef MSG_NOSIGNAL diff --git a/src/apps/tsql.c b/src/apps/tsql.c index 1cc0b40dfb..c0a0927e5c 100644 --- a/src/apps/tsql.c +++ b/src/apps/tsql.c @@ -763,7 +763,7 @@ main(int argc, char **argv) istty = isatty(0); - if (INITSOCKET()) { + if (tds_socket_init()) { fprintf(stderr, "Unable to initialize sockets\n"); return 1; } @@ -957,7 +957,7 @@ main(int argc, char **argv) tds_free_socket(tds); tds_free_login(login); tds_free_context(context); - DONESOCKET(); + tds_socket_done(); return 0; } diff --git a/src/odbc/unittests/freeclose.c b/src/odbc/unittests/freeclose.c index 757bf0b2b6..f66c02ceac 100644 --- a/src/odbc/unittests/freeclose.c +++ b/src/odbc/unittests/freeclose.c @@ -284,10 +284,7 @@ main(void) const int num_inserts = 20; int is_freetds; -#ifdef _WIN32 - WSADATA wsaData; - WSAStartup(MAKEWORD(2, 2), &wsaData); -#endif + tds_socket_init(); if (tds_mutex_init(&mtx)) return 1; diff --git a/src/odbc/unittests/timeout3.c b/src/odbc/unittests/timeout3.c index 5e912edea1..1c403b9c41 100644 --- a/src/odbc/unittests/timeout3.c +++ b/src/odbc/unittests/timeout3.c @@ -135,10 +135,7 @@ main(void) int port; time_t start_time, end_time; -#ifdef _WIN32 - WSADATA wsaData; - WSAStartup(MAKEWORD(2, 2), &wsaData); -#endif + tds_socket_init(); if (tds_mutex_init(&mtx)) return 1; diff --git a/src/odbc/winsetup.c b/src/odbc/winsetup.c index b451529c9e..ce67b497dd 100644 --- a/src/odbc/winsetup.c +++ b/src/odbc/winsetup.c @@ -306,7 +306,7 @@ ConfigDSN(HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttribut * ConfigDSN() only looks up addresses and names, and never actually * uses any sockets. */ - INITSOCKET(); + tds_socket_init(); /* Create a blank login struct */ di = alloc_dsninfo(); @@ -378,12 +378,12 @@ ConfigDSN(HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszAttribut /* Clean up and return TRUE, indicating that the change took place */ free_dsninfo(di); - DONESOCKET(); + tds_socket_done(); return TRUE; Fail: free_dsninfo(di); - DONESOCKET(); + tds_socket_done(); return FALSE; } diff --git a/src/tds/mem.c b/src/tds/mem.c index f5ae1b8488..33f7c4c376 100644 --- a/src/tds/mem.c +++ b/src/tds/mem.c @@ -687,7 +687,6 @@ winsock_initialized(void) static bool initialized = false; static tds_mutex mtx = TDS_MUTEX_INITIALIZER; - WSADATA wsa_data; int erc; if (initialized) @@ -701,7 +700,7 @@ winsock_initialized(void) } /* initialize the socket layer */ - erc = WSAStartup(MAKEWORD(2, 2), &wsa_data); + erc = tds_socket_init(); initialized = (erc == 0); tds_mutex_unlock(&mtx); diff --git a/src/tds/net.c b/src/tds/net.c index 9bb985e7a4..b2fe03327d 100644 --- a/src/tds/net.c +++ b/src/tds/net.c @@ -106,22 +106,6 @@ static void tds_check_cancel(TDSCONNECTION *conn); * @{ */ -#ifdef _WIN32 -int -tds_socket_init(void) -{ - WSADATA wsadata; - - return WSAStartup(MAKEWORD(2, 2), &wsadata); -} - -void -tds_socket_done(void) -{ - WSACleanup(); -} -#endif - #if !defined(SOL_TCP) && (defined(IPPROTO_TCP) || defined(_WIN32)) /* fix incompatibility between MS headers */ # ifndef IPPROTO_TCP diff --git a/win32/initnet.c b/win32/initnet.c index c460e9c9aa..1fd8542cbd 100644 --- a/win32/initnet.c +++ b/win32/initnet.c @@ -33,7 +33,7 @@ DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved TDS_UNUSED) _CrtSetDbgFlag(_CRTDBG_CHECK_ALWAYS_DF | _CRTDBG_LEAK_CHECK_DF | _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG)); #endif - if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) + if (tds_socket_init() != 0) return FALSE; DisableThreadLibraryCalls(hinstDLL);