aboutsummaryrefslogtreecommitdiff
path: root/src/google/protobuf/descriptor.cc
diff options
context:
space:
mode:
authorkenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2009-12-19 04:50:00 +0000
committerkenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2009-12-19 04:50:00 +0000
commit684d45b2feac114a0152cf4458846fbeca61b5d9 (patch)
tree781a604308f2866d6b321d6cfbe238c2732cc469 /src/google/protobuf/descriptor.cc
parentbdbb863099c7ef3e1ecdeefa732798e095b85fb8 (diff)
downloadprotobuf-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.cc25
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") {