diff options
Diffstat (limited to 'e2fsprogs/ext2fs/ext2_io.h')
-rw-r--r-- | e2fsprogs/ext2fs/ext2_io.h | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/e2fsprogs/ext2fs/ext2_io.h b/e2fsprogs/ext2fs/ext2_io.h new file mode 100644 index 000000000..e17886c85 --- /dev/null +++ b/e2fsprogs/ext2fs/ext2_io.h | |||
@@ -0,0 +1,108 @@ | |||
1 | /* | ||
2 | * io.h --- the I/O manager abstraction | ||
3 | * | ||
4 | * Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o. | ||
5 | * | ||
6 | * %Begin-Header% | ||
7 | * This file may be redistributed under the terms of the GNU Public | ||
8 | * License. | ||
9 | * %End-Header% | ||
10 | */ | ||
11 | |||
12 | #ifndef _EXT2FS_EXT2_IO_H | ||
13 | #define _EXT2FS_EXT2_IO_H | ||
14 | |||
15 | /* | ||
16 | * ext2_loff_t is defined here since unix_io.c needs it. | ||
17 | */ | ||
18 | #if defined(__GNUC__) || defined(HAS_LONG_LONG) | ||
19 | typedef long long ext2_loff_t; | ||
20 | #else | ||
21 | typedef long ext2_loff_t; | ||
22 | #endif | ||
23 | |||
24 | /* llseek.c */ | ||
25 | ext2_loff_t ext2fs_llseek (int, ext2_loff_t, int); | ||
26 | |||
27 | typedef struct struct_io_manager *io_manager; | ||
28 | typedef struct struct_io_channel *io_channel; | ||
29 | |||
30 | #define CHANNEL_FLAGS_WRITETHROUGH 0x01 | ||
31 | |||
32 | struct struct_io_channel { | ||
33 | errcode_t magic; | ||
34 | io_manager manager; | ||
35 | char *name; | ||
36 | int block_size; | ||
37 | errcode_t (*read_error)(io_channel channel, | ||
38 | unsigned long block, | ||
39 | int count, | ||
40 | void *data, | ||
41 | size_t size, | ||
42 | int actual_bytes_read, | ||
43 | errcode_t error); | ||
44 | errcode_t (*write_error)(io_channel channel, | ||
45 | unsigned long block, | ||
46 | int count, | ||
47 | const void *data, | ||
48 | size_t size, | ||
49 | int actual_bytes_written, | ||
50 | errcode_t error); | ||
51 | int refcount; | ||
52 | int flags; | ||
53 | int reserved[14]; | ||
54 | void *private_data; | ||
55 | void *app_data; | ||
56 | }; | ||
57 | |||
58 | struct struct_io_manager { | ||
59 | errcode_t magic; | ||
60 | const char *name; | ||
61 | errcode_t (*open)(const char *name, int flags, io_channel *channel); | ||
62 | errcode_t (*close)(io_channel channel); | ||
63 | errcode_t (*set_blksize)(io_channel channel, int blksize); | ||
64 | errcode_t (*read_blk)(io_channel channel, unsigned long block, | ||
65 | int count, void *data); | ||
66 | errcode_t (*write_blk)(io_channel channel, unsigned long block, | ||
67 | int count, const void *data); | ||
68 | errcode_t (*flush)(io_channel channel); | ||
69 | errcode_t (*write_byte)(io_channel channel, unsigned long offset, | ||
70 | int count, const void *data); | ||
71 | errcode_t (*set_option)(io_channel channel, const char *option, | ||
72 | const char *arg); | ||
73 | int reserved[14]; | ||
74 | }; | ||
75 | |||
76 | #define IO_FLAG_RW 1 | ||
77 | |||
78 | /* | ||
79 | * Convenience functions.... | ||
80 | */ | ||
81 | #define io_channel_close(c) ((c)->manager->close((c))) | ||
82 | #define io_channel_set_blksize(c,s) ((c)->manager->set_blksize((c),s)) | ||
83 | #define io_channel_read_blk(c,b,n,d) ((c)->manager->read_blk((c),b,n,d)) | ||
84 | #define io_channel_write_blk(c,b,n,d) ((c)->manager->write_blk((c),b,n,d)) | ||
85 | #define io_channel_flush(c) ((c)->manager->flush((c))) | ||
86 | #define io_channel_bumpcount(c) ((c)->refcount++) | ||
87 | |||
88 | /* io_manager.c */ | ||
89 | extern errcode_t io_channel_set_options(io_channel channel, | ||
90 | const char *options); | ||
91 | extern errcode_t io_channel_write_byte(io_channel channel, | ||
92 | unsigned long offset, | ||
93 | int count, const void *data); | ||
94 | |||
95 | /* unix_io.c */ | ||
96 | extern io_manager unix_io_manager; | ||
97 | |||
98 | /* test_io.c */ | ||
99 | extern io_manager test_io_manager, test_io_backing_manager; | ||
100 | extern void (*test_io_cb_read_blk) | ||
101 | (unsigned long block, int count, errcode_t err); | ||
102 | extern void (*test_io_cb_write_blk) | ||
103 | (unsigned long block, int count, errcode_t err); | ||
104 | extern void (*test_io_cb_set_blksize) | ||
105 | (int blksize, errcode_t err); | ||
106 | |||
107 | #endif /* _EXT2FS_EXT2_IO_H */ | ||
108 | |||