1 // license:BSD-3-Clause 2 // copyright-holders:Nathan Woods 3 /********************************************************************* 4 5 ioprocs.h 6 7 File IO abstraction layer 8 9 *********************************************************************/ 10 #ifndef MAME_FORMATS_IOPROCS_H 11 #define MAME_FORMATS_IOPROCS_H 12 13 #pragma once 14 15 #include <cstdint> 16 #include <cstdlib> 17 18 19 20 /*************************************************************************** 21 22 Type definitions 23 24 ***************************************************************************/ 25 26 struct io_procs 27 { 28 void (*closeproc)(void *file) = nullptr; 29 int (*seekproc)(void *file, int64_t offset, int whence) = nullptr; 30 size_t (*readproc)(void *file, void *buffer, size_t length) = nullptr; 31 size_t (*writeproc)(void *file, const void *buffer, size_t length) = nullptr; 32 uint64_t (*filesizeproc)(void *file) = nullptr; 33 }; 34 35 36 37 struct io_generic 38 { 39 const struct io_procs *procs = nullptr; 40 void *file = nullptr; 41 uint8_t filler = 0; 42 }; 43 44 45 /*************************************************************************** 46 47 Globals 48 49 ***************************************************************************/ 50 51 extern const io_procs stdio_ioprocs; 52 extern const io_procs stdio_ioprocs_noclose; 53 extern const io_procs corefile_ioprocs; 54 extern const io_procs corefile_ioprocs_noclose; 55 56 57 58 /*************************************************************************** 59 60 Prototypes 61 62 ***************************************************************************/ 63 64 void io_generic_close(struct io_generic *genio); 65 void io_generic_read(struct io_generic *genio, void *buffer, uint64_t offset, size_t length); 66 void io_generic_write(struct io_generic *genio, const void *buffer, uint64_t offset, size_t length); 67 void io_generic_write_filler(struct io_generic *genio, uint8_t filler, uint64_t offset, size_t length); 68 uint64_t io_generic_size(struct io_generic *genio); 69 70 #endif // MAME_FORMATS_IOPROCS_H 71