summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ares_init.c7
-rw-r--r--ares_nowarn.c18
-rw-r--r--ares_nowarn.h2
3 files changed, 24 insertions, 3 deletions
diff --git a/ares_init.c b/ares_init.c
index eb1719a..3351bcf 100644
--- a/ares_init.c
+++ b/ares_init.c
@@ -67,6 +67,7 @@
#include "ares.h"
#include "inet_net_pton.h"
#include "ares_library_init.h"
+#include "ares_nowarn.h"
#include "ares_private.h"
#ifdef ANDROID
@@ -1400,13 +1401,13 @@ static int set_options(ares_channel channel, const char *str)
q++;
val = try_option(p, q, "ndots:");
if (val && channel->ndots == -1)
- channel->ndots = (int)strtol(val, NULL, 10);
+ channel->ndots = aresx_sltosi(strtol(val, NULL, 10));
val = try_option(p, q, "retrans:");
if (val && channel->timeout == -1)
- channel->timeout = (int)strtol(val, NULL, 10);
+ channel->timeout = aresx_sltosi(strtol(val, NULL, 10));
val = try_option(p, q, "retry:");
if (val && channel->tries == -1)
- channel->tries = (int)strtol(val, NULL, 10);
+ channel->tries = aresx_sltosi(strtol(val, NULL, 10));
val = try_option(p, q, "rotate");
if (val && channel->rotate == -1)
channel->rotate = 1;
diff --git a/ares_nowarn.c b/ares_nowarn.c
index 4eee25f..ed84ade 100644
--- a/ares_nowarn.c
+++ b/ares_nowarn.c
@@ -50,3 +50,21 @@ int aresx_uztosi(size_t uznum)
# pragma warning(pop)
#endif
}
+
+/*
+** signed long to signed int
+*/
+
+int aresx_sltosi(long slnum)
+{
+#ifdef __INTEL_COMPILER
+# pragma warning(push)
+# pragma warning(disable:810) /* conversion may lose significant bits */
+#endif
+
+ return (int)(slnum & (long) CARES_MASK_SINT);
+
+#ifdef __INTEL_COMPILER
+# pragma warning(pop)
+#endif
+}
diff --git a/ares_nowarn.h b/ares_nowarn.h
index 2b407de..fb80495 100644
--- a/ares_nowarn.h
+++ b/ares_nowarn.h
@@ -19,4 +19,6 @@
int aresx_uztosi(size_t uznum);
+int aresx_sltosi(long slnum);
+
#endif /* HEADER_CARES_NOWARN_H */