From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vincent Hanquez Subject: [PATCH 3/5] use new functions to get elements out of ocaml values. Date: Tue, 10 Aug 2010 12:46:51 +0100 Message-ID: <1281440813-22610-4-git-send-email-vincent.hanquez@eu.citrix.com> References: <1281440813-22610-1-git-send-email-vincent.hanquez@eu.citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------1.7.1" Return-path: In-Reply-To: <1281440813-22610-1-git-send-email-vincent.hanquez@eu.citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel Cc: Vincent Hanquez List-Id: xen-devel@lists.xenproject.org --------------1.7.1 Content-Type: text/plain; charset="UTF-8"; format=fixed Content-Transfer-Encoding: quoted-printable Signed-off-by: Vincent Hanquez --- tools/ocaml/libs/xl/xl_stubs.c | 66 +++++++++++++++++++++++++---------= ----- 1 files changed, 42 insertions(+), 24 deletions(-) --------------1.7.1 Content-Type: text/x-patch; name="0003-use-new-functions-to-get-elements-out-of-ocaml-value.patch" Content-Disposition: attachment; filename="0003-use-new-functions-to-get-elements-out-of-ocaml-value.patch" Content-Transfer-Encoding: quoted-printable diff --git a/tools/ocaml/libs/xl/xl_stubs.c b/tools/ocaml/libs/xl/xl_stub= s.c index 42f2637..7ba9272 100644 --- a/tools/ocaml/libs/xl/xl_stubs.c +++ b/tools/ocaml/libs/xl/xl_stubs.c @@ -65,6 +65,18 @@ void log_destroy(struct xentoollog_logger *logger) #define FREE_CTX() \ libxl_ctx_free(&ctx) =20 +static void * gc_calloc(caml_gc *gc, size_t nmemb, size_t size) +{ + void *ptr; + ptr =3D calloc(nmemb, size); + return ptr; +} + +static char * dup_String_val(caml_gc *gc, value s) +{ + return String_val(s); +} + void failwith_xl(char *fname, struct caml_logger *lg) { char *s; @@ -81,13 +93,13 @@ static int string_string_tuple_array_val (caml_gc *gc= , char ***c_val, value v) =20 for (i =3D 0, a =3D Field(v, 5); a !=3D Val_emptylist; a =3D Field(a, 1= )) { i++; } =20 - array =3D calloc((i + 1) * 2, sizeof(char *)); + array =3D gc_calloc(gc, (i + 1) * 2, sizeof(char *)); if (!array) return 1; for (i =3D 0, a =3D Field(v, 5); a !=3D Val_emptylist; a =3D Field(a, 1= ), i++) { value b =3D Field(a, 0); - array[i * 2] =3D String_val(Field(b, 0)); - array[i * 2 + 1] =3D String_val(Field(b, 1)); + array[i * 2] =3D dup_String_val(gc, Field(b, 0)); + array[i * 2 + 1] =3D dup_String_val(gc, Field(b, 1)); } *c_val =3D array; CAMLreturn(0); @@ -103,7 +115,7 @@ static int domain_create_info_val (caml_gc *gc, libxl= _domain_create_info *c_val, c_val->hap =3D Bool_val(Field(v, 1)); c_val->oos =3D Bool_val(Field(v, 2)); c_val->ssidref =3D Int32_val(Field(v, 3)); - c_val->name =3D String_val(Field(v, 4)); + c_val->name =3D dup_String_val(gc, Field(v, 4)); a =3D Field(v, 5); for (i =3D 0; i < 16; i++) c_val->uuid[i] =3D Int_val(Field(a, i)); @@ -111,7 +123,7 @@ static int domain_create_info_val (caml_gc *gc, libxl= _domain_create_info *c_val, string_string_tuple_array_val(gc, &(c_val->platformdata), Field(v, 7)); =20 c_val->poolid =3D Int32_val(Field(v, 8)); - c_val->poolname =3D String_val(Field(v, 9)); + c_val->poolname =3D dup_String_val(gc, Field(v, 9)); =20 CAMLreturn(0); } @@ -127,7 +139,7 @@ static int domain_build_info_val (caml_gc *gc, libxl_= domain_build_info *c_val, v c_val->target_memkb =3D Int64_val(Field(v, 3)); c_val->video_memkb =3D Int64_val(Field(v, 4)); c_val->shadow_memkb =3D Int64_val(Field(v, 5)); - c_val->kernel.path =3D String_val(Field(v, 6)); + c_val->kernel.path =3D dup_String_val(gc, Field(v, 6)); c_val->hvm =3D Tag_val(Field(v, 7)) =3D=3D 0; infopriv =3D Field(Field(v, 7), 0); if (c_val->hvm) { @@ -136,15 +148,15 @@ static int domain_build_info_val (caml_gc *gc, libx= l_domain_build_info *c_val, v c_val->u.hvm.acpi =3D Bool_val(Field(infopriv, 2)); c_val->u.hvm.nx =3D Bool_val(Field(infopriv, 3)); c_val->u.hvm.viridian =3D Bool_val(Field(infopriv, 4)); - c_val->u.hvm.timeoffset =3D String_val(Field(infopriv, 5)); + c_val->u.hvm.timeoffset =3D dup_String_val(gc, Field(infopriv, 5)); c_val->u.hvm.timer_mode =3D Int_val(Field(infopriv, 6)); c_val->u.hvm.hpet =3D Int_val(Field(infopriv, 7)); c_val->u.hvm.vpt_align =3D Int_val(Field(infopriv, 8)); } else { c_val->u.pv.slack_memkb =3D Int64_val(Field(infopriv, 0)); - c_val->u.pv.cmdline =3D String_val(Field(infopriv, 1)); - c_val->u.pv.ramdisk.path =3D String_val(Field(infopriv, 2)); - c_val->u.pv.features =3D String_val(Field(infopriv, 3)); + c_val->u.pv.cmdline =3D dup_String_val(gc, Field(infopriv, 1)); + c_val->u.pv.ramdisk.path =3D dup_String_val(gc, Field(infopriv, 2)); + c_val->u.pv.features =3D dup_String_val(gc, Field(infopriv, 3)); } =20 CAMLreturn(0); @@ -155,9 +167,9 @@ static int device_disk_val(caml_gc *gc, libxl_device_= disk *c_val, value v) CAMLparam1(v); =20 c_val->backend_domid =3D Int_val(Field(v, 0)); - c_val->physpath =3D String_val(Field(v, 1)); + c_val->physpath =3D dup_String_val(gc, Field(v, 1)); c_val->phystype =3D (Int_val(Field(v, 2))) + PHYSTYPE_QCOW; - c_val->virtpath =3D String_val(Field(v, 3)); + c_val->virtpath =3D dup_String_val(gc, Field(v, 3)); c_val->unpluggable =3D Bool_val(Field(v, 4)); c_val->readwrite =3D Bool_val(Field(v, 5)); c_val->is_cdrom =3D Bool_val(Field(v, 6)); @@ -173,7 +185,7 @@ static int device_nic_val(caml_gc *gc, libxl_device_n= ic *c_val, value v) c_val->backend_domid =3D Int_val(Field(v, 0)); c_val->devid =3D Int_val(Field(v, 1)); c_val->mtu =3D Int_val(Field(v, 2)); - c_val->model =3D String_val(Field(v, 3)); + c_val->model =3D dup_String_val(gc, Field(v, 3)); =20 if (Wosize_val(Field(v, 4)) !=3D 6) { ret =3D 1; @@ -183,9 +195,9 @@ static int device_nic_val(caml_gc *gc, libxl_device_n= ic *c_val, value v) c_val->mac[i] =3D Int_val(Field(Field(v, 4), i)); =20 /* not handling c_val->ip */ - c_val->bridge =3D String_val(Field(v, 5)); - c_val->ifname =3D String_val(Field(v, 6)); - c_val->script =3D String_val(Field(v, 7)); + c_val->bridge =3D dup_String_val(gc, Field(v, 5)); + c_val->ifname =3D dup_String_val(gc, Field(v, 6)); + c_val->script =3D dup_String_val(gc, Field(v, 7)); c_val->nictype =3D (Int_val(Field(v, 8))) + NICTYPE_IOEMU; =20 out: @@ -220,14 +232,14 @@ static int device_vfb_val(caml_gc *gc, libxl_device= _vfb *c_val, value v) c_val->backend_domid =3D Int_val(Field(v, 0)); c_val->devid =3D Int_val(Field(v, 1)); c_val->vnc =3D Bool_val(Field(v, 2)); - c_val->vnclisten =3D String_val(Field(v, 3)); - c_val->vncpasswd =3D String_val(Field(v, 4)); + c_val->vnclisten =3D dup_String_val(gc, Field(v, 3)); + c_val->vncpasswd =3D dup_String_val(gc, Field(v, 4)); c_val->vncdisplay =3D Int_val(Field(v, 5)); - c_val->keymap =3D String_val(Field(v, 6)); + c_val->keymap =3D dup_String_val(gc, Field(v, 6)); c_val->sdl =3D Bool_val(Field(v, 7)); c_val->opengl =3D Bool_val(Field(v, 8)); - c_val->display =3D String_val(Field(v, 9)); - c_val->xauthority =3D String_val(Field(v, 10)); + c_val->display =3D dup_String_val(gc, Field(v, 9)); + c_val->xauthority =3D dup_String_val(gc, Field(v, 10)); =20 CAMLreturn(0); } @@ -682,11 +694,14 @@ value stub_xl_sched_credit_domain_set(value domid, = value scinfo) value stub_xl_send_trigger(value domid, value trigger, value vcpuid) { CAMLparam3(domid, trigger, vcpuid); - libxl_ctx ctx; struct caml_logger lg; int ret; + char *c_trigger; + INIT_STRUCT(); + + c_trigger =3D dup_String_val(&gc, trigger); =20 INIT_CTX(); - ret =3D libxl_send_trigger(&ctx, Int_val(domid), String_val(trigger), I= nt_val(vcpuid)); + ret =3D libxl_send_trigger(&ctx, Int_val(domid), c_trigger, Int_val(vcp= uid)); if (ret !=3D 0) failwith_xl("send_trigger", &lg); FREE_CTX(); @@ -711,10 +726,13 @@ value stub_xl_send_debug_keys(value keys) { CAMLparam1(keys); int ret; + char *c_keys; INIT_STRUCT(); =20 + c_keys =3D dup_String_val(&gc, keys); + INIT_CTX(); - ret =3D libxl_send_debug_keys(&ctx, String_val(keys)); + ret =3D libxl_send_debug_keys(&ctx, c_keys); if (ret !=3D 0) failwith_xl("send_debug_keys", &lg); FREE_CTX(); --------------1.7.1 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------1.7.1--