From 06b350c04c040aa0ba4932166d420a7b107b24ba Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Fri, 28 Dec 2001 06:12:17 +0000 Subject: [PATCH] Moved WSAStartup/WSACleanup to libldap/init.c. Cleanup occurs in the internal atexit handler. --- include/ac/socket.h | 2 -- libraries/libldap/init.c | 36 +++++++++++++++++++++++++++++++++ libraries/libldap/open.c | 41 ++------------------------------------ libraries/libldap/unbind.c | 2 -- 4 files changed, 38 insertions(+), 43 deletions(-) diff --git a/include/ac/socket.h b/include/ac/socket.h index 106250b8b0..71f473d024 100644 --- a/include/ac/socket.h +++ b/include/ac/socket.h @@ -55,8 +55,6 @@ #include #elif HAVE_WINSOCK #include -#else -#define WSACleanup() #endif #ifdef HAVE_PCNFS diff --git a/libraries/libldap/init.c b/libraries/libldap/init.c index e123e06118..9b5fa84c88 100644 --- a/libraries/libldap/init.c +++ b/libraries/libldap/init.c @@ -373,6 +373,9 @@ ldap_int_destroy_global_options(void) ldap_free_urllist( gopts->ldo_defludp ); gopts->ldo_defludp = NULL; } +#if defined(HAVE_WINSOCK) || defined(HAVE_WINSOCK2) + WSACleanup( ); +#endif } /* @@ -450,6 +453,39 @@ void ldap_int_initialize( struct ldapoptions *gopts, int *dbglvl ) ldap_int_hostname = ldap_pvt_get_fqdn( ldap_int_hostname ); #endif +#ifdef HAVE_WINSOCK2 +{ WORD wVersionRequested; + WSADATA wsaData; + + wVersionRequested = MAKEWORD( 2, 0 ); + if ( WSAStartup( wVersionRequested, &wsaData ) != 0 ) { + /* Tell the user that we couldn't find a usable */ + /* WinSock DLL. */ + return; + } + + /* Confirm that the WinSock DLL supports 2.0.*/ + /* Note that if the DLL supports versions greater */ + /* than 2.0 in addition to 2.0, it will still return */ + /* 2.0 in wVersion since that is the version we */ + /* requested. */ + + if ( LOBYTE( wsaData.wVersion ) != 2 || + HIBYTE( wsaData.wVersion ) != 0 ) + { + /* Tell the user that we couldn't find a usable */ + /* WinSock DLL. */ + WSACleanup( ); + return; + } +} /* The WinSock DLL is acceptable. Proceed. */ +#elif HAVE_WINSOCK +{ WSADATA wsaData; + if ( WSAStartup( 0x0101, &wsaData ) != 0 ) { + return; + } +} +#endif ldap_int_utils_init(); if ( ldap_int_tblsize == 0 ) diff --git a/libraries/libldap/open.c b/libraries/libldap/open.c index 943d61994b..344df988f0 100644 --- a/libraries/libldap/open.c +++ b/libraries/libldap/open.c @@ -92,47 +92,13 @@ ldap_create( LDAP **ldp ) /* Initialize the global options, if not already done. */ if( gopts->ldo_valid != LDAP_INITIALIZED ) { ldap_int_initialize(gopts, NULL); + if ( gopts->ldo_valid != LDAP_INITIALIZED ) + return LDAP_LOCAL_ERROR; } Debug( LDAP_DEBUG_TRACE, "ldap_create\n", 0, 0, 0 ); -#ifdef HAVE_WINSOCK2 -{ WORD wVersionRequested; - WSADATA wsaData; - - wVersionRequested = MAKEWORD( 2, 0 ); - if ( WSAStartup( wVersionRequested, &wsaData ) != 0 ) { - /* Tell the user that we couldn't find a usable */ - /* WinSock DLL. */ - return LDAP_LOCAL_ERROR; - } - - /* Confirm that the WinSock DLL supports 2.0.*/ - /* Note that if the DLL supports versions greater */ - /* than 2.0 in addition to 2.0, it will still return */ - /* 2.0 in wVersion since that is the version we */ - /* requested. */ - - if ( LOBYTE( wsaData.wVersion ) != 2 || - HIBYTE( wsaData.wVersion ) != 0 ) - { - /* Tell the user that we couldn't find a usable */ - /* WinSock DLL. */ - WSACleanup( ); - return LDAP_LOCAL_ERROR; - } -} /* The WinSock DLL is acceptable. Proceed. */ - -#elif HAVE_WINSOCK -{ WSADATA wsaData; - if ( WSAStartup( 0x0101, &wsaData ) != 0 ) { - return LDAP_LOCAL_ERROR; - } -} -#endif - if ( (ld = (LDAP *) LDAP_CALLOC( 1, sizeof(LDAP) )) == NULL ) { - WSACleanup( ); return( LDAP_NO_MEMORY ); } @@ -160,14 +126,12 @@ ldap_create( LDAP **ldp ) if ( ld->ld_options.ldo_defludp == NULL ) { LDAP_FREE( (char*)ld ); - WSACleanup( ); return LDAP_NO_MEMORY; } if (( ld->ld_selectinfo = ldap_new_select_info()) == NULL ) { ldap_free_urllist( ld->ld_options.ldo_defludp ); LDAP_FREE( (char*) ld ); - WSACleanup( ); return LDAP_NO_MEMORY; } @@ -177,7 +141,6 @@ ldap_create( LDAP **ldp ) if ( ld->ld_sb == NULL ) { ldap_free_urllist( ld->ld_options.ldo_defludp ); LDAP_FREE( (char*) ld ); - WSACleanup( ); return LDAP_NO_MEMORY; } diff --git a/libraries/libldap/unbind.c b/libraries/libldap/unbind.c index 0d16da652b..4e1c1fd786 100644 --- a/libraries/libldap/unbind.c +++ b/libraries/libldap/unbind.c @@ -157,8 +157,6 @@ ldap_ld_free( LDAP_FREE( (char *) ld ); - WSACleanup(); - return( err ); } -- 2.39.5