Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee73498d authored by Jason Sams's avatar Jason Sams
Browse files

Fix field packer bug for U32 data.

Fix initial refcounts in allocations.
Support null references in allocations.

Change-Id: Ifba6406ba750e69737bd77fa7df5d7fb8e27a5b4
parent 5320b326
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -76,6 +76,7 @@ public class FieldPacker {

    public void addU8(short v) {
        if ((v < 0) || (v > 0xff)) {
            android.util.Log.e("rs", "FieldPacker.addU8( " + v + " )");
            throw new IllegalArgumentException("Saving value out of range for type");
        }
        mData[mPos++] = (byte)v;
@@ -83,6 +84,7 @@ public class FieldPacker {

    public void addU16(int v) {
        if ((v < 0) || (v > 0xffff)) {
            android.util.Log.e("rs", "FieldPacker.addU16( " + v + " )");
            throw new IllegalArgumentException("Saving value out of range for type");
        }
        align(2);
@@ -91,7 +93,8 @@ public class FieldPacker {
    }

    public void addU32(long v) {
        if ((v < 0) || (v > 0xffffffff)) {
        if ((v < 0) || (v > 0xffffffffL)) {
            android.util.Log.e("rs", "FieldPacker.addU32( " + v + " )");
            throw new IllegalArgumentException("Saving value out of range for type");
        }
        align(4);
@@ -103,6 +106,7 @@ public class FieldPacker {

    public void addU64(long v) {
        if (v < 0) {
            android.util.Log.e("rs", "FieldPacker.addU64( " + v + " )");
            throw new IllegalArgumentException("Saving value out of range for type");
        }
        align(8);
+3 −0
Original line number Diff line number Diff line
@@ -34,6 +34,9 @@ Allocation::Allocation(Context *rsc, const Type *type) : ObjectBase(rsc)
    init(rsc, type);

    mPtr = malloc(mType->getSizeBytes());
    if (mType->getElement()->getHasReferences()) {
        memset(mPtr, 0, mType->getSizeBytes());
    }
    if (!mPtr) {
        LOGE("Allocation::Allocation, alloc failure");
    }
+2 −2
Original line number Diff line number Diff line
@@ -266,7 +266,7 @@ void Element::incRefs(const void *ptr) const
        if (mComponent.isReference()) {
            ObjectBase *const*obp = static_cast<ObjectBase *const*>(ptr);
            ObjectBase *ob = obp[0];
            ob->incSysRef();
            if (ob) ob->incSysRef();
        }
        return;
    }
@@ -285,7 +285,7 @@ void Element::decRefs(const void *ptr) const
        if (mComponent.isReference()) {
            ObjectBase *const*obp = static_cast<ObjectBase *const*>(ptr);
            ObjectBase *ob = obp[0];
            ob->decSysRef();
            if (ob) ob->decSysRef();
        }
        return;
    }