Publishes GTEST_HAS_STREAM_REDIRECTION (by Vlad Losev); casts char to unsigned char before calling isspace() etc to avoid undefined behavior (by Zhanyong Wan); fixes the VC projects (by Fredrik Roubert).
diff --git a/msvc/gmock.vcproj b/msvc/gmock.vcproj
index b9036da..39d9dc9 100644
--- a/msvc/gmock.vcproj
+++ b/msvc/gmock.vcproj
@@ -163,10 +163,6 @@
 				>

 			</File>

 			<File

-				RelativePath="..\src\gmock-printers.cc"

-				>

-			</File>

-			<File

 				RelativePath="..\src\gmock-spec-builders.cc"

 				>

 			</File>

@@ -229,10 +225,6 @@
 				>

 			</File>

 			<File

-				RelativePath="..\include\gmock\gmock-printers.h"

-				>

-			</File>

-			<File

 				RelativePath="..\include\gmock\gmock-spec-builders.h"

 				>

 			</File>

diff --git a/msvc/gmock_test.vcproj b/msvc/gmock_test.vcproj
index 60e1b4b..fd969d7 100644
--- a/msvc/gmock_test.vcproj
+++ b/msvc/gmock_test.vcproj
@@ -223,10 +223,6 @@
 				>

 			</File>

 			<File

-				RelativePath="..\test\gmock-printers_test.cc"

-				>

-			</File>

-			<File

 				RelativePath="..\test\gmock_test.cc"

 				>

 			</File>

diff --git a/src/gmock-internal-utils.cc b/src/gmock-internal-utils.cc
index cc51836..9debe18 100644
--- a/src/gmock-internal-utils.cc
+++ b/src/gmock-internal-utils.cc
@@ -57,14 +57,14 @@
   for (const char* p = id_name; *p != '\0'; prev_char = *(p++)) {
     // We don't care about the current locale as the input is
     // guaranteed to be a valid C++ identifier name.
-    const bool starts_new_word = isupper(*p) ||
-        (!isalpha(prev_char) && islower(*p)) ||
-        (!isdigit(prev_char) && isdigit(*p));
+    const bool starts_new_word = IsUpper(*p) ||
+        (!IsAlpha(prev_char) && IsLower(*p)) ||
+        (!IsDigit(prev_char) && IsDigit(*p));
 
-    if (isalnum(*p)) {
+    if (IsAlNum(*p)) {
       if (starts_new_word && result != "")
         result += ' ';
-      result += static_cast<char>(tolower(*p));
+      result += ToLower(*p);
     }
   }
   return result;
diff --git a/test/gmock-internal-utils_test.cc b/test/gmock-internal-utils_test.cc
index 4309f7c..720d6c7 100644
--- a/test/gmock-internal-utils_test.cc
+++ b/test/gmock-internal-utils_test.cc
@@ -375,7 +375,7 @@
   EXPECT_TRUE(LogIsVisible(WARNING));
 }
 
-#if GTEST_HAS_STREAM_REDIRECTION_
+#if GTEST_HAS_STREAM_REDIRECTION
 
 // Tests the Log() function.
 
@@ -458,7 +458,7 @@
   TestLogWithSeverity("invalid", WARNING, true);
 }
 
-#endif  // GTEST_HAS_STREAM_REDIRECTION_
+#endif  // GTEST_HAS_STREAM_REDIRECTION
 
 TEST(TypeTraitsTest, true_type) {
   EXPECT_TRUE(true_type::value);
@@ -495,7 +495,7 @@
   EXPECT_TRUE((type_equals<double*, remove_reference<double*>::type>::value));
 }
 
-#if GTEST_HAS_STREAM_REDIRECTION_
+#if GTEST_HAS_STREAM_REDIRECTION
 
 // Verifies that Log() behaves correctly for the given verbosity level
 // and log severity.
@@ -572,7 +572,7 @@
               HasSubstr("ON_CALL(mock, TestMethodArg(_)"));
 }
 
-#endif  // GTEST_HAS_STREAM_REDIRECTION_
+#endif  // GTEST_HAS_STREAM_REDIRECTION
 
 // Tests StlContainerView.
 
diff --git a/test/gmock-nice-strict_test.cc b/test/gmock-nice-strict_test.cc
index 0e52450..f340cec 100644
--- a/test/gmock-nice-strict_test.cc
+++ b/test/gmock-nice-strict_test.cc
@@ -57,10 +57,10 @@
 using testing::NiceMock;
 using testing::StrictMock;
 
-#if GTEST_HAS_STREAM_REDIRECTION_
+#if GTEST_HAS_STREAM_REDIRECTION
 using testing::internal::CaptureStdout;
 using testing::internal::GetCapturedStdout;
-#endif  // GTEST_HAS_STREAM_REDIRECTION_
+#endif
 
 // Defines some mock classes needed by the tests.
 
@@ -107,7 +107,7 @@
   GTEST_DISALLOW_COPY_AND_ASSIGN_(MockBar);
 };
 
-#if GTEST_HAS_STREAM_REDIRECTION_
+#if GTEST_HAS_STREAM_REDIRECTION
 
 // Tests that a nice mock generates no warning for uninteresting calls.
 TEST(NiceMockTest, NoWarningForUninterestingCall) {
@@ -151,7 +151,7 @@
   GMOCK_FLAG(verbose) = saved_flag;
 }
 
-#endif  // GTEST_HAS_STREAM_REDIRECTION_
+#endif  // GTEST_HAS_STREAM_REDIRECTION
 
 // Tests that a nice mock allows expected calls.
 TEST(NiceMockTest, AllowsExpectedCall) {
diff --git a/test/gmock-spec-builders_test.cc b/test/gmock-spec-builders_test.cc
index 1d0c491..50af1fe 100644
--- a/test/gmock-spec-builders_test.cc
+++ b/test/gmock-spec-builders_test.cc
@@ -95,11 +95,11 @@
 using testing::internal::String;
 using testing::internal::string;
 
-#if GTEST_HAS_STREAM_REDIRECTION_
+#if GTEST_HAS_STREAM_REDIRECTION
 using testing::HasSubstr;
 using testing::internal::CaptureStdout;
 using testing::internal::GetCapturedStdout;
-#endif  // GTEST_HAS_STREAM_REDIRECTION_
+#endif
 
 class Result {};
 
@@ -518,7 +518,7 @@
   }, "to be called once");
 }
 
-#if GTEST_HAS_STREAM_REDIRECTION_
+#if GTEST_HAS_STREAM_REDIRECTION
 
 // Tests that Google Mock doesn't print a warning when the number of
 // WillOnce() is adequate.
@@ -643,7 +643,7 @@
   b.DoB();
 }
 
-#endif  // GTEST_HAS_STREAM_REDIRECTION_
+#endif  // GTEST_HAS_STREAM_REDIRECTION
 
 // Tests the semantics of ON_CALL().
 
@@ -797,7 +797,7 @@
   EXPECT_EQ(3, b.DoB());
 }
 
-#if GTEST_HAS_STREAM_REDIRECTION_
+#if GTEST_HAS_STREAM_REDIRECTION
 
 // Tests that the default action is taken when the WillOnce(...) list is
 // exhausted and there is no WillRepeatedly().
@@ -832,7 +832,7 @@
                         " - returning default value."));
 }
 
-#endif  // GTEST_HAS_STREAM_REDIRECTION_
+#endif  // GTEST_HAS_STREAM_REDIRECTION
 
 // Tests that the WillRepeatedly() action is taken when the WillOnce(...)
 // list is exhausted.
@@ -1802,7 +1802,7 @@
   GTEST_DISALLOW_COPY_AND_ASSIGN_(VerboseFlagPreservingFixture);
 };
 
-#if GTEST_HAS_STREAM_REDIRECTION_
+#if GTEST_HAS_STREAM_REDIRECTION
 
 // Tests that an uninteresting mock function call generates a warning
 // containing the stack trace.
@@ -1979,7 +1979,7 @@
   TestUninterestingCall(true);
 }
 
-#endif  // GTEST_HAS_STREAM_REDIRECTION_
+#endif  // GTEST_HAS_STREAM_REDIRECTION
 
 // A helper class that generates a failure when printed.  We use it to
 // ensure that Google Mock doesn't print a value (even to an internal