return 0;
}
+void hreader_close(struct hreader *h) {
+ xfree(h->path);
+ xfree(h->buffer);
+}
+
int hreader_read(struct hreader *h, void *buffer, size_t n) {
int r = hreader_pread(h, buffer, n, h->read_offset);
if(r > 0)
* Allows files to be read without holding them open.
*/
struct hreader {
- const char *path; /* file to read */
+ char *path; /* file to read */
off_t size; /* file size */
off_t read_offset; /* for next hreader_read() */
off_t buf_offset; /* offset of start of buffer */
*/
int hreader_init(const char *path, struct hreader *h);
+/** @brief Close a hands-off reader
+ * @param h Reader to close
+ */
+void hreader_close(struct hreader *h);
+
/** @brief Read some bytes
* @param h Reader to read from
* @param buffer Where to store bytes
}
/** @brief Close a WAV file */
-void wav_destroy(struct wavfile attribute((unused)) *f) {
+void wav_destroy(struct wavfile *f) {
+ hreader_close(f->input);
}
/** @brief Visit all the data in a WAV file