From: Richard Kettlewell Date: Tue, 8 Jun 2010 07:32:27 +0000 (+0100) Subject: Memory management for hands-off reader X-Git-Tag: branchpoint-5.1~77^2~2 X-Git-Url: https://git.distorted.org.uk/~mdw/disorder/commitdiff_plain/6ebc4527c6a103d0532c08744fb916f951018413 Memory management for hands-off reader --- diff --git a/lib/hreader.c b/lib/hreader.c index edb1d83..bdf3c07 100644 --- a/lib/hreader.c +++ b/lib/hreader.c @@ -41,6 +41,11 @@ int hreader_init(const char *path, struct hreader *h) { 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) diff --git a/lib/hreader.h b/lib/hreader.h index 9e9a91c..90431c1 100644 --- a/lib/hreader.h +++ b/lib/hreader.h @@ -28,7 +28,7 @@ * 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 */ @@ -44,6 +44,11 @@ struct hreader { */ 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 diff --git a/lib/wav.c b/lib/wav.c index 6558c69..fe7ffbb 100644 --- a/lib/wav.c +++ b/lib/wav.c @@ -196,7 +196,8 @@ error: } /** @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