Fix field packer bug for U32 data.

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

Change-Id: Ifba6406ba750e69737bd77fa7df5d7fb8e27a5b4
This commit is contained in:
Jason Sams
2010-08-12 12:44:02 -07:00
parent 5320b326a4
commit ee73498ddf
3 changed files with 10 additions and 3 deletions

View File

@@ -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);

View File

@@ -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");
}

View File

@@ -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;
}