diff options
author | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2009-12-19 04:50:00 +0000 |
---|---|---|
committer | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2009-12-19 04:50:00 +0000 |
commit | 684d45b2feac114a0152cf4458846fbeca61b5d9 (patch) | |
tree | 781a604308f2866d6b321d6cfbe238c2732cc469 /src/google/protobuf/descriptor.cc | |
parent | bdbb863099c7ef3e1ecdeefa732798e095b85fb8 (diff) | |
download | protobuf-684d45b2feac114a0152cf4458846fbeca61b5d9.tar.gz protobuf-684d45b2feac114a0152cf4458846fbeca61b5d9.tar.bz2 protobuf-684d45b2feac114a0152cf4458846fbeca61b5d9.zip |
Fix build on MinGW/Win32 (including implementing Subprocess using CreateProcess()).
Diffstat (limited to 'src/google/protobuf/descriptor.cc')
-rw-r--r-- | src/google/protobuf/descriptor.cc | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/src/google/protobuf/descriptor.cc b/src/google/protobuf/descriptor.cc index fe2caad3..81c4ac0f 100644 --- a/src/google/protobuf/descriptor.cc +++ b/src/google/protobuf/descriptor.cc @@ -37,6 +37,7 @@ #include <set> #include <vector> #include <algorithm> +#include <limits> #include <google/protobuf/descriptor.h> #include <google/protobuf/descriptor_database.h> @@ -3000,12 +3001,28 @@ void DescriptorBuilder::BuildFieldOrExtension(const FieldDescriptorProto& proto, strtou64(proto.default_value().c_str(), &end_pos, 0); break; case FieldDescriptor::CPPTYPE_FLOAT: - result->default_value_float_ = - NoLocaleStrtod(proto.default_value().c_str(), &end_pos); + if (proto.default_value() == "inf") { + result->default_value_float_ = numeric_limits<float>::infinity(); + } else if (proto.default_value() == "-inf") { + result->default_value_float_ = -numeric_limits<float>::infinity(); + } else if (proto.default_value() == "nan") { + result->default_value_float_ = numeric_limits<float>::quiet_NaN(); + } else { + result->default_value_float_ = + NoLocaleStrtod(proto.default_value().c_str(), &end_pos); + } break; case FieldDescriptor::CPPTYPE_DOUBLE: - result->default_value_double_ = - NoLocaleStrtod(proto.default_value().c_str(), &end_pos); + if (proto.default_value() == "inf") { + result->default_value_double_ = numeric_limits<double>::infinity(); + } else if (proto.default_value() == "-inf") { + result->default_value_double_ = -numeric_limits<double>::infinity(); + } else if (proto.default_value() == "nan") { + result->default_value_double_ = numeric_limits<double>::quiet_NaN(); + } else { + result->default_value_double_ = + NoLocaleStrtod(proto.default_value().c_str(), &end_pos); + } break; case FieldDescriptor::CPPTYPE_BOOL: if (proto.default_value() == "true") { |