From 8949ca82ea8f5db93dce5f7d8ac0ac918b474655 Mon Sep 17 00:00:00 2001
From: deuce <>
Date: Fri, 8 Feb 2013 03:09:22 +0000
Subject: [PATCH] Add _TO_RASTRING() which ralloc()s if needed.

---
 src/sbbs3/sbbs.h | 39 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index d7fca5a9d1..0b895abdb6 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -111,6 +111,45 @@ extern int	thread_suid_broken;			/* NPTL is no longer broken */
 #include <jsapi.h>
 #define JS_DestroyScript(cx,script)
 
+#define JSSTRING_TO_RASTRING(cx, str, ret, sizeptr, lenptr) \
+{ \
+	size_t			*JSSTSlenptr=lenptr; \
+	size_t			JSSTSlen; \
+	size_t			JSSTSpos; \
+	const jschar	*JSSTSstrval; \
+	char			*JSSTStmpptr; \
+\
+	if(JSSTSlenptr==NULL) \
+		JSSTSlenptr=&JSSTSlen; \
+	(ret)=NULL; \
+	if((str) != NULL) { \
+		if((JSSTSstrval=JS_GetStringCharsAndLength((cx), (str), JSSTSlenptr))) { \
+			if(*sizeptr < (*JSSTSlenptr+1)) { \
+				*sizeptr = *JSSTSlenptr+1; \
+				if((JSSTStmpptr=(char *)realloc((ret), *sizeptr))==NULL) { \
+					JS_ReportError(cx, "Error reallocating %lu bytes at %s:%d", (*JSSTSlenptr)+1, getfname(__FILE__), __LINE__); \
+					(ret)=NULL; \
+					free(ret); \
+				} \
+				else { \
+					(ret)=JSSTStmpptr; \
+				} \
+			} \
+			if(ret) { \
+				for(JSSTSpos=0; JSSTSpos<*JSSTSlenptr; JSSTSpos++) \
+					(ret)[JSSTSpos]=(char)JSSTSstrval[JSSTSpos]; \
+				(ret)[*JSSTSlenptr]=0; \
+			} \
+		} \
+	} \
+}
+
+#define JSVALUE_TO_RASTRING(cx, val, ret, sizeptr, lenptr) \
+{ \
+	JSString	*JSVTSstr=JS_ValueToString((cx), (val)); \
+	JSSTRING_TO_RASTRING((cx), JSVTSstr, (ret), (sizeptr), (lenptr)); \
+}
+
 #define JSSTRING_TO_MSTRING(cx, str, ret, lenptr) \
 { \
 	size_t			*JSSTSlenptr=lenptr; \
-- 
GitLab