diff --git a/tools/golang/xenlight/gengotypes.py b/tools/golang/xenlight/gengotypes.py index 8857e2e8fd..15aa4be220 100644 --- a/tools/golang/xenlight/gengotypes.py +++ b/tools/golang/xenlight/gengotypes.py @@ -234,6 +234,9 @@ def xenlight_golang_generate_helpers(path = None, types = None, comment = None): f.write(extra) f.write('\n') + f.write(xenlight_golang_define_to_C(ty)) + f.write('\n') + go_fmt(path) def xenlight_golang_define_from_C(ty = None): @@ -434,6 +437,84 @@ def xenlight_golang_array_from_C(ty = None): return s +def xenlight_golang_define_to_C(ty = None, typename = None, nested = False): + """ + Define the toC marshaling function for the type + represented by ty. + """ + func = 'func (x *{}) toC(xc *C.{}) (err error){{{}\n return nil \n }}\n' + body = '' + + if ty.dispose_fn is not None: + body += 'defer func(){{\nif err != nil{{\nC.{}(xc)}}\n}}()\n\n'.format(ty.dispose_fn) + + goname = xenlight_golang_fmt_name(ty.typename) + cname = ty.typename + + for f in ty.fields: + if f.type.typename is not None: + if isinstance(f.type, idl.Array): + # TODO + continue + + body += xenlight_golang_convert_to_C(f) + + elif isinstance(f.type, idl.Struct): + for nf in f.type.fields: + body += xenlight_golang_convert_to_C(nf, outer_name=f.name) + + elif isinstance(f.type, idl.KeyedUnion): + # TODO + pass + + else: + raise Exception('type {} not supported'.format(f.type)) + + return func.format(goname, cname, body) + +def xenlight_golang_convert_to_C(ty = None, outer_name = None): + """ + Returns a line of Go code that converts the Go type represented + by ty to its corresponding Go type. + + If outer_name is set, the type is treated as nested within another field + named outer_name. + """ + s = '' + + gotypename = xenlight_golang_fmt_name(ty.type.typename) + ctypename = ty.type.typename + goname = xenlight_golang_fmt_name(ty.name) + cname = ty.name + + # In cgo, C names that conflict with Go keywords can be + # accessed by prepending an underscore to the name. + if cname in go_keywords: + cname = '_' + cname + + # If outer_name is set, treat this as nested. + if outer_name is not None: + goname = '{}.{}'.format(xenlight_golang_fmt_name(outer_name), goname) + cname = '{}.{}'.format(outer_name, cname) + + is_castable = (ty.type.json_parse_type == 'JSON_INTEGER' or + isinstance(ty.type, idl.Enumeration) or + gotypename in go_builtin_types) + + if not is_castable: + s += 'if err := x.{}.toC(&xc.{}); err != nil {{\n'.format(goname,cname) + s += 'return err\n}\n' + + elif gotypename == 'string': + # Use the cgo helper for converting C strings. + s += 'if x.{} != "" {{\n'.format(goname) + s += 'xc.{} = C.CString(x.{})}}\n'.format(cname,goname) + + else: + s += 'xc.{} = C.{}(x.{})\n'.format(cname,ctypename,goname) + + return s + def xenlight_golang_fmt_name(name, exported = True): """ Take a given type name and return an diff --git a/tools/golang/xenlight/helpers.gen.go b/tools/golang/xenlight/helpers.gen.go index 25294ba292..30cd1a9b3f 100644 --- a/tools/golang/xenlight/helpers.gen.go +++ b/tools/golang/xenlight/helpers.gen.go @@ -37,6 +37,19 @@ func (x *IoportRange) fromC(xc *C.libxl_ioport_range) error { return nil } +func (x *IoportRange) toC(xc *C.libxl_ioport_range) (err error) { + defer func() { + if err != nil { + C.libxl_ioport_range_dispose(xc) + } + }() + + xc.first = C.uint32_t(x.First) + xc.number = C.uint32_t(x.Number) + + return nil +} + func (x *IomemRange) fromC(xc *C.libxl_iomem_range) error { x.Start = uint64(xc.start) x.Number = uint64(xc.number) @@ -45,12 +58,38 @@ func (x *IomemRange) fromC(xc *C.libxl_iomem_range) error { return nil } +func (x *IomemRange) toC(xc *C.libxl_iomem_range) (err error) { + defer func() { + if err != nil { + C.libxl_iomem_range_dispose(xc) + } + }() + + xc.start = C.uint64_t(x.Start) + xc.number = C.uint64_t(x.Number) + xc.gfn = C.uint64_t(x.Gfn) + + return nil +} + func (x *VgaInterfaceInfo) fromC(xc *C.libxl_vga_interface_info) error { x.Kind = VgaInterfaceType(xc.kind) return nil } +func (x *VgaInterfaceInfo) toC(xc *C.libxl_vga_interface_info) (err error) { + defer func() { + if err != nil { + C.libxl_vga_interface_info_dispose(xc) + } + }() + + xc.kind = C.libxl_vga_interface_type(x.Kind) + + return nil +} + func (x *VncInfo) fromC(xc *C.libxl_vnc_info) error { if err := x.Enable.fromC(&xc.enable); err != nil { return err @@ -65,6 +104,30 @@ func (x *VncInfo) fromC(xc *C.libxl_vnc_info) error { return nil } +func (x *VncInfo) toC(xc *C.libxl_vnc_info) (err error) { + defer func() { + if err != nil { + C.libxl_vnc_info_dispose(xc) + } + }() + + if err := x.Enable.toC(&xc.enable); err != nil { + return err + } + if x.Listen != "" { + xc.listen = C.CString(x.Listen) + } + if x.Passwd != "" { + xc.passwd = C.CString(x.Passwd) + } + xc.display = C.int(x.Display) + if err := x.Findunused.toC(&xc.findunused); err != nil { + return err + } + + return nil +} + func (x *SpiceInfo) fromC(xc *C.libxl_spice_info) error { if err := x.Enable.fromC(&xc.enable); err != nil { return err @@ -92,6 +155,47 @@ func (x *SpiceInfo) fromC(xc *C.libxl_spice_info) error { return nil } +func (x *SpiceInfo) toC(xc *C.libxl_spice_info) (err error) { + defer func() { + if err != nil { + C.libxl_spice_info_dispose(xc) + } + }() + + if err := x.Enable.toC(&xc.enable); err != nil { + return err + } + xc.port = C.int(x.Port) + xc.tls_port = C.int(x.TlsPort) + if x.Host != "" { + xc.host = C.CString(x.Host) + } + if err := x.DisableTicketing.toC(&xc.disable_ticketing); err != nil { + return err + } + if x.Passwd != "" { + xc.passwd = C.CString(x.Passwd) + } + if err := x.AgentMouse.toC(&xc.agent_mouse); err != nil { + return err + } + if err := x.Vdagent.toC(&xc.vdagent); err != nil { + return err + } + if err := x.ClipboardSharing.toC(&xc.clipboard_sharing); err != nil { + return err + } + xc.usbredirection = C.int(x.Usbredirection) + if x.ImageCompression != "" { + xc.image_compression = C.CString(x.ImageCompression) + } + if x.StreamingVideo != "" { + xc.streaming_video = C.CString(x.StreamingVideo) + } + + return nil +} + func (x *SdlInfo) fromC(xc *C.libxl_sdl_info) error { if err := x.Enable.fromC(&xc.enable); err != nil { return err @@ -105,6 +209,29 @@ func (x *SdlInfo) fromC(xc *C.libxl_sdl_info) error { return nil } +func (x *SdlInfo) toC(xc *C.libxl_sdl_info) (err error) { + defer func() { + if err != nil { + C.libxl_sdl_info_dispose(xc) + } + }() + + if err := x.Enable.toC(&xc.enable); err != nil { + return err + } + if err := x.Opengl.toC(&xc.opengl); err != nil { + return err + } + if x.Display != "" { + xc.display = C.CString(x.Display) + } + if x.Xauthority != "" { + xc.xauthority = C.CString(x.Xauthority) + } + + return nil +} + func (x *Dominfo) fromC(xc *C.libxl_dominfo) error { if err := x.Uuid.fromC(&xc.uuid); err != nil { return err @@ -133,6 +260,42 @@ func (x *Dominfo) fromC(xc *C.libxl_dominfo) error { return nil } +func (x *Dominfo) toC(xc *C.libxl_dominfo) (err error) { + defer func() { + if err != nil { + C.libxl_dominfo_dispose(xc) + } + }() + + if err := x.Uuid.toC(&xc.uuid); err != nil { + return err + } + xc.domid = C.libxl_domid(x.Domid) + xc.ssidref = C.uint32_t(x.Ssidref) + if x.SsidLabel != "" { + xc.ssid_label = C.CString(x.SsidLabel) + } + xc.running = C.bool(x.Running) + xc.blocked = C.bool(x.Blocked) + xc.paused = C.bool(x.Paused) + xc.shutdown = C.bool(x.Shutdown) + xc.dying = C.bool(x.Dying) + xc.never_stop = C.bool(x.NeverStop) + xc.shutdown_reason = C.libxl_shutdown_reason(x.ShutdownReason) + xc.outstanding_memkb = C.uint64_t(x.OutstandingMemkb) + xc.current_memkb = C.uint64_t(x.CurrentMemkb) + xc.shared_memkb = C.uint64_t(x.SharedMemkb) + xc.paged_memkb = C.uint64_t(x.PagedMemkb) + xc.max_memkb = C.uint64_t(x.MaxMemkb) + xc.cpu_time = C.uint64_t(x.CpuTime) + xc.vcpu_max_id = C.uint32_t(x.VcpuMaxId) + xc.vcpu_online = C.uint32_t(x.VcpuOnline) + xc.cpupool = C.uint32_t(x.Cpupool) + xc.domain_type = C.libxl_domain_type(x.DomainType) + + return nil +} + func (x *Cpupoolinfo) fromC(xc *C.libxl_cpupoolinfo) error { x.Poolid = uint32(xc.poolid) x.PoolName = C.GoString(xc.pool_name) @@ -145,6 +308,26 @@ func (x *Cpupoolinfo) fromC(xc *C.libxl_cpupoolinfo) error { return nil } +func (x *Cpupoolinfo) toC(xc *C.libxl_cpupoolinfo) (err error) { + defer func() { + if err != nil { + C.libxl_cpupoolinfo_dispose(xc) + } + }() + + xc.poolid = C.uint32_t(x.Poolid) + if x.PoolName != "" { + xc.pool_name = C.CString(x.PoolName) + } + xc.sched = C.libxl_scheduler(x.Sched) + xc.n_dom = C.uint32_t(x.NDom) + if err := x.Cpumap.toC(&xc.cpumap); err != nil { + return err + } + + return nil +} + func (x *Channelinfo) fromC(xc *C.libxl_channelinfo) error { x.Backend = C.GoString(xc.backend) x.BackendId = uint32(xc.backend_id) @@ -179,6 +362,29 @@ func (x *ChannelinfoConnectionUnionPty) fromC(xc *C.libxl_channelinfo) error { return nil } +func (x *Channelinfo) toC(xc *C.libxl_channelinfo) (err error) { + defer func() { + if err != nil { + C.libxl_channelinfo_dispose(xc) + } + }() + + if x.Backend != "" { + xc.backend = C.CString(x.Backend) + } + xc.backend_id = C.uint32_t(x.BackendId) + if x.Frontend != "" { + xc.frontend = C.CString(x.Frontend) + } + xc.frontend_id = C.uint32_t(x.FrontendId) + xc.devid = C.libxl_devid(x.Devid) + xc.state = C.int(x.State) + xc.evtch = C.int(x.Evtch) + xc.rref = C.int(x.Rref) + + return nil +} + func (x *Vminfo) fromC(xc *C.libxl_vminfo) error { if err := x.Uuid.fromC(&xc.uuid); err != nil { return err @@ -188,6 +394,21 @@ func (x *Vminfo) fromC(xc *C.libxl_vminfo) error { return nil } +func (x *Vminfo) toC(xc *C.libxl_vminfo) (err error) { + defer func() { + if err != nil { + C.libxl_vminfo_dispose(xc) + } + }() + + if err := x.Uuid.toC(&xc.uuid); err != nil { + return err + } + xc.domid = C.libxl_domid(x.Domid) + + return nil +} + func (x *VersionInfo) fromC(xc *C.libxl_version_info) error { x.XenVersionMajor = int(xc.xen_version_major) x.XenVersionMinor = int(xc.xen_version_minor) @@ -206,6 +427,48 @@ func (x *VersionInfo) fromC(xc *C.libxl_version_info) error { return nil } +func (x *VersionInfo) toC(xc *C.libxl_version_info) (err error) { + defer func() { + if err != nil { + C.libxl_version_info_dispose(xc) + } + }() + + xc.xen_version_major = C.int(x.XenVersionMajor) + xc.xen_version_minor = C.int(x.XenVersionMinor) + if x.XenVersionExtra != "" { + xc.xen_version_extra = C.CString(x.XenVersionExtra) + } + if x.Compiler != "" { + xc.compiler = C.CString(x.Compiler) + } + if x.CompileBy != "" { + xc.compile_by = C.CString(x.CompileBy) + } + if x.CompileDomain != "" { + xc.compile_domain = C.CString(x.CompileDomain) + } + if x.CompileDate != "" { + xc.compile_date = C.CString(x.CompileDate) + } + if x.Capabilities != "" { + xc.capabilities = C.CString(x.Capabilities) + } + if x.Changeset != "" { + xc.changeset = C.CString(x.Changeset) + } + xc.virt_start = C.uint64_t(x.VirtStart) + xc.pagesize = C.int(x.Pagesize) + if x.Commandline != "" { + xc.commandline = C.CString(x.Commandline) + } + if x.BuildId != "" { + xc.build_id = C.CString(x.BuildId) + } + + return nil +} + func (x *DomainCreateInfo) fromC(xc *C.libxl_domain_create_info) error { x.Type = DomainType(xc._type) if err := x.Hap.fromC(&xc.hap); err != nil { @@ -239,6 +502,51 @@ func (x *DomainCreateInfo) fromC(xc *C.libxl_domain_create_info) error { return nil } +func (x *DomainCreateInfo) toC(xc *C.libxl_domain_create_info) (err error) { + defer func() { + if err != nil { + C.libxl_domain_create_info_dispose(xc) + } + }() + + xc._type = C.libxl_domain_type(x.Type) + if err := x.Hap.toC(&xc.hap); err != nil { + return err + } + if err := x.Oos.toC(&xc.oos); err != nil { + return err + } + xc.ssidref = C.uint32_t(x.Ssidref) + if x.SsidLabel != "" { + xc.ssid_label = C.CString(x.SsidLabel) + } + if x.Name != "" { + xc.name = C.CString(x.Name) + } + if err := x.Uuid.toC(&xc.uuid); err != nil { + return err + } + if err := x.Xsdata.toC(&xc.xsdata); err != nil { + return err + } + if err := x.Platformdata.toC(&xc.platformdata); err != nil { + return err + } + xc.poolid = C.uint32_t(x.Poolid) + if x.PoolName != "" { + xc.pool_name = C.CString(x.PoolName) + } + if err := x.RunHotplugScripts.toC(&xc.run_hotplug_scripts); err != nil { + return err + } + if err := x.DriverDomain.toC(&xc.driver_domain); err != nil { + return err + } + xc.passthrough = C.libxl_passthrough(x.Passthrough) + + return nil +} + func (x *DomainRestoreParams) fromC(xc *C.libxl_domain_restore_params) error { x.CheckpointedStream = int(xc.checkpointed_stream) x.StreamVersion = uint32(xc.stream_version) @@ -250,6 +558,25 @@ func (x *DomainRestoreParams) fromC(xc *C.libxl_domain_restore_params) error { return nil } +func (x *DomainRestoreParams) toC(xc *C.libxl_domain_restore_params) (err error) { + defer func() { + if err != nil { + C.libxl_domain_restore_params_dispose(xc) + } + }() + + xc.checkpointed_stream = C.int(x.CheckpointedStream) + xc.stream_version = C.uint32_t(x.StreamVersion) + if x.ColoProxyScript != "" { + xc.colo_proxy_script = C.CString(x.ColoProxyScript) + } + if err := x.UserspaceColoProxy.toC(&xc.userspace_colo_proxy); err != nil { + return err + } + + return nil +} + func (x *SchedParams) fromC(xc *C.libxl_sched_params) error { x.Vcpuid = int(xc.vcpuid) x.Weight = int(xc.weight) @@ -261,6 +588,23 @@ func (x *SchedParams) fromC(xc *C.libxl_sched_params) error { return nil } +func (x *SchedParams) toC(xc *C.libxl_sched_params) (err error) { + defer func() { + if err != nil { + C.libxl_sched_params_dispose(xc) + } + }() + + xc.vcpuid = C.int(x.Vcpuid) + xc.weight = C.int(x.Weight) + xc.cap = C.int(x.Cap) + xc.period = C.int(x.Period) + xc.extratime = C.int(x.Extratime) + xc.budget = C.int(x.Budget) + + return nil +} + func (x *VcpuSchedParams) fromC(xc *C.libxl_vcpu_sched_params) error { x.Sched = Scheduler(xc.sched) numVcpus := int(xc.num_vcpus) @@ -275,6 +619,18 @@ func (x *VcpuSchedParams) fromC(xc *C.libxl_vcpu_sched_params) error { return nil } +func (x *VcpuSchedParams) toC(xc *C.libxl_vcpu_sched_params) (err error) { + defer func() { + if err != nil { + C.libxl_vcpu_sched_params_dispose(xc) + } + }() + + xc.sched = C.libxl_scheduler(x.Sched) + + return nil +} + func (x *DomainSchedParams) fromC(xc *C.libxl_domain_sched_params) error { x.Sched = Scheduler(xc.sched) x.Weight = int(xc.weight) @@ -288,6 +644,25 @@ func (x *DomainSchedParams) fromC(xc *C.libxl_domain_sched_params) error { return nil } +func (x *DomainSchedParams) toC(xc *C.libxl_domain_sched_params) (err error) { + defer func() { + if err != nil { + C.libxl_domain_sched_params_dispose(xc) + } + }() + + xc.sched = C.libxl_scheduler(x.Sched) + xc.weight = C.int(x.Weight) + xc.cap = C.int(x.Cap) + xc.period = C.int(x.Period) + xc.budget = C.int(x.Budget) + xc.extratime = C.int(x.Extratime) + xc.slice = C.int(x.Slice) + xc.latency = C.int(x.Latency) + + return nil +} + func (x *VnodeInfo) fromC(xc *C.libxl_vnode_info) error { x.Memkb = uint64(xc.memkb) numDistances := int(xc.num_distances) @@ -304,6 +679,22 @@ func (x *VnodeInfo) fromC(xc *C.libxl_vnode_info) error { return nil } +func (x *VnodeInfo) toC(xc *C.libxl_vnode_info) (err error) { + defer func() { + if err != nil { + C.libxl_vnode_info_dispose(xc) + } + }() + + xc.memkb = C.uint64_t(x.Memkb) + xc.pnode = C.uint32_t(x.Pnode) + if err := x.Vcpus.toC(&xc.vcpus); err != nil { + return err + } + + return nil +} + func (x *RdmReserve) fromC(xc *C.libxl_rdm_reserve) error { x.Strategy = RdmReserveStrategy(xc.strategy) x.Policy = RdmReservePolicy(xc.policy) @@ -311,6 +702,19 @@ func (x *RdmReserve) fromC(xc *C.libxl_rdm_reserve) error { return nil } +func (x *RdmReserve) toC(xc *C.libxl_rdm_reserve) (err error) { + defer func() { + if err != nil { + C.libxl_rdm_reserve_dispose(xc) + } + }() + + xc.strategy = C.libxl_rdm_reserve_strategy(x.Strategy) + xc.policy = C.libxl_rdm_reserve_policy(x.Policy) + + return nil +} + func (x *DomainBuildInfo) fromC(xc *C.libxl_domain_build_info) error { x.MaxVcpus = int(xc.max_vcpus) if err := x.AvailVcpus.fromC(&xc.avail_vcpus); err != nil { @@ -613,6 +1017,120 @@ func (x *DomainBuildInfoTypeUnionPvh) fromC(xc *C.libxl_domain_build_info) error return nil } +func (x *DomainBuildInfo) toC(xc *C.libxl_domain_build_info) (err error) { + defer func() { + if err != nil { + C.libxl_domain_build_info_dispose(xc) + } + }() + + xc.max_vcpus = C.int(x.MaxVcpus) + if err := x.AvailVcpus.toC(&xc.avail_vcpus); err != nil { + return err + } + if err := x.Cpumap.toC(&xc.cpumap); err != nil { + return err + } + if err := x.Nodemap.toC(&xc.nodemap); err != nil { + return err + } + if err := x.NumaPlacement.toC(&xc.numa_placement); err != nil { + return err + } + xc.tsc_mode = C.libxl_tsc_mode(x.TscMode) + xc.max_memkb = C.uint64_t(x.MaxMemkb) + xc.target_memkb = C.uint64_t(x.TargetMemkb) + xc.video_memkb = C.uint64_t(x.VideoMemkb) + xc.shadow_memkb = C.uint64_t(x.ShadowMemkb) + xc.iommu_memkb = C.uint64_t(x.IommuMemkb) + xc.rtc_timeoffset = C.uint32_t(x.RtcTimeoffset) + xc.exec_ssidref = C.uint32_t(x.ExecSsidref) + if x.ExecSsidLabel != "" { + xc.exec_ssid_label = C.CString(x.ExecSsidLabel) + } + if err := x.Localtime.toC(&xc.localtime); err != nil { + return err + } + if err := x.DisableMigrate.toC(&xc.disable_migrate); err != nil { + return err + } + if err := x.Cpuid.toC(&xc.cpuid); err != nil { + return err + } + if x.BlkdevStart != "" { + xc.blkdev_start = C.CString(x.BlkdevStart) + } + xc.max_grant_frames = C.uint32_t(x.MaxGrantFrames) + xc.max_maptrack_frames = C.uint32_t(x.MaxMaptrackFrames) + xc.device_model_version = C.libxl_device_model_version(x.DeviceModelVersion) + if err := x.DeviceModelStubdomain.toC(&xc.device_model_stubdomain); err != nil { + return err + } + if x.DeviceModel != "" { + xc.device_model = C.CString(x.DeviceModel) + } + xc.device_model_ssidref = C.uint32_t(x.DeviceModelSsidref) + if x.DeviceModelSsidLabel != "" { + xc.device_model_ssid_label = C.CString(x.DeviceModelSsidLabel) + } + if x.DeviceModelUser != "" { + xc.device_model_user = C.CString(x.DeviceModelUser) + } + if err := x.Extra.toC(&xc.extra); err != nil { + return err + } + if err := x.ExtraPv.toC(&xc.extra_pv); err != nil { + return err + } + if err := x.ExtraHvm.toC(&xc.extra_hvm); err != nil { + return err + } + if err := x.SchedParams.toC(&xc.sched_params); err != nil { + return err + } + if err := x.ClaimMode.toC(&xc.claim_mode); err != nil { + return err + } + xc.event_channels = C.uint32_t(x.EventChannels) + if x.Kernel != "" { + xc.kernel = C.CString(x.Kernel) + } + if x.Cmdline != "" { + xc.cmdline = C.CString(x.Cmdline) + } + if x.Ramdisk != "" { + xc.ramdisk = C.CString(x.Ramdisk) + } + if x.DeviceTree != "" { + xc.device_tree = C.CString(x.DeviceTree) + } + if err := x.Acpi.toC(&xc.acpi); err != nil { + return err + } + if x.Bootloader != "" { + xc.bootloader = C.CString(x.Bootloader) + } + if err := x.BootloaderArgs.toC(&xc.bootloader_args); err != nil { + return err + } + xc.timer_mode = C.libxl_timer_mode(x.TimerMode) + if err := x.NestedHvm.toC(&xc.nested_hvm); err != nil { + return err + } + if err := x.Apic.toC(&xc.apic); err != nil { + return err + } + if err := x.DmRestrict.toC(&xc.dm_restrict); err != nil { + return err + } + xc.tee = C.libxl_tee_type(x.Tee) + xc.arch_arm.gic_version = C.libxl_gic_version(x.ArchArm.GicVersion) + xc.arch_arm.vuart = C.libxl_vuart_type(x.ArchArm.Vuart) + xc.altp2m = C.libxl_altp2m_mode(x.Altp2M) + + return nil +} + func (x *DeviceVfb) fromC(xc *C.libxl_device_vfb) error { x.BackendDomid = Domid(xc.backend_domid) x.BackendDomname = C.GoString(xc.backend_domname) @@ -628,6 +1146,31 @@ func (x *DeviceVfb) fromC(xc *C.libxl_device_vfb) error { return nil } +func (x *DeviceVfb) toC(xc *C.libxl_device_vfb) (err error) { + defer func() { + if err != nil { + C.libxl_device_vfb_dispose(xc) + } + }() + + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + xc.devid = C.libxl_devid(x.Devid) + if err := x.Vnc.toC(&xc.vnc); err != nil { + return err + } + if err := x.Sdl.toC(&xc.sdl); err != nil { + return err + } + if x.Keymap != "" { + xc.keymap = C.CString(x.Keymap) + } + + return nil +} + func (x *DeviceVkb) fromC(xc *C.libxl_device_vkb) error { x.BackendDomid = Domid(xc.backend_domid) x.BackendDomname = C.GoString(xc.backend_domname) @@ -648,6 +1191,36 @@ func (x *DeviceVkb) fromC(xc *C.libxl_device_vkb) error { return nil } +func (x *DeviceVkb) toC(xc *C.libxl_device_vkb) (err error) { + defer func() { + if err != nil { + C.libxl_device_vkb_dispose(xc) + } + }() + + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + xc.devid = C.libxl_devid(x.Devid) + xc.backend_type = C.libxl_vkb_backend(x.BackendType) + if x.UniqueId != "" { + xc.unique_id = C.CString(x.UniqueId) + } + xc.feature_disable_keyboard = C.bool(x.FeatureDisableKeyboard) + xc.feature_disable_pointer = C.bool(x.FeatureDisablePointer) + xc.feature_abs_pointer = C.bool(x.FeatureAbsPointer) + xc.feature_raw_pointer = C.bool(x.FeatureRawPointer) + xc.feature_multi_touch = C.bool(x.FeatureMultiTouch) + xc.width = C.uint32_t(x.Width) + xc.height = C.uint32_t(x.Height) + xc.multi_touch_width = C.uint32_t(x.MultiTouchWidth) + xc.multi_touch_height = C.uint32_t(x.MultiTouchHeight) + xc.multi_touch_num_contacts = C.uint32_t(x.MultiTouchNumContacts) + + return nil +} + func (x *DeviceDisk) fromC(xc *C.libxl_device_disk) error { x.BackendDomid = Domid(xc.backend_domid) x.BackendDomname = C.GoString(xc.backend_domname) @@ -678,6 +1251,58 @@ func (x *DeviceDisk) fromC(xc *C.libxl_device_disk) error { return nil } +func (x *DeviceDisk) toC(xc *C.libxl_device_disk) (err error) { + defer func() { + if err != nil { + C.libxl_device_disk_dispose(xc) + } + }() + + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + if x.PdevPath != "" { + xc.pdev_path = C.CString(x.PdevPath) + } + if x.Vdev != "" { + xc.vdev = C.CString(x.Vdev) + } + xc.backend = C.libxl_disk_backend(x.Backend) + xc.format = C.libxl_disk_format(x.Format) + if x.Script != "" { + xc.script = C.CString(x.Script) + } + xc.removable = C.int(x.Removable) + xc.readwrite = C.int(x.Readwrite) + xc.is_cdrom = C.int(x.IsCdrom) + xc.direct_io_safe = C.bool(x.DirectIoSafe) + if err := x.DiscardEnable.toC(&xc.discard_enable); err != nil { + return err + } + if err := x.ColoEnable.toC(&xc.colo_enable); err != nil { + return err + } + if err := x.ColoRestoreEnable.toC(&xc.colo_restore_enable); err != nil { + return err + } + if x.ColoHost != "" { + xc.colo_host = C.CString(x.ColoHost) + } + xc.colo_port = C.int(x.ColoPort) + if x.ColoExport != "" { + xc.colo_export = C.CString(x.ColoExport) + } + if x.ActiveDisk != "" { + xc.active_disk = C.CString(x.ActiveDisk) + } + if x.HiddenDisk != "" { + xc.hidden_disk = C.CString(x.HiddenDisk) + } + + return nil +} + func (x *DeviceNic) fromC(xc *C.libxl_device_nic) error { x.BackendDomid = Domid(xc.backend_domid) x.BackendDomname = C.GoString(xc.backend_domname) @@ -748,6 +1373,194 @@ func (x *DeviceNic) fromC(xc *C.libxl_device_nic) error { return nil } +func (x *DeviceNic) toC(xc *C.libxl_device_nic) (err error) { + defer func() { + if err != nil { + C.libxl_device_nic_dispose(xc) + } + }() + + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + xc.devid = C.libxl_devid(x.Devid) + xc.mtu = C.int(x.Mtu) + if x.Model != "" { + xc.model = C.CString(x.Model) + } + if err := x.Mac.toC(&xc.mac); err != nil { + return err + } + if x.Ip != "" { + xc.ip = C.CString(x.Ip) + } + if x.Bridge != "" { + xc.bridge = C.CString(x.Bridge) + } + if x.Ifname != "" { + xc.ifname = C.CString(x.Ifname) + } + if x.Script != "" { + xc.script = C.CString(x.Script) + } + xc.nictype = C.libxl_nic_type(x.Nictype) + xc.rate_bytes_per_interval = C.uint64_t(x.RateBytesPerInterval) + xc.rate_interval_usecs = C.uint32_t(x.RateIntervalUsecs) + if x.Gatewaydev != "" { + xc.gatewaydev = C.CString(x.Gatewaydev) + } + if x.ColoftForwarddev != "" { + xc.coloft_forwarddev = C.CString(x.ColoftForwarddev) + } + if x.ColoSockMirrorId != "" { + xc.colo_sock_mirror_id = C.CString(x.ColoSockMirrorId) + } + if x.ColoSockMirrorIp != "" { + xc.colo_sock_mirror_ip = C.CString(x.ColoSockMirrorIp) + } + if x.ColoSockMirrorPort != "" { + xc.colo_sock_mirror_port = C.CString(x.ColoSockMirrorPort) + } + if x.ColoSockComparePriInId != "" { + xc.colo_sock_compare_pri_in_id = C.CString(x.ColoSockComparePriInId) + } + if x.ColoSockComparePriInIp != "" { + xc.colo_sock_compare_pri_in_ip = C.CString(x.ColoSockComparePriInIp) + } + if x.ColoSockComparePriInPort != "" { + xc.colo_sock_compare_pri_in_port = C.CString(x.ColoSockComparePriInPort) + } + if x.ColoSockCompareSecInId != "" { + xc.colo_sock_compare_sec_in_id = C.CString(x.ColoSockCompareSecInId) + } + if x.ColoSockCompareSecInIp != "" { + xc.colo_sock_compare_sec_in_ip = C.CString(x.ColoSockCompareSecInIp) + } + if x.ColoSockCompareSecInPort != "" { + xc.colo_sock_compare_sec_in_port = C.CString(x.ColoSockCompareSecInPort) + } + if x.ColoSockCompareNotifyId != "" { + xc.colo_sock_compare_notify_id = C.CString(x.ColoSockCompareNotifyId) + } + if x.ColoSockCompareNotifyIp != "" { + xc.colo_sock_compare_notify_ip = C.CString(x.ColoSockCompareNotifyIp) + } + if x.ColoSockCompareNotifyPort != "" { + xc.colo_sock_compare_notify_port = C.CString(x.ColoSockCompareNotifyPort) + } + if x.ColoSockRedirector0Id != "" { + xc.colo_sock_redirector0_id = C.CString(x.ColoSockRedirector0Id) + } + if x.ColoSockRedirector0Ip != "" { + xc.colo_sock_redirector0_ip = C.CString(x.ColoSockRedirector0Ip) + } + if x.ColoSockRedirector0Port != "" { + xc.colo_sock_redirector0_port = C.CString(x.ColoSockRedirector0Port) + } + if x.ColoSockRedirector1Id != "" { + xc.colo_sock_redirector1_id = C.CString(x.ColoSockRedirector1Id) + } + if x.ColoSockRedirector1Ip != "" { + xc.colo_sock_redirector1_ip = C.CString(x.ColoSockRedirector1Ip) + } + if x.ColoSockRedirector1Port != "" { + xc.colo_sock_redirector1_port = C.CString(x.ColoSockRedirector1Port) + } + if x.ColoSockRedirector2Id != "" { + xc.colo_sock_redirector2_id = C.CString(x.ColoSockRedirector2Id) + } + if x.ColoSockRedirector2Ip != "" { + xc.colo_sock_redirector2_ip = C.CString(x.ColoSockRedirector2Ip) + } + if x.ColoSockRedirector2Port != "" { + xc.colo_sock_redirector2_port = C.CString(x.ColoSockRedirector2Port) + } + if x.ColoFilterMirrorQueue != "" { + xc.colo_filter_mirror_queue = C.CString(x.ColoFilterMirrorQueue) + } + if x.ColoFilterMirrorOutdev != "" { + xc.colo_filter_mirror_outdev = C.CString(x.ColoFilterMirrorOutdev) + } + if x.ColoFilterRedirector0Queue != "" { + xc.colo_filter_redirector0_queue = C.CString(x.ColoFilterRedirector0Queue) + } + if x.ColoFilterRedirector0Indev != "" { + xc.colo_filter_redirector0_indev = C.CString(x.ColoFilterRedirector0Indev) + } + if x.ColoFilterRedirector0Outdev != "" { + xc.colo_filter_redirector0_outdev = C.CString(x.ColoFilterRedirector0Outdev) + } + if x.ColoFilterRedirector1Queue != "" { + xc.colo_filter_redirector1_queue = C.CString(x.ColoFilterRedirector1Queue) + } + if x.ColoFilterRedirector1Indev != "" { + xc.colo_filter_redirector1_indev = C.CString(x.ColoFilterRedirector1Indev) + } + if x.ColoFilterRedirector1Outdev != "" { + xc.colo_filter_redirector1_outdev = C.CString(x.ColoFilterRedirector1Outdev) + } + if x.ColoComparePriIn != "" { + xc.colo_compare_pri_in = C.CString(x.ColoComparePriIn) + } + if x.ColoCompareSecIn != "" { + xc.colo_compare_sec_in = C.CString(x.ColoCompareSecIn) + } + if x.ColoCompareOut != "" { + xc.colo_compare_out = C.CString(x.ColoCompareOut) + } + if x.ColoCompareNotifyDev != "" { + xc.colo_compare_notify_dev = C.CString(x.ColoCompareNotifyDev) + } + if x.ColoSockSecRedirector0Id != "" { + xc.colo_sock_sec_redirector0_id = C.CString(x.ColoSockSecRedirector0Id) + } + if x.ColoSockSecRedirector0Ip != "" { + xc.colo_sock_sec_redirector0_ip = C.CString(x.ColoSockSecRedirector0Ip) + } + if x.ColoSockSecRedirector0Port != "" { + xc.colo_sock_sec_redirector0_port = C.CString(x.ColoSockSecRedirector0Port) + } + if x.ColoSockSecRedirector1Id != "" { + xc.colo_sock_sec_redirector1_id = C.CString(x.ColoSockSecRedirector1Id) + } + if x.ColoSockSecRedirector1Ip != "" { + xc.colo_sock_sec_redirector1_ip = C.CString(x.ColoSockSecRedirector1Ip) + } + if x.ColoSockSecRedirector1Port != "" { + xc.colo_sock_sec_redirector1_port = C.CString(x.ColoSockSecRedirector1Port) + } + if x.ColoFilterSecRedirector0Queue != "" { + xc.colo_filter_sec_redirector0_queue = C.CString(x.ColoFilterSecRedirector0Queue) + } + if x.ColoFilterSecRedirector0Indev != "" { + xc.colo_filter_sec_redirector0_indev = C.CString(x.ColoFilterSecRedirector0Indev) + } + if x.ColoFilterSecRedirector0Outdev != "" { + xc.colo_filter_sec_redirector0_outdev = C.CString(x.ColoFilterSecRedirector0Outdev) + } + if x.ColoFilterSecRedirector1Queue != "" { + xc.colo_filter_sec_redirector1_queue = C.CString(x.ColoFilterSecRedirector1Queue) + } + if x.ColoFilterSecRedirector1Indev != "" { + xc.colo_filter_sec_redirector1_indev = C.CString(x.ColoFilterSecRedirector1Indev) + } + if x.ColoFilterSecRedirector1Outdev != "" { + xc.colo_filter_sec_redirector1_outdev = C.CString(x.ColoFilterSecRedirector1Outdev) + } + if x.ColoFilterSecRewriter0Queue != "" { + xc.colo_filter_sec_rewriter0_queue = C.CString(x.ColoFilterSecRewriter0Queue) + } + if x.ColoCheckpointHost != "" { + xc.colo_checkpoint_host = C.CString(x.ColoCheckpointHost) + } + if x.ColoCheckpointPort != "" { + xc.colo_checkpoint_port = C.CString(x.ColoCheckpointPort) + } + + return nil +} + func (x *DevicePci) fromC(xc *C.libxl_device_pci) error { x.Func = byte(xc._func) x.Dev = byte(xc.dev) @@ -764,6 +1577,28 @@ func (x *DevicePci) fromC(xc *C.libxl_device_pci) error { return nil } +func (x *DevicePci) toC(xc *C.libxl_device_pci) (err error) { + defer func() { + if err != nil { + C.libxl_device_pci_dispose(xc) + } + }() + + xc._func = C.uint8_t(x.Func) + xc.dev = C.uint8_t(x.Dev) + xc.bus = C.uint8_t(x.Bus) + xc.domain = C.int(x.Domain) + xc.vdevfn = C.uint32_t(x.Vdevfn) + xc.vfunc_mask = C.uint32_t(x.VfuncMask) + xc.msitranslate = C.bool(x.Msitranslate) + xc.power_mgmt = C.bool(x.PowerMgmt) + xc.permissive = C.bool(x.Permissive) + xc.seize = C.bool(x.Seize) + xc.rdm_policy = C.libxl_rdm_reserve_policy(x.RdmPolicy) + + return nil +} + func (x *DeviceRdm) fromC(xc *C.libxl_device_rdm) error { x.Start = uint64(xc.start) x.Size = uint64(xc.size) @@ -772,6 +1607,20 @@ func (x *DeviceRdm) fromC(xc *C.libxl_device_rdm) error { return nil } +func (x *DeviceRdm) toC(xc *C.libxl_device_rdm) (err error) { + defer func() { + if err != nil { + C.libxl_device_rdm_dispose(xc) + } + }() + + xc.start = C.uint64_t(x.Start) + xc.size = C.uint64_t(x.Size) + xc.policy = C.libxl_rdm_reserve_policy(x.Policy) + + return nil +} + func (x *DeviceUsbctrl) fromC(xc *C.libxl_device_usbctrl) error { x.Type = UsbctrlType(xc._type) x.Devid = Devid(xc.devid) @@ -783,6 +1632,25 @@ func (x *DeviceUsbctrl) fromC(xc *C.libxl_device_usbctrl) error { return nil } +func (x *DeviceUsbctrl) toC(xc *C.libxl_device_usbctrl) (err error) { + defer func() { + if err != nil { + C.libxl_device_usbctrl_dispose(xc) + } + }() + + xc._type = C.libxl_usbctrl_type(x.Type) + xc.devid = C.libxl_devid(x.Devid) + xc.version = C.int(x.Version) + xc.ports = C.int(x.Ports) + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + + return nil +} + func (x *DeviceUsbdev) fromC(xc *C.libxl_device_usbdev) error { x.Ctrl = Devid(xc.ctrl) x.Port = int(xc.port) @@ -812,12 +1680,39 @@ func (x *DeviceUsbdevTypeUnionHostdev) fromC(xc *C.libxl_device_usbdev) error { return nil } +func (x *DeviceUsbdev) toC(xc *C.libxl_device_usbdev) (err error) { + defer func() { + if err != nil { + C.libxl_device_usbdev_dispose(xc) + } + }() + + xc.ctrl = C.libxl_devid(x.Ctrl) + xc.port = C.int(x.Port) + + return nil +} + func (x *DeviceDtdev) fromC(xc *C.libxl_device_dtdev) error { x.Path = C.GoString(xc.path) return nil } +func (x *DeviceDtdev) toC(xc *C.libxl_device_dtdev) (err error) { + defer func() { + if err != nil { + C.libxl_device_dtdev_dispose(xc) + } + }() + + if x.Path != "" { + xc.path = C.CString(x.Path) + } + + return nil +} + func (x *DeviceVtpm) fromC(xc *C.libxl_device_vtpm) error { x.BackendDomid = Domid(xc.backend_domid) x.BackendDomname = C.GoString(xc.backend_domname) @@ -829,6 +1724,25 @@ func (x *DeviceVtpm) fromC(xc *C.libxl_device_vtpm) error { return nil } +func (x *DeviceVtpm) toC(xc *C.libxl_device_vtpm) (err error) { + defer func() { + if err != nil { + C.libxl_device_vtpm_dispose(xc) + } + }() + + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + xc.devid = C.libxl_devid(x.Devid) + if err := x.Uuid.toC(&xc.uuid); err != nil { + return err + } + + return nil +} + func (x *DeviceP9) fromC(xc *C.libxl_device_p9) error { x.BackendDomid = Domid(xc.backend_domid) x.BackendDomname = C.GoString(xc.backend_domname) @@ -840,6 +1754,31 @@ func (x *DeviceP9) fromC(xc *C.libxl_device_p9) error { return nil } +func (x *DeviceP9) toC(xc *C.libxl_device_p9) (err error) { + defer func() { + if err != nil { + C.libxl_device_p9_dispose(xc) + } + }() + + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + if x.Tag != "" { + xc.tag = C.CString(x.Tag) + } + if x.Path != "" { + xc.path = C.CString(x.Path) + } + if x.SecurityModel != "" { + xc.security_model = C.CString(x.SecurityModel) + } + xc.devid = C.libxl_devid(x.Devid) + + return nil +} + func (x *DevicePvcallsif) fromC(xc *C.libxl_device_pvcallsif) error { x.BackendDomid = Domid(xc.backend_domid) x.BackendDomname = C.GoString(xc.backend_domname) @@ -848,6 +1787,22 @@ func (x *DevicePvcallsif) fromC(xc *C.libxl_device_pvcallsif) error { return nil } +func (x *DevicePvcallsif) toC(xc *C.libxl_device_pvcallsif) (err error) { + defer func() { + if err != nil { + C.libxl_device_pvcallsif_dispose(xc) + } + }() + + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + xc.devid = C.libxl_devid(x.Devid) + + return nil +} + func (x *DeviceChannel) fromC(xc *C.libxl_device_channel) error { x.BackendDomid = Domid(xc.backend_domid) x.BackendDomname = C.GoString(xc.backend_domname) @@ -878,6 +1833,25 @@ func (x *DeviceChannelConnectionUnionSocket) fromC(xc *C.libxl_device_channel) e return nil } +func (x *DeviceChannel) toC(xc *C.libxl_device_channel) (err error) { + defer func() { + if err != nil { + C.libxl_device_channel_dispose(xc) + } + }() + + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + xc.devid = C.libxl_devid(x.Devid) + if x.Name != "" { + xc.name = C.CString(x.Name) + } + + return nil +} + func (x *ConnectorParam) fromC(xc *C.libxl_connector_param) error { x.UniqueId = C.GoString(xc.unique_id) x.Width = uint32(xc.width) @@ -886,6 +1860,22 @@ func (x *ConnectorParam) fromC(xc *C.libxl_connector_param) error { return nil } +func (x *ConnectorParam) toC(xc *C.libxl_connector_param) (err error) { + defer func() { + if err != nil { + C.libxl_connector_param_dispose(xc) + } + }() + + if x.UniqueId != "" { + xc.unique_id = C.CString(x.UniqueId) + } + xc.width = C.uint32_t(x.Width) + xc.height = C.uint32_t(x.Height) + + return nil +} + func (x *DeviceVdispl) fromC(xc *C.libxl_device_vdispl) error { x.BackendDomid = Domid(xc.backend_domid) x.BackendDomname = C.GoString(xc.backend_domname) @@ -903,6 +1893,23 @@ func (x *DeviceVdispl) fromC(xc *C.libxl_device_vdispl) error { return nil } +func (x *DeviceVdispl) toC(xc *C.libxl_device_vdispl) (err error) { + defer func() { + if err != nil { + C.libxl_device_vdispl_dispose(xc) + } + }() + + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + xc.devid = C.libxl_devid(x.Devid) + xc.be_alloc = C.bool(x.BeAlloc) + + return nil +} + func (x *VsndParams) fromC(xc *C.libxl_vsnd_params) error { numSampleRates := int(xc.num_sample_rates) cSampleRates := (*[1 << 28]C.uint32_t)(unsafe.Pointer(xc.sample_rates))[:numSampleRates:numSampleRates] @@ -923,6 +1930,20 @@ func (x *VsndParams) fromC(xc *C.libxl_vsnd_params) error { return nil } +func (x *VsndParams) toC(xc *C.libxl_vsnd_params) (err error) { + defer func() { + if err != nil { + C.libxl_vsnd_params_dispose(xc) + } + }() + + xc.channels_min = C.uint32_t(x.ChannelsMin) + xc.channels_max = C.uint32_t(x.ChannelsMax) + xc.buffer_size = C.uint32_t(x.BufferSize) + + return nil +} + func (x *VsndStream) fromC(xc *C.libxl_vsnd_stream) error { x.UniqueId = C.GoString(xc.unique_id) x.Type = VsndStreamType(xc._type) @@ -933,6 +1954,24 @@ func (x *VsndStream) fromC(xc *C.libxl_vsnd_stream) error { return nil } +func (x *VsndStream) toC(xc *C.libxl_vsnd_stream) (err error) { + defer func() { + if err != nil { + C.libxl_vsnd_stream_dispose(xc) + } + }() + + if x.UniqueId != "" { + xc.unique_id = C.CString(x.UniqueId) + } + xc._type = C.libxl_vsnd_stream_type(x.Type) + if err := x.Params.toC(&xc.params); err != nil { + return err + } + + return nil +} + func (x *VsndPcm) fromC(xc *C.libxl_vsnd_pcm) error { x.Name = C.GoString(xc.name) if err := x.Params.fromC(&xc.params); err != nil { @@ -950,6 +1989,23 @@ func (x *VsndPcm) fromC(xc *C.libxl_vsnd_pcm) error { return nil } +func (x *VsndPcm) toC(xc *C.libxl_vsnd_pcm) (err error) { + defer func() { + if err != nil { + C.libxl_vsnd_pcm_dispose(xc) + } + }() + + if x.Name != "" { + xc.name = C.CString(x.Name) + } + if err := x.Params.toC(&xc.params); err != nil { + return err + } + + return nil +} + func (x *DeviceVsnd) fromC(xc *C.libxl_device_vsnd) error { x.BackendDomid = Domid(xc.backend_domid) x.BackendDomname = C.GoString(xc.backend_domname) @@ -971,6 +2027,31 @@ func (x *DeviceVsnd) fromC(xc *C.libxl_device_vsnd) error { return nil } +func (x *DeviceVsnd) toC(xc *C.libxl_device_vsnd) (err error) { + defer func() { + if err != nil { + C.libxl_device_vsnd_dispose(xc) + } + }() + + xc.backend_domid = C.libxl_domid(x.BackendDomid) + if x.BackendDomname != "" { + xc.backend_domname = C.CString(x.BackendDomname) + } + xc.devid = C.libxl_devid(x.Devid) + if x.ShortName != "" { + xc.short_name = C.CString(x.ShortName) + } + if x.LongName != "" { + xc.long_name = C.CString(x.LongName) + } + if err := x.Params.toC(&xc.params); err != nil { + return err + } + + return nil +} + func (x *DomainConfig) fromC(xc *C.libxl_domain_config) error { if err := x.CInfo.fromC(&xc.c_info); err != nil { return err @@ -1107,6 +2188,28 @@ func (x *DomainConfig) fromC(xc *C.libxl_domain_config) error { return nil } +func (x *DomainConfig) toC(xc *C.libxl_domain_config) (err error) { + defer func() { + if err != nil { + C.libxl_domain_config_dispose(xc) + } + }() + + if err := x.CInfo.toC(&xc.c_info); err != nil { + return err + } + if err := x.BInfo.toC(&xc.b_info); err != nil { + return err + } + xc.on_poweroff = C.libxl_action_on_shutdown(x.OnPoweroff) + xc.on_reboot = C.libxl_action_on_shutdown(x.OnReboot) + xc.on_watchdog = C.libxl_action_on_shutdown(x.OnWatchdog) + xc.on_crash = C.libxl_action_on_shutdown(x.OnCrash) + xc.on_soft_reset = C.libxl_action_on_shutdown(x.OnSoftReset) + + return nil +} + func (x *Diskinfo) fromC(xc *C.libxl_diskinfo) error { x.Backend = C.GoString(xc.backend) x.BackendId = uint32(xc.backend_id) @@ -1120,6 +2223,29 @@ func (x *Diskinfo) fromC(xc *C.libxl_diskinfo) error { return nil } +func (x *Diskinfo) toC(xc *C.libxl_diskinfo) (err error) { + defer func() { + if err != nil { + C.libxl_diskinfo_dispose(xc) + } + }() + + if x.Backend != "" { + xc.backend = C.CString(x.Backend) + } + xc.backend_id = C.uint32_t(x.BackendId) + if x.Frontend != "" { + xc.frontend = C.CString(x.Frontend) + } + xc.frontend_id = C.uint32_t(x.FrontendId) + xc.devid = C.libxl_devid(x.Devid) + xc.state = C.int(x.State) + xc.evtch = C.int(x.Evtch) + xc.rref = C.int(x.Rref) + + return nil +} + func (x *Nicinfo) fromC(xc *C.libxl_nicinfo) error { x.Backend = C.GoString(xc.backend) x.BackendId = uint32(xc.backend_id) @@ -1134,6 +2260,30 @@ func (x *Nicinfo) fromC(xc *C.libxl_nicinfo) error { return nil } +func (x *Nicinfo) toC(xc *C.libxl_nicinfo) (err error) { + defer func() { + if err != nil { + C.libxl_nicinfo_dispose(xc) + } + }() + + if x.Backend != "" { + xc.backend = C.CString(x.Backend) + } + xc.backend_id = C.uint32_t(x.BackendId) + if x.Frontend != "" { + xc.frontend = C.CString(x.Frontend) + } + xc.frontend_id = C.uint32_t(x.FrontendId) + xc.devid = C.libxl_devid(x.Devid) + xc.state = C.int(x.State) + xc.evtch = C.int(x.Evtch) + xc.rref_tx = C.int(x.RrefTx) + xc.rref_rx = C.int(x.RrefRx) + + return nil +} + func (x *Vtpminfo) fromC(xc *C.libxl_vtpminfo) error { x.Backend = C.GoString(xc.backend) x.BackendId = uint32(xc.backend_id) @@ -1150,6 +2300,32 @@ func (x *Vtpminfo) fromC(xc *C.libxl_vtpminfo) error { return nil } +func (x *Vtpminfo) toC(xc *C.libxl_vtpminfo) (err error) { + defer func() { + if err != nil { + C.libxl_vtpminfo_dispose(xc) + } + }() + + if x.Backend != "" { + xc.backend = C.CString(x.Backend) + } + xc.backend_id = C.uint32_t(x.BackendId) + if x.Frontend != "" { + xc.frontend = C.CString(x.Frontend) + } + xc.frontend_id = C.uint32_t(x.FrontendId) + xc.devid = C.libxl_devid(x.Devid) + xc.state = C.int(x.State) + xc.evtch = C.int(x.Evtch) + xc.rref = C.int(x.Rref) + if err := x.Uuid.toC(&xc.uuid); err != nil { + return err + } + + return nil +} + func (x *Usbctrlinfo) fromC(xc *C.libxl_usbctrlinfo) error { x.Type = UsbctrlType(xc._type) x.Devid = Devid(xc.devid) @@ -1167,6 +2343,33 @@ func (x *Usbctrlinfo) fromC(xc *C.libxl_usbctrlinfo) error { return nil } +func (x *Usbctrlinfo) toC(xc *C.libxl_usbctrlinfo) (err error) { + defer func() { + if err != nil { + C.libxl_usbctrlinfo_dispose(xc) + } + }() + + xc._type = C.libxl_usbctrl_type(x.Type) + xc.devid = C.libxl_devid(x.Devid) + xc.version = C.int(x.Version) + xc.ports = C.int(x.Ports) + if x.Backend != "" { + xc.backend = C.CString(x.Backend) + } + xc.backend_id = C.uint32_t(x.BackendId) + if x.Frontend != "" { + xc.frontend = C.CString(x.Frontend) + } + xc.frontend_id = C.uint32_t(x.FrontendId) + xc.state = C.int(x.State) + xc.evtch = C.int(x.Evtch) + xc.ref_urb = C.int(x.RefUrb) + xc.ref_conn = C.int(x.RefConn) + + return nil +} + func (x *Vcpuinfo) fromC(xc *C.libxl_vcpuinfo) error { x.Vcpuid = uint32(xc.vcpuid) x.Cpu = uint32(xc.cpu) @@ -1184,6 +2387,29 @@ func (x *Vcpuinfo) fromC(xc *C.libxl_vcpuinfo) error { return nil } +func (x *Vcpuinfo) toC(xc *C.libxl_vcpuinfo) (err error) { + defer func() { + if err != nil { + C.libxl_vcpuinfo_dispose(xc) + } + }() + + xc.vcpuid = C.uint32_t(x.Vcpuid) + xc.cpu = C.uint32_t(x.Cpu) + xc.online = C.bool(x.Online) + xc.blocked = C.bool(x.Blocked) + xc.running = C.bool(x.Running) + xc.vcpu_time = C.uint64_t(x.VcpuTime) + if err := x.Cpumap.toC(&xc.cpumap); err != nil { + return err + } + if err := x.CpumapSoft.toC(&xc.cpumap_soft); err != nil { + return err + } + + return nil +} + func (x *Physinfo) fromC(xc *C.libxl_physinfo) error { x.ThreadsPerCore = uint32(xc.threads_per_core) x.CoresPerSocket = uint32(xc.cores_per_socket) @@ -1211,6 +2437,39 @@ func (x *Physinfo) fromC(xc *C.libxl_physinfo) error { return nil } +func (x *Physinfo) toC(xc *C.libxl_physinfo) (err error) { + defer func() { + if err != nil { + C.libxl_physinfo_dispose(xc) + } + }() + + xc.threads_per_core = C.uint32_t(x.ThreadsPerCore) + xc.cores_per_socket = C.uint32_t(x.CoresPerSocket) + xc.max_cpu_id = C.uint32_t(x.MaxCpuId) + xc.nr_cpus = C.uint32_t(x.NrCpus) + xc.cpu_khz = C.uint32_t(x.CpuKhz) + xc.total_pages = C.uint64_t(x.TotalPages) + xc.free_pages = C.uint64_t(x.FreePages) + xc.scrub_pages = C.uint64_t(x.ScrubPages) + xc.outstanding_pages = C.uint64_t(x.OutstandingPages) + xc.sharing_freed_pages = C.uint64_t(x.SharingFreedPages) + xc.sharing_used_frames = C.uint64_t(x.SharingUsedFrames) + xc.max_possible_mfn = C.uint64_t(x.MaxPossibleMfn) + xc.nr_nodes = C.uint32_t(x.NrNodes) + if err := x.HwCap.toC(&xc.hw_cap); err != nil { + return err + } + xc.cap_hvm = C.bool(x.CapHvm) + xc.cap_pv = C.bool(x.CapPv) + xc.cap_hvm_directio = C.bool(x.CapHvmDirectio) + xc.cap_hap = C.bool(x.CapHap) + xc.cap_shadow = C.bool(x.CapShadow) + xc.cap_iommu_hap_pt_share = C.bool(x.CapIommuHapPtShare) + + return nil +} + func (x *Connectorinfo) fromC(xc *C.libxl_connectorinfo) error { x.UniqueId = C.GoString(xc.unique_id) x.Width = uint32(xc.width) @@ -1223,6 +2482,26 @@ func (x *Connectorinfo) fromC(xc *C.libxl_connectorinfo) error { return nil } +func (x *Connectorinfo) toC(xc *C.libxl_connectorinfo) (err error) { + defer func() { + if err != nil { + C.libxl_connectorinfo_dispose(xc) + } + }() + + if x.UniqueId != "" { + xc.unique_id = C.CString(x.UniqueId) + } + xc.width = C.uint32_t(x.Width) + xc.height = C.uint32_t(x.Height) + xc.req_evtch = C.int(x.ReqEvtch) + xc.req_rref = C.int(x.ReqRref) + xc.evt_evtch = C.int(x.EvtEvtch) + xc.evt_rref = C.int(x.EvtRref) + + return nil +} + func (x *Vdisplinfo) fromC(xc *C.libxl_vdisplinfo) error { x.Backend = C.GoString(xc.backend) x.BackendId = uint32(xc.backend_id) @@ -1243,6 +2522,28 @@ func (x *Vdisplinfo) fromC(xc *C.libxl_vdisplinfo) error { return nil } +func (x *Vdisplinfo) toC(xc *C.libxl_vdisplinfo) (err error) { + defer func() { + if err != nil { + C.libxl_vdisplinfo_dispose(xc) + } + }() + + if x.Backend != "" { + xc.backend = C.CString(x.Backend) + } + xc.backend_id = C.uint32_t(x.BackendId) + if x.Frontend != "" { + xc.frontend = C.CString(x.Frontend) + } + xc.frontend_id = C.uint32_t(x.FrontendId) + xc.devid = C.libxl_devid(x.Devid) + xc.state = C.int(x.State) + xc.be_alloc = C.bool(x.BeAlloc) + + return nil +} + func (x *Streaminfo) fromC(xc *C.libxl_streaminfo) error { x.ReqEvtch = int(xc.req_evtch) x.ReqRref = int(xc.req_rref) @@ -1250,6 +2551,19 @@ func (x *Streaminfo) fromC(xc *C.libxl_streaminfo) error { return nil } +func (x *Streaminfo) toC(xc *C.libxl_streaminfo) (err error) { + defer func() { + if err != nil { + C.libxl_streaminfo_dispose(xc) + } + }() + + xc.req_evtch = C.int(x.ReqEvtch) + xc.req_rref = C.int(x.ReqRref) + + return nil +} + func (x *Pcminfo) fromC(xc *C.libxl_pcminfo) error { numVsndStreams := int(xc.num_vsnd_streams) cStreams := (*[1 << 28]C.libxl_streaminfo)(unsafe.Pointer(xc.streams))[:numVsndStreams:numVsndStreams] @@ -1263,6 +2577,16 @@ func (x *Pcminfo) fromC(xc *C.libxl_pcminfo) error { return nil } +func (x *Pcminfo) toC(xc *C.libxl_pcminfo) (err error) { + defer func() { + if err != nil { + C.libxl_pcminfo_dispose(xc) + } + }() + + return nil +} + func (x *Vsndinfo) fromC(xc *C.libxl_vsndinfo) error { x.Backend = C.GoString(xc.backend) x.BackendId = uint32(xc.backend_id) @@ -1282,6 +2606,27 @@ func (x *Vsndinfo) fromC(xc *C.libxl_vsndinfo) error { return nil } +func (x *Vsndinfo) toC(xc *C.libxl_vsndinfo) (err error) { + defer func() { + if err != nil { + C.libxl_vsndinfo_dispose(xc) + } + }() + + if x.Backend != "" { + xc.backend = C.CString(x.Backend) + } + xc.backend_id = C.uint32_t(x.BackendId) + if x.Frontend != "" { + xc.frontend = C.CString(x.Frontend) + } + xc.frontend_id = C.uint32_t(x.FrontendId) + xc.devid = C.libxl_devid(x.Devid) + xc.state = C.int(x.State) + + return nil +} + func (x *Vkbinfo) fromC(xc *C.libxl_vkbinfo) error { x.Backend = C.GoString(xc.backend) x.BackendId = uint32(xc.backend_id) @@ -1295,6 +2640,29 @@ func (x *Vkbinfo) fromC(xc *C.libxl_vkbinfo) error { return nil } +func (x *Vkbinfo) toC(xc *C.libxl_vkbinfo) (err error) { + defer func() { + if err != nil { + C.libxl_vkbinfo_dispose(xc) + } + }() + + if x.Backend != "" { + xc.backend = C.CString(x.Backend) + } + xc.backend_id = C.uint32_t(x.BackendId) + if x.Frontend != "" { + xc.frontend = C.CString(x.Frontend) + } + xc.frontend_id = C.uint32_t(x.FrontendId) + xc.devid = C.libxl_devid(x.Devid) + xc.state = C.int(x.State) + xc.evtch = C.int(x.Evtch) + xc.rref = C.int(x.Rref) + + return nil +} + func (x *Numainfo) fromC(xc *C.libxl_numainfo) error { x.Size = uint64(xc.size) x.Free = uint64(xc.free) @@ -1308,6 +2676,19 @@ func (x *Numainfo) fromC(xc *C.libxl_numainfo) error { return nil } +func (x *Numainfo) toC(xc *C.libxl_numainfo) (err error) { + defer func() { + if err != nil { + C.libxl_numainfo_dispose(xc) + } + }() + + xc.size = C.uint64_t(x.Size) + xc.free = C.uint64_t(x.Free) + + return nil +} + func (x *Cputopology) fromC(xc *C.libxl_cputopology) error { x.Core = uint32(xc.core) x.Socket = uint32(xc.socket) @@ -1316,6 +2697,20 @@ func (x *Cputopology) fromC(xc *C.libxl_cputopology) error { return nil } +func (x *Cputopology) toC(xc *C.libxl_cputopology) (err error) { + defer func() { + if err != nil { + C.libxl_cputopology_dispose(xc) + } + }() + + xc.core = C.uint32_t(x.Core) + xc.socket = C.uint32_t(x.Socket) + xc.node = C.uint32_t(x.Node) + + return nil +} + func (x *Pcitopology) fromC(xc *C.libxl_pcitopology) error { x.Seg = uint16(xc.seg) x.Bus = byte(xc.bus) @@ -1325,6 +2720,21 @@ func (x *Pcitopology) fromC(xc *C.libxl_pcitopology) error { return nil } +func (x *Pcitopology) toC(xc *C.libxl_pcitopology) (err error) { + defer func() { + if err != nil { + C.libxl_pcitopology_dispose(xc) + } + }() + + xc.seg = C.uint16_t(x.Seg) + xc.bus = C.uint8_t(x.Bus) + xc.devfn = C.uint8_t(x.Devfn) + xc.node = C.uint32_t(x.Node) + + return nil +} + func (x *SchedCreditParams) fromC(xc *C.libxl_sched_credit_params) error { x.TsliceMs = int(xc.tslice_ms) x.RatelimitUs = int(xc.ratelimit_us) @@ -1333,12 +2743,26 @@ func (x *SchedCreditParams) fromC(xc *C.libxl_sched_credit_params) error { return nil } +func (x *SchedCreditParams) toC(xc *C.libxl_sched_credit_params) (err error) { + xc.tslice_ms = C.int(x.TsliceMs) + xc.ratelimit_us = C.int(x.RatelimitUs) + xc.vcpu_migr_delay_us = C.int(x.VcpuMigrDelayUs) + + return nil +} + func (x *SchedCredit2Params) fromC(xc *C.libxl_sched_credit2_params) error { x.RatelimitUs = int(xc.ratelimit_us) return nil } +func (x *SchedCredit2Params) toC(xc *C.libxl_sched_credit2_params) (err error) { + xc.ratelimit_us = C.int(x.RatelimitUs) + + return nil +} + func (x *DomainRemusInfo) fromC(xc *C.libxl_domain_remus_info) error { x.Interval = int(xc.interval) if err := x.AllowUnsafe.fromC(&xc.allow_unsafe); err != nil { @@ -1367,6 +2791,42 @@ func (x *DomainRemusInfo) fromC(xc *C.libxl_domain_remus_info) error { return nil } +func (x *DomainRemusInfo) toC(xc *C.libxl_domain_remus_info) (err error) { + defer func() { + if err != nil { + C.libxl_domain_remus_info_dispose(xc) + } + }() + + xc.interval = C.int(x.Interval) + if err := x.AllowUnsafe.toC(&xc.allow_unsafe); err != nil { + return err + } + if err := x.Blackhole.toC(&xc.blackhole); err != nil { + return err + } + if err := x.Compression.toC(&xc.compression); err != nil { + return err + } + if err := x.Netbuf.toC(&xc.netbuf); err != nil { + return err + } + if x.Netbufscript != "" { + xc.netbufscript = C.CString(x.Netbufscript) + } + if err := x.Diskbuf.toC(&xc.diskbuf); err != nil { + return err + } + if err := x.Colo.toC(&xc.colo); err != nil { + return err + } + if err := x.UserspaceColoProxy.toC(&xc.userspace_colo_proxy); err != nil { + return err + } + + return nil +} + func (x *Event) fromC(xc *C.libxl_event) error { if err := x.Link.fromC(&xc.link); err != nil { return err @@ -1436,6 +2896,25 @@ func (x *EventTypeUnionOperationComplete) fromC(xc *C.libxl_event) error { return nil } +func (x *Event) toC(xc *C.libxl_event) (err error) { + defer func() { + if err != nil { + C.libxl_event_dispose(xc) + } + }() + + if err := x.Link.toC(&xc.link); err != nil { + return err + } + xc.domid = C.libxl_domid(x.Domid) + if err := x.Domuuid.toC(&xc.domuuid); err != nil { + return err + } + xc.for_user = C.uint64_t(x.ForUser) + + return nil +} + func (x *PsrCatInfo) fromC(xc *C.libxl_psr_cat_info) error { x.Id = uint32(xc.id) x.CosMax = uint32(xc.cos_max) @@ -1445,6 +2924,21 @@ func (x *PsrCatInfo) fromC(xc *C.libxl_psr_cat_info) error { return nil } +func (x *PsrCatInfo) toC(xc *C.libxl_psr_cat_info) (err error) { + defer func() { + if err != nil { + C.libxl_psr_cat_info_dispose(xc) + } + }() + + xc.id = C.uint32_t(x.Id) + xc.cos_max = C.uint32_t(x.CosMax) + xc.cbm_len = C.uint32_t(x.CbmLen) + xc.cdp_enabled = C.bool(x.CdpEnabled) + + return nil +} + func (x *PsrHwInfo) fromC(xc *C.libxl_psr_hw_info) error { x.Id = uint32(xc.id) x.Type = PsrFeatType(xc._type) @@ -1491,3 +2985,15 @@ func (x *PsrHwInfoTypeUnionMba) fromC(xc *C.libxl_psr_hw_info) error { x.Linear = bool(tmp.linear) return nil } + +func (x *PsrHwInfo) toC(xc *C.libxl_psr_hw_info) (err error) { + defer func() { + if err != nil { + C.libxl_psr_hw_info_dispose(xc) + } + }() + + xc.id = C.uint32_t(x.Id) + + return nil +} diff --git a/tools/golang/xenlight/xenlight.go b/tools/golang/xenlight/xenlight.go index 237f26bce9..24b1e022ff 100644 --- a/tools/golang/xenlight/xenlight.go +++ b/tools/golang/xenlight/xenlight.go @@ -140,14 +140,12 @@ func (u *Uuid) fromC(c *C.libxl_uuid) error { return nil } -func (u *Uuid) toC() (C.libxl_uuid, error) { - var c C.libxl_uuid - +func (u *Uuid) toC(cu *C.libxl_uuid) error { for i, v := range u { - c.uuid[i] = C.uint8_t(v) + cu.uuid[i] = C.uint8_t(v) } - return c, nil + return nil } // defboolVal represents a defbool value. @@ -232,15 +230,13 @@ func (d *Defbool) fromC(c *C.libxl_defbool) error { return nil } -func (d *Defbool) toC() (C.libxl_defbool, error) { - var c C.libxl_defbool - +func (d *Defbool) toC(cd *C.libxl_defbool) error { if !d.IsDefault() { val, _ := d.Val() - C.libxl_defbool_set(&c, C.bool(val)) + C.libxl_defbool_set(cd, C.bool(val)) } - return c, nil + return nil } // Mac represents a libxl_mac, or simply a MAC address. @@ -266,14 +262,12 @@ func (mac *Mac) fromC(cmac *C.libxl_mac) error { return nil } -func (mac Mac) toC() (C.libxl_mac, error) { - var cmac C.libxl_mac - +func (mac Mac) toC(cm *C.libxl_mac) error { for i, v := range mac { - cmac[i] = C.uint8_t(v) + (*cm)[i] = C.uint8_t(v) } - return cmac, nil + return nil } // MsVmGenid represents a libxl_ms_vm_genid. @@ -287,14 +281,12 @@ func (mvg *MsVmGenid) fromC(cmvg *C.libxl_ms_vm_genid) error { return nil } -func (mvg *MsVmGenid) toC() (C.libxl_ms_vm_genid, error) { - var cmvg C.libxl_ms_vm_genid - +func (mvg *MsVmGenid) toC(cmvg *C.libxl_ms_vm_genid) error { for i, v := range mvg { cmvg.bytes[i] = C.uint8_t(v) } - return cmvg, nil + return nil } // EvLink represents a libxl_ev_link. @@ -304,8 +296,8 @@ func (mvg *MsVmGenid) toC() (C.libxl_ms_vm_genid, error) { // through the Go package. type EvLink struct{} -func (el *EvLink) fromC(cel *C.libxl_ev_link) error { return nil } -func (el *EvLink) toC() (cel C.libxl_ev_link, err error) { return } +func (el *EvLink) fromC(cel *C.libxl_ev_link) error { return nil } +func (el *EvLink) toC(cel *C.libxl_ev_link) (err error) { return } // CpuidPolicyList represents a libxl_cpuid_policy_list. // @@ -316,20 +308,18 @@ type CpuidPolicyList string func (cpl CpuidPolicyList) fromC(ccpl *C.libxl_cpuid_policy_list) error { return nil } -func (cpl CpuidPolicyList) toC() (C.libxl_cpuid_policy_list, error) { - var ccpl C.libxl_cpuid_policy_list - +func (cpl CpuidPolicyList) toC(ccpl *C.libxl_cpuid_policy_list) error { s := C.CString(string(cpl)) defer C.free(unsafe.Pointer(s)) - ret := C.libxl_cpuid_parse_config(&ccpl, s) + ret := C.libxl_cpuid_parse_config(ccpl, s) if ret != 0 { - C.libxl_cpuid_dispose(&ccpl) + C.libxl_cpuid_dispose(ccpl) - return ccpl, Error(-ret) + return Error(-ret) } - return ccpl, nil + return nil } // Hwcap represents a libxl_hwcap. @@ -343,14 +333,12 @@ func (hwcap *Hwcap) fromC(chwcap *C.libxl_hwcap) error { return nil } -func (hwcap *Hwcap) toC() (C.libxl_hwcap, error) { - var chwcap C.libxl_hwcap - +func (hwcap *Hwcap) toC(chwcap *C.libxl_hwcap) error { for i, v := range hwcap { - chwcap[i] = C.uint32_t(v) + (*chwcap)[i] = C.uint32_t(v) } - return chwcap, nil + return nil } // KeyValueList represents a libxl_key_value_list. @@ -360,8 +348,8 @@ func (hwcap *Hwcap) toC() (C.libxl_hwcap, error) { // Go package. type KeyValueList struct{} -func (kvl KeyValueList) fromC(ckvl *C.libxl_key_value_list) error { return nil } -func (kvl KeyValueList) toC() (ckvl C.libxl_key_value_list, err error) { return } +func (kvl KeyValueList) fromC(ckvl *C.libxl_key_value_list) error { return nil } +func (kvl KeyValueList) toC(ckvl *C.libxl_key_value_list) (err error) { return } // StringList represents a libxl_string_list. type StringList []string @@ -379,17 +367,17 @@ func (sl *StringList) fromC(csl *C.libxl_string_list) error { return nil } -func (sl StringList) toC() (C.libxl_string_list, error) { +func (sl StringList) toC(csl *C.libxl_string_list) error { var char *C.char size := len(sl) - csl := (C.libxl_string_list)(C.malloc(C.ulong(size) * C.ulong(unsafe.Sizeof(char)))) + *csl = (C.libxl_string_list)(C.malloc(C.ulong(size) * C.ulong(unsafe.Sizeof(char)))) clist := (*[1 << 30]*C.char)(unsafe.Pointer(csl))[:size:size] for i, v := range sl { clist[i] = C.CString(v) } - return csl, nil + return nil } // Bitmap represents a libxl_bitmap. @@ -421,9 +409,7 @@ func (bm *Bitmap) fromC(cbm *C.libxl_bitmap) error { return nil } -func (bm *Bitmap) toC() (C.libxl_bitmap, error) { - var cbm C.libxl_bitmap - +func (bm *Bitmap) toC(cbm *C.libxl_bitmap) error { size := len(bm.bitmap) cbm.size = C.uint32_t(size) cbm._map = (*C.uint8_t)(C.malloc(C.ulong(cbm.size) * C.sizeof_uint8_t)) @@ -431,7 +417,7 @@ func (bm *Bitmap) toC() (C.libxl_bitmap, error) { copy(cs, bm.bitmap) - return cbm, nil + return nil } func (sr ShutdownReason) String() (str string) { @@ -534,8 +520,8 @@ func (Ctx *Context) CpupoolCreate(Name string, Scheduler Scheduler, Cpumap Bitma var uuid C.libxl_uuid C.libxl_uuid_generate(&uuid) - cbm, err := Cpumap.toC() - if err != nil { + var cbm C.libxl_bitmap + if err = Cpumap.toC(&cbm); err != nil { return } defer C.libxl_bitmap_dispose(&cbm) @@ -577,8 +563,8 @@ func (Ctx *Context) CpupoolCpuadd(Poolid uint32, Cpu int) (err error) { // int libxl_cpupool_cpuadd_cpumap(libxl_ctx *ctx, uint32_t poolid, // const libxl_bitmap *cpumap); func (Ctx *Context) CpupoolCpuaddCpumap(Poolid uint32, Cpumap Bitmap) (err error) { - cbm, err := Cpumap.toC() - if err != nil { + var cbm C.libxl_bitmap + if err = Cpumap.toC(&cbm); err != nil { return } defer C.libxl_bitmap_dispose(&cbm) @@ -606,8 +592,8 @@ func (Ctx *Context) CpupoolCpuremove(Poolid uint32, Cpu int) (err error) { // int libxl_cpupool_cpuremove_cpumap(libxl_ctx *ctx, uint32_t poolid, // const libxl_bitmap *cpumap); func (Ctx *Context) CpupoolCpuremoveCpumap(Poolid uint32, Cpumap Bitmap) (err error) { - cbm, err := Cpumap.toC() - if err != nil { + var cbm C.libxl_bitmap + if err = Cpumap.toC(&cbm); err != nil { return } defer C.libxl_bitmap_dispose(&cbm)