JSBool xpc_DumpEvalInJSStackFrame(JSContext* cx, JSUint32 frameno, const char* text) { JSStackFrame* fp; JSStackFrame* iter = nsnull; JSUint32 num = 0; if(!cx || !text) { puts("invalid params passed to xpc_DumpEvalInJSStackFrame!"); return JS_FALSE; } printf("js[%d]> %s\n", frameno, text); while(nsnull != (fp = JS_FrameIterator(cx, &iter))) { if(num == frameno) break; num++; } if(!fp) { puts("invalid frame number!"); return JS_FALSE; } JSExceptionState* exceptionState = JS_SaveExceptionState(cx); JSErrorReporter older = JS_SetErrorReporter(cx, xpcDumpEvalErrorReporter); jsval rval; JSString* str; const char* chars; if(JS_EvaluateInStackFrame(cx, fp, text, strlen(text), "eval", 1, &rval) && nsnull != (str = JS_ValueToString(cx, rval)) && nsnull != (chars = JS_GetStringBytes(str))) { printf("%s\n", chars); } else puts("eval failed!"); JS_SetErrorReporter(cx, older); JS_RestoreExceptionState(cx, exceptionState); return JS_TRUE; }
JSBool ADM_JSAvidemuxAudio::Save(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin Save ADM_JSAvidemuxAudio *p = (ADM_JSAvidemuxAudio *)JS_GetPrivate(cx, obj); // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 1) return JS_FALSE; if(JSVAL_IS_STRING(argv[0]) == false) return JS_FALSE; char *pTempStr = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); printf("Saving Audio \"%s\"\n",pTempStr); enterLock(); *rval = INT_TO_JSVAL(A_audioSave(pTempStr)); leaveLock() return JS_TRUE; }// end Save
static const char* JSVAL2String(JSContext* cx, jsval val, JSBool* isString) { const char* value = nsnull; JSString* value_str = JS_ValueToString(cx, val); if(value_str) value = JS_GetStringBytes(value_str); if(value) { const char* found = strstr(value, "function "); if(found && (value == found || value+1 == found || value+2 == found)) value = "[function]"; } if(isString) *isString = JSVAL_IS_STRING(val); return value; }
JSBool ADM_JSDialogFactory::JSConstructor(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { if (argc != 1) return JS_FALSE; if (JSVAL_IS_STRING(argv[0]) == false) return JS_FALSE; ADM_scriptDialogFactoryHelper *pObject = new ADM_scriptDialogFactoryHelper(JS_GetStringBytes(JSVAL_TO_STRING(argv[0]))); if (!JS_SetPrivate(cx, obj, pObject)) return JS_FALSE; *rval = OBJECT_TO_JSVAL(obj); return JS_TRUE; }
char *sm_eval(spidermonkey_vm *vm, const char *filename, const char *code, int handle_retval) { char *retval = NULL; JSScript *script; jsval result; begin_request(vm); script = JS_CompileScript(vm->context, vm->global, code, strlen(code), filename, 1); spidermonkey_error *error = (spidermonkey_error *) JS_GetContextPrivate(vm->context); if (error == NULL) { JS_ClearPendingException(vm->context); JS_ExecuteScript(vm->context, vm->global, script, &result); error = (spidermonkey_error *) JS_GetContextPrivate(vm->context); if (error == NULL) { if (handle_retval) { if (JSVAL_IS_STRING(result)) { JSString *str = JS_ValueToString(vm->context, result); retval = copy_jsstring(str); } else if(strcmp(JS_GetStringBytes(JS_ValueToString(vm->context, result)), "undefined") == 0) { retval = copy_string("{\"error\": \"Expression returned undefined\", \"lineno\": 0, \"source\": \"unknown\"}"); } else { retval = copy_string("{\"error\": \"non-JSON return value\", \"lineno\": 0, \"source\": \"unknown\"}"); } } JS_DestroyScript(vm->context, script); } else { retval = error_to_json(error); free_error(error); JS_SetContextPrivate(vm->context, NULL); } } else { retval = error_to_json(error); free_error(error); JS_SetContextPrivate(vm->context, NULL); } JS_MaybeGC(vm->context); end_request(vm); return retval; }
static JSBool jsSetCooked( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval ) { *rval = JSVAL_VOID ; if( ( 1 == argc ) && JSVAL_IS_STRING( argv[0] ) ) { touchCalibration_t &cal = touchCalibration_t::get(); cal.setCalibration( JS_GetStringBytes( JSVAL_TO_STRING( argv[0] ) ) ); if( touchPoll_ ) touchPoll_->setCooked(); } else JS_ReportError( cx, "Usage: touchScreen.setCooked( { scale:{ x:#, y:# }, origin:{ x:#, y:# }, range:{ x:#, y:# }, swapXY=bool } )" ); return JS_TRUE ; }
static char * getStringArgument(JSContext *cx, JSObject *obj, PRUint16 argNum, uintN argc, jsval *argv) { if (argc <= argNum || !JSVAL_IS_STRING(argv[argNum])) { JS_ReportError(cx, "String argument expected"); return nsnull; } /* * We don't want to use JS_ValueToString because we want to be able * to have an object to represent a target in subsequent versions. */ JSString *str = JSVAL_TO_STRING(argv[argNum]); if (!str) return nsnull; return JS_GetStringBytes(str); }
static JSBool jsMD5Cram( JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { *rval = JSVAL_FALSE ; if( ( 1 == argc ) && JSVAL_IS_STRING( argv[0] ) ) { JSString *sArg = JSVAL_TO_STRING( argv[0] ); md5_t md5 ; if( md5Cramfs( JS_GetStringBytes( sArg ), md5 ) ) *rval = md5ToRval( cx, md5 ); } else JS_ReportError( cx, "Usage: md5( string );" ); return JS_TRUE; }
/********************** Extract Path from a filename **************/ JSBool pathOnly(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin systemExecute // default return value *rval = INT_TO_JSVAL(-1); if(argc != 1) return JS_FALSE; if(JSVAL_IS_STRING(argv[0]) == false ) return JS_FALSE; char *name=NULL; char *orgName = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); PathStripName(orgName); /* Remove last / or last \ */ int l=strlen(orgName); if(l) orgName[l-1]=0; *rval=STRING_TO_JSVAL(JS_NewStringCopyZ(cx,orgName)); return JS_TRUE; }// end systemExecute
// dnsResolveEx in JS context; not available in core JavaScript. // returns javascript null if not able to resolve. static JSBool // JS_TRUE or JS_FALSE dns_resolve_ex(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { char* name = JS_GetStringBytes(JS_ValueToString(cx, argv[0])); char* out; char ipaddr[INET6_ADDRSTRLEN * MAX_IP_RESULTS + MAX_IP_RESULTS] = ""; out = JS_malloc(cx, strlen(ipaddr) + 1); // Return "" on failure. if(resolve_host(name, ipaddr, MAX_IP_RESULTS, AF_UNSPEC)) { strcpy(out, ""); } strcpy(out, ipaddr); JSString *str = JS_NewString(cx, out, strlen(out)); *rval = STRING_TO_JSVAL(str); return JS_TRUE; }
static JSBool DefineGetterOrSetter(JSContext *cx, uintN argc, JSBool wantGetter, jsval *vp) { uintN attrs; JSBool found; JSPropertyOp getter, setter; JSObject *obj2; jsval v; jsid interned_id; XPC_QS_ASSERT_CONTEXT_OK(cx); JSObject *obj = JS_THIS_OBJECT(cx, vp); if (!obj) return JS_FALSE; JSFastNative forward = wantGetter ? js_obj_defineGetter : js_obj_defineSetter; jsval id = (argc >= 1) ? JS_ARGV(cx, vp)[0] : JSVAL_VOID; if(!JSVAL_IS_STRING(id)) return forward(cx, argc, vp); JSString *str = JSVAL_TO_STRING(id); const char *name = JS_GetStringBytes(str); if(!JS_ValueToId(cx, id, &interned_id) || !JS_LookupPropertyWithFlagsById(cx, obj, interned_id, JSRESOLVE_QUALIFIED, &obj2, &v) || (obj2 && !JS_GetPropertyAttrsGetterAndSetterById(cx, obj2, interned_id, &attrs, &found, &getter, &setter))) return JS_FALSE; // The property didn't exist, already has a getter or setter, or is not // our property, then just forward now. if(!obj2 || (attrs & (JSPROP_GETTER | JSPROP_SETTER)) || !(getter || setter) || !IS_PROTO_CLASS(STOBJ_GET_CLASS(obj2))) return forward(cx, argc, vp); // Reify the getter and setter... if(!ReifyPropertyOps(cx, obj, id, interned_id, name, getter, setter, nsnull, nsnull)) return JS_FALSE; return forward(cx, argc, vp); }
JSBool perlsub_as_constructor( JSContext *cx, JSObject *obj, pjsid id, DEFSTRICT_ jsval *vp ) { // dTHX; const char *key; if(!PJSID_IS(STRING, id)) { return JS_TRUE; } #if JS_VERSION < 185 key = JS_GetStringBytes(PJSID_TO(STRING, id)); #else JSAutoByteString bytes(cx, PJSID_TO(STRING, id)); key = bytes.ptr(); #endif if(strEQ(key, "constructor")) { JSObject *constructor; if(JSVAL_IS_OBJECT(*vp) && (constructor = JSVAL_TO_OBJECT(*vp)) && PJS_GET_CLASS(cx, constructor) == &perlsub_class) { /* TODO: Change the constructor 'name' */ jsval temp; JSObject *stash = JS_GetPrototype(cx, obj); JS_SetPrototype(cx, stash, JS_GetPrototype(cx, constructor)); JS_SetPrototype(cx, constructor, stash); JS_DefineProperty(cx, constructor, "prototype", OBJECT_TO_JSVAL(obj), NULL, NULL, 0); JS_LookupProperty(cx, obj, "__PACKAGE__", &temp); // warn("Constructor set for %s\n", JS_GetStringBytes(JSVAL_TO_STRING(temp))); return JS_TRUE; } else { JS_ReportError(cx, "Invalid constructor type"); return JS_FALSE; } } else warn ("Opps: setting %s?\n", key); return JS_TRUE; }
/** * Get the interface name and member name (for error messages). * * We could instead have each quick stub pass its name to the error-handling * functions, as that name is statically known. But that would be redundant; * the information is handy at runtime anyway. Also, this code often produces * a more specific error message, e.g. "[nsIDOMHTMLDocument.appendChild]" * rather than "[nsIDOMNode.appendChild]". */ static void GetMemberInfo(JSObject *obj, jsval memberId, const char **ifaceName, const char **memberName) { // Get the interface name. From DefinePropertyIfFound (in // xpcwrappednativejsops.cpp) and XPCThrower::Verbosify. // // We could instead make the quick stub could pass in its interface name, // but this code often produces a more specific error message, e.g. *ifaceName = "Unknown"; NS_ASSERTION(IS_WRAPPER_CLASS(STOBJ_GET_CLASS(obj)) || STOBJ_GET_CLASS(obj) == &XPC_WN_Tearoff_JSClass || IS_SLIM_WRAPPER(obj), "obj must be a wrapper"); XPCWrappedNativeProto *proto; if(IS_SLIM_WRAPPER(obj)) { proto = GetSlimWrapperProto(obj); } else { XPCWrappedNative *wrapper = (XPCWrappedNative *) obj->getPrivate(); proto = wrapper->GetProto(); } if(proto) { XPCNativeSet *set = proto->GetSet(); if(set) { XPCNativeMember *member; XPCNativeInterface *iface; if(set->FindMember(memberId, &member, &iface)) *ifaceName = iface->GetNameString(); } } *memberName = (JSVAL_IS_STRING(memberId) ? JS_GetStringBytes(JSVAL_TO_STRING(memberId)) : "unknown"); }
/** process requests in the queue. */ xjse_result_t xjse_xpnet_do_queue(XPNETCTX* pxpnctx) { xjse_result_t xr1 = XJSE_SUCCESS; xjse_int_t i; for(i = 0; i < XPNETC_NMAXREQQITEMS; i++) { XPNETREQQITEM* pitem = &(pxpnctx->xpnetreqq[i]); //XJSE_TRACE("(X) state (%d, %p)[%d]", i, pitem, pitem->state); switch(pitem->state) { case XPNREQQITEMSTATE_RESPREADY: { // response has been loaded, exec onreadystatechange. jsval v1; JSBool b1 = JS_GetProperty( pitem->pjsctx, pitem->poxhr, "onreadystatechange", &v1); if(b1 == JS_TRUE) { jsval rv0; b1 = JS_CallFunctionValue( pitem->pjsctx, pitem->poxhr, v1, 0, 0, &rv0); if(b1 != JS_TRUE) { XJSE_TRACE("(E) JS_CallFunctionValue() failed!"); pitem->state = XPNREQQITEMSTATE_EMPTY; goto failed; } XJSE_TRACE("(X) xjse_xhr_send() JS_CallFunctionValue() returned (%s).", JS_GetStringBytes(JS_ValueToString(pitem->pjsctx, rv0))); } // pitem->state = XPNREQQITEMSTATE_EMPTY; } break; case XPNREQQITEMSTATE_OBSOLETED: XJSE_TRACE("(X) xjse_xpnet_do_queue(): obs'ed req detected. " "(idx: %d)", i); pitem->state = XPNREQQITEMSTATE_EMPTY; break; } } return XJSE_SUCCESS; failed: return xr1; }
/* Look up the component for the specified slot of the plug-in list */ static JSComponent* componentarray_create_component(JSContext *cx, JSComponentArray *array, JSComponent *component, const char *targetName, jsint targetSlot) { component = component_create_self(cx, array->decoder, component, targetName); if (component) { char *name; jsval val; name = JS_GetStringBytes(component->name); val = OBJECT_TO_JSVAL(component->obj); JS_DefineProperty(cx, array->obj, name, val, NULL, NULL, JSPROP_ENUMERATE); JS_AliasElement(cx, array->obj, name, targetSlot); array->length++; return component; } return NULL; }
component_mozilla_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { char *name, *type_str, *get_str; jsval type, func; if (!JSVAL_IS_STRING(id)) return JS_TRUE; name = JS_GetStringBytes(JSVAL_TO_STRING(id)); type_str = JS_malloc(cx, XP_STRLEN(lm_typePrefix_str) + XP_STRLEN(name) + 1); get_str = JS_malloc(cx, XP_STRLEN(lm_getPrefix_str) + XP_STRLEN(name) + 1); if (!type_str || !get_str) return JS_TRUE; XP_STRCPY(type_str, lm_typePrefix_str); XP_STRCAT(type_str, name); XP_STRCPY(get_str, lm_getPrefix_str); XP_STRCAT(get_str, name); if (!JS_GetProperty(cx, obj, type_str, &type) || !JSVAL_IS_INT(type) || !JS_GetProperty(cx, obj, get_str, &func)) return JS_TRUE; JS_free(cx, type_str); JS_free(cx, get_str); switch(JSVAL_TO_INT(type)) { case ARGTYPE_INT32: *vp = INT_TO_JSVAL((int32)ET_moz_CompGetterFunction((ETCompPropGetterFunc)JSVAL_TO_INT(func), name)); break; case ARGTYPE_BOOL: *vp = BOOLEAN_TO_JSVAL((JSBool)ET_moz_CompGetterFunction((ETCompPropGetterFunc)JSVAL_TO_INT(func), name)); break; case ARGTYPE_STRING: *vp = STRING_TO_JSVAL(JS_NewStringCopyZ(cx, (char*)ET_moz_CompGetterFunction((ETCompPropGetterFunc)JSVAL_TO_INT(func), name))); break; } return JS_TRUE; }
/* arguments: 0. component name 1. version no. to fill in return: error status */ JSBool PR_CALLBACK asd_get_version (JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval) { REGERR status = 0; if (argc >= 2 && JSVAL_IS_STRING(argv[0]) && JSVAL_IS_OBJECT(argv[1])) { VERSION vers; char* component_path = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); status = VR_GetVersion(component_path, &vers); if (status == REGERR_OK) { JSObject* versObj = JSVAL_TO_OBJECT(argv[1]); asd_versToObj(cx, &vers, versObj); } } *rval = INT_TO_JSVAL(status); return JS_TRUE; }
// dnsResolve in JS context; not available in core JavaScript. // returns javascript null if not able to resolve. static JSBool // JS_TRUE or JS_FALSE dns_resolve(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { char* name = JS_GetStringBytes(JS_ValueToString(cx, argv[0])); char* out; char ipaddr[INET6_ADDRSTRLEN] = ""; // Return null on failure. if(resolve_host(name, ipaddr, 1, AF_INET)) { *rval = JSVAL_NULL; return JS_TRUE; } out = JS_malloc(cx, strlen(ipaddr) + 1); strcpy(out, ipaddr); JSString *str = JS_NewString(cx, out, strlen(out)); *rval = STRING_TO_JSVAL(str); return JS_TRUE; }
static JSBool Load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { nsJSSh* shell; JSAutoRequest ar(cx); if (!GetJSShGlobal(cx, obj, &shell)) return JS_FALSE; for (unsigned int i=0; i<argc; ++i) { JSString *str = JS_ValueToString(cx, argv[i]); if (!str) return JS_FALSE; //argv[i] = STRING_TO_JSVAL(str); const char *url = JS_GetStringBytes(str); if (!shell->LoadURL(url, rval)) return JS_FALSE; } return JS_TRUE; }
JSBool ADM_JSAvidemux::Load(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {// begin Load ADM_JSAvidemux *p = (ADM_JSAvidemux *)JS_GetPrivate(cx, obj); // default return value *rval = BOOLEAN_TO_JSVAL(false); if(argc != 1) return JS_FALSE; if(JSVAL_IS_STRING(argv[0]) == false) return JS_FALSE; char *pTempStr = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); printf("Loading \"%s\"\n",pTempStr); // Do a failure instead of returing ko *rval = BOOLEAN_TO_JSVAL(JS_TRUE); jsrefcount nRefCount = JS_SuspendRequest(cx); if(!A_openAvi(pTempStr)) return JS_FALSE; JS_ResumeRequest(cx,nRefCount); return JS_TRUE; }// end Load
NativeInterfaceSweeper(JSDHashTable *table, JSDHashEntryHdr *hdr, uint32 number, void *arg) { CX_AND_XPCRT_Data* data = (CX_AND_XPCRT_Data*) arg; XPCNativeInterface* iface = ((IID2NativeInterfaceMap::Entry*)hdr)->value; if(iface->IsMarked()) { iface->Unmark(); return JS_DHASH_NEXT; } #ifdef XPC_REPORT_NATIVE_INTERFACE_AND_SET_FLUSHING printf("- Destroying XPCNativeInterface for %s\n", JS_GetStringBytes(JSVAL_TO_STRING(iface->GetName()))); #endif XPCNativeInterface::DestroyInstance(data->cx, data->rt, iface); return JS_DHASH_REMOVE; }
void js_prop_set_from_jsval(JSContext *cx, prop_t *p, jsval value) { JSBool b; if(JSVAL_IS_INT(value)) { prop_set_int(p, JSVAL_TO_INT(value)); } else if(JSVAL_IS_BOOLEAN(value)) { prop_set_int(p, JSVAL_TO_BOOLEAN(value)); } else if(JSVAL_IS_NULL(value) || JSVAL_IS_VOID(value)) { prop_set_void(p); } else if(JSVAL_IS_DOUBLE(value)) { double d; if(JS_ValueToNumber(cx, value, &d)) prop_set_float(p, d); } else if(JS_HasInstance(cx, RichText, value, &b) && b) { JSObject *o = JSVAL_TO_OBJECT(value); jsval v2; if(!JS_EnterLocalRootScope(cx)) return; if(!JS_GetProperty(cx, o, "text", &v2)) { JS_LeaveLocalRootScope(cx); return; } prop_set_string_ex(p, NULL, JS_GetStringBytes(JS_ValueToString(cx, v2)), PROP_STR_RICH); JS_LeaveLocalRootScope(cx); } else if(JSVAL_IS_STRING(value)) { js_prop_from_str(cx, p, value); } else if(JSVAL_IS_OBJECT(value)) { JSObject *obj = JSVAL_TO_OBJECT(value); JSClass *c = JS_GetClass(cx, obj); if(!strcmp(c->name, "XML")) // Treat some classes special js_prop_from_str(cx, p, value); else js_prop_from_object(cx, obj, p); } else { prop_set_void(p); } }
JSBool Output_flush (JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { JS_BeginRequest(cx); JS_EnterLocalRootScope(cx); jsval property; JS_GetProperty(cx, obj, "content", &property); FCGX_PutS(JS_GetStringBytes(JS_ValueToString(cx, property)), ((LCGIData*) JS_GetContextPrivate(cx))->cgi->out); property = JS_GetEmptyStringValue(cx); JS_SetProperty(cx, obj, "content", &property); JS_LeaveLocalRootScope(cx); JS_EndRequest(cx); return JS_TRUE; }
static JSBool js_ungetstr(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { char* p; sbbs_t* sbbs; JSString* js_str; if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) return(JS_FALSE); if((js_str=JS_ValueToString(cx, argv[0]))==NULL) return(JS_FALSE); p=JS_GetStringBytes(js_str); while(p && *p) sbbs->ungetkey(*(p++)); return(JS_TRUE); }
int js_prop_from_object(JSContext *cx, JSObject *obj, prop_t *p) { JSIdArray *ida; int i, r = 0; const char *n; int array_zapped = 0; if((ida = JS_Enumerate(cx, obj)) == NULL) return -1; for(i = 0; i < ida->length; i++) { jsval name, value; if(!JS_IdToValue(cx, ida->vector[i], &name)) continue; if(JSVAL_IS_STRING(name)) { n = JS_GetStringBytes(JSVAL_TO_STRING(name)); if(!JS_GetProperty(cx, obj, n, &value)) continue; } else if(JSVAL_IS_INT(name)) { if(!JS_GetElement(cx, obj, JSVAL_TO_INT(name), &value) || JSVAL_IS_VOID(value)) continue; if(!array_zapped) { array_zapped = 1; prop_destroy_by_name(p, NULL); } n = NULL; } else { continue; } if(JSVAL_TO_OBJECT(value) == obj) continue; js_prop_set_from_jsval(cx, prop_create(p, n), value); } JS_DestroyIdArray(cx, ida); return r; }
const char* gjs_value_debug_string(JSContext *context, jsval value) { JSString *str; const char *bytes; JS_BeginRequest(context); str = JS_ValueToString(context, value); if (str == NULL) { if (JSVAL_IS_OBJECT(value)) { /* Specifically the Call object (see jsfun.c in spidermonkey) * does not have a toString; there may be others also. */ JSClass *klass; klass = JS_GET_CLASS(context, JSVAL_TO_OBJECT(value)); if (klass != NULL) { str = JS_NewStringCopyZ(context, klass->name); JS_ClearPendingException(context); if (str == NULL) { return "[out of memory copying class name]"; } } else { gjs_log_exception(context, NULL); return "[unknown object]"; } } else { return "[unknown non-object]"; } } g_assert(str != NULL); bytes = JS_GetStringBytes(str); JS_EndRequest(context); return bytes; }
static JSBool js_getkeys(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { char key[2]; uintN i; long val; ulong maxnum=~0; sbbs_t* sbbs; JSString* js_str=NULL; if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) return(JS_FALSE); for(i=0;i<argc;i++) { if(JSVAL_IS_NUMBER(argv[i])) { JS_ValueToInt32(cx,argv[i],(int32*)&maxnum); continue; } if(JSVAL_IS_STRING(argv[i])) { js_str = JS_ValueToString(cx, argv[i]); } } if(js_str==NULL) return(JS_FALSE); val=sbbs->getkeys(JS_GetStringBytes(js_str),maxnum); if(val==-1) { // abort *rval = INT_TO_JSVAL(0); } else if(val<0) { // number val&=~0x80000000; *rval = INT_TO_JSVAL(val); } else { // key key[0]=(uchar)val; key[1]=0; if((js_str = JS_NewStringCopyZ(cx, key))==NULL) return(JS_FALSE); *rval = STRING_TO_JSVAL(js_str); } return(JS_TRUE); }
static JSBool js_item_onEvent(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { js_item_t *ji = JS_GetPrivate(cx, obj); if(!JS_ObjectIsFunction(cx, JSVAL_TO_OBJECT(argv[1]))) { JS_ReportError(cx, "Argument is not a function"); return JS_FALSE; } js_event_handler_create(cx, &ji->ji_event_handlers, JSVAL_IS_STRING(argv[0]) ? JS_GetStringBytes(JS_ValueToString(cx, argv[0])) : NULL, argv[1]); *rval = JSVAL_VOID; return JS_TRUE; }
static JSBool pb_getProperty(JSContext *cx, JSObject *obj, jsval id, jsval *vp) { prop_t *p = JS_GetPrivate(cx, obj); prop_t *c; hts_mutex_lock(&prop_mutex); if(p->hp_type != PROP_DIR) { hts_mutex_unlock(&prop_mutex); return JS_TRUE; } if(JSVAL_IS_STRING(id)) { const char *name = JS_GetStringBytes(JSVAL_TO_STRING(id)); TAILQ_FOREACH(c, &p->hp_childs, hp_parent_link) if(c->hp_name != NULL && !strcmp(c->hp_name, name)) break; } else if(JSVAL_IS_INT(id)) {
static JSBool js_printfile(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) { long mode=0; JSString* str; sbbs_t* sbbs; if((sbbs=(sbbs_t*)JS_GetContextPrivate(cx))==NULL) return(JS_FALSE); str = JS_ValueToString(cx, argv[0]); if (!str) return(JS_FALSE); if(argc>1 && JSVAL_IS_NUMBER(argv[1])) JS_ValueToInt32(cx,argv[1],(int32*)&mode); sbbs->printfile(JS_GetStringBytes(str),mode); return(JS_TRUE); }