From cfd55b29bde6db1a90f81423e298378a7fd5b618 Mon Sep 17 00:00:00 2001
From: Laszlo Ashin <kodest@gmail.com>
Date: Sat, 8 Nov 2008 13:09:07 +0100
Subject: wavpack: wrapper for converting void* to struct wavpack_input*

A new function has been added to do a cast and a little check in the
wavpack-mpd input stream wrapper.
---
 src/decoder/wavpack_plugin.c | 33 ++++++++++++++++++++-------------
 1 file changed, 20 insertions(+), 13 deletions(-)

(limited to 'src')

diff --git a/src/decoder/wavpack_plugin.c b/src/decoder/wavpack_plugin.c
index fa72a4ce7..40eca3972 100644
--- a/src/decoder/wavpack_plugin.c
+++ b/src/decoder/wavpack_plugin.c
@@ -346,16 +346,25 @@ struct wavpack_input {
 	int last_byte;
 };
 
+/**
+ * Little wrapper for struct wavpack_input to cast from void *.
+ */
+static struct wavpack_input *
+wpin(void *id)
+{
+	assert(id);
+	return id;
+}
+
 static int32_t
 wavpack_input_read_bytes(void *id, void *data, int32_t bcount)
 {
-	struct wavpack_input *isp = (struct wavpack_input *)id;
 	uint8_t *buf = (uint8_t *)data;
 	int32_t i = 0;
 
-	if (isp->last_byte != EOF) {
-		*buf++ = isp->last_byte;
-		isp->last_byte = EOF;
+	if (wpin(id)->last_byte != EOF) {
+		*buf++ = wpin(id)->last_byte;
+		wpin(id)->last_byte = EOF;
 		--bcount;
 		++i;
 	}
@@ -363,7 +372,7 @@ wavpack_input_read_bytes(void *id, void *data, int32_t bcount)
 	/* wavpack fails if we return a partial read, so we just wait
 	   until the buffer is full */
 	while (bcount > 0) {
-		size_t nbytes = decoder_read(isp->decoder, isp->is,
+		size_t nbytes = decoder_read(wpin(id)->decoder, wpin(id)->is,
 					     buf, bcount);
 		if (nbytes == 0) {
 			/* EOF, error or a decoder command */
@@ -381,40 +390,38 @@ wavpack_input_read_bytes(void *id, void *data, int32_t bcount)
 static uint32_t
 wavpack_input_get_pos(void *id)
 {
-	return ((struct wavpack_input *)id)->is->offset;
+	return wpin(id)->is->offset;
 }
 
 static int
 wavpack_input_set_pos_abs(void *id, uint32_t pos)
 {
-	return input_stream_seek(((struct wavpack_input *)id)->is, pos, SEEK_SET)
-		? 0 : -1;
+	return input_stream_seek(wpin(id)->is, pos, SEEK_SET) ? 0 : -1;
 }
 
 static int
 wavpack_input_set_pos_rel(void *id, int32_t delta, int mode)
 {
-	return input_stream_seek(((struct wavpack_input *)id)->is, delta, mode)
-		? 0 : -1;
+	return input_stream_seek(wpin(id)->is, delta, mode) ? 0 : -1;
 }
 
 static int
 wavpack_input_push_back_byte(void *id, int c)
 {
-	((struct wavpack_input *)id)->last_byte = c;
+	wpin(id)->last_byte = c;
 	return 1;
 }
 
 static uint32_t
 wavpack_input_get_length(void *id)
 {
-	return ((struct wavpack_input *)id)->is->size;
+	return wpin(id)->is->size;
 }
 
 static int
 wavpack_input_can_seek(void *id)
 {
-	return ((struct wavpack_input *)id)->is->seekable;
+	return wpin(id)->is->seekable;
 }
 
 static WavpackStreamReader mpd_is_reader = {
-- 
cgit v1.2.3