From a3933c07619a6f9b12e25f8e7d5c68790dff0f29 Mon Sep 17 00:00:00 2001 From: Richard Nyberg Date: Mon, 16 Jan 2006 22:23:26 +0000 Subject: Unify the write and read structs. There was no good reason to keep them separate. Improve the bts_seek so that it only calls close or lseek if necessary. Otherwise it's a nop. Hide bts_seek and instead make the offset explicit in calls to bts_get or bts_put. --- misc/stream.h | 53 ++++++++++++++++++++++------------------------------- 1 file changed, 22 insertions(+), 31 deletions(-) (limited to 'misc/stream.h') diff --git a/misc/stream.h b/misc/stream.h index 6ed91d5..30ce443 100644 --- a/misc/stream.h +++ b/misc/stream.h @@ -1,36 +1,27 @@ #ifndef BTPD_STREAM_H #define BTPD_STREAM_H -typedef int (*F_fdcb)(const char *, int *, void *); - -#define def_stream(name) \ -struct name {\ - struct metainfo *meta;\ - F_fdcb fd_cb;\ - void *fd_arg;\ - unsigned index;\ - off_t t_off;\ - off_t f_off;\ - int fd;\ -} - -def_stream(bt_stream_ro); - -struct bt_stream_ro * -bts_open_ro(struct metainfo *meta, off_t off, F_fdcb fd_cb, void *fd_arg); -int bts_read_ro(struct bt_stream_ro *bts, char *buf, size_t len); -void bts_seek_ro(struct bt_stream_ro *bts, off_t nbytes); -void bts_close_ro(struct bt_stream_ro *bts); - -def_stream(bt_stream_wo); - -struct bt_stream_wo * -bts_open_wo(struct metainfo *meta, off_t off, F_fdcb fd_cb, void *fd_arg); -int bts_write_wo(struct bt_stream_wo *bts, const char *buf, size_t len); -int bts_close_wo(struct bt_stream_wo *bts); - -int bts_sha(struct bt_stream_ro *bts, off_t length, uint8_t *hash); -int bts_hashes(struct metainfo *, F_fdcb fd_cb, - void (*cb)(uint32_t, uint8_t *, void *), void *arg); +typedef int (*fdcb_t)(const char *, int *, void *); +typedef void (*hashcb_t)(uint32_t, uint8_t *, void *); + +struct bt_stream { + struct metainfo *meta; + fdcb_t fd_cb; + void *fd_arg; + unsigned index; + off_t t_off; + off_t f_off; + int fd; +}; + +int bts_open(struct bt_stream **res, struct metainfo *meta, fdcb_t fd_cb, + void *fd_arg); +int bts_get(struct bt_stream *bts, off_t off, uint8_t *buf, size_t len); +int bts_put(struct bt_stream *bts, off_t off, const uint8_t *buf, size_t len); +int bts_close(struct bt_stream *bts); + +int bts_sha(struct bt_stream *bts, off_t start, off_t length, uint8_t *hash); +int bts_hashes(struct metainfo *meta, fdcb_t fd_cb, hashcb_t hash_cb, + void *arg); #endif -- cgit 1.4.1