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 edb1d839817fa8e31299ba1d1f956bb70c5c6fbc..bdf3c074c7ed5a741070c03721040ee7a4e4281c 100644 (file)
@@ -41,6 +41,11 @@ int hreader_init(const char *path, struct hreader *h) {
   return 0;
 }
 
   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)
 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 9e9a91cfa8b1a14c8ece37ee0ce3822d8c9445be..90431c1380fa557795ab7423ef2bf253767925ea 100644 (file)
@@ -28,7 +28,7 @@
  * Allows files to be read without holding them open.
  */
 struct hreader {
  * 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 */
   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);
 
  */
 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 Read some bytes
  * @param h Reader to read from
  * @param buffer Where to store bytes
index 6558c693a27c735725a8af3c7591cef57ad33030..fe7ffbbf0443289018bf2852dbc5c364f5f5e764 100644 (file)
--- a/lib/wav.c
+++ b/lib/wav.c
@@ -196,7 +196,8 @@ error:
 }
 
 /** @brief Close a WAV file */
 }
 
 /** @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
 }
 
 /** @brief Visit all the data in a WAV file