/* arguments: 0. url 1. component name 2. version no. to compare 3. flags return: true if update triggered and no errors */ JSBool PR_CALLBACK asd_conditional_update (JSContext *cx, JSObject *obj, uint argc, jsval *argv, jsval *rval) { REGERR status = 0; if (argc >= 4 && JSVAL_IS_STRING(argv[0]) && JSVAL_IS_STRING(argv[1]) && JSVAL_IS_OBJECT(argv[2]) && JSVAL_IS_INT(argv[3])) { VERSION curr_vers; char* component_path = JS_GetStringBytes(JSVAL_TO_STRING(argv[1])); status = VR_GetVersion(component_path, &curr_vers); if (status == REGERR_OK) { JSObject* versObj = JSVAL_TO_OBJECT(argv[2]); VERSION req_vers; asd_objToVers(cx, versObj, &req_vers); if ( asd_compareVersion(&req_vers, &curr_vers) > 0 ) { char* url = JS_GetStringBytes(JSVAL_TO_STRING(argv[0])); MWContext* cx = XP_FindContextOfType(NULL, MWContextBookmarks); XP_Bool result = SU_StartSoftwareUpdate( cx, url, NULL, NULL, NULL, JSVAL_TO_INT(argv[3]) ); *rval = BOOLEAN_TO_JSVAL(result); return JS_TRUE; } } } *rval = BOOLEAN_TO_JSVAL(JS_FALSE); /*INT_TO_JSVAL(status);*/ 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; }
void vFind(char *cmd) { VERSION ver; char path[MAXREGPATHLEN]; if (error("VR_GetVersion", VR_GetVersion(cmd, &ver)) == REGERR_OK) { if (error("VR_GetPath", VR_GetPath(cmd, sizeof(path), path)) == REGERR_OK) { printf("%s found: ver=%d.%d.%d.%d, check=0x%04x, path=%s\n", cmd, ver.major, ver.minor, ver.release, ver.build, ver.check, path); return; } } printf("%s not found.\n", cmd); return; } // vFind