Skip to content

Commit ddbbdd7

Browse files
Merge branch 'main' into keyboard_handler
2 parents e63c6a2 + aeb80e5 commit ddbbdd7

File tree

4 files changed

+972
-1
lines changed

4 files changed

+972
-1
lines changed

code/logic/fossil/io/error.h

Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)