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().

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

diff --git a/TODO b/TODO
index ade10c7..a042ef7 100644 (file)
--- a/TODO
+++ b/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.
diff --git a/ares.h b/ares.h
index de52a0b..386c0ca 100644 (file)
--- a/ares.h
+++ b/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)
index cdf5a42..4c866f9 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 f7a7b4a..360d639 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 68aae2d..bd29fe9 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 5665c57..09a1dcc 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 afae7e2..f7286ad 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 f8afd4d..c84a1d0 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 6d291ee..597ec64 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"
   };