chiark / gitweb /
Memory management for hands-off reader
authorRichard Kettlewell <rjk@greenend.org.uk>
Tue, 8 Jun 2010 07:32:27 +0000 (08:32 +0100)
committerRichard Kettlewell <rjk@greenend.org.uk>
Tue, 8 Jun 2010 07:32:27 +0000 (08:32 +0100)
lib/hreader.c
lib/hreader.h
lib/wav.c

index edb1d83..bdf3c07 100644 (file)
@@ -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)
index 9e9a91c..90431c1 100644 (file)
@@ -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
index 6558c69..fe7ffbb 100644 (file)
--- 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