blob: d1b82ee7fca266b93df3b2eab544320bc3a1d372 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/debug/shared/component_utils.h"
namespace debug_ipc {
namespace {
const char kUrlPackagePreamble[] = "fuchsia-pkg://fuchsia.com/";
const char kUrlComponentPreamble[] = "#meta/";
} // namespace
bool ExtractComponentFromPackageUrl(const std::string& url,
ComponentDescription* out) {
// We check if we're matching a pkg url
// Pattern:
//
// fuchsia-pkg://fuchsia.com/<PKG>#meta/<COMPONENT>.cmx
size_t package_preamble_start = url.find(kUrlPackagePreamble);
if (package_preamble_start == std::string::npos)
return false;
// Account for last \0.
size_t package_start =
package_preamble_start + sizeof(kUrlPackagePreamble) - 1;
size_t package_end = url.find(kUrlComponentPreamble, package_start);
if (package_end == std::string::npos)
return false;
// Account for last \0.
size_t component_start = package_end + sizeof(kUrlComponentPreamble) - 1;
size_t component_end = url.find(".cmx", component_start);
if (component_end == std::string::npos)
return false;
out->package_name = url.substr(package_start, package_end - package_start);
out->component_name =
url.substr(component_start, component_end - component_start);
return true;
}
} // namespace debug_ipc