From b425f449b62c708e053e6d4ec812ac02440b4c46 Mon Sep 17 00:00:00 2001
From: Bill Currie <bill@taniwha.org>
Date: Fri, 4 Feb 2022 11:38:36 +0900
Subject: [PATCH] [ruamoko] Separate the two str_mid builtins

pr_argc cannot be used in Ruamoko progs because nothing sets it. This
fixes the parse errors and resulting segfault when trying to parse the
Vulkan pipeline config.
---
 libs/ruamoko/rua_string.c | 34 ++++++++++++++++++++++++----------
 1 file changed, 24 insertions(+), 10 deletions(-)

diff --git a/libs/ruamoko/rua_string.c b/libs/ruamoko/rua_string.c
index 4fdbab706..314c6d099 100644
--- a/libs/ruamoko/rua_string.c
+++ b/libs/ruamoko/rua_string.c
@@ -175,17 +175,10 @@ bi_str_clear (progs_t *pr)
 }
 
 static void
-bi_str_mid (progs_t *pr)
+str_mid (progs_t *pr, const char *str, int pos, int end, int size)
 {
-	const char *str = P_GSTRING (pr, 0);
-	int         pos = P_INT (pr, 1);
-	int         end = P_INT (pr, 2);
-	int         size = strlen (str);
 	char       *temp;
 
-	if (pr->pr_argc == 2)
-		end = size;
-
 	R_STRING (pr) = 0;
 	if (pos < 0)
 		pos += size;
@@ -205,6 +198,27 @@ bi_str_mid (progs_t *pr)
 	RETURN_STRING (pr, temp);
 }
 
+static void
+bi_str_mid_2 (progs_t *pr)
+{
+	const char *str = P_GSTRING (pr, 0);
+	int         pos = P_INT (pr, 1);
+	int         size = strlen (str);
+
+	str_mid (pr, str, pos, size, size);
+}
+
+static void
+bi_str_mid_3 (progs_t *pr)
+{
+	const char *str = P_GSTRING (pr, 0);
+	int         pos = P_INT (pr, 1);
+	int         end = P_INT (pr, 2);
+	int         size = strlen (str);
+
+	str_mid (pr, str, pos, end, size);
+}
+
 static void
 bi_str_str (progs_t *pr)
 {
@@ -316,8 +330,8 @@ static builtin_t builtins[] = {
 	bi(str_copy,    2, p(string), p(string)),
 	bi(str_cat,     2, p(string), p(string)),
 	bi(str_clear,   1, p(string)),
-	{"str_mid|*i",	bi_str_mid,		-1, 2, {p(string), p(int)}},
-	{"str_mid|*ii",	bi_str_mid,		-1, 3, {p(string), p(int), p(int)}},
+	{"str_mid|*i",	bi_str_mid_2,		-1, 2, {p(string), p(int)}},
+	{"str_mid|*ii",	bi_str_mid_3,		-1, 3, {p(string), p(int), p(int)}},
 	bi(str_str,     2, p(string), p(string)),
 	bi(str_char,    2, p(string), p(int)),
 	bi(str_quote,   1, p(string)),