aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYang Tse <yangsita@gmail.com>2009-05-26 18:00:14 +0000
committerYang Tse <yangsita@gmail.com>2009-05-26 18:00:14 +0000
commit1c93d9dcfe95f1bfd6df432f9d6b4b31ff1c06a1 (patch)
treed404d0cd0191ce060cd077430254461add3a6dec
parent675d6ec5e6d9dc51b0ff9ad28c0e901a7516e2ef (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/TODO10
-rw-r--r--ares/ares.h7
-rw-r--r--ares/ares_dup.37
-rw-r--r--ares/ares_init.312
-rw-r--r--ares/ares_init.c3
-rw-r--r--ares/ares_library_cleanup.32
-rw-r--r--ares/ares_library_init.c11
-rw-r--r--ares/ares_private.h2
-rw-r--r--ares/ares_strerror.c1
9 files changed, 46 insertions, 9 deletions
diff --git a/ares/TODO b/ares/TODO
index ade10c7a8..a042ef7c3 100644
--- 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.
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"
};