Settings::Settings() { auto lk = getLocker(); set(ZMKW_LOGPORT, ZCSTR("59000"), lk); set(ZMKW_LOGSERVER, ZCSTR("127.0.0.1"), lk); set(ZMKW_LOGPROTO, ZCSTR("ZMG_PUB"), lk); ZConstString home_str((const char*)secure_getenv("HOME")); set(ZMB::ZMKW_USER_HOME, home_str, lk); char* temp = (char*)alloca(ZMB::max<unsigned>(1024u, (unsigned)(4 * home_str.len))); ZUnsafeBuf buf(temp, 1024); buf.fill(0); buf.read(0, home_str, 0); char* origin = buf.begin(); buf.str += home_str.len;//advance to point after the user home location buf.len -= home_str.len; auto __set_value = [&](ZConstString str, ZConstString key) mutable { char* end = 0; buf.read(&end, str, 0); *end = '\0'; set(key, ZConstString(origin, end), lk); }; __set_value(ZCSTR("/zmbaq_config.json"), ZMKW_CFG_LOCATION); /** TODO: platform-dependent temporary storage. **/ __set_value(ZCSTR("/tmp/video_temp"), ZMKW_FS_TEMP_LOCATION); __set_value(ZCSTR("/tmp/video_perm"), ZMKW_FS_PERM_LOCATION); __set_value(ZCSTR("/tmp/test_db"), ZMKW_TESTDB_LOCATION); __set_value(ZCSTR("/tmp/test_blob_db"), ZMKW_TESTDBBLOB_LOCATION); }
DEFINE_PROPERTY_GETTER( const ) { JL_DEFINE_PROP_ARGS; JL_CHK( JL_GetReservedSlot( JL_OBJ, 0, JL_RVAL ) ); if ( JL_RVAL.isUndefined() ) return true; int errorCode = JL_RVAL.toInt32(); JL_CHK( jl::setValue( cx, JL_RVAL, ZConstString( errorCode ) ) ); return true; JL_BAD; }
ZConstString Settings::string(ZConstString key, Settings::Locker_t& lk) const { (void)lk; auto jp = jvalue(key, lk); bool ok = nullptr != jp && jp->isString(); const char* b = 0, *e = 0; assert(ok); if (ok) { jp->getString(&b, &e); } return ZConstString(b, e); }
END_FUNCTION_SPEC END_CLASS NEVER_INLINE bool FASTCALL ThrowZError( JSContext *cx, int errorCode, const char *errorMessage ) { JS::RootedObject error(cx, jl::newObjectWithGivenProto(cx, JL_CLASS(ZError), JL_CLASS_PROTOTYPE(cx, ZError))); jl::setException(cx, error); JL_CHK( jl::setSlot(cx, error, 0, errorCode) ); JL_CHK( jl::setSlot(cx, error, 1, errorMessage != NULL ? errorMessage : ZConstString(errorCode)) ); JL_SAFE( jl::addScriptLocation(cx, &error) ); return false; JL_BAD; }