blob: b0458ea8a436ff4cf4d5c0bb68d2a199a3f8da1f [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