* free().
*/
char *xc_xenver_extraversion(xc_interface *xch);
+char *xc_xenver_capabilities(xc_interface *xch);
int xc_flask_op(xc_interface *xch, xen_flask_op_t *op);
{
return varbuf_simple_string(xch, XENVER_extraversion2);
}
+
+char *xc_xenver_capabilities(xc_interface *xch)
+{
+ return varbuf_simple_string(xch, XENVER_capabilities2);
+}
union {
xen_compile_info_t xen_cc;
xen_changeset_info_t xen_chgset;
- xen_capabilities_info_t xen_caps;
xen_platform_parameters_t p_parms;
xen_commandline_t xen_commandline;
xen_build_id_t build_id;
info->compile_domain = libxl__strdup(NOGC, u.xen_cc.compile_domain);
info->compile_date = libxl__strdup(NOGC, u.xen_cc.compile_date);
- xc_version(ctx->xch, XENVER_capabilities, &u.xen_caps);
- info->capabilities = libxl__strdup(NOGC, u.xen_caps);
+ info->capabilities = xc_xenver_capabilities(ctx->xch);
xc_version(ctx->xch, XENVER_changeset, &u.xen_chgset);
info->changeset = libxl__strdup(NOGC, u.xen_chgset);
CAMLprim value stub_xc_version_capabilities(value xch_val)
{
- xen_capabilities_info_t ci;
+ CAMLparam1(xch_val);
+ CAMLlocal1(result);
+ xc_interface *xch = xch_of_val(xch_val);
+ char *capabilities;
+
+ caml_enter_blocking_section();
+ capabilities = xc_xenver_capabilities(xch);
+ caml_leave_blocking_section();
- return xc_version_single_string(xch_val, XENVER_capabilities, &ci);
+ if (!capabilities)
+ failwith_xc(xch);
+
+ result = caml_copy_string(capabilities);
+
+ free(capabilities);
+
+ CAMLreturn(result);
}