folly/FBString.h: avoid -Wsign-compare error
authorJim Meyering <meyering@fb.com>
Wed, 7 Jan 2015 16:02:21 +0000 (08:02 -0800)
committerViswanath Sivakumar <viswanath@fb.com>
Tue, 13 Jan 2015 19:01:05 +0000 (11:01 -0800)
Summary:
* folly/FBString.h (operator>>): Since istream.width() is signed,
handle the case of a negative width. This avoids risk that "n"
will be less than 0 when compared against unsigned "extracted".
However, to suppress the following warning, we must also explicitly
convert "n" to size_t before comparing:

folly/FBString.h:2326:22: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]

Test Plan:
Run this and note there are fewer errors than before:
fbconfig --platform-all=gcc-4.9-glibc-2.20 -r folly && fbmake dbgo

Reviewed By: andrei.alexandrescu@fb.com

Subscribers: trunkagent, net-systems@, njormrod, folly-diffs@

FB internal diff: D1770460

Tasks: 5941250

Signature: t1:1770460:1420679684:b262eb31e6511b6311bebf0fbc29099471648b36

folly/FBString.h

index 0d177bca300c46d610289eb87997cad6e8efd4d5..e3f86b293418d3e975f8d6ea8d01edc42cc1b69d 100644 (file)
@@ -2318,12 +2318,13 @@ std::basic_istream<
   auto err = __ios_base::goodbit;
   if (sentry) {
     auto n = is.width();
-    if (n == 0) {
+    if (n <= 0) {
       n = str.max_size();
     }
     str.erase();
     auto got = is.rdbuf()->sgetc();
-    for (; extracted != n && got != T::eof() && !isspace(got); ++extracted) {
+    for (; extracted != size_t(n) && got != T::eof() &&
+           !isspace(got); ++extracted) {
       // Whew. We get to store this guy
       str.push_back(got);
       got = is.rdbuf()->snextc();