@@ -183,6 +183,188 @@ const char *fossil_io_what(fossil_status_t error_code);
183
183
184
184
#ifdef __cplusplus
185
185
}
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
+
186
368
#endif
187
369
188
370
#endif /* FOSSIL_IO_FRAMEWORK_H */
0 commit comments