From 86718e2f529e2dfb925dc5746032215ec79f8dfa Mon Sep 17 00:00:00 2001 From: Yang Tse Date: Fri, 26 Feb 2010 16:42:33 +0000 Subject: [PATCH] fix compiler warning --- Makefile.inc | 2 ++ ares__read_line.c | 7 ++++++- ares_nowarn.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++ ares_nowarn.h | 23 ++++++++++++++++++++ 4 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 ares_nowarn.c create mode 100644 ares_nowarn.h diff --git a/Makefile.inc b/Makefile.inc index 32278589..8958b605 100644 --- a/Makefile.inc +++ b/Makefile.inc @@ -19,6 +19,7 @@ CSOURCES = ares__close_sockets.c \ ares_library_init.c \ ares_llist.c \ ares_mkquery.c \ + ares_nowarn.c \ ares_parse_a_reply.c \ ares_parse_aaaa_reply.c \ ares_parse_ns_reply.c \ @@ -47,6 +48,7 @@ HHEADERS = ares.h \ ares_ipv6.h \ ares_library_init.h \ ares_llist.h \ + ares_nowarn.h \ ares_private.h \ ares_rules.h \ ares_strcasecmp.h \ diff --git a/ares__read_line.c b/ares__read_line.c index 29f8e5dc..2e94945d 100644 --- a/ares__read_line.c +++ b/ares__read_line.c @@ -20,6 +20,7 @@ #include #include #include "ares.h" +#include "ares_nowarn.h" #include "ares_private.h" /* This is an internal function. Its contract is to read a line from @@ -46,7 +47,9 @@ int ares__read_line(FILE *fp, char **buf, size_t *bufsize) for (;;) { - if (!fgets(*buf + offset, (int)(*bufsize - offset), fp)) + int bytestoread = aresx_uztosi(*bufsize - offset); + + if (!fgets(*buf + offset, bytestoread, fp)) return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF; len = offset + strlen(*buf + offset); if ((*buf)[len - 1] == '\n') @@ -55,6 +58,8 @@ int ares__read_line(FILE *fp, char **buf, size_t *bufsize) break; } offset = len; + if(len < *bufsize - 1) + continue; /* Allocate more space. */ newbuf = realloc(*buf, *bufsize * 2); diff --git a/ares_nowarn.c b/ares_nowarn.c new file mode 100644 index 00000000..91d0a5f2 --- /dev/null +++ b/ares_nowarn.c @@ -0,0 +1,53 @@ +/* $Id$ */ + +/* Copyright (C) 2010 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + + +#include "ares_setup.h" + +#include "ares_nowarn.h" + +#if (SIZEOF_INT == 2) +# define CARES_MASK_SINT 0x7FFF +# define CARES_MASK_UINT 0xFFFF +#elif (SIZEOF_INT == 4) +# define CARES_MASK_SINT 0x7FFFFFFF +# define CARES_MASK_UINT 0xFFFFFFFF +#elif (SIZEOF_INT == 8) +# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFF +# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFF +#elif (SIZEOF_INT == 16) +# define CARES_MASK_SINT 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +# define CARES_MASK_UINT 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF +#endif + +/* +** size_t to signed int +*/ + +int aresx_uztosi(size_t uznum) +{ +#ifdef __INTEL_COMPILER +# pragma warning(push) +# pragma warning(disable:810) /* conversion may lose significant bits */ +#endif + + return (int)(uznum & (size_t) CARES_MASK_SINT); + +#ifdef __INTEL_COMPILER +# pragma warning(pop) +#endif +} diff --git a/ares_nowarn.h b/ares_nowarn.h new file mode 100644 index 00000000..0b7181bd --- /dev/null +++ b/ares_nowarn.h @@ -0,0 +1,23 @@ +#ifndef HEADER_CARES_NOWARN_H +#define HEADER_CARES_NOWARN_H + +/* $Id$ */ + +/* Copyright (C) 2010 by Daniel Stenberg + * + * Permission to use, copy, modify, and distribute this + * software and its documentation for any purpose and without + * fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting + * documentation, and that the name of M.I.T. not be used in + * advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. + * M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" + * without express or implied warranty. + */ + +int aresx_uztosi(size_t uznum); + +#endif /* HEADER_CARES_NOWARN_H */