[GIT] ppl/ppl(master): Avoid implicit conversions changing type signedness.

Module: ppl/ppl Branch: master Commit: 6b48ffdf47e595250802fe87464fe348bc488d45 URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=6b48ffdf47e59...
Author: Enea Zaffanella zaffanella@cs.unipr.it Date: Fri Feb 24 10:13:34 2012 +0100
Avoid implicit conversions changing type signedness. Detected by ECLAIR service utypflag.
---
src/c_streambuf.cc | 14 ++++++++++---- src/c_streambuf.defs.hh | 1 + src/stdiobuf.cc | 12 +++++++++--- 3 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/src/c_streambuf.cc b/src/c_streambuf.cc index 83ecf0f..c76ca44 100644 --- a/src/c_streambuf.cc +++ b/src/c_streambuf.cc @@ -23,6 +23,8 @@ site: http://bugseng.com/products/ppl/ . */
#include "ppl-config.h" #include "c_streambuf.defs.hh" +#include "globals.defs.hh" +#include "assert.hh"
namespace Parma_Polyhedra_Library {
@@ -48,22 +50,24 @@ c_streambuf::underflow() {
std::streamsize c_streambuf::xsgetn(char_type* s, std::streamsize n) { + PPL_ASSERT(n >= 0); if (n == 0) return n; const int_type eof = traits_type::eof(); - int a; + const size_t sz_n = static_cast<size_t>(n); + size_t a; if (traits_type::eq_int_type(next_char_buf, eof)) a = 0; else { s[0] = static_cast<char_type>(next_char_buf); a = 1; } - std::streamsize r = cb_read(s + a, n - a) + a; + const size_t r = cb_read(s + a, sz_n - a) + a; if (r > 0) unget_char_buf = traits_type::to_int_type(s[r - 1]); else unget_char_buf = traits_type::eof(); - return r; + return static_caststd::streamsize(r); }
c_streambuf::int_type @@ -76,7 +80,9 @@ c_streambuf::pbackfail(int_type c) {
std::streamsize c_streambuf::xsputn(const char_type* s, std::streamsize n) { - return cb_write(s, n); + PPL_ASSERT(n >= 0); + size_t r = cb_write(s, static_cast<size_t>(n)); + return static_caststd::streamsize(r); }
c_streambuf::int_type diff --git a/src/c_streambuf.defs.hh b/src/c_streambuf.defs.hh index b8e0d98..2a349af 100644 --- a/src/c_streambuf.defs.hh +++ b/src/c_streambuf.defs.hh @@ -26,6 +26,7 @@ site: http://bugseng.com/products/ppl/ . */
#include "c_streambuf.types.hh" #include <streambuf> +#include <cstddef>
class Parma_Polyhedra_Library::c_streambuf : public std::basic_streambuf<char, std::char_traits<char> > { diff --git a/src/stdiobuf.cc b/src/stdiobuf.cc index 529f1bf..8a5fe95 100644 --- a/src/stdiobuf.cc +++ b/src/stdiobuf.cc @@ -23,6 +23,9 @@ site: http://bugseng.com/products/ppl/ . */
#include "ppl-config.h" #include "stdiobuf.defs.hh" +#include "globals.defs.hh" +#include "assert.hh" +#include <cstddef>
namespace Parma_Polyhedra_Library {
@@ -40,12 +43,13 @@ stdiobuf::underflow() {
std::streamsize stdiobuf::xsgetn(char_type* s, std::streamsize n) { - std::streamsize r = fread(s, 1, n, fp); + PPL_ASSERT(n >= 0); + size_t r = fread(s, 1, static_cast<size_t>(n), fp); if (r > 0) unget_char_buf = traits_type::to_int_type(s[r - 1]); else unget_char_buf = traits_type::eof(); - return r; + return static_caststd::streamsize(r); }
stdiobuf::int_type @@ -58,7 +62,9 @@ stdiobuf::pbackfail(int_type c) {
std::streamsize stdiobuf::xsputn(const char_type* s, std::streamsize n) { - return fwrite(s, 1, n, fp); + PPL_ASSERT(n >= 0); + size_t r = fwrite(s, 1, static_cast<size_t>(n), fp); + return static_caststd::streamsize(r); }
stdiobuf::int_type
participants (1)
-
Enea Zaffanella