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