2 * io_manager.c --- the I/O manager abstraction
16 #include <sys/types.h>
22 errcode_t io_channel_set_options(io_channel channel, const char *opts)
25 char *next, *ptr, *options, *arg;
27 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
32 if (!channel->manager->set_option)
33 return EXT2_ET_INVALID_ARGUMENT;
35 options = malloc(strlen(opts)+1);
37 return EXT2_ET_NO_MEMORY;
38 strcpy(options, opts);
42 next = strchr(ptr, '&');
46 arg = strchr(ptr, '=');
50 retval = (channel->manager->set_option)(channel, ptr, arg);
59 errcode_t io_channel_write_byte(io_channel channel, unsigned long offset,
60 int count, const void *data)
62 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
64 if (channel->manager->write_byte)
65 return channel->manager->write_byte(channel, offset,
68 return EXT2_ET_UNIMPLEMENTED;
71 errcode_t io_channel_read_blk64(io_channel channel, unsigned long long block,
72 int count, void *data)
74 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
76 if (channel->manager->read_blk64)
77 return (channel->manager->read_blk64)(channel, block,
80 if ((block >> 32) != 0)
81 return EXT2_ET_IO_CHANNEL_NO_SUPPORT_64;
83 return (channel->manager->read_blk)(channel, (unsigned long) block,
87 errcode_t io_channel_write_blk64(io_channel channel, unsigned long long block,
88 int count, const void *data)
90 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
92 if (channel->manager->write_blk64)
93 return (channel->manager->write_blk64)(channel, block,
96 if ((block >> 32) != 0)
97 return EXT2_ET_IO_CHANNEL_NO_SUPPORT_64;
99 return (channel->manager->write_blk)(channel, (unsigned long) block,