Bläddra i källkod

Merge pull request #802 from bsilver8192/master

Small fixes
Feng Xiao 10 år sedan
förälder
incheckning
e61ff47ac3

+ 6 - 1
src/google/protobuf/compiler/cpp/cpp_file.cc

@@ -598,8 +598,13 @@ void FileGenerator::GenerateBuildDescriptors(io::Printer* printer) {
     // bytes in length". Declare a static array of characters rather than use a
     // string literal.
     if (breakdown_large_file && file_data.size() > 65535) {
+      // This has to be explicitly marked as a signed char because the generated
+      // code puts negative values in the array, and sometimes plain char is
+      // unsigned. That implicit narrowing conversion is not allowed in C++11.
+      // <http://stackoverflow.com/questions/4434140/narrowing-conversions-in-c0x-is-it-just-me-or-does-this-sound-like-a-breakin>
+      // has details on why.
       printer->Print(
-          "static const char descriptor[] = {\n");
+          "static const signed char descriptor[] = {\n");
       printer->Indent();
 
       // Only write 25 bytes per line.

+ 7 - 0
src/google/protobuf/testing/googletest.cc

@@ -94,6 +94,13 @@ string TestSourceDir() {
 namespace {
 
 string GetTemporaryDirectoryName() {
+  // Tests run under Bazel "should not" use /tmp. Bazel sets this environment
+  // variable for tests to use instead.
+  char *from_environment = getenv("TEST_TMPDIR");
+  if (from_environment != NULL && from_environment[0] != '\0') {
+    return string(from_environment) + "/protobuf_tmpdir";
+  }
+
   // tmpnam() is generally not considered safe but we're only using it for
   // testing.  We cannot use tmpfile() or mkstemp() since we're creating a
   // directory.