e2fsprogs/lib/ext2fs/ext2_io.h

95 lines
2.5 KiB
C
Raw Normal View History

1997-04-26 17:21:57 +04:00
/*
* io.h --- the I/O manager abstraction
*
1997-04-29 20:17:09 +04:00
* Copyright (C) 1993, 1994, 1995, 1996 Theodore Ts'o.
*
* %Begin-Header%
* This file may be redistributed under the terms of the GNU Public
* License.
* %End-Header%
1997-04-26 17:21:57 +04:00
*/
#ifndef _EXT2FS_EXT2_IO_H
#define _EXT2FS_EXT2_IO_H
1997-04-26 17:34:30 +04:00
/*
* ext2_loff_t is defined here since unix_io.c needs it.
*/
#if defined(__GNUC__) || defined(HAS_LONG_LONG)
typedef long long ext2_loff_t;
#else
typedef long ext2_loff_t;
#endif
/* llseek.c */
ext2_loff_t ext2fs_llseek (int, ext2_loff_t, int);
1997-04-26 17:34:30 +04:00
1997-04-26 17:21:57 +04:00
typedef struct struct_io_manager *io_manager;
typedef struct struct_io_channel *io_channel;
struct struct_io_channel {
errcode_t magic;
1997-04-26 17:21:57 +04:00
io_manager manager;
char *name;
int block_size;
errcode_t (*read_error)(io_channel channel,
unsigned long block,
int count,
void *data,
size_t size,
int actual_bytes_read,
errcode_t error);
errcode_t (*write_error)(io_channel channel,
unsigned long block,
int count,
const void *data,
size_t size,
int actual_bytes_written,
errcode_t error);
1997-04-30 01:26:48 +04:00
int refcount;
int reserved[15];
1997-04-26 17:21:57 +04:00
void *private_data;
void *app_data;
1997-04-26 17:21:57 +04:00
};
struct struct_io_manager {
errcode_t magic;
1997-04-26 17:21:57 +04:00
const char *name;
errcode_t (*open)(const char *name, int flags, io_channel *channel);
errcode_t (*close)(io_channel channel);
errcode_t (*set_blksize)(io_channel channel, int blksize);
errcode_t (*read_blk)(io_channel channel, unsigned long block,
int count, void *data);
errcode_t (*write_blk)(io_channel channel, unsigned long block,
int count, const void *data);
errcode_t (*flush)(io_channel channel);
1997-04-26 17:34:30 +04:00
int reserved[16];
1997-04-26 17:21:57 +04:00
};
#define IO_FLAG_RW 1
/*
* Convenience functions....
*/
#define io_channel_close(c) ((c)->manager->close((c)))
#define io_channel_set_blksize(c,s) ((c)->manager->set_blksize((c),s))
#define io_channel_read_blk(c,b,n,d) ((c)->manager->read_blk((c),b,n,d))
#define io_channel_write_blk(c,b,n,d) ((c)->manager->write_blk((c),b,n,d))
#define io_channel_flush(c) ((c)->manager->flush((c)))
1997-04-30 01:26:48 +04:00
#define io_channel_bumpcount(c) ((c)->refcount++)
1997-04-26 17:21:57 +04:00
1997-04-29 20:17:09 +04:00
/* unix_io.c */
1997-04-26 17:21:57 +04:00
extern io_manager unix_io_manager;
1997-04-29 20:17:09 +04:00
/* test_io.c */
extern io_manager test_io_manager, test_io_backing_manager;
extern void (*test_io_cb_read_blk)
(unsigned long block, int count, errcode_t err);
extern void (*test_io_cb_write_blk)
(unsigned long block, int count, errcode_t err);
extern void (*test_io_cb_set_blksize)
(int blksize, errcode_t err);
#endif /* _EXT2FS_EXT2_IO_H */