From 6ebc4527c6a103d0532c08744fb916f951018413 Mon Sep 17 00:00:00 2001 Message-Id: <6ebc4527c6a103d0532c08744fb916f951018413.1716539121.git.mdw@distorted.org.uk> From: Mark Wooding Date: Tue, 8 Jun 2010 08:32:27 +0100 Subject: [PATCH] Memory management for hands-off reader Organization: Straylight/Edgeware From: Richard Kettlewell --- lib/hreader.c | 5 +++++ lib/hreader.h | 7 ++++++- lib/wav.c | 3 ++- 3 files changed, 13 insertions(+), 2 deletions(-) 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 -- [mdw]