/* * statuscodes.h * MontaukOS status codes * Copyright (c) 2026 Daniel Hammer */ #pragma once // Userspace status codes. // Analogous to kernel/src/Common/StatusCodes.hpp, but positive numbers are used. #ifdef __cplusplus namespace montauk { #endif typedef enum { Success = 0, GenericFailure = 1, PermissionDenied = 2, CapabilityDenied = 3, SystemIntegrityError = 4, BadPointer = 5, InvalidArgument = 6, UnsupportedOp = 7, NoDevice = 8, IoFailure = 9, BadInvocation = 10, NoSuchPath = 11, Busy = 12, BufferTooSmall = 13, OutOfMemory = 14, TimedOut = 15, WouldBlock = 16 } StatusCode; inline const char* GetStatusText(StatusCode statusCode) { const char* statusText[] = { "Success", // 0 "Generic failure", // 1 "Permission denied", // 2 "Capability denied", // 3 "System integrity error", // 4 "Bad pointer", // 5 "Invalid argument", // 6 "Unsupported operation", // 7 "No device", // 8 "I/O failure", // 9 "Bad invocation", // 10 "No such path", // 11 "Busy", // 12 "Buffer too small", // 13 "Out of memory", // 14 "Timed out", // 15 "Operation would block", // 16 }; if (statusCode > 0 && statusCode <= 16) { return statusText[statusCode]; } else { return "Unknown error"; } } // Shared with C (libc.c), so no nullptr. inline const char* GetStatusExplanationText(StatusCode statusCode) { const char* explanationText[] = { 0, // 0 0, // 1 0, // 2 0, // 3 "The path is protected by the system and cannot be modified.", // 4 0, // 5 0, // 6 0, // 7 0, // 8 0, // 9 0, // 10 0, // 11 0, // 12 "The buffer supplied by the caller is too small.", // 13 0, // 14 0, // 15 0, // 16 }; if (statusCode > 0 && statusCode <= 16) { if (explanationText[statusCode] != 0) { return explanationText[statusCode]; } } return GetStatusText(statusCode); } #ifdef __cplusplus } #endif