@@ -183,6 +183,188 @@ const char *fossil_io_what(fossil_status_t error_code);
183183
184184#ifdef __cplusplus
185185}
186+
187+ #include < exception>
188+
189+ /* *
190+ * This namespace provides a set of functions for handling input and output operations.
191+ */
192+ namespace fossil {
193+ /* *
194+ * This namespace provides a set of functions for handling input and output operations.
195+ */
196+ namespace io {
197+ /* *
198+ * Enum class for error codes.
199+ */
200+ enum class ErrorCode {
201+ // Success and General Errors
202+ OK = FOSSIL_ERROR_OK,
203+ NULL_POINTER = FOSSIL_ERROR_NULL_POINTER,
204+ INVALID_ARGUMENT = FOSSIL_ERROR_INVALID_ARGUMENT,
205+ TYPE_MISMATCH = FOSSIL_ERROR_TYPE_MISMATCH,
206+ INVALID_OPERATION = FOSSIL_ERROR_INVALID_OPERATION,
207+ UNKNOWN = FOSSIL_ERROR_UNKNOWN,
208+ CUSTOM = FOSSIL_ERROR_CUSTOM,
209+ INTERNAL = FOSSIL_ERROR_INTERNAL,
210+ UNKNOWN_ERROR_CODE = FOSSIL_ERROR_UNKNOWN_ERROR_CODE,
211+
212+ // Arithmetic Errors
213+ OVERFLOW_INT = FOSSIL_ERROR_OVERFLOW_INT,
214+ UNDERFLOW_INT = FOSSIL_ERROR_UNDERFLOW_INT,
215+ OVERFLOW_FLOAT = FOSSIL_ERROR_OVERFLOW_FLOAT,
216+ UNDERFLOW_FLOAT = FOSSIL_ERROR_UNDERFLOW_FLOAT,
217+ DIVISION_BY_ZERO = FOSSIL_ERROR_DIVISION_BY_ZERO,
218+ INVALID_CAST = FOSSIL_ERROR_INVALID_CAST,
219+
220+ // Memory Errors
221+ OUT_OF_MEMORY = FOSSIL_ERROR_OUT_OF_MEMORY,
222+ MEMORY_CORRUPTION = FOSSIL_ERROR_MEMORY_CORRUPTION,
223+ BUFFER_OVERFLOW = FOSSIL_ERROR_BUFFER_OVERFLOW,
224+ BUFFER_UNDERFLOW = FOSSIL_ERROR_BUFFER_UNDERFLOW,
225+ BUFFER_OVERFLOW_STR = FOSSIL_ERROR_BUFFER_OVERFLOW_STR,
226+ BUFFER_OVERFLOW_FMT = FOSSIL_ERROR_BUFFER_OVERFLOW_FMT,
227+ BUFFER_OVERFLOW_FILE = FOSSIL_ERROR_BUFFER_OVERFLOW_FILE,
228+ BUFFER_OVERFLOW_NET = FOSSIL_ERROR_BUFFER_OVERFLOW_NET,
229+ BUFFER_OVERFLOW_CMD = FOSSIL_ERROR_BUFFER_OVERFLOW_CMD,
230+ BUFFER_OVERFLOW_ENV = FOSSIL_ERROR_BUFFER_OVERFLOW_ENV,
231+ MEMORY_LEAK = FOSSIL_ERROR_MEMORY_LEAK,
232+ MEMORY_ALLOCATION_FAILURE = FOSSIL_ERROR_MEMORY_ALLOCATION_FAILURE,
233+ MEMORY_ALIGNMENT_ISSUE = FOSSIL_ERROR_MEMORY_ALIGNMENT_ISSUE,
234+
235+ // File and I/O Errors
236+ FILE_CORRUPTION = FOSSIL_ERROR_FILE_CORRUPTION,
237+ FILE_NOT_FOUND = FOSSIL_ERROR_FILE_NOT_FOUND,
238+ DIRECTORY_NOT_FOUND = FOSSIL_ERROR_DIRECTORY_NOT_FOUND,
239+ TOO_MANY_OPEN_FILES = FOSSIL_ERROR_TOO_MANY_OPEN_FILES,
240+ IO = FOSSIL_ERROR_IO,
241+ UNSUPPORTED_OPERATION = FOSSIL_ERROR_UNSUPPORTED_OPERATION,
242+ PIPE = FOSSIL_ERROR_PIPE,
243+ SYSTEM_CALL_FAILED = FOSSIL_ERROR_SYSTEM_CALL_FAILED,
244+ PERMISSION_DENIED = FOSSIL_ERROR_PERMISSION_DENIED,
245+ READ_ONLY_FILESYSTEM = FOSSIL_ERROR_READ_ONLY_FILESYSTEM,
246+ FILE_LOCK_FAILED = FOSSIL_ERROR_FILE_LOCK_FAILED,
247+ FILE_WRITE_FAILED = FOSSIL_ERROR_FILE_WRITE_FAILED,
248+ FILE_READ_FAILED = FOSSIL_ERROR_FILE_READ_FAILED,
249+ FILE_SEEK_FAILED = FOSSIL_ERROR_FILE_SEEK_FAILED,
250+ FILE_CLOSE_FAILED = FOSSIL_ERROR_FILE_CLOSE_FAILED,
251+ FILE_TRUNCATE_FAILED = FOSSIL_ERROR_FILE_TRUNCATE_FAILED,
252+ FILE_TOO_LARGE = FOSSIL_ERROR_FILE_TOO_LARGE,
253+ DEVICE_NOT_READY = FOSSIL_ERROR_DEVICE_NOT_READY,
254+ DEVICE_REMOVED = FOSSIL_ERROR_DEVICE_REMOVED,
255+
256+ // Resource and Process Errors
257+ RESOURCE_UNAVAILABLE = FOSSIL_ERROR_RESOURCE_UNAVAILABLE,
258+ BUSY = FOSSIL_ERROR_BUSY,
259+ DEADLOCK = FOSSIL_ERROR_DEADLOCK,
260+ INTERRUPTED = FOSSIL_ERROR_INTERRUPTED,
261+ LIMIT_REACHED = FOSSIL_ERROR_LIMIT_REACHED,
262+ PROCESS = FOSSIL_ERROR_PROCESS,
263+ PROCESS_CREATION_FAILED = FOSSIL_ERROR_PROCESS_CREATION_FAILED,
264+ PROCESS_EXITED_WITH_ERROR = FOSSIL_ERROR_PROCESS_EXITED_WITH_ERROR,
265+ PROCESS_TIMEOUT = FOSSIL_ERROR_PROCESS_TIMEOUT,
266+ RESOURCE_DEPLETION = FOSSIL_ERROR_RESOURCE_DEPLETION,
267+ THREAD_CREATION_FAILED = FOSSIL_ERROR_THREAD_CREATION_FAILED,
268+ THREAD_TERMINATION_FAILED = FOSSIL_ERROR_THREAD_TERMINATION_FAILED,
269+
270+ // Hardware Errors
271+ HARDWARE_FAILURE = FOSSIL_ERROR_HARDWARE_FAILURE,
272+ HARD_DISK_FAILURE = FOSSIL_ERROR_HARD_DISK_FAILURE,
273+ GPU_FAILURE = FOSSIL_ERROR_GPU_FAILURE,
274+ CPU_OVERHEAT = FOSSIL_ERROR_CPU_OVERHEAT,
275+ MEMORY_FAILURE = FOSSIL_ERROR_MEMORY_FAILURE,
276+ HARDWARE_OVERLOAD = FOSSIL_ERROR_HARDWARE_OVERLOAD,
277+ DEVICE_TIMEOUT = FOSSIL_ERROR_DEVICE_TIMEOUT,
278+ POWER_SUPPLY_FAILURE = FOSSIL_ERROR_POWER_SUPPLY_FAILURE,
279+
280+ // Network Errors
281+ NETWORK_FAILURE = FOSSIL_ERROR_NETWORK_FAILURE,
282+ TIMEOUT = FOSSIL_ERROR_TIMEOUT,
283+ UNKNOWN_HOST = FOSSIL_ERROR_UNKNOWN_HOST,
284+ CONNECTION_REFUSED = FOSSIL_ERROR_CONNECTION_REFUSED,
285+ NETWORK_UNREACHABLE = FOSSIL_ERROR_NETWORK_UNREACHABLE,
286+ PROTOCOL = FOSSIL_ERROR_PROTOCOL,
287+ CONNECTION_RESET = FOSSIL_ERROR_CONNECTION_RESET,
288+ DNS_RESOLUTION_FAILED = FOSSIL_ERROR_DNS_RESOLUTION_FAILED,
289+ NETWORK_CONGESTION = FOSSIL_ERROR_NETWORK_CONGESTION,
290+ BANDWIDTH_EXCEEDED = FOSSIL_ERROR_BANDWIDTH_EXCEEDED,
291+ FIREWALL_BLOCKED = FOSSIL_ERROR_FIREWALL_BLOCKED,
292+ SSL_HANDSHAKE_FAILED = FOSSIL_ERROR_SSL_HANDSHAKE_FAILED,
293+ CERTIFICATE_EXPIRED = FOSSIL_ERROR_CERTIFICATE_EXPIRED,
294+ CERTIFICATE_REVOKED = FOSSIL_ERROR_CERTIFICATE_REVOKED,
295+
296+ // Security Errors
297+ SQL_INJECTION = FOSSIL_ERROR_SQL_INJECTION,
298+ XSS_ATTACK = FOSSIL_ERROR_XSS_ATTACK,
299+ CSRF_ATTACK = FOSSIL_ERROR_CSRF_ATTACK,
300+ FORMAT_STRING_ATTACK = FOSSIL_ERROR_FORMAT_STRING_ATTACK,
301+ CRYPTOGRAPHIC_WEAKNESS = FOSSIL_ERROR_CRYPTOGRAPHIC_WEAKNESS,
302+ INSECURE_RANDOMNESS = FOSSIL_ERROR_INSECURE_RANDOMNESS,
303+ INSECURE_CONFIGURATION = FOSSIL_ERROR_INSECURE_CONFIGURATION,
304+ INSECURE_DESERIALIZATION = FOSSIL_ERROR_INSECURE_DESERIALIZATION,
305+ INSECURE_FILE_HANDLING = FOSSIL_ERROR_INSECURE_FILE_HANDLING,
306+ INSECURE_TEMPORARY_FILES = FOSSIL_ERROR_INSECURE_TEMPORARY_FILES,
307+ INSECURE_COMMUNICATION = FOSSIL_ERROR_INSECURE_COMMUNICATION,
308+ INSECURE_AUTHENTICATION = FOSSIL_ERROR_INSECURE_AUTHENTICATION,
309+ INSECURE_ACCESS_CONTROL = FOSSIL_ERROR_INSECURE_ACCESS_CONTROL,
310+ SESSION_HIJACKING = FOSSIL_ERROR_SESSION_HIJACKING,
311+ DATA_TAMPERING = FOSSIL_ERROR_DATA_TAMPERING,
312+ MAN_IN_THE_MIDDLE_ATTACK = FOSSIL_ERROR_MAN_IN_THE_MIDDLE_ATTACK,
313+ PRIVILEGE_ESCALATION = FOSSIL_ERROR_PRIVILEGE_ESCALATION,
314+
315+ // User-Related and External Errors
316+ USER_ABORT = FOSSIL_ERROR_USER_ABORT,
317+ SIGNAL = FOSSIL_ERROR_SIGNAL,
318+ USER_INPUT_TOO_LARGE = FOSSIL_ERROR_USER_INPUT_TOO_LARGE,
319+ USER_INPUT_INVALID_FORMAT = FOSSIL_ERROR_USER_INPUT_INVALID_FORMAT,
320+ USER_PERMISSION_REJECTED = FOSSIL_ERROR_USER_PERMISSION_REJECTED,
321+
322+ // Database Errors
323+ DATABASE_CONNECTION_FAILED = FOSSIL_ERROR_DATABASE_CONNECTION_FAILED,
324+ DATABASE_QUERY_FAILED = FOSSIL_ERROR_DATABASE_QUERY_FAILED,
325+ DATABASE_TIMEOUT = FOSSIL_ERROR_DATABASE_TIMEOUT,
326+ DATABASE_CORRUPTION = FOSSIL_ERROR_DATABASE_CORRUPTION,
327+ DATABASE_DEADLOCK = FOSSIL_ERROR_DATABASE_DEADLOCK,
328+ DATABASE_LOCK_FAILED = FOSSIL_ERROR_DATABASE_LOCK_FAILED,
329+
330+ // Serialization and Deserialization Errors
331+ SERIALIZATION_FAILED = FOSSIL_ERROR_SERIALIZATION_FAILED,
332+ DESERIALIZATION_FAILED = FOSSIL_ERROR_DESERIALIZATION_FAILED,
333+ INVALID_SERIALIZATION_FORMAT = FOSSIL_ERROR_INVALID_SERIALIZATION_FORMAT,
334+ DATA_CORRUPTION = FOSSIL_ERROR_DATA_CORRUPTION,
335+
336+ // Miscellaneous Errors
337+ INDEX_OUT_OF_BOUNDS = FOSSIL_ERROR_INDEX_OUT_OF_BOUNDS,
338+ FORMAT = FOSSIL_ERROR_FORMAT,
339+ INCOMPATIBLE_VERSION = FOSSIL_ERROR_INCOMPATIBLE_VERSION,
340+ JSON_PARSING_FAILED = FOSSIL_ERROR_JSON_PARSING_FAILED,
341+ XML_PARSING_FAILED = FOSSIL_ERROR_XML_PARSING_FAILED,
342+ YAML_PARSING_FAILED = FOSSIL_ERROR_YAML_PARSING_FAILED,
343+ INVALID_CHECKSUM = FOSSIL_ERROR_INVALID_CHECKSUM,
344+ TIMER_EXPIRED = FOSSIL_ERROR_TIMER_EXPIRED
345+ };
346+
347+ /* *
348+ * Exception class for handling errors.
349+ */
350+ class Error : public std ::exception {
351+ public:
352+ explicit Error (ErrorCode code) : code_(code) {}
353+
354+ const char * what () const noexcept override {
355+ return fossil_io_what (static_cast <fossil_status_t >(code_));
356+ }
357+
358+ ErrorCode code () const noexcept {
359+ return code_;
360+ }
361+
362+ private:
363+ ErrorCode code_;
364+ };
365+ }
366+ }
367+
186368#endif
187369
188370#endif /* FOSSIL_IO_FRAMEWORK_H */
0 commit comments