From 228b03edf8513aa1cdaf4e4647279cc580245555 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Sat, 14 Nov 2009 23:53:04 +0100
Subject: input_stream: return errors with GError

---
 src/playlist/asx_playlist_plugin.c    | 12 ++++++++++--
 src/playlist/lastfm_playlist_plugin.c | 36 ++++++++++++++++++++++++++++-------
 src/playlist/pls_playlist_plugin.c    | 13 +++++++++++--
 src/playlist/xspf_playlist_plugin.c   | 12 ++++++++++--
 4 files changed, 60 insertions(+), 13 deletions(-)

(limited to 'src/playlist')

diff --git a/src/playlist/asx_playlist_plugin.c b/src/playlist/asx_playlist_plugin.c
index 901212f90..03a5edea6 100644
--- a/src/playlist/asx_playlist_plugin.c
+++ b/src/playlist/asx_playlist_plugin.c
@@ -233,9 +233,17 @@ asx_open_stream(struct input_stream *is)
 					     &parser, asx_parser_destroy);
 
 	while (true) {
-		nbytes = input_stream_read(is, buffer, sizeof(buffer));
-		if (nbytes == 0)
+		nbytes = input_stream_read(is, buffer, sizeof(buffer), &error);
+		if (nbytes == 0) {
+			if (error != NULL) {
+				g_markup_parse_context_free(context);
+				g_warning("%s", error->message);
+				g_error_free(error);
+				return NULL;
+			}
+
 			break;
+		}
 
 		success = g_markup_parse_context_parse(context, buffer, nbytes,
 						       &error);
diff --git a/src/playlist/lastfm_playlist_plugin.c b/src/playlist/lastfm_playlist_plugin.c
index c776d25ab..ec499925a 100644
--- a/src/playlist/lastfm_playlist_plugin.c
+++ b/src/playlist/lastfm_playlist_plugin.c
@@ -86,27 +86,41 @@ static char *
 lastfm_get(const char *url)
 {
 	struct input_stream input_stream;
+	GError *error = NULL;
 	bool success;
 	int ret;
 	char buffer[4096];
 	size_t length = 0, nbytes;
 
-	success = input_stream_open(&input_stream, url);
-	if (!success)
+	success = input_stream_open(&input_stream, url, &error);
+	if (!success) {
+		if (error != NULL) {
+			g_warning("%s", error->message);
+			g_error_free(error);
+		}
+
 		return NULL;
+	}
 
 	while (!input_stream.ready) {
-		ret = input_stream_buffer(&input_stream);
+		ret = input_stream_buffer(&input_stream, &error);
 		if (ret < 0) {
 			input_stream_close(&input_stream);
+			g_warning("%s", error->message);
+			g_error_free(error);
 			return NULL;
 		}
 	}
 
 	do {
 		nbytes = input_stream_read(&input_stream, buffer + length,
-					   sizeof(buffer) - length);
+					   sizeof(buffer) - length, &error);
 		if (nbytes == 0) {
+			if (error != NULL) {
+				g_warning("%s", error->message);
+				g_error_free(error);
+			}
+
 			if (input_stream_eof(&input_stream))
 				break;
 
@@ -152,6 +166,7 @@ static struct playlist_provider *
 lastfm_open_uri(const char *uri)
 {
 	struct lastfm_playlist *playlist;
+	GError *error = NULL;
 	char *p, *q, *response, *session;
 	bool success;
 
@@ -216,20 +231,27 @@ lastfm_open_uri(const char *uri)
 			NULL);
 	g_free(session);
 
-	success = input_stream_open(&playlist->is, p);
+	success = input_stream_open(&playlist->is, p, &error);
 	g_free(p);
 
 	if (!success) {
-		g_warning("Failed to load XSPF playlist");
+		if (error != NULL) {
+			g_warning("Failed to load XSPF playlist: %s",
+				  error->message);
+			g_error_free(error);
+		} else
+			g_warning("Failed to load XSPF playlist");
 		g_free(playlist);
 		return NULL;
 	}
 
 	while (!playlist->is.ready) {
-		int ret = input_stream_buffer(&playlist->is);
+		int ret = input_stream_buffer(&playlist->is, &error);
 		if (ret < 0) {
 			input_stream_close(&playlist->is);
 			g_free(playlist);
+			g_warning("%s", error->message);
+			g_error_free(error);
 			return NULL;
 		}
 
diff --git a/src/playlist/pls_playlist_plugin.c b/src/playlist/pls_playlist_plugin.c
index 5308b7160..30c62b76e 100644
--- a/src/playlist/pls_playlist_plugin.c
+++ b/src/playlist/pls_playlist_plugin.c
@@ -115,9 +115,18 @@ pls_open_stream(struct input_stream *is)
 	GString *kf_data = g_string_new("");
 
 	do {
-		nbytes = input_stream_read(is, buffer, sizeof(buffer));
-		if(nbytes ==0)
+		nbytes = input_stream_read(is, buffer, sizeof(buffer), &error);
+		if (nbytes == 0) {
+			if (error != NULL) {
+				g_string_free(kf_data, TRUE);
+				g_warning("%s", error->message);
+				g_error_free(error);
+				return NULL;
+			}
+
 			break;
+		}
+
 		kf_data = g_string_append_len(kf_data, buffer,nbytes);
 		/* Limit to 64k */
 	} while(kf_data->len < 65536);
diff --git a/src/playlist/xspf_playlist_plugin.c b/src/playlist/xspf_playlist_plugin.c
index 687765b3a..a36463500 100644
--- a/src/playlist/xspf_playlist_plugin.c
+++ b/src/playlist/xspf_playlist_plugin.c
@@ -253,9 +253,17 @@ xspf_open_stream(struct input_stream *is)
 					     &parser, xspf_parser_destroy);
 
 	while (true) {
-		nbytes = input_stream_read(is, buffer, sizeof(buffer));
-		if (nbytes == 0)
+		nbytes = input_stream_read(is, buffer, sizeof(buffer), &error);
+		if (nbytes == 0) {
+			if (error != NULL) {
+				g_markup_parse_context_free(context);
+				g_warning("%s", error->message);
+				g_error_free(error);
+				return NULL;
+			}
+
 			break;
+		}
 
 		success = g_markup_parse_context_parse(context, buffer, nbytes,
 						       &error);
-- 
cgit v1.2.3