FRAGMENT(JSString, simple) { js::Rooted<JSString *> empty(cx, JS_NewStringCopyN(cx, NULL, 0)); js::Rooted<JSString *> x(cx, JS_NewStringCopyN(cx, "x", 1)); js::Rooted<JSString *> z(cx, JS_NewStringCopyZ(cx, "z")); // I expect this will be a non-inlined string. js::Rooted<JSString *> stars(cx, JS_NewStringCopyZ(cx, "*************************" "*************************" "*************************" "*************************")); // This may well be an inlined string. js::Rooted<JSString *> xz(cx, JS_ConcatStrings(cx, x, z)); // This will probably be a rope. js::Rooted<JSString *> doubleStars(cx, JS_ConcatStrings(cx, stars, stars)); breakpoint(); (void) empty; (void) x; (void) z; (void) stars; (void) xz; (void) doubleStars; }
FRAGMENT(JSString, simple) { AutoSuppressHazardsForTest noanalysis; JS::Rooted<JSString*> empty(cx, JS_NewStringCopyN(cx, nullptr, 0)); JS::Rooted<JSString*> x(cx, JS_NewStringCopyN(cx, "x", 1)); JS::Rooted<JSString*> z(cx, JS_NewStringCopyZ(cx, "z")); // I expect this will be a non-inlined string. JS::Rooted<JSString*> stars(cx, JS_NewStringCopyZ(cx, "*************************" "*************************" "*************************" "*************************")); // This may well be an inlined string. JS::Rooted<JSString*> xz(cx, JS_ConcatStrings(cx, x, z)); // This will probably be a rope. JS::Rooted<JSString*> doubleStars(cx, JS_ConcatStrings(cx, stars, stars)); // Ensure we're not confused by typedefs for pointer types. JSString* xRaw = x; breakpoint(); use(empty); use(x); use(z); use(stars); use(xz); use(doubleStars); use(xRaw); }
static jsval to_javascript_object(JSContext *context, PyObject *value) { if (PyString_Check(value)) { JSString *obj = JS_NewStringCopyN(context, PyString_AsString(value), PyString_Size(value)); return STRING_TO_JSVAL(obj); } else if (PyUnicode_Check(value)) { PyObject *encoded = PyUnicode_AsUTF8String(value); JSString *obj = JS_NewStringCopyN(context, PyString_AsString(encoded), PyString_Size(encoded)); Py_DECREF(encoded); return STRING_TO_JSVAL(obj); } else if (PyFloat_Check(value)) { return DOUBLE_TO_JSVAL(PyFloat_AsDouble(value)); } else if (PyInt_Check(value)) { return INT_TO_JSVAL(PyInt_AsLong(value)); } else if (PyLong_Check(value)) { return INT_TO_JSVAL(PyLong_AsLong(value)); } else if (PyList_Check(value)) { JSObject *obj = JS_NewArrayObject(context, 0, NULL); int i; for (i = 0; i < PyList_Size(value); i++) { jsval item = to_javascript_object(context, PyList_GetItem(value, i)); JS_SetElement(context, obj, i, &item); } return OBJECT_TO_JSVAL(obj); } else if (PyTuple_Check(value)) { JSObject *obj = JS_NewArrayObject(context, 0, NULL); int i; for (i = 0; i < PyTuple_Size(value); i++) { jsval item = to_javascript_object(context, PyTuple_GetItem(value, i)); JS_SetElement(context, obj, i, &item); } return OBJECT_TO_JSVAL(obj); } else if (PyDict_Check(value)) { JSObject *obj = JS_NewObject(context, NULL, NULL, NULL); populate_javascript_object(context, obj, value); return OBJECT_TO_JSVAL(obj); } else if (PyDateTime_Check(value)) { JSObject *obj = JS_NewDateObject(context, PyDateTime_GET_YEAR(value), PyDateTime_GET_MONTH(value) - 1, PyDateTime_GET_DAY(value), PyDateTime_DATE_GET_HOUR(value), PyDateTime_DATE_GET_MINUTE(value), PyDateTime_DATE_GET_SECOND(value)); return OBJECT_TO_JSVAL(obj); } else { return JSVAL_NULL; } }
void CStdDeserializer::ScriptString(const char* name, JS::MutableHandleString out) { #if BYTE_ORDER != LITTLE_ENDIAN #error TODO: probably need to convert JS strings from little-endian #endif JSContext* cx = m_ScriptInterface.GetContext(); JSAutoRequest rq(cx); bool isLatin1; Bool("isLatin1", isLatin1); if (isLatin1) { std::vector<JS::Latin1Char> str; ReadStringLatin1(name, str); out.set(JS_NewStringCopyN(cx, (const char*)str.data(), str.size())); if (!out) throw PSERROR_Deserialize_ScriptError("JS_NewStringCopyN failed"); } else { utf16string str; ReadStringUTF16(name, str); out.set(JS_NewUCStringCopyN(cx, (const char16_t*)str.data(), str.length())); if (!out) throw PSERROR_Deserialize_ScriptError("JS_NewUCStringCopyN failed"); } }
JSBool JsSite::getAttributeNames(JSContext *cx,JSObject *obj,uintN argc,jsval *argv,jsval *rval) { Site *site = (Site*)JS_GetPrivate(cx,obj); JSObject *arr = JS_NewArrayObject(cx,0,NULL); if ( arr!=NULL ) { int count=0; std::map<std::string,std::string> attributes = site->getAttributes(); std::map<std::string,std::string>::const_iterator iter; for ( iter=attributes.begin(); iter!=attributes.end(); iter++ ) { JSString *str = JS_NewStringCopyN(cx,iter->first.c_str(),iter->first.length()); jsval element = STRING_TO_JSVAL(str); if ( JS_SetElement(cx,arr,count,&element)==JS_TRUE ) { count++; } } *rval = OBJECT_TO_JSVAL(arr); } return JS_TRUE; }
Atob(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { JSString *str; if (!argc) return JS_TRUE; str = JS_ValueToString(cx, argv[0]); if (!str) return JS_FALSE; size_t base64StrLength = JS_GetStringLength(str); char *base64Str = JS_GetStringBytes(str); PRUint32 bin_dataLength = (PRUint32)base64StrLength; if (base64Str[base64StrLength - 1] == '=') { if (base64Str[base64StrLength - 2] == '=') bin_dataLength -= 2; else --bin_dataLength; } bin_dataLength = (PRUint32)((PRUint64)bin_dataLength * 3) / 4; char *bin_data = PL_Base64Decode(base64Str, base64StrLength, nsnull); if (!bin_data) return JS_FALSE; str = JS_NewStringCopyN(cx, bin_data, bin_dataLength); PR_Free(bin_data); if (!str) return JS_FALSE; *rval = STRING_TO_JSVAL(str); return JS_TRUE; }
Btoa(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { JSString *str; if (!argc) return JS_TRUE; str = JS_ValueToString(cx, argv[0]); if (!str) return JS_FALSE; char *bin_data = JS_GetStringBytes(str); size_t bin_dataLength = JS_GetStringLength(str); char *base64 = PL_Base64Encode(bin_data, bin_dataLength, nsnull); if (!base64) return JS_FALSE; PRUint32 base64Length = ((bin_dataLength + 2) / 3) * 4; str = JS_NewStringCopyN(cx, base64, base64Length); PR_Free(base64); if (!str) return JS_FALSE; *rval = STRING_TO_JSVAL(str); return JS_TRUE; }
bool Base64Decode(JSContext *cx, HandleValue val, MutableHandleValue out) { MOZ_ASSERT(cx); JS::RootedValue root(cx, val); xpc_qsACString encodedString(cx, root, &root, false, xpc_qsACString::eStringify, xpc_qsACString::eStringify); if (!encodedString.IsValid()) return false; nsAutoCString result; if (NS_FAILED(mozilla::Base64Decode(encodedString, result))) { JS_ReportError(cx, "Failed to decode base64 string!"); return false; } JSString *str = JS_NewStringCopyN(cx, result.get(), result.Length()); if (!str) return false; out.setString(str); return true; }
static JSObject * add_module_property_to_module_scope (JSContext *cx, JSObject *scope, const gchar *module_id) { JSObject *module; jsval value; JSString *st; JSAutoCompartment ac(cx, scope); /* create the 'module' object */ module = JS_NewObject (cx, NULL, NULL, NULL); g_assert (module != NULL); /* add 'module' object as property of scope */ value = OBJECT_TO_JSVAL (module); g_assert (JS_SetProperty (cx, scope, "module", &value)); /* make 'exports' a permanent and read-only property of scope */ seal_object_property (cx, scope, "module"); /* add 'id' property to module object */ st = JS_NewStringCopyN (cx, module_id, strlen (module_id)); value = STRING_TO_JSVAL (st); g_assert (JS_SetProperty (cx, module, "id", &value)); /* freeze module object */ JS_FreezeObject (cx, module); return module; }
static size_t file_callback(void *ptr, size_t size, size_t nmemb, void *data) { register unsigned int realsize = (unsigned int) (size * nmemb); struct curl_obj *co = data; uintN argc = 0; jsval argv[4]; if (!co) { return 0; } if (co->function) { char *ret; argv[argc++] = STRING_TO_JSVAL(JS_NewStringCopyN(co->cx, (char *) ptr, realsize)); if (co->user_data) { argv[argc++] = OBJECT_TO_JSVAL(co->user_data); } JS_ResumeRequest(co->cx, co->saveDepth); JS_CallFunction(co->cx, co->obj, co->function, argc, argv, &co->ret); co->saveDepth = JS_SuspendRequest(co->cx); if ((ret = JS_GetStringBytes(JS_ValueToString(co->cx, co->ret)))) { if (!strcmp(ret, "true") || !strcmp(ret, "undefined")) { return realsize; } else { return 0; } } } return realsize; }
template<> jsval ScriptInterface::ToJSVal<std::string>(JSContext* cx, const std::string& val) { JSString* str = JS_NewStringCopyN(cx, val.c_str(), val.length()); if (str) return STRING_TO_JSVAL(str); return JSVAL_VOID; }
static JSBool jsGetParity( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) { jsPort_t *port = (jsPort_t *)JS_GetInstancePrivate( cx, obj, &jsSerialPortClass_, NULL ); if( port ) { struct termios oldTermState; tcgetattr(port->getFd(),&oldTermState); char const *parity ; if( oldTermState.c_cflag & PARENB ) { if( oldTermState.c_cflag & PARODD ) parity = "O" ; else parity = "E" ; } else parity = "N" ; *rval = STRING_TO_JSVAL( JS_NewStringCopyN( cx, parity, 1 ) ); } else *rval = JSVAL_FALSE ; return JS_TRUE ; }
JSAddonId* NewAddonId(JSContext* cx, const nsACString& id) { JS::RootedString str(cx, JS_NewStringCopyN(cx, id.BeginReading(), id.Length())); if (!str) return nullptr; return JS::NewAddonId(cx, str); }
JSBool JsSite::getPath(JSContext *cx,JSObject *obj,uintN argc,jsval *argv,jsval *rval) { Site *site = (Site*)JS_GetPrivate(cx,obj); JSString *str = JS_NewStringCopyN(cx,site->getPath().c_str(),site->getPath().length()); *rval = STRING_TO_JSVAL(str); return JS_TRUE; }
template<> void ScriptInterface::ToJSVal<std::string>(JSContext* cx, JS::MutableHandleValue ret, const std::string& val) { JSAutoRequest rq(cx); JS::RootedString str(cx, JS_NewStringCopyN(cx, val.c_str(), val.length())); if (str) ret.setString(str); else ret.setUndefined(); }
// This is a temporary converter used by nsPlacesImportExportService until // bug 482911 completes its js rewrite. jsval livemarkInfoToJSVal(PRInt64 aId, const nsACString& aGUID, const nsAString& aTitle, PRInt64 aParentId, PRInt32 aIndex, nsCOMPtr<nsIURI>& aFeedURI, nsCOMPtr<nsIURI>& aSiteURI) { nsCOMPtr<nsIXPConnect> xpc = mozilla::services::GetXPConnect(); NS_ENSURE_TRUE(xpc, JSVAL_NULL); nsAXPCNativeCallContext *ncc; nsresult rv = xpc->GetCurrentNativeCallContext(&ncc); NS_ENSURE_SUCCESS(rv, JSVAL_NULL); JSContext *cx = nsnull; rv = ncc->GetJSContext(&cx); NS_ENSURE_SUCCESS(rv, JSVAL_NULL); JSObject *obj = JS_NewObject(cx, NULL, NULL, NULL); NS_ENSURE_TRUE(obj, JSVAL_NULL); jsval id; NS_ENSURE_TRUE(JS_NewNumberValue(cx, double(aId), &id), JSVAL_NULL); JSString* guid = JS_NewStringCopyN(cx, PromiseFlatCString(aGUID).get(), aGUID.Length()); NS_ENSURE_TRUE(guid, JSVAL_NULL); JSString* title = JS_NewUCStringCopyN(cx, PromiseFlatString(aTitle).get(), aTitle.Length()); NS_ENSURE_TRUE(title, JSVAL_NULL); jsval parentId; NS_ENSURE_TRUE(JS_NewNumberValue(cx, double(aParentId), &parentId), JSVAL_NULL); jsval feedURI; rv = nsContentUtils::WrapNative(cx, JS_GetGlobalForScopeChain(cx), NS_ISUPPORTS_CAST(nsIURI*, aFeedURI), &feedURI); NS_ENSURE_SUCCESS(rv, JSVAL_NULL); jsval siteURI; rv = nsContentUtils::WrapNative(cx, JS_GetGlobalForScopeChain(cx), NS_ISUPPORTS_CAST(nsIURI*, aSiteURI), &siteURI); NS_ENSURE_SUCCESS(rv, JSVAL_NULL); if (!JS_DefineProperty(cx, obj, "id", id, NULL, NULL, JSPROP_ENUMERATE) || !JS_DefineProperty(cx, obj, "guid", STRING_TO_JSVAL(guid), NULL, NULL, JSPROP_ENUMERATE) || !JS_DefineProperty(cx, obj, "title", STRING_TO_JSVAL(title), NULL, NULL, JSPROP_ENUMERATE) || !JS_DefineProperty(cx, obj, "parentId", parentId, NULL, NULL, JSPROP_ENUMERATE) || !JS_DefineProperty(cx, obj, "index", INT_TO_JSVAL(aIndex), NULL, NULL, JSPROP_ENUMERATE) || !JS_DefineProperty(cx, obj, "feedURI", feedURI, NULL, NULL, JSPROP_ENUMERATE) || !JS_DefineProperty(cx, obj, "siteURI", siteURI, NULL, NULL, JSPROP_ENUMERATE)) { return JSVAL_NULL; } return OBJECT_TO_JSVAL(obj); }
/** * The function used as ZOOTranslate from the JavaScript environment. * Use the ZOO-Services messages translation function from the Python * environment (ZOO-API) * * @param cx the JavaScript context * @param argc the number of parameters * @param argv1 the parameter values * @return true */ JSBool JSTranslate(JSContext *cx, uintN argc, jsval *argv1) { jsval *argv = JS_ARGV(cx,argv1); char *str=JSValToChar(cx,&argv[0]); char *tmpValue=_ss(str); JS_SET_RVAL(cx, argv1,STRING_TO_JSVAL(JS_NewStringCopyN(cx,tmpValue,strlen(tmpValue)))); JS_MaybeGC(cx); return JS_TRUE; }
static void CharacterDataHandler(void *userdata, const char *s, int len) { XMLGraphCallback *cb = (XMLGraphCallback *)userdata; JSString *str; JSContext *cx = cb->cb.cx; str = JS_NewStringCopyN(cx, s, len); if (!str) return; JS_DefineProperty(cx, cb->current, "__cdata__", STRING_TO_JSVAL(str), NULL, NULL, 0); }
static void push_path_to_array (JSContext *cx, JSObject *paths, const gchar *path) { jsval val; JSString *st; guint len; JSAutoCompartment ac(cx, paths); st = JS_NewStringCopyN (cx, path, strlen (path)); val = STRING_TO_JSVAL (st); JS_GetArrayLength(cx, paths, &len); JS_SetElement (cx, paths, len, &val); }
static bool ToJSString(JSContext* aCx, GMPMediaKeyStatus aStatus, JS::MutableHandle<JS::Value> aResult) { auto val = uint32_t(ToMediaKeyStatus(aStatus)); MOZ_ASSERT(val < ArrayLength(MediaKeyStatusValues::strings)); JSString* str = JS_NewStringCopyN(aCx, MediaKeyStatusValues::strings[val].value, MediaKeyStatusValues::strings[val].length); if (!str) { return false; } aResult.setString(str); return true; }
static JSBool jsCurrentURL( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) { JSString *jsCurrent = 0 ; std::string current ; if( currentURL( current ) ) { jsCurrent = JS_NewStringCopyN( cx, current.c_str(), current.size() ); } else jsCurrent = JS_NewStringCopyZ( cx, "unknown" ); *rval = STRING_TO_JSVAL( jsCurrent ); return JS_TRUE ; }
static JSBool XPC_XOW_toString(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { obj = GetWrapper(obj); if (!obj) { return ThrowException(NS_ERROR_UNEXPECTED, cx); } JSObject *wrappedObj = GetWrappedObject(cx, obj); if (!wrappedObj) { // Someone's calling toString on our prototype. NS_NAMED_LITERAL_CSTRING(protoString, "[object XPCCrossOriginWrapper]"); JSString *str = JS_NewStringCopyN(cx, protoString.get(), protoString.Length()); if (!str) { return JS_FALSE; } *rval = STRING_TO_JSVAL(str); return JS_TRUE; } XPCCallContext ccx(JS_CALLER, cx); if (!ccx.IsValid()) { return ThrowException(NS_ERROR_FAILURE, cx); } nsresult rv = CanAccessWrapper(cx, wrappedObj, nsnull); if (rv == NS_ERROR_DOM_PROP_ACCESS_DENIED) { nsIScriptSecurityManager *ssm = XPCWrapper::GetSecurityManager(); if (!ssm) { return ThrowException(NS_ERROR_NOT_INITIALIZED, cx); } rv = ssm->CheckPropertyAccess(cx, wrappedObj, STOBJ_GET_CLASS(wrappedObj)->name, GetRTStringByIndex(cx, XPCJSRuntime::IDX_TO_STRING), nsIXPCSecurityManager::ACCESS_GET_PROPERTY); } if (NS_FAILED(rv)) { return JS_FALSE; } XPCWrappedNative *wn = XPCWrappedNative::GetWrappedNativeOfJSObject(cx, wrappedObj); return XPCWrapper::NativeToString(cx, wn, argc, argv, rval, JS_FALSE); }
CEXPORT JSBool def_timestep_view_get_filterColor(JSContext *cx, JSHandleObject obj, JSHandleId id, JSMutableHandleValue vp) { JS_BeginRequest(cx); timestep_view *thiz = (timestep_view*)JS_GetPrivate(obj.get()); if (thiz) { rgba prop = thiz->filter_color; char buf[64]; int len = rgba_to_string(&prop, buf); vp.setString(JS_NewStringCopyN(cx, buf, len)); } JS_EndRequest(cx); return JS_TRUE; }
JSBool S_CCFileUtils::jsfullPathFromRelativePath(JSContext *cx, uint32_t argc, jsval *vp) { if (argc == 1) { JSString *arg0; JS_ConvertArguments(cx, 1, JS_ARGV(cx, vp), "S", &arg0); char *narg0 = JS_EncodeString(cx, arg0); const char *ret = CCFileUtils::sharedFileUtils()->fullPathFromRelativePath(narg0); if (ret == NULL) { JS_SET_RVAL(cx, vp, JSVAL_NULL); return JS_TRUE; } JSString *str = JS_NewStringCopyN(cx, ret, strlen(ret)); JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(str)); return JS_TRUE; } JS_SET_RVAL(cx, vp, JSVAL_TRUE); return JS_TRUE; }
static JSBool jsAbsoluteURL( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) { if( ( 1 == argc ) && ( JSVAL_IS_STRING( argv[0] ) ) ) { JSString *urlString = JS_ValueToString( cx, argv[0] ); std::string url( JS_GetStringBytes( urlString ), JS_GetStringLength( urlString ) ); std::string absolute ; if( absoluteURL( url, absolute ) ) *rval = STRING_TO_JSVAL( JS_NewStringCopyN( cx, absolute.c_str(), absolute.size() ) ); else *rval = JSVAL_FALSE ; } else *rval = JSVAL_FALSE ; return JS_TRUE ; }
FRAGMENT(GCCellPtr, simple) { JS::GCCellPtr nulll(nullptr); JS::Rooted<JSObject*> glob(cx, JS::CurrentGlobalOrNull(cx)); JS::Rooted<JSString*> empty(cx, JS_NewStringCopyN(cx, nullptr, 0)); JS::Rooted<Symbol*> unique(cx, NewSymbol(cx, nullptr)); JS::GCCellPtr object(glob.get()); JS::GCCellPtr string(empty.get()); JS::GCCellPtr symbol(unique.get()); breakpoint(); (void) nulll; (void) object; (void) string; (void) symbol; }
nsresult Dashboard::GetWebSocketConnections() { jsval val; JSString* jsstring; JSContext* cx = nsContentUtils::GetSafeJSContext(); JSAutoRequest request(cx); JSObject* finalObject = JS_NewObject(cx, nullptr, nullptr, nullptr); if (!finalObject) return NS_ERROR_OUT_OF_MEMORY; CREATE_ARRAY_OBJECT(hostJs); CREATE_ARRAY_OBJECT(msgSentJs); CREATE_ARRAY_OBJECT(msgRecvJs); CREATE_ARRAY_OBJECT(sizeSentJs); CREATE_ARRAY_OBJECT(sizeRecvJs); CREATE_ARRAY_OBJECT(encryptJs); mozilla::MutexAutoLock lock(mWs.lock); for (uint32_t i = 0; i < mWs.data.Length(); i++) { jsstring = JS_NewStringCopyN(cx, mWs.data[i].mHost.get(), mWs.data[i].mHost.Length()); SET_ELEMENT(hostJs, STRING_TO_JSVAL, jsstring, i); SET_ELEMENT(msgSentJs, INT_TO_JSVAL, mWs.data[i].mMsgSent, i); SET_ELEMENT(msgRecvJs, INT_TO_JSVAL, mWs.data[i].mMsgReceived, i); SET_ELEMENT(sizeSentJs, DOUBLE_TO_JSVAL, (double) mWs.data[i].mSizeSent, i); SET_ELEMENT(sizeRecvJs, DOUBLE_TO_JSVAL, (double) mWs.data[i].mSizeReceived, i); SET_ELEMENT(encryptJs, BOOLEAN_TO_JSVAL, mWs.data[i].mEncrypted, i); } SET_PROPERTY(finalObject, hostJs, hostport); SET_PROPERTY(finalObject, msgSentJs, msgsent); SET_PROPERTY(finalObject, msgRecvJs, msgreceived); SET_PROPERTY(finalObject, sizeSentJs, sentsize); SET_PROPERTY(finalObject, sizeRecvJs, receivedsize); SET_PROPERTY(finalObject, encryptJs, encrypted); val = OBJECT_TO_JSVAL(finalObject); mWs.cb->OnDashboardDataAvailable(val); mWs.cb = nullptr; return NS_OK; }
static JSBool convert_symbol_to_js(JohnsonRuntime* runtime, VALUE symbol, jsval* retval) { JSContext * context = johnson_get_current_context(runtime); PREPARE_JROOTS(context, 2); VALUE to_s = CALL_RUBY_WRAPPER(rb_funcall_0, symbol, rb_intern("to_s"), 0); jsval name = STRING_TO_JSVAL(JS_NewStringCopyN(context, StringValuePtr(to_s), (size_t) StringValueLen(to_s))); JROOT(name); // calls Johnson.symbolize(name) in JS-land. See lib/prelude.js jsval nsJohnson; JCHECK(JS_GetProperty(context, runtime->global, "Johnson", &nsJohnson)); JROOT(nsJohnson); JCHECK(JS_CallFunctionName(context, JSVAL_TO_OBJECT(nsJohnson), "symbolize", 1, &name, retval)); JRETURN; }
static JSBool jsReadln( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) { *rval = JSVAL_FALSE ; if( 0 == argc ) { if( !lineQueue_.empty() ) { std::string line = lineQueue_.front(); lineQueue_.pop_front(); JSString *str = JS_NewStringCopyN( cx, line.c_str(), line.size() ); *rval = STRING_TO_JSVAL( str ); } } else JS_ReportError( cx, "usage: tty.readln()" ); return JS_TRUE ; }
JSBool S_CCFileUtils::jsgetFileData(JSContext *cx, uint32_t argc, jsval *vp) { if (argc == 2) { JSString *arg0; JSString *arg1; unsigned long len; JS_ConvertArguments(cx, 2, JS_ARGV(cx, vp), "SS", &arg0, &arg1); char *narg0 = JS_EncodeString(cx, arg0); char *narg1 = JS_EncodeString(cx, arg1); unsigned char *ret = CCFileUtils::sharedFileUtils()->getFileData(narg0, narg1, &len); if (ret == NULL) { JS_SET_RVAL(cx, vp, JSVAL_NULL); return JS_TRUE; } JSString *str = JS_NewStringCopyN(cx, (const char *)ret, len); JS_SET_RVAL(cx, vp, STRING_TO_JSVAL(str)); return JS_TRUE; } JS_SET_RVAL(cx, vp, JSVAL_TRUE); return JS_TRUE; }