/** * @file aliases.hpp * @brief The alias table: alternate names a module answers to * * @copyright Copyright (c) 2026 SILO GROUP LLC * @author Chris Punches * * Part of the Dark Horse Linux Package Manager (DPM) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #pragma once #include #include #include struct dpm_ctx; /** @brief Enumeration cursor over alias table entries */ struct dpm_alias_cursor { /** One entry per alias the cursor reports. */ std::vector infos; /** Backing strings, so the reported pointers stay valid. */ std::vector> storage; /** Position of the next entry. */ size_t idx = 0; }; namespace dpm_core { /** * @brief Reads the alias table out of a context's metadata directory * * The table is modules.aliases, one `alias = module` per line. A * missing or unreadable file leaves the context holding no aliases, * which costs those alternate names and costs nothing else. * * @param ctx The libdpm-core.so context */ void alias_load_table(dpm_ctx* ctx); /** * @brief Writes the context's alias table back to disk * * @param ctx The libdpm-core.so context * @param reason Receives the failure reason when the write fails * @return true on success */ bool alias_write_table(dpm_ctx* ctx, std::string& reason); /** * @brief Resolves an alias to the module it names * * @param ctx The libdpm-core.so context * @param alias The alias to resolve * @return The module name, or an empty string when the alias is unknown */ std::string alias_resolve(dpm_ctx* ctx, const std::string& alias); /** * @brief Splits a module's comma-separated alias list * * The form dpm_module_aliases() returns. Empty entries are dropped * and each surviving name is trimmed, so trailing separators and * spacing cost nothing. * * @param declared The value the module reported; NULL declares none * @return One entry per name the module answers to */ std::vector alias_split_declared(const char* declared); } // namespace dpm_core