mirror of
https://github.com/moparisthebest/curl
synced 2024-11-12 04:25:08 -05:00
Introduction of ares_library_init() and ares_library_cleanup()
This commit is contained in:
parent
3cb06eb2b2
commit
60a6af7498
109
ares/ares_library_init.c
Normal file
109
ares/ares_library_init.c
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#include "ares.h"
|
||||||
|
#include "ares_library_init.h"
|
||||||
|
#include "ares_private.h"
|
||||||
|
|
||||||
|
/* library-private global and unique instance vars */
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
fpGetNetworkParams_t fpGetNetworkParams = ZERO_NULL;
|
||||||
|
fpSystemFunction036_t fpSystemFunction036 = ZERO_NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* library-private global vars with source visibility restricted to this file */
|
||||||
|
|
||||||
|
static unsigned int ares_initialized;
|
||||||
|
static int ares_init_flags;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
static HMODULE hnd_iphlpapi;
|
||||||
|
static HMODULE hnd_advapi32;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static int ares_win32_init(void)
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
hnd_iphlpapi = 0;
|
||||||
|
hnd_iphlpapi = LoadLibrary("iphlpapi.dll");
|
||||||
|
if (!hnd_iphlpapi)
|
||||||
|
return ARES_ELOADIPHLPAPI;
|
||||||
|
|
||||||
|
fpGetNetworkParams = (fpGetNetworkParams_t)
|
||||||
|
GetProcAddress(hnd_iphlpapi, "GetNetworkParams");
|
||||||
|
if (!fpGetNetworkParams)
|
||||||
|
{
|
||||||
|
FreeLibrary(hnd_iphlpapi);
|
||||||
|
return ARES_EADDRGetNetworkParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
hnd_advapi32 = 0;
|
||||||
|
hnd_advapi32 = LoadLibrary("advapi32.dll");
|
||||||
|
if (!hnd_advapi32)
|
||||||
|
{
|
||||||
|
FreeLibrary(hnd_iphlpapi);
|
||||||
|
return ARES_ELOADADVAPI32;
|
||||||
|
}
|
||||||
|
|
||||||
|
fpSystemFunction036 = (fpSystemFunction036_t)
|
||||||
|
GetProcAddress(hnd_advapi32, "SystemFunction036");
|
||||||
|
if (!fpSystemFunction036)
|
||||||
|
{
|
||||||
|
FreeLibrary(hnd_advapi32);
|
||||||
|
FreeLibrary(hnd_iphlpapi);
|
||||||
|
return ARES_EADDRSYSTEMFUNCTION036;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void ares_win32_cleanup(void)
|
||||||
|
{
|
||||||
|
#ifdef WIN32
|
||||||
|
if (hnd_advapi32)
|
||||||
|
FreeLibrary(hnd_advapi32);
|
||||||
|
if (hnd_iphlpapi)
|
||||||
|
FreeLibrary(hnd_iphlpapi);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ares_library_init(int flags)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
|
||||||
|
if (ares_initialized)
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
ares_initialized++;
|
||||||
|
|
||||||
|
if (flags & ARES_LIB_INIT_WIN32)
|
||||||
|
{
|
||||||
|
res = ares_win32_init();
|
||||||
|
if (res != ARES_SUCCESS)
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
ares_init_flags = flags;
|
||||||
|
|
||||||
|
return ARES_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void ares_library_cleanup(void)
|
||||||
|
{
|
||||||
|
if (!ares_initialized)
|
||||||
|
return;
|
||||||
|
ares_initialized--;
|
||||||
|
|
||||||
|
if (ares_init_flags & ARES_LIB_INIT_WIN32)
|
||||||
|
ares_win32_cleanup();
|
||||||
|
|
||||||
|
ares_init_flags = ARES_LIB_INIT_NONE;
|
||||||
|
}
|
||||||
|
|
24
ares/ares_library_init.h
Normal file
24
ares/ares_library_init.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#ifndef HEADER_CARES_LIBRARY_INIT_H
|
||||||
|
#define HEADER_CARES_LIBRARY_INIT_H
|
||||||
|
|
||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
#include "setup.h"
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
|
||||||
|
#include <iphlpapi.h>
|
||||||
|
|
||||||
|
typedef DWORD (WINAPI *fpGetNetworkParams_t) (FIXED_INFO*, DWORD*);
|
||||||
|
typedef BOOLEAN (APIENTRY *fpSystemFunction036_t) (void*, ULONG);
|
||||||
|
|
||||||
|
/* Forward-declaration of variables defined in ares_library_init.c */
|
||||||
|
/* that are global and unique instances for whole c-ares library. */
|
||||||
|
|
||||||
|
extern fpGetNetworkParams_t fpGetNetworkParams;
|
||||||
|
extern fpSystemFunction036_t fpSystemFunction036;
|
||||||
|
|
||||||
|
#endif /* WIN32 */
|
||||||
|
|
||||||
|
#endif /* HEADER_CARES_LIBRARY_INIT_H */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user