ALSA: info: Small refactoring and a sanity check in snd_info_get_line()

Signed-off-by: Takashi Iwai <tiwai@suse.de>
diff --git a/sound/core/info.c b/sound/core/info.c
index 58e97b3..c9042b4 100644
--- a/sound/core/info.c
+++ b/sound/core/info.c
@@ -700,25 +700,20 @@
 {
 	int c = -1;
 
+	if (snd_BUG_ON(!buffer || !buffer->buffer))
+		return 1;
 	if (len <= 0 || buffer->stop || buffer->error)
 		return 1;
-	while (--len > 0) {
-		c = buffer->buffer[buffer->curr++];
-		if (c == '\n') {
-			if (buffer->curr >= buffer->size)
-				buffer->stop = 1;
-			break;
-		}
-		*line++ = c;
-		if (buffer->curr >= buffer->size) {
-			buffer->stop = 1;
-			break;
-		}
-	}
-	while (c != '\n' && !buffer->stop) {
+	while (!buffer->stop) {
 		c = buffer->buffer[buffer->curr++];
 		if (buffer->curr >= buffer->size)
 			buffer->stop = 1;
+		if (c == '\n')
+			break;
+		if (len) {
+			len--;
+			*line++ = c;
+		}
 	}
 	*line = '\0';
 	return 0;