JSBool netgetjoinableous(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval) { LPWSTR domain, account, password; JS_BeginRequest(cx); if(!JS_ConvertArguments(cx, argc, argv, "W W W", &domain, &account, &password)) { JS_ReportError(cx, "Error parsing arguments in NetGetJoinableOUs"); JS_EndRequest(cx); } JS_YieldRequest(cx); DWORD ouCount = 0; LPWSTR * ous = NULL; DWORD status = NetGetJoinableOUs(NULL, domain, (JSVAL_IS_NULL(argv[1]) ? NULL : account), (JSVAL_IS_NULL(argv[2]) ? NULL : password), &ouCount, &ous); if(status != NERR_Success) { JS_NewNumberValue(cx, status, rval); JS_EndRequest(cx); return JS_TRUE; } JSObject * arrayObj = JS_NewArrayObject(cx, 0, NULL); *rval = OBJECT_TO_JSVAL(arrayObj); for(DWORD i = 0; i < ouCount; i++) { JSString * curOu = JS_NewUCStringCopyZ(cx, (jschar*)ous[i]); JS_DefineElement(cx, arrayObj, i, STRING_TO_JSVAL(curOu), NULL, NULL, 0); } NetApiBufferFree(ous); JS_EndRequest(cx); return JS_TRUE; }
JSString* JSDOMProcessingInstruction::getData() { if (_pi == NULL) return NULL; XMLChToVXIchar data(_pi->getData()); GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, data.c_str()); return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue); }
/** * Set a property of an object from a nsString. * * If the nsString is void (i.e. IsVoid is true), do nothing. */ bool SetStringProperty(JSContext *cx, JSObject *aObject, const char *aProperty, const nsString aValue) { if (aValue.IsVoid()) { return true; } JSString* strValue = JS_NewUCStringCopyZ(cx, aValue.get()); jsval valValue = STRING_TO_JSVAL(strValue); return JS_SetProperty(cx, aObject, aProperty, &valValue); }
/** * Set a property of an object from a nsString. * * If the nsString is void (i.e. IsVoid is true), do nothing. */ bool SetStringProperty(JSContext *cx, JS::Handle<JSObject*> aObject, const char *aProperty, const nsString aValue) { if (aValue.IsVoid()) { return true; } JSString* strValue = JS_NewUCStringCopyZ(cx, aValue.get()); NS_ENSURE_TRUE(strValue, false); JS::Rooted<JS::Value> valValue(cx, JS::StringValue(strValue)); return JS_SetProperty(cx, aObject, aProperty, valValue); }
JSBool win32_getlasterrormsg(JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval) { LPWSTR buffer; DWORD errorCode = GetLastError(); JS_BeginRequest(cx); if(argc > 0) JS_ValueToECMAUint32(cx, argv[0], (uint32*)&errorCode); FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, errorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&buffer, 0, NULL); JSString * retStr = JS_NewUCStringCopyZ(cx, (jschar*)buffer); JS_EndRequest(cx); LocalFree(buffer); *rval = STRING_TO_JSVAL(retStr); return JS_TRUE; }
JSBool stringPropGetter(JSContext * cx, JSObject * obj, jsval idval, jsval * vp) { JS_BeginRequest(cx); nsCOMPtr<nsIDOMNode> mNode = (nsIDOMNode*)JS_GetPrivate(cx, obj); nsCOMPtr<nsIDOMElement> mElement = do_QueryInterface(mNode); nsString value; switch(JSVAL_TO_INT(idval)) { case NAME_PROP: mNode->GetNodeName(value); break; case VALUE_PROP: mNode->GetNodeValue(value); break; case TAGNAME_PROP: if(mElement) mElement->GetTagName(value); break; case TEXT_PROP: { nsCOMPtr<nsIDOM3Node> l3Node = do_QueryInterface(mNode); if(l3Node != NULL) l3Node->GetTextContent(value); } break; } if(value.IsEmpty()) *vp = JSVAL_NULL; else { JSString * retVal = JS_NewUCStringCopyZ(cx, (jschar*)value.get()); *vp = STRING_TO_JSVAL(retVal); } JS_EndRequest(cx); return JS_TRUE; }
/* * ½«ANSI±àÂëµÄc×Ö·û´®×ª»»ÎªUTF-16±àÂëµÄjs×Ö·û´® */ JSString* c_str_to_js_str( JSContext* cx, const char* v, size_t length /*= -1*/ ) { if (v == nullptr) { return nullptr; } #if 0 JSString* str = JS_NewStringCopyZ(cx, v); #else if (length == -1) { length = strlen(v); } if (length == 0) { return JS_GetEmptyString(JS_GetRuntime(cx)); } JS::RootedString ret(cx); //std::u16string outUtf16; //bool result = UTF8ToUTF16(v, outUtf16); //if (!result) { // return JS_GetEmptyString(JS_GetRuntime(cx)); //} // ANSI -> UTF16 auto len = MultiByteToWideChar(CP_ACP, 0, v, -1, nullptr, 0); WCHAR *utf16Buf = new WCHAR[len]; MultiByteToWideChar(CP_ACP, 0, v, -1, utf16Buf, len); JSString* str = JS_NewUCStringCopyZ(cx, (const jschar*)utf16Buf); delete utf16Buf; #endif return str; }
NS_IMETHODIMP nsHTTPIndex::OnFTPControlLog(PRBool server, const char *msg) { NS_ENSURE_TRUE(mRequestor, NS_OK); nsCOMPtr<nsIScriptGlobalObject> scriptGlobal(do_GetInterface(mRequestor)); NS_ENSURE_TRUE(scriptGlobal, NS_OK); nsIScriptContext *context = scriptGlobal->GetContext(); NS_ENSURE_TRUE(context, NS_OK); JSContext* cx = reinterpret_cast<JSContext*> (context->GetNativeContext()); NS_ENSURE_TRUE(cx, NS_OK); JSObject* global = JS_GetGlobalObject(cx); NS_ENSURE_TRUE(global, NS_OK); jsval params[2]; nsString unicodeMsg; unicodeMsg.AssignWithConversion(msg); JSAutoRequest ar(cx); JSString* jsMsgStr = JS_NewUCStringCopyZ(cx, (jschar*) unicodeMsg.get()); params[0] = BOOLEAN_TO_JSVAL(server); params[1] = STRING_TO_JSVAL(jsMsgStr); jsval val; JS_CallFunctionName(cx, global, "OnFTPControlLog", 2, params, &val); return NS_OK; }
/* static */ void JetpackChild::ReportError(JSContext* cx, const char* message, JSErrorReport* report) { if (sReportingError) { NS_WARNING("Recursive error reported."); return; } sReportingError = true; js::AutoObjectRooter obj(cx, JS_NewObject(cx, NULL, NULL, NULL)); if (report && report->filename) { jsval filename = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, report->filename)); JS_SetProperty(cx, obj.object(), "fileName", &filename); } if (report) { jsval lineno = INT_TO_JSVAL(report->lineno); JS_SetProperty(cx, obj.object(), "lineNumber", &lineno); } jsval msgstr = JSVAL_NULL; if (report && report->ucmessage) msgstr = STRING_TO_JSVAL(JS_NewUCStringCopyZ(cx, report->ucmessage)); else msgstr = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, message)); JS_SetProperty(cx, obj.object(), "message", &msgstr); MessageResult smr; Variant* vp = smr.data.AppendElement(); JetpackActorCommon::jsval_to_Variant(cx, OBJECT_TO_JSVAL(obj.object()), vp); GetThis(cx)->SendSendMessage(NS_LITERAL_STRING("core:exception"), smr.data); sReportingError = false; }
nsresult ArchiveRequest::GetFilenamesResult(JSContext* aCx, JS::Value* aValue, nsTArray<nsCOMPtr<nsIDOMFile> >& aFileList) { JS::Rooted<JSObject*> array(aCx, JS_NewArrayObject(aCx, aFileList.Length(), nullptr)); nsresult rv; if (!array) { return NS_ERROR_OUT_OF_MEMORY; } for (uint32_t i = 0; i < aFileList.Length(); ++i) { nsCOMPtr<nsIDOMFile> file = aFileList[i]; nsString filename; rv = file->GetName(filename); NS_ENSURE_SUCCESS(rv, rv); JSString* str = JS_NewUCStringCopyZ(aCx, filename.get()); NS_ENSURE_TRUE(str, NS_ERROR_OUT_OF_MEMORY); JS::Rooted<JS::Value> item(aCx, STRING_TO_JSVAL(str)); if (NS_FAILED(rv) || !JS_SetElement(aCx, array, i, &item)) { return NS_ERROR_FAILURE; } } if (!JS_FreezeObject(aCx, array)) { return NS_ERROR_FAILURE; } *aValue = OBJECT_TO_JSVAL(array); return NS_OK; }