83 lines
3.7 KiB
C++
83 lines
3.7 KiB
C++
/**
|
|
* @file error.hpp
|
|
* @brief Error handling system for the DPM utility
|
|
*
|
|
* Defines the error categories, error context structure, and utility
|
|
* functions for error handling throughout the DPM system. Provides a
|
|
* consistent approach to error reporting and management.
|
|
*
|
|
* @copyright Copyright (c) 2025 SILO GROUP LLC
|
|
* @author Chris Punches <chris.punches@silogroup.org>
|
|
*
|
|
* 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 <https://www.gnu.org/licenses/>.
|
|
*
|
|
* For bug reports or contributions, please contact the dhlp-contributors
|
|
* mailing list at: https://lists.darkhorselinux.org/mailman/listinfo/dhlp-contributors
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <iostream>
|
|
|
|
/**
|
|
* @enum DPMErrorCategory
|
|
* @brief Defines error categories for the DPM system
|
|
*
|
|
* Enumeration of all possible error conditions that can occur during
|
|
* DPM operations, particularly related to module loading and execution.
|
|
*/
|
|
enum class DPMErrorCategory {
|
|
SUCCESS, /**< Operation completed successfully */
|
|
PATH_NOT_FOUND, /**< The specified path does not exist */
|
|
PATH_NOT_DIRECTORY, /**< The specified path exists but is not a directory */
|
|
PATH_TOO_LONG, /**< The specified path exceeds the system's path length limit */
|
|
PERMISSION_DENIED, /**< Insufficient permissions to access the path */
|
|
MODULE_NOT_FOUND, /**< The specified module was not found in the module path */
|
|
MODULE_NOT_LOADED, /**< Failed to load the module (e.g., before executing it) */
|
|
MODULE_LOAD_FAILED, /**< Dynamic loading of the module failed */
|
|
INVALID_MODULE, /**< The module does not conform to the required interface */
|
|
SYMBOL_NOT_FOUND, /**< A required symbol was not found in the loaded module */
|
|
SYMBOL_EXECUTION_FAILED, /**< Execution of a module function failed */
|
|
UNDEFINED_ERROR /**< An undefined or unexpected error occurred */
|
|
};
|
|
|
|
/**
|
|
* @struct FlexDPMError
|
|
* @brief Error context structure for DPM operations
|
|
*
|
|
* Provides context information for errors that occur during DPM operations.
|
|
* Only the error field is required; other fields can be populated as needed
|
|
* depending on the specific error condition.
|
|
*/
|
|
typedef struct {
|
|
DPMErrorCategory error; /**< The error category (required) */
|
|
const char * module_name; /**< Name of the module involved in the error (optional) */
|
|
const char * module_path; /**< Path to the modules directory (optional) */
|
|
const char * message; /**< Additional error message or context (optional) */
|
|
// Add other potential fields as needed as all fields beyond error are optional
|
|
} FlexDPMError;
|
|
|
|
/**
|
|
* @brief Creates a new FlexDPMError instance with the specified error category
|
|
*
|
|
* Utility function to simplify the creation of FlexDPMError structures.
|
|
* Initializes a new error context with the given error category and
|
|
* sets all other fields to NULL.
|
|
*
|
|
* @param error_category The error category to assign to the new error context
|
|
* @return A FlexDPMError structure with the specified error category
|
|
*/
|
|
FlexDPMError make_error(DPMErrorCategory error_category); |