From d20878bce0c0d84e5b49d1b9642e71bb0d18341a Mon Sep 17 00:00:00 2001
From: Lars-Dominik Braun <lars@6xq.net>
Date: Sun, 18 Dec 2011 12:37:27 +0100
Subject: Fix genre selection segfault

Closes #193 and #194
---
 src/ui.c | 45 ++++++++++++++++++++++++++-------------------
 1 file changed, 26 insertions(+), 19 deletions(-)

diff --git a/src/ui.c b/src/ui.c
index 7c80079..9a76266 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -584,16 +584,19 @@ void BarStationFromGenre (BarApp_t *app) {
 		i++;
 		curCat = curCat->next;
 	}
-	/* select category or exit */
-	BarUiMsg (&app->settings, MSG_QUESTION, "Select category: ");
-	if (BarReadlineInt (&i, &app->input) == 0) {
-		return;
-	}
-	curCat = app->ph.genreStations;
-	while (curCat != NULL && i > 0) {
-		curCat = curCat->next;
-		i--;
-	}
+
+	do {
+		/* select category or exit */
+		BarUiMsg (&app->settings, MSG_QUESTION, "Select category: ");
+		if (BarReadlineInt (&i, &app->input) == 0) {
+			return;
+		}
+		curCat = app->ph.genreStations;
+		while (curCat != NULL && i > 0) {
+			curCat = curCat->next;
+			i--;
+		}
+	} while (curCat == NULL);
 	
 	/* print all available stations */
 	curGenre = curCat->genres;
@@ -603,15 +606,19 @@ void BarStationFromGenre (BarApp_t *app) {
 		i++;
 		curGenre = curGenre->next;
 	}
-	BarUiMsg (&app->settings, MSG_QUESTION, "Select genre: ");
-	if (BarReadlineInt (&i, &app->input) == 0) {
-		return;
-	}
-	curGenre = curCat->genres;
-	while (curGenre != NULL && i > 0) {
-		curGenre = curGenre->next;
-		i--;
-	}
+
+	do {
+		BarUiMsg (&app->settings, MSG_QUESTION, "Select genre: ");
+		if (BarReadlineInt (&i, &app->input) == 0) {
+			return;
+		}
+		curGenre = curCat->genres;
+		while (curGenre != NULL && i > 0) {
+			curGenre = curGenre->next;
+			i--;
+		}
+	} while (curGenre == NULL);
+
 	/* create station */
 	BarUiMsg (&app->settings, MSG_INFO, "Adding shared station \"%s\"... ", curGenre->name);
 	reqData.id = curGenre->musicId;
-- 
cgit v1.2.3