-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* Copyright 1998, 2011 by the Massachusetts Institute of Technology.
*
* Permission to use, copy, modify, and distribute this
* software and its documentation for any purpose and without
#include <stdlib.h>
#include "ares.h"
+#include "ares_nowarn.h"
#include "ares_private.h" /* for the memdebug */
static int name_length(const unsigned char *encoded, const unsigned char *abuf,
/* indirect root label (like 0xc0 0x0c) is 2 bytes long (stupid, but
valid) */
if ((*encoded & INDIR_MASK) == INDIR_MASK)
- *enclen = 2;
+ *enclen = 2L;
else
- *enclen = 1; /* the caller should move one byte to get past this */
+ *enclen = 1L; /* the caller should move one byte to get past this */
return ARES_SUCCESS;
}
{
if (!indir)
{
- *enclen = p + 2 - encoded;
+ *enclen = aresx_uztosl(p + 2U - encoded);
indir = 1;
}
p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1));
}
}
if (!indir)
- *enclen = p + 1 - encoded;
+ *enclen = aresx_uztosl(p + 1U - encoded);
/* Nuke the trailing period if we wrote one. */
if (q > *s)
#elif (SIZEOF_INT == 16)
# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+#else
+# error "SIZEOF_INT not defined"
#endif
+#if (CARES_SIZEOF_LONG == 2)
+# define CARES_MASK_SLONG 0x7FFFL
+# define CARES_MASK_ULONG 0xFFFFUL
+#elif (CARES_SIZEOF_LONG == 4)
+# define CARES_MASK_SLONG 0x7FFFFFFFL
+# define CARES_MASK_ULONG 0xFFFFFFFFUL
+#elif (CARES_SIZEOF_LONG == 8)
+# define CARES_MASK_SLONG 0x7FFFFFFFFFFFFFFFL
+# define CARES_MASK_ULONG 0xFFFFFFFFFFFFFFFFUL
+#elif (CARES_SIZEOF_LONG == 16)
+# define CARES_MASK_SLONG 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL
+# define CARES_MASK_ULONG 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFUL
+#else
+# error "CARES_SIZEOF_LONG not defined"
+#endif
+
+/*
+** unsigned size_t to signed long
+*/
+
+long aresx_uztosl(size_t uznum)
+{
+#ifdef __INTEL_COMPILER
+# pragma warning(push)
+# pragma warning(disable:810) /* conversion may lose significant bits */
+#endif
+
+ return (long)(uznum & (size_t) CARES_MASK_SLONG);
+
+#ifdef __INTEL_COMPILER
+# pragma warning(pop)
+#endif
+}
+
/*
** unsigned size_t to signed int
*/
* without express or implied warranty.
*/
-int aresx_uztosi(size_t uznum);
-
+long aresx_uztosl(size_t uznum);
+int aresx_uztosi(size_t uznum);
short aresx_uztoss(size_t uznum);
short aresx_sitoss(int sinum);