|  | @@ -48,9 +48,9 @@
 | 
	
		
			
				|  |  |  #include <google/protobuf/io/printer.h>
 | 
	
		
			
				|  |  |  #include <google/protobuf/io/zero_copy_stream_impl.h>
 | 
	
		
			
				|  |  |  #include <google/protobuf/stubs/io_win32.h>
 | 
	
		
			
				|  |  | +#include <google/protobuf/stubs/port.h>
 | 
	
		
			
				|  |  |  #include <google/protobuf/stubs/strutil.h>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  // NOTE: src/google/protobuf/compiler/plugin.cc makes use of cerr for some
 | 
	
		
			
				|  |  |  // error cases, so it seems to be ok to use as a back door for errors.
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -364,7 +364,7 @@ string StripProto(const string& filename) {
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -void StringPieceTrimWhitespace(StringPiece* input) {
 | 
	
		
			
				|  |  | +void TrimWhitespace(StringPiece* input) {
 | 
	
		
			
				|  |  |    while (!input->empty() && ascii_isspace(*input->data())) {
 | 
	
		
			
				|  |  |      input->remove_prefix(1);
 | 
	
		
			
				|  |  |    }
 | 
	
	
		
			
				|  | @@ -659,7 +659,7 @@ string GetCapitalizedType(const FieldDescriptor* field) {
 | 
	
		
			
				|  |  |    // Some compilers report reaching end of function even though all cases of
 | 
	
		
			
				|  |  |    // the enum are handed in the switch.
 | 
	
		
			
				|  |  |    GOOGLE_LOG(FATAL) << "Can't get here.";
 | 
	
		
			
				|  |  | -  return NULL;
 | 
	
		
			
				|  |  | +  return string();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  ObjectiveCType GetObjectiveCType(FieldDescriptor::Type field_type) {
 | 
	
	
		
			
				|  | @@ -787,7 +787,7 @@ string GPBGenericValueFieldName(const FieldDescriptor* field) {
 | 
	
		
			
				|  |  |    // Some compilers report reaching end of function even though all cases of
 | 
	
		
			
				|  |  |    // the enum are handed in the switch.
 | 
	
		
			
				|  |  |    GOOGLE_LOG(FATAL) << "Can't get here.";
 | 
	
		
			
				|  |  | -  return NULL;
 | 
	
		
			
				|  |  | +  return string();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -859,7 +859,7 @@ string DefaultValue(const FieldDescriptor* field) {
 | 
	
		
			
				|  |  |    // Some compilers report reaching end of function even though all cases of
 | 
	
		
			
				|  |  |    // the enum are handed in the switch.
 | 
	
		
			
				|  |  |    GOOGLE_LOG(FATAL) << "Can't get here.";
 | 
	
		
			
				|  |  | -  return NULL;
 | 
	
		
			
				|  |  | +  return string();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  bool HasNonZeroDefaultValue(const FieldDescriptor* field) {
 | 
	
	
		
			
				|  | @@ -1047,18 +1047,17 @@ bool ExpectedPrefixesCollector::ConsumeLine(
 | 
	
		
			
				|  |  |      const StringPiece& line, string* out_error) {
 | 
	
		
			
				|  |  |    int offset = line.find('=');
 | 
	
		
			
				|  |  |    if (offset == StringPiece::npos) {
 | 
	
		
			
				|  |  | -    *out_error =
 | 
	
		
			
				|  |  | -        string("Expected prefixes file line without equal sign: '") +
 | 
	
		
			
				|  |  | -        line.ToString() + "'.";
 | 
	
		
			
				|  |  | +    *out_error = string("Expected prefixes file line without equal sign: '") +
 | 
	
		
			
				|  |  | +                 string(line) + "'.";
 | 
	
		
			
				|  |  |      return false;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  StringPiece package(line, 0, offset);
 | 
	
		
			
				|  |  | -  StringPiece prefix(line, offset + 1, line.length() - offset - 1);
 | 
	
		
			
				|  |  | -  StringPieceTrimWhitespace(&package);
 | 
	
		
			
				|  |  | -  StringPieceTrimWhitespace(&prefix);
 | 
	
		
			
				|  |  | +  StringPiece package = line.substr(0, offset);
 | 
	
		
			
				|  |  | +  StringPiece prefix = line.substr(offset + 1);
 | 
	
		
			
				|  |  | +  TrimWhitespace(&package);
 | 
	
		
			
				|  |  | +  TrimWhitespace(&prefix);
 | 
	
		
			
				|  |  |    // Don't really worry about error checking the package/prefix for
 | 
	
		
			
				|  |  |    // being valid.  Assume the file is validated when it is created/edited.
 | 
	
		
			
				|  |  | -  (*prefix_map_)[package.ToString()] = prefix.ToString();
 | 
	
		
			
				|  |  | +  (*prefix_map_)[string(package)] = string(prefix);
 | 
	
		
			
				|  |  |    return true;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1474,7 +1473,7 @@ class Parser {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  bool Parser::ParseChunk(StringPiece chunk) {
 | 
	
		
			
				|  |  |    if (!leftover_.empty()) {
 | 
	
		
			
				|  |  | -    chunk.AppendToString(&leftover_);
 | 
	
		
			
				|  |  | +    leftover_ += string(chunk);
 | 
	
		
			
				|  |  |      p_ = StringPiece(leftover_);
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  |      p_ = chunk;
 | 
	
	
		
			
				|  | @@ -1483,7 +1482,7 @@ bool Parser::ParseChunk(StringPiece chunk) {
 | 
	
		
			
				|  |  |    if (p_.empty()) {
 | 
	
		
			
				|  |  |      leftover_.clear();
 | 
	
		
			
				|  |  |    } else {
 | 
	
		
			
				|  |  | -    leftover_ = p_.ToString();
 | 
	
		
			
				|  |  | +    leftover_ = string(p_);
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    return result;
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -1506,7 +1505,7 @@ bool Parser::ParseLoop() {
 | 
	
		
			
				|  |  |    while (ReadLine(&p_, &line)) {
 | 
	
		
			
				|  |  |      ++line_;
 | 
	
		
			
				|  |  |      RemoveComment(&line);
 | 
	
		
			
				|  |  | -    StringPieceTrimWhitespace(&line);
 | 
	
		
			
				|  |  | +    TrimWhitespace(&line);
 | 
	
		
			
				|  |  |      if (line.size() == 0) {
 | 
	
		
			
				|  |  |        continue;  // Blank line.
 | 
	
		
			
				|  |  |      }
 | 
	
	
		
			
				|  | @@ -1693,12 +1692,12 @@ bool ImportWriter::ProtoFrameworkCollector::ConsumeLine(
 | 
	
		
			
				|  |  |    if (offset == StringPiece::npos) {
 | 
	
		
			
				|  |  |      *out_error =
 | 
	
		
			
				|  |  |          string("Framework/proto file mapping line without colon sign: '") +
 | 
	
		
			
				|  |  | -        line.ToString() + "'.";
 | 
	
		
			
				|  |  | +        string(line) + "'.";
 | 
	
		
			
				|  |  |      return false;
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | -  StringPiece framework_name(line, 0, offset);
 | 
	
		
			
				|  |  | -  StringPiece proto_file_list(line, offset + 1, line.length() - offset - 1);
 | 
	
		
			
				|  |  | -  StringPieceTrimWhitespace(&framework_name);
 | 
	
		
			
				|  |  | +  StringPiece framework_name = line.substr(0, offset);
 | 
	
		
			
				|  |  | +  StringPiece proto_file_list = line.substr(offset + 1);
 | 
	
		
			
				|  |  | +  TrimWhitespace(&framework_name);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    int start = 0;
 | 
	
		
			
				|  |  |    while (start < proto_file_list.length()) {
 | 
	
	
		
			
				|  | @@ -1707,25 +1706,27 @@ bool ImportWriter::ProtoFrameworkCollector::ConsumeLine(
 | 
	
		
			
				|  |  |        offset = proto_file_list.length();
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    StringPiece proto_file(proto_file_list, start, offset - start);
 | 
	
		
			
				|  |  | -    StringPieceTrimWhitespace(&proto_file);
 | 
	
		
			
				|  |  | +    StringPiece proto_file = proto_file_list.substr(start, offset - start);
 | 
	
		
			
				|  |  | +    TrimWhitespace(&proto_file);
 | 
	
		
			
				|  |  |      if (proto_file.size() != 0) {
 | 
	
		
			
				|  |  |        std::map<string, string>::iterator existing_entry =
 | 
	
		
			
				|  |  | -          map_->find(proto_file.ToString());
 | 
	
		
			
				|  |  | +          map_->find(string(proto_file));
 | 
	
		
			
				|  |  |        if (existing_entry != map_->end()) {
 | 
	
		
			
				|  |  | -        std::cerr << "warning: duplicate proto file reference, replacing framework entry for '"
 | 
	
		
			
				|  |  | -             << proto_file.ToString() << "' with '" << framework_name.ToString()
 | 
	
		
			
				|  |  | -             << "' (was '" << existing_entry->second << "')." << std::endl;
 | 
	
		
			
				|  |  | +        std::cerr << "warning: duplicate proto file reference, replacing "
 | 
	
		
			
				|  |  | +                     "framework entry for '"
 | 
	
		
			
				|  |  | +                  << string(proto_file) << "' with '" << string(framework_name)
 | 
	
		
			
				|  |  | +                  << "' (was '" << existing_entry->second << "')." << std::endl;
 | 
	
		
			
				|  |  |          std::cerr.flush();
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        if (proto_file.find(' ') != StringPiece::npos) {
 | 
	
		
			
				|  |  | -        std::cerr << "note: framework mapping file had a proto file with a space in, hopefully that isn't a missing comma: '"
 | 
	
		
			
				|  |  | -             << proto_file.ToString() << "'" << std::endl;
 | 
	
		
			
				|  |  | +        std::cerr << "note: framework mapping file had a proto file with a "
 | 
	
		
			
				|  |  | +                     "space in, hopefully that isn't a missing comma: '"
 | 
	
		
			
				|  |  | +                  << string(proto_file) << "'" << std::endl;
 | 
	
		
			
				|  |  |          std::cerr.flush();
 | 
	
		
			
				|  |  |        }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      (*map_)[proto_file.ToString()] = framework_name.ToString();
 | 
	
		
			
				|  |  | +      (*map_)[string(proto_file)] = string(framework_name);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      start = offset + 1;
 |