X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/5e57438cb616e2da147c5365330872c424cca02e..21237d054e4b9d6091decded21898b22dfb4f92c:/lib/hreader.h diff --git a/lib/hreader.h b/lib/hreader.h index ac56b2c..46f8bd9 100644 --- a/lib/hreader.h +++ b/lib/hreader.h @@ -29,18 +29,20 @@ */ struct hreader { const char *path; /* file to read */ - off_t offset; /* how far we've read so far */ + off_t size; /* file size */ + off_t read_offset; /* for next hreader_read() */ + off_t buf_offset; /* offset of start of buffer */ char *buffer; /* input buffer */ size_t bufsize; /* buffer size */ size_t bytes; /* size of last read */ - size_t consumed; /* bytes consumed by caller from last read */ }; /** @brief Initialize a hands-off reader * @param path File to read * @param h Reader to initialize + * @return 0 on success, -1 on error */ -void hreader_init(const char *path, struct hreader *h); +int hreader_init(const char *path, struct hreader *h); /** @brief Read some bytes * @param h Reader to read from @@ -50,24 +52,25 @@ void hreader_init(const char *path, struct hreader *h); */ int hreader_read(struct hreader *h, void *buffer, size_t n); -/** @brief Read more bytes - * @param h Reader to update - * @return Bytes available to read - * - * If not all bytes were consumed so far then just returns the number - * of bytes left to consume. +/** @brief Read some bytes at a given offset + * @param h Reader to read from + * @param offset Offset to read at + * @param buffer Where to store bytes + * @param n Maximum bytes to read + * @return Bytes read, or 0 at EOF, or -1 on error */ -int hreader_fill(struct hreader *h); +int hreader_pread(struct hreader *h, void *buffer, size_t n, off_t offset); -/** @brief Consume some bytes - * @param h Reader to update - * @param n Bytes to consume +/** @brief Seek within a file + * @param h Reader to seek + * @param offset Offset + * @param whence SEEK_* + * @return Result offset */ -void hreader_consume(struct hreader *h, size_t n); +off_t hreader_seek(struct hreader *h, off_t offset, int whence); #endif /* HREADER_H */ - /* Local Variables: c-basic-offset:2