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