diff options
| author | Yang Tse <yangsita@gmail.com> | 2009-05-26 18:00:14 +0000 | 
|---|---|---|
| committer | Yang Tse <yangsita@gmail.com> | 2009-05-26 18:00:14 +0000 | 
| commit | 1c93d9dcfe95f1bfd6df432f9d6b4b31ff1c06a1 (patch) | |
| tree | d404d0cd0191ce060cd077430254461add3a6dec | |
| parent | 675d6ec5e6d9dc51b0ff9ad28c0e901a7516e2ef (diff) | |
Make ares_init(), ares_dup() and ares_init_options() return ARES_ENOTINITIALIZED
if library initialization has not been performed calling ares_library_init().
| -rw-r--r-- | ares/TODO | 10 | ||||
| -rw-r--r-- | ares/ares.h | 7 | ||||
| -rw-r--r-- | ares/ares_dup.3 | 7 | ||||
| -rw-r--r-- | ares/ares_init.3 | 12 | ||||
| -rw-r--r-- | ares/ares_init.c | 3 | ||||
| -rw-r--r-- | ares/ares_library_cleanup.3 | 2 | ||||
| -rw-r--r-- | ares/ares_library_init.c | 11 | ||||
| -rw-r--r-- | ares/ares_private.h | 2 | ||||
| -rw-r--r-- | ares/ares_strerror.c | 1 | 
9 files changed, 46 insertions, 9 deletions
@@ -6,3 +6,13 @@ ares_gethostbyname  - When built to support IPv6, it needs to also support PF_UNSPEC or similar,    so that an application can ask for any protocol and then c-ares would return    all known resolves and not just explicitly IPv4 _or_ IPv6 resolves. + +ares_process + +- Upon next ABI brakage ares_process() could/should be changed to return 'int' +  and return ARES_ENOTINITIALIZED if ares_library_init() has not been called. + +ares_process_fd + +- Upon next ABI brakage ares_process_fd() could/should be changed to return +  'int' and return ARES_ENOTINITIALIZED if library has not been initialized. diff --git a/ares/ares.h b/ares/ares.h index de52a0b97..386c0caea 100644 --- a/ares/ares.h +++ b/ares/ares.h @@ -94,9 +94,12 @@ extern "C" {  #define ARES_ENONAME            19  #define ARES_EBADHINTS          20 +/* Uninitialized library error code */ +#define ARES_ENOTINITIALIZED    21 +  /* ares_library_init error codes */ -#define ARES_ELOADIPHLPAPI           21 -#define ARES_EADDRGETNETWORKPARAMS   22 +#define ARES_ELOADIPHLPAPI           22 +#define ARES_EADDRGETNETWORKPARAMS   23  /* Flag values */  #define ARES_FLAG_USEVC         (1 << 0) diff --git a/ares/ares_dup.3 b/ares/ares_dup.3 index cdf5a42e4..4c866f9f9 100644 --- a/ares/ares_dup.3 +++ b/ares/ares_dup.3 @@ -1,6 +1,6 @@  .\" $Id$  .\" -.\" Copyright (C) 2007-2008 by Daniel Stenberg +.\" Copyright (C) 2004-2009 by Daniel Stenberg  .\"  .\" Permission to use, copy, modify, and distribute this  .\" software and its documentation for any purpose and without @@ -14,7 +14,7 @@  .\" this software for any purpose.  It is provided "as is"  .\" without express or implied warranty.  .\" -.TH ARES_DUP 3 "2 Dec 2008" +.TH ARES_DUP 3 "26 May 2009"  .SH NAME  ares_dup \- Duplicate a resolver channel  .SH SYNOPSIS @@ -35,7 +35,8 @@ with additional options set exactly as the \fIsource\fP channel has them  configured.  .SH SEE ALSO  .BR ares_destroy(3), -.BR ares_init(3) +.BR ares_init(3), +.BR ares_library_init(3)  .SH AVAILABILITY  ares_dup(3) was added in c-ares 1.6.0  .SH AUTHOR diff --git a/ares/ares_init.3 b/ares/ares_init.3 index f7a7b4a22..360d63914 100644 --- a/ares/ares_init.3 +++ b/ares/ares_init.3 @@ -1,7 +1,7 @@  .\" $Id$  .\"  .\" Copyright 1998 by the Massachusetts Institute of Technology. -.\" Copyright (C) 2007-2008 by Daniel Stenberg +.\" Copyright (C) 2004-2009 by Daniel Stenberg  .\"  .\" Permission to use, copy, modify, and distribute this  .\" software and its documentation for any purpose and without @@ -15,7 +15,7 @@  .\" this software for any purpose.  It is provided "as is"  .\" without express or implied warranty.  .\" -.TH ARES_INIT 3 "13 May 2008" +.TH ARES_INIT 3 "26 May 2009"  .SH NAME  ares_init, ares_init_options \- Initialize a resolver channel  .SH SYNOPSIS @@ -184,10 +184,16 @@ A configuration file could not be read.  .TP 14  .B ARES_ENOMEM  The process's available memory was exhausted. +.TP 14 +.B ARES_ENOTINITIALIZED +c-ares library initialization not yet performed.  .SH SEE ALSO  .BR ares_destroy(3), -.BR ares_dup(3) +.BR ares_dup(3), +.BR ares_library_init(3)  .SH AUTHOR  Greg Hudson, MIT Information Systems  .br  Copyright 1998 by the Massachusetts Institute of Technology. +.br +Copyright (C) 2004-2009 by Daniel Stenberg. diff --git a/ares/ares_init.c b/ares/ares_init.c index 68aae2dc6..bd29fe94f 100644 --- a/ares/ares_init.c +++ b/ares/ares_init.c @@ -129,6 +129,9 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,      curl_memlimit(atoi(env));  #endif +  if (ares_library_initialized() != ARES_SUCCESS) +    return ARES_ENOTINITIALIZED; +    channel = malloc(sizeof(struct ares_channeldata));    if (!channel) {      *channelptr = NULL; diff --git a/ares/ares_library_cleanup.3 b/ares/ares_library_cleanup.3 index 5665c5765..09a1dcc48 100644 --- a/ares/ares_library_cleanup.3 +++ b/ares/ares_library_cleanup.3 @@ -52,7 +52,7 @@ conflict with any other thread that is already using these other libraries.  .PP  Win32/64 application DLLs shall not call \fIares_library_cleanup(3)\fP from  the DllMain function. Doing so will produce deadlocks and other problems. -.SH NOTES +.SH AVAILABILITY  This function was first introduced in c-ares version 1.6.1 along with the  definition of preprocessor symbol \fICARES_HAVE_ARES_LIBRARY_CLEANUP\fP as an  indication of the availability of this function. diff --git a/ares/ares_library_init.c b/ares/ares_library_init.c index afae7e2e7..f7286ad17 100644 --- a/ares/ares_library_init.c +++ b/ares/ares_library_init.c @@ -120,3 +120,14 @@ void ares_library_cleanup(void)    ares_init_flags = ARES_LIB_INIT_NONE;  } + +int ares_library_initialized(void) +{ +#ifdef WIN32 +  if (!ares_initialized) +    return ARES_ENOTINITIALIZED; +#endif +  return ARES_SUCCESS; +} + + diff --git a/ares/ares_private.h b/ares/ares_private.h index f8afd4de1..c84a1d0b3 100644 --- a/ares/ares_private.h +++ b/ares/ares_private.h @@ -310,6 +310,8 @@ int ares__timeadd(struct timeval *now,  /* return time offset between now and (future) check, in milliseconds */  long ares__timeoffset(struct timeval *now,                        struct timeval *check); +/* returns ARES_SUCCESS if library has been initialized */ +int ares_library_initialized(void);  void ares__rc4(rc4_key* key,unsigned char *buffer_ptr, int buffer_len);  void ares__send_query(ares_channel channel, struct query *query,                        struct timeval *now); diff --git a/ares/ares_strerror.c b/ares/ares_strerror.c index 6d291ee63..597ec64b6 100644 --- a/ares/ares_strerror.c +++ b/ares/ares_strerror.c @@ -44,6 +44,7 @@ const char *ares_strerror(int code)      "Illegal flags specified",      "Given hostname is not numeric",      "Illegal hints flags specified", +    "c-ares library initialization not yet performed",      "Error loading iphlpapi.dll",      "Could not find GetNetworkParams function"    };  | 
