]> granicus.if.org Git - curl/commitdiff
Make ares_init(), ares_dup() and ares_init_options() return ARES_ENOTINITIALIZED
authorYang Tse <yangsita@gmail.com>
Tue, 26 May 2009 18:00:14 +0000 (18:00 +0000)
committerYang Tse <yangsita@gmail.com>
Tue, 26 May 2009 18:00:14 +0000 (18:00 +0000)
if library initialization has not been performed calling ares_library_init().

ares/TODO
ares/ares.h
ares/ares_dup.3
ares/ares_init.3
ares/ares_init.c
ares/ares_library_cleanup.3
ares/ares_library_init.c
ares/ares_private.h
ares/ares_strerror.c

index ade10c7a86581d2f011c76f85e0f0d5c8ffdd456..a042ef7c36d95a87efd63239d43e58723a3e6324 100644 (file)
--- a/ares/TODO
+++ b/ares/TODO
@@ -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.
index de52a0b97b399df9e77826041487738177c8fd80..386c0caea24d8dbf99df981ae1c8cfcbf0d476b5 100644 (file)
@@ -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)
index cdf5a42e4954d8db40d55d10087642c83cce0e6e..4c866f9f9163cbe4bce4b66a1970d414b1179abc 100644 (file)
@@ -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
index f7a7b4a22f5e6f7233250f9f8b0dd819624eadec..360d63914e63597e3541d6294638b852b84e3e7c 100644 (file)
@@ -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.
index 68aae2dc6b33981673f5e30dc114f0158a639c19..bd29fe94f49eb9a0b514c101ac6f9aef86b32672 100644 (file)
@@ -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;
index 5665c576582b3a8de6f13345ce1bbb94c2e7b23d..09a1dcc483e4678c7c26b13d8347b3eac24bf2e3 100644 (file)
@@ -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.
index afae7e2e7996a6ca63e85872dc2744d68eb3f749..f7286ad17dcddf71298318412ee07ac51bc58285 100644 (file)
@@ -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;
+}
+
+
index f8afd4de11a4712f54c36c7bf809f47a9973b561..c84a1d0b33519d2076b16c953e39ab3c34cef42e 100644 (file)
@@ -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);
index 6d291ee633dccce2471259c000fa78f831bf03e8..597ec64b62e44f070594c956a31961ba7b8fe271 100644 (file)
@@ -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"
   };