Move some common code into a helper.
diff --git a/src/google/protobuf/compiler/objectivec/objectivec_generator.cc b/src/google/protobuf/compiler/objectivec/objectivec_generator.cc
index 2168f97..a03b860 100644
--- a/src/google/protobuf/compiler/objectivec/objectivec_generator.cc
+++ b/src/google/protobuf/compiler/objectivec/objectivec_generator.cc
@@ -44,6 +44,28 @@
 namespace compiler {
 namespace objectivec {
 
+namespace {
+
+// Convert a string with "yes"/"no" (case insensitive) to a boolean, returning
+// true/false for if the input string was a valid value. If the input string is
+// invalid, `result` is unchanged.
+bool StringToBool(const std::string& value, bool* result) {
+  std::string upper_value(value);
+  UpperString(&upper_value);
+  if (upper_value == "NO") {
+    *result = false;
+    return true;
+  }
+  if (upper_value == "YES") {
+    *result = true;
+    return true;
+  }
+
+  return false;
+}
+
+}  // namespace
+
 ObjectiveCGenerator::ObjectiveCGenerator() {}
 
 ObjectiveCGenerator::~ObjectiveCGenerator() {}
@@ -109,13 +131,8 @@
       //   "yes": They must be registered and an error will be raised if a files
       //     tried to use a prefix that isn't registered.
       // Default is "no".
-      std::string upper_value(options[i].second);
-      UpperString(&upper_value);
-      if (upper_value == "NO") {
-        generation_options.prefixes_must_be_registered = false;
-      } else if (upper_value == "YES") {
-        generation_options.prefixes_must_be_registered = true;
-      } else {
+      if (!StringToBool(options[i].second,
+                        &generation_options.prefixes_must_be_registered)) {
         *error = "error: Unknown value for prefixes_must_be_registered: " + options[i].second;
         return false;
       }
@@ -126,13 +143,8 @@
       //   "yes": Files must have the objc prefix option, and an error will be
       //     raised if a files doesn't have one.
       // Default is "no".
-      std::string upper_value(options[i].second);
-      UpperString(&upper_value);
-      if (upper_value == "NO") {
-        generation_options.require_prefixes = false;
-      } else if (upper_value == "YES") {
-        generation_options.require_prefixes = true;
-      } else {
+      if (!StringToBool(options[i].second,
+                        &generation_options.require_prefixes)) {
         *error = "error: Unknown value for require_prefixes: " + options[i].second;
         return false;
       }
@@ -181,12 +193,9 @@
       // is just what to do if that isn't set. The available options are:
       //   "no": Not prefixed (the existing mode).
       //   "yes": Make a prefix out of the proto package.
-      std::string upper_value(options[i].second);
-      UpperString(&upper_value);
-      if (upper_value == "NO") {
-        SetUseProtoPackageAsDefaultPrefix(false);
-      } else if (upper_value == "YES") {
-        SetUseProtoPackageAsDefaultPrefix(true);
+      bool value = false;
+      if (StringToBool(options[i].second, &value)) {
+        SetUseProtoPackageAsDefaultPrefix(value);
       } else {
         *error = "error: Unknown use_package_as_prefix: " + options[i].second;
         return false;