diff options
author | Sebastien Hertz <shertz@google.com> | 2015-02-06 09:16:32 +0100 |
---|---|---|
committer | Sebastien Hertz <shertz@google.com> | 2015-02-17 22:42:43 +0100 |
commit | b3b173bbbd1d1cbad555de13c3fa6765f5078bce (patch) | |
tree | 89d380f42aed1a4c60db40f8be7d22501eaafa32 /cmdline | |
parent | e5f5953e744060fde3b4489cea4d934d529e3e32 (diff) | |
download | art-b3b173bbbd1d1cbad555de13c3fa6765f5078bce.zip art-b3b173bbbd1d1cbad555de13c3fa6765f5078bce.tar.gz art-b3b173bbbd1d1cbad555de13c3fa6765f5078bce.tar.bz2 |
Follow up 129144
Passes JDWP options to debugger on runtime init so we no longer need
to keep them on the heap.
Updates ParseJdwpOption to return Result for consistency.
Bug: 19275792
Change-Id: I68b7e58908164d3e4cf9e3fbcc3dfab6ce0579a5
Diffstat (limited to 'cmdline')
-rw-r--r-- | cmdline/cmdline_types.h | 34 |
1 files changed, 14 insertions, 20 deletions
diff --git a/cmdline/cmdline_types.h b/cmdline/cmdline_types.h index 45f9b56..180baec 100644 --- a/cmdline/cmdline_types.h +++ b/cmdline/cmdline_types.h @@ -88,7 +88,6 @@ struct CmdlineType<JDWP::JdwpOptions> : CmdlineTypeParser<JDWP::JdwpOptions> { Split(options, ',', &pairs); JDWP::JdwpOptions jdwp_options; - std::stringstream error_stream; for (const std::string& jdwp_option : pairs) { std::string::size_type equals_pos = jdwp_option.find('='); @@ -97,11 +96,12 @@ struct CmdlineType<JDWP::JdwpOptions> : CmdlineTypeParser<JDWP::JdwpOptions> { "Can't parse JDWP option '" + jdwp_option + "' in '" + options + "'"); } - if (!ParseJdwpOption(jdwp_option.substr(0, equals_pos), - jdwp_option.substr(equals_pos + 1), - error_stream, - &jdwp_options)) { - return Result::Failure(error_stream.str()); + Result parse_attempt = ParseJdwpOption(jdwp_option.substr(0, equals_pos), + jdwp_option.substr(equals_pos + 1), + &jdwp_options); + if (parse_attempt.IsError()) { + // We fail to parse this JDWP option. + return parse_attempt; } } @@ -115,17 +115,15 @@ struct CmdlineType<JDWP::JdwpOptions> : CmdlineTypeParser<JDWP::JdwpOptions> { return Result::Success(std::move(jdwp_options)); } - bool ParseJdwpOption(const std::string& name, const std::string& value, - std::ostream& error_stream, - JDWP::JdwpOptions* jdwp_options) { + Result ParseJdwpOption(const std::string& name, const std::string& value, + JDWP::JdwpOptions* jdwp_options) { if (name == "transport") { if (value == "dt_socket") { jdwp_options->transport = JDWP::kJdwpTransportSocket; } else if (value == "dt_android_adb") { jdwp_options->transport = JDWP::kJdwpTransportAndroidAdb; } else { - error_stream << "JDWP transport not supported: " << value; - return false; + return Result::Failure("JDWP transport not supported: " + value); } } else if (name == "server") { if (value == "n") { @@ -133,8 +131,7 @@ struct CmdlineType<JDWP::JdwpOptions> : CmdlineTypeParser<JDWP::JdwpOptions> { } else if (value == "y") { jdwp_options->server = true; } else { - error_stream << "JDWP option 'server' must be 'y' or 'n'"; - return false; + return Result::Failure("JDWP option 'server' must be 'y' or 'n'"); } } else if (name == "suspend") { if (value == "n") { @@ -142,8 +139,7 @@ struct CmdlineType<JDWP::JdwpOptions> : CmdlineTypeParser<JDWP::JdwpOptions> { } else if (value == "y") { jdwp_options->suspend = true; } else { - error_stream << "JDWP option 'suspend' must be 'y' or 'n'"; - return false; + return Result::Failure("JDWP option 'suspend' must be 'y' or 'n'"); } } else if (name == "address") { /* this is either <port> or <host>:<port> */ @@ -157,14 +153,12 @@ struct CmdlineType<JDWP::JdwpOptions> : CmdlineTypeParser<JDWP::JdwpOptions> { port_string = value; } if (port_string.empty()) { - error_stream << "JDWP address missing port: " << value; - return false; + return Result::Failure("JDWP address missing port: " + value); } char* end; uint64_t port = strtoul(port_string.c_str(), &end, 10); if (*end != '\0' || port > 0xffff) { - error_stream << "JDWP address has junk in port field: " << value; - return false; + return Result::Failure("JDWP address has junk in port field: " + value); } jdwp_options->port = port; } else if (name == "launch" || name == "onthrow" || name == "oncaught" || name == "timeout") { @@ -174,7 +168,7 @@ struct CmdlineType<JDWP::JdwpOptions> : CmdlineTypeParser<JDWP::JdwpOptions> { LOG(INFO) << "Ignoring unrecognized JDWP option '" << name << "'='" << value << "'"; } - return true; + return Result::SuccessNoValue(); } static const char* Name() { return "JdwpOptions"; } |