From 757480f21940e9acfe3759d68d01c69404c12de0 Mon Sep 17 00:00:00 2001
From: Jaime Passos <lazymyuutsu@gmail.com>
Date: Mon, 30 Dec 2019 02:07:39 -0300
Subject: [PATCH] Some cleanup in general.

---
 src/s_sound.c | 51 ++++++++++++++++++++++++++-------------------------
 1 file changed, 26 insertions(+), 25 deletions(-)

diff --git a/src/s_sound.c b/src/s_sound.c
index 11774b5bad..b1d80f43bd 100644
--- a/src/s_sound.c
+++ b/src/s_sound.c
@@ -1464,9 +1464,9 @@ static UINT16 W_CheckForMusicDefInPwad(UINT16 wadid)
 
 void S_LoadMusicDefs(UINT16 wadnum)
 {
-	UINT16 lump;
-	char *buf;
-	char *buf2;
+	UINT16 lumpnum;
+	char *lump, *buf;
+	char *musdeftext;
 	char *stoken;
 	char *value;
 	char *textline;
@@ -1475,21 +1475,27 @@ void S_LoadMusicDefs(UINT16 wadnum)
 	musicdef_t *def = NULL;
 	UINT16 line = 1; // for better error msgs
 
-	lump = W_CheckForMusicDefInPwad(wadnum);
-	if (lump == INT16_MAX)
+	lumpnum = W_CheckForMusicDefInPwad(wadnum);
+	if (lumpnum == INT16_MAX)
 		return;
 
-	buf = W_CacheLumpNumPwad(wadnum, lump, PU_CACHE);
-	size = W_LumpLengthPwad(wadnum, lump);
+	lump = W_CacheLumpNumPwad(wadnum, lumpnum, PU_CACHE);
+	size = W_LumpLengthPwad(wadnum, lumpnum);
+
+	// Null-terminated MUSICDEF lump.
+	musdeftext = malloc(size+1);
+	if (!musdeftext)
+		I_Error("S_LoadMusicDefs: No more free memory for the parser\n");
+	M_Memcpy(musdeftext, lump, size);
+	musdeftext[size] = '\0';
 
 	// for strtok
-	buf2 = malloc(size+1);
-	if (!buf2)
-		I_Error("S_LoadMusicDefs: No more free memory\n");
-	M_Memcpy(buf2,buf,size);
-	buf2[size] = '\0';
+	buf = malloc(size+1);
+	if (!buf)
+		I_Error("S_LoadMusicDefs: No more free memory for the parser\n");
+	M_Memcpy(buf, musdeftext, size+1);
 
-	stoken = strtok (buf2, "\r\n ");
+	stoken = strtok(buf, "\r\n ");
 	// Find music def
 	while (stoken)
 	{
@@ -1589,17 +1595,10 @@ skip_lump:
 			if (!brokenline)
 			{
 				// strtok returns memory that already belongs to the input string.
-				value = buf + (value - buf2);
+				value = musdeftext + (value - buf);
 
 				// Find the length of the line.
-				size = 0;
-				for (;;)
-				{
-					char c = value[size];
-					if (c == '\n' || c == '\r' || c == '\0')
-						break;
-					size++;
-				}
+				size = strcspn(value, "\r\n");
 
 				// Copy the line.
 				textline = malloc(size+1);
@@ -1619,7 +1618,8 @@ skip_lump:
 			{
 				CONS_Alert(CONS_ERROR, "MUSICDEF: No music definition before field '%s'. (file %s, line %d)\n", stoken, wadfiles[wadnum]->filename, line);
 				free(textline);
-				free(buf2);
+				free(buf);
+				free(musdeftext);
 				return;
 			}
 
@@ -1663,7 +1663,7 @@ skip_lump:
 				CONS_Alert(CONS_WARNING, "MUSICDEF: Invalid field '%s'. (file %s, line %d)\n", stoken, wadfiles[wadnum]->filename, line);
 			}
 
-			// Free the temporary line from memory.
+			// Free the temporary text line from memory.
 			free(textline);
 
 skip_field:
@@ -1672,7 +1672,8 @@ skip_field:
 		}
 	}
 
-	free(buf2);
+	free(buf);
+	free(musdeftext);
 	return;
 }
 
-- 
GitLab