diff --git a/src/sbbs3/sbbs.h b/src/sbbs3/sbbs.h
index df3eb6e78183f4648c93873fa43ef183edb575e2..7b9647a1070f4377ea2b7b0c9669acdbc66b1873 100644
--- a/src/sbbs3/sbbs.h
+++ b/src/sbbs3/sbbs.h
@@ -111,6 +111,33 @@ extern int	thread_suid_broken;			/* NPTL is no longer broken */
 #include <jsapi.h>
 #define JS_DestroyScript(cx,script)
 
+#define JSSTRING_TO_MSTRING(cx, str, ret, lenptr) \
+{ \
+	size_t			*JSSTSlenptr=lenptr; \
+	size_t			JSSTSlen; \
+	size_t			JSSTSpos; \
+	const jschar	*JSSTSstrval; \
+\
+	if(JSSTSlenptr==NULL) \
+		JSSTSlenptr=&JSSTSlen; \
+	(ret)=NULL; \
+	if((str) != NULL) { \
+		if((JSSTSstrval=JS_GetStringCharsAndLength((cx), (str), JSSTSlenptr))) { \
+			if(((ret)=(char *)malloc(*JSSTSlenptr+1))) { \
+				for(JSSTSpos=0; JSSTSpos<*JSSTSlenptr; JSSTSpos++) \
+					(ret)[JSSTSpos]=(char)JSSTSstrval[JSSTSpos]; \
+				(ret)[*JSSTSlenptr]=0; \
+			} \
+		} \
+	} \
+}
+
+#define JSVALUE_TO_MSTRING(cx, val, ret, lenptr) \
+{ \
+	JSString	*JSVTSstr=JS_ValueToString((cx), (val)); \
+	JSSTRING_TO_MSTRING((cx), JSVTSstr, (ret), lenptr); \
+}
+
 #define JSSTRING_TO_STRING(cx, str, ret, lenptr) \
 { \
 	size_t			*JSSTSlenptr=lenptr; \