Commit d5238344 authored by Mitsuru Kariya's avatar Mitsuru Kariya Committed by Daniel P. Berrangé
Browse files

Fix unsigned long mapped as Java long instead of NativeLong



C unsigned long is platform-dependent (4 bytes on 32-bit, 8 bytes on
64-bit), but Java long is always 8 bytes. This mismatch causes
incorrect struct layout and calling convention issues on 32-bit
systems.

- virDomainBlockJobInfo.bandwidth: long -> NativeLong
  (fixes struct layout so cur/end fields are read at correct offsets)
- virDomainBlockCommit bandwidth parameter: long -> NativeLong
  (fixes ABI mismatch in function call)

Signed-off-by: default avatarMitsuru Kariya <mitsuru.kariya@nttdata.com>
parent a7855104
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1196,7 +1196,7 @@ public class Domain {
     * @throws LibvirtException
     */
    public void blockCommit(String disk, String base, String top, long bandwidth, int flags) throws LibvirtException {
        processError(libvirt.virDomainBlockCommit(vdp, disk, base, top, bandwidth, flags));
        processError(libvirt.virDomainBlockCommit(vdp, disk, base, top, new NativeLong(bandwidth), flags));
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ public class DomainBlockJobInfo {

    public DomainBlockJobInfo(final virDomainBlockJobInfo virInfo) {
        type = virInfo.type;
        bandwidth = virInfo.bandwidth;
        bandwidth = virInfo.bandwidth.longValue();
        cur = virInfo.cur;
        end = virInfo.end;
    }
+1 −1
Original line number Diff line number Diff line
@@ -327,7 +327,7 @@ public interface Libvirt extends Library {
    int virDomainBackupBegin(DomainPointer virDomainPtr, String backupXML, String checkpointXML, int flags);
    CString virDomainBackupGetXMLDesc(DomainPointer virDomainPtr, int flags);
    int virDomainBlockCommit(DomainPointer virDomainPtr, String disk,
                             String base, String top, long bandwidth, int flags);
                             String base, String top, NativeLong bandwidth, int flags);
    int virDomainBlockCopy(DomainPointer virDomainPtr, String disk,
                           String deviceXML, virTypedParameter[] params,
                           int nparams, int flags);
+2 −1
Original line number Diff line number Diff line
package org.libvirt.jna;

import com.sun.jna.NativeLong;
import com.sun.jna.Structure;

import java.util.Arrays;
@@ -7,7 +8,7 @@ import java.util.List;

public class virDomainBlockJobInfo extends Structure {
    public int type;
    public long bandwidth;
    public NativeLong bandwidth;
    public long cur;
    public long end;