From: Yang Tse Date: Sun, 21 Aug 2011 17:56:06 +0000 (+0200) Subject: warnings: fix another 'conversion may lose significant bits' compiler warning X-Git-Tag: upstream/1.10.0~144 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c8d8ca26060299258182bdee388011fcc53f23cc;p=platform%2Fupstream%2Fc-ares.git warnings: fix another 'conversion may lose significant bits' compiler warning --- diff --git a/ares_expand_name.c b/ares_expand_name.c index e3eccd2..71ff0da 100644 --- a/ares_expand_name.c +++ b/ares_expand_name.c @@ -1,5 +1,5 @@ -/* 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 @@ -33,6 +33,7 @@ #include #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, @@ -91,9 +92,9 @@ int ares_expand_name(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; } @@ -106,7 +107,7 @@ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, { if (!indir) { - *enclen = p + 2 - encoded; + *enclen = aresx_uztosl(p + 2U - encoded); indir = 1; } p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1)); @@ -126,7 +127,7 @@ int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf, } } if (!indir) - *enclen = p + 1 - encoded; + *enclen = aresx_uztosl(p + 1U - encoded); /* Nuke the trailing period if we wrote one. */ if (q > *s) diff --git a/ares_nowarn.c b/ares_nowarn.c index 6c92f6f..0056bb8 100644 --- a/ares_nowarn.c +++ b/ares_nowarn.c @@ -64,8 +64,44 @@ #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 */ diff --git a/ares_nowarn.h b/ares_nowarn.h index af112b9..c593e45 100644 --- a/ares_nowarn.h +++ b/ares_nowarn.h @@ -17,8 +17,8 @@ * 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);