static void es_fa_read(void *aux) { es_fa_handle_t *fah = aux; es_fap_t *ef = fah->fah_ef; es_context_t *ec = ef->super.er_ctx; duk_context *ctx = ec->ec_duk; es_context_begin(ec); duk_set_top(ctx, 0); duk_push_external_buffer(ctx); es_root_register(ctx, -1, fah->fah_readbuf); duk_config_buffer(ctx, 0, fah->fah_readbuf, fah->fah_readlen); es_push_root(ctx, ef); duk_get_prop_string(ctx, -1, "read"); es_push_native_obj(ctx, &es_native_fah, fah_retain(fah)); es_push_root(ctx, fah); duk_push_buffer_object(ctx, 0, 0, fah->fah_readlen, DUK_BUFOBJ_UINT8ARRAY); duk_push_int(ctx, fah->fah_readlen); duk_push_number(ctx, fah->fah_fpos); int rc = duk_pcall(ctx, 5); if(rc) { fah_exception(fah, ctx); es_dump_err(ctx); } es_context_end(ec, 0); fah_release(fah); }
static void es_fa_stat(void *aux) { es_fa_handle_t *fah = aux; es_fap_t *ef = fah->fah_ef; es_context_t *ec = ef->super.er_ctx; duk_context *ctx = ec->ec_duk; es_context_begin(ec); duk_set_top(ctx, 0); es_push_root(ctx, ef); duk_get_prop_string(ctx, -1, "stat"); es_push_native_obj(ctx, &es_native_fah, fah_retain(fah)); duk_push_string(ctx, fah->fah_url); int rc = duk_pcall(ctx, 2); if(rc) { fah_exception(fah, ctx); es_dump_err(ctx); } es_context_end(ec, 0); fah_release(fah); }
static int es_htsmsg_create_from_xml_duk(duk_context *ctx) { char errbuf[256]; const char *xml = duk_safe_to_string(ctx, 0); htsmsg_t *m = htsmsg_xml_deserialize_cstr(xml, errbuf, sizeof(errbuf)); if(m == NULL) duk_error(ctx, DUK_ERR_ERROR, "Malformed XML -- %s", errbuf); es_push_native_obj(ctx, &es_native_htsmsg, m); return 1; }
static void push_gumbo_node(duk_context *ctx, GumboNode *n, es_gumbo_output_t *ego) { es_push_native_obj(ctx, &es_native_gumbo_node, es_gumbo_node_create(n, ego)); }