Merge "AArch64: Make Binder and Parcel 64-bit compatible"
This commit is contained in:
@@ -56,7 +56,7 @@ public class Binder implements IBinder {
|
|||||||
private static String sDumpDisabled = null;
|
private static String sDumpDisabled = null;
|
||||||
|
|
||||||
/* mObject is used by native code, do not remove or rename */
|
/* mObject is used by native code, do not remove or rename */
|
||||||
private int mObject;
|
private long mObject;
|
||||||
private IInterface mOwner;
|
private IInterface mOwner;
|
||||||
private String mDescriptor;
|
private String mDescriptor;
|
||||||
|
|
||||||
@@ -390,7 +390,7 @@ public class Binder implements IBinder {
|
|||||||
private native final void destroy();
|
private native final void destroy();
|
||||||
|
|
||||||
// Entry point from android_util_Binder.cpp's onTransact
|
// Entry point from android_util_Binder.cpp's onTransact
|
||||||
private boolean execTransact(int code, int dataObj, int replyObj,
|
private boolean execTransact(int code, long dataObj, long replyObj,
|
||||||
int flags) {
|
int flags) {
|
||||||
Parcel data = Parcel.obtain(dataObj);
|
Parcel data = Parcel.obtain(dataObj);
|
||||||
Parcel reply = Parcel.obtain(replyObj);
|
Parcel reply = Parcel.obtain(replyObj);
|
||||||
@@ -499,6 +499,6 @@ final class BinderProxy implements IBinder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final private WeakReference mSelf;
|
final private WeakReference mSelf;
|
||||||
private int mObject;
|
private long mObject;
|
||||||
private int mOrgue;
|
private long mOrgue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ public final class Parcel {
|
|||||||
private static final String TAG = "Parcel";
|
private static final String TAG = "Parcel";
|
||||||
|
|
||||||
@SuppressWarnings({"UnusedDeclaration"})
|
@SuppressWarnings({"UnusedDeclaration"})
|
||||||
private int mNativePtr; // used by native code
|
private long mNativePtr; // used by native code
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flag indicating if {@link #mNativePtr} was allocated by this object,
|
* Flag indicating if {@link #mNativePtr} was allocated by this object,
|
||||||
@@ -232,47 +232,47 @@ public final class Parcel {
|
|||||||
private static final int EX_NETWORK_MAIN_THREAD = -6;
|
private static final int EX_NETWORK_MAIN_THREAD = -6;
|
||||||
private static final int EX_HAS_REPLY_HEADER = -128; // special; see below
|
private static final int EX_HAS_REPLY_HEADER = -128; // special; see below
|
||||||
|
|
||||||
private static native int nativeDataSize(int nativePtr);
|
private static native int nativeDataSize(long nativePtr);
|
||||||
private static native int nativeDataAvail(int nativePtr);
|
private static native int nativeDataAvail(long nativePtr);
|
||||||
private static native int nativeDataPosition(int nativePtr);
|
private static native int nativeDataPosition(long nativePtr);
|
||||||
private static native int nativeDataCapacity(int nativePtr);
|
private static native int nativeDataCapacity(long nativePtr);
|
||||||
private static native void nativeSetDataSize(int nativePtr, int size);
|
private static native void nativeSetDataSize(long nativePtr, int size);
|
||||||
private static native void nativeSetDataPosition(int nativePtr, int pos);
|
private static native void nativeSetDataPosition(long nativePtr, int pos);
|
||||||
private static native void nativeSetDataCapacity(int nativePtr, int size);
|
private static native void nativeSetDataCapacity(long nativePtr, int size);
|
||||||
|
|
||||||
private static native boolean nativePushAllowFds(int nativePtr, boolean allowFds);
|
private static native boolean nativePushAllowFds(long nativePtr, boolean allowFds);
|
||||||
private static native void nativeRestoreAllowFds(int nativePtr, boolean lastValue);
|
private static native void nativeRestoreAllowFds(long nativePtr, boolean lastValue);
|
||||||
|
|
||||||
private static native void nativeWriteByteArray(int nativePtr, byte[] b, int offset, int len);
|
private static native void nativeWriteByteArray(long nativePtr, byte[] b, int offset, int len);
|
||||||
private static native void nativeWriteInt(int nativePtr, int val);
|
private static native void nativeWriteInt(long nativePtr, int val);
|
||||||
private static native void nativeWriteLong(int nativePtr, long val);
|
private static native void nativeWriteLong(long nativePtr, long val);
|
||||||
private static native void nativeWriteFloat(int nativePtr, float val);
|
private static native void nativeWriteFloat(long nativePtr, float val);
|
||||||
private static native void nativeWriteDouble(int nativePtr, double val);
|
private static native void nativeWriteDouble(long nativePtr, double val);
|
||||||
private static native void nativeWriteString(int nativePtr, String val);
|
private static native void nativeWriteString(long nativePtr, String val);
|
||||||
private static native void nativeWriteStrongBinder(int nativePtr, IBinder val);
|
private static native void nativeWriteStrongBinder(long nativePtr, IBinder val);
|
||||||
private static native void nativeWriteFileDescriptor(int nativePtr, FileDescriptor val);
|
private static native void nativeWriteFileDescriptor(long nativePtr, FileDescriptor val);
|
||||||
|
|
||||||
private static native byte[] nativeCreateByteArray(int nativePtr);
|
private static native byte[] nativeCreateByteArray(long nativePtr);
|
||||||
private static native int nativeReadInt(int nativePtr);
|
private static native int nativeReadInt(long nativePtr);
|
||||||
private static native long nativeReadLong(int nativePtr);
|
private static native long nativeReadLong(long nativePtr);
|
||||||
private static native float nativeReadFloat(int nativePtr);
|
private static native float nativeReadFloat(long nativePtr);
|
||||||
private static native double nativeReadDouble(int nativePtr);
|
private static native double nativeReadDouble(long nativePtr);
|
||||||
private static native String nativeReadString(int nativePtr);
|
private static native String nativeReadString(long nativePtr);
|
||||||
private static native IBinder nativeReadStrongBinder(int nativePtr);
|
private static native IBinder nativeReadStrongBinder(long nativePtr);
|
||||||
private static native FileDescriptor nativeReadFileDescriptor(int nativePtr);
|
private static native FileDescriptor nativeReadFileDescriptor(long nativePtr);
|
||||||
|
|
||||||
private static native int nativeCreate();
|
private static native long nativeCreate();
|
||||||
private static native void nativeFreeBuffer(int nativePtr);
|
private static native void nativeFreeBuffer(long nativePtr);
|
||||||
private static native void nativeDestroy(int nativePtr);
|
private static native void nativeDestroy(long nativePtr);
|
||||||
|
|
||||||
private static native byte[] nativeMarshall(int nativePtr);
|
private static native byte[] nativeMarshall(long nativePtr);
|
||||||
private static native void nativeUnmarshall(
|
private static native void nativeUnmarshall(
|
||||||
int nativePtr, byte[] data, int offest, int length);
|
long nativePtr, byte[] data, int offest, int length);
|
||||||
private static native void nativeAppendFrom(
|
private static native void nativeAppendFrom(
|
||||||
int thisNativePtr, int otherNativePtr, int offset, int length);
|
long thisNativePtr, long otherNativePtr, int offset, int length);
|
||||||
private static native boolean nativeHasFileDescriptors(int nativePtr);
|
private static native boolean nativeHasFileDescriptors(long nativePtr);
|
||||||
private static native void nativeWriteInterfaceToken(int nativePtr, String interfaceName);
|
private static native void nativeWriteInterfaceToken(long nativePtr, String interfaceName);
|
||||||
private static native void nativeEnforceInterface(int nativePtr, String interfaceName);
|
private static native void nativeEnforceInterface(long nativePtr, String interfaceName);
|
||||||
|
|
||||||
public final static Parcelable.Creator<String> STRING_CREATOR
|
public final static Parcelable.Creator<String> STRING_CREATOR
|
||||||
= new Parcelable.Creator<String>() {
|
= new Parcelable.Creator<String>() {
|
||||||
@@ -2229,6 +2229,11 @@ public final class Parcel {
|
|||||||
mCreators = new HashMap<ClassLoader,HashMap<String,Parcelable.Creator>>();
|
mCreators = new HashMap<ClassLoader,HashMap<String,Parcelable.Creator>>();
|
||||||
|
|
||||||
static protected final Parcel obtain(int obj) {
|
static protected final Parcel obtain(int obj) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
static protected final Parcel obtain(long obj) {
|
||||||
final Parcel[] pool = sHolderPool;
|
final Parcel[] pool = sHolderPool;
|
||||||
synchronized (pool) {
|
synchronized (pool) {
|
||||||
Parcel p;
|
Parcel p;
|
||||||
@@ -2247,7 +2252,7 @@ public final class Parcel {
|
|||||||
return new Parcel(obj);
|
return new Parcel(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Parcel(int nativePtr) {
|
private Parcel(long nativePtr) {
|
||||||
if (DEBUG_RECYCLE) {
|
if (DEBUG_RECYCLE) {
|
||||||
mStack = new RuntimeException();
|
mStack = new RuntimeException();
|
||||||
}
|
}
|
||||||
@@ -2255,7 +2260,7 @@ public final class Parcel {
|
|||||||
init(nativePtr);
|
init(nativePtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init(int nativePtr) {
|
private void init(long nativePtr) {
|
||||||
if (nativePtr != 0) {
|
if (nativePtr != 0) {
|
||||||
mNativePtr = nativePtr;
|
mNativePtr = nativePtr;
|
||||||
mOwnsNativeParcelObject = false;
|
mOwnsNativeParcelObject = false;
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ static struct parcel_offsets_t
|
|||||||
Parcel* parcelForJavaObject(JNIEnv* env, jobject obj)
|
Parcel* parcelForJavaObject(JNIEnv* env, jobject obj)
|
||||||
{
|
{
|
||||||
if (obj) {
|
if (obj) {
|
||||||
Parcel* p = (Parcel*)env->GetIntField(obj, gParcelOffsets.mNativePtr);
|
Parcel* p = (Parcel*)env->GetLongField(obj, gParcelOffsets.mNativePtr);
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
@@ -88,31 +88,31 @@ void recycleJavaParcelObject(JNIEnv* env, jobject parcelObj)
|
|||||||
env->CallVoidMethod(parcelObj, gParcelOffsets.recycle);
|
env->CallVoidMethod(parcelObj, gParcelOffsets.recycle);
|
||||||
}
|
}
|
||||||
|
|
||||||
static jint android_os_Parcel_dataSize(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jint android_os_Parcel_dataSize(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
return parcel ? parcel->dataSize() : 0;
|
return parcel ? parcel->dataSize() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jint android_os_Parcel_dataAvail(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jint android_os_Parcel_dataAvail(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
return parcel ? parcel->dataAvail() : 0;
|
return parcel ? parcel->dataAvail() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jint android_os_Parcel_dataPosition(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jint android_os_Parcel_dataPosition(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
return parcel ? parcel->dataPosition() : 0;
|
return parcel ? parcel->dataPosition() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jint android_os_Parcel_dataCapacity(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jint android_os_Parcel_dataCapacity(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
return parcel ? parcel->dataCapacity() : 0;
|
return parcel ? parcel->dataCapacity() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_setDataSize(JNIEnv* env, jclass clazz, jint nativePtr, jint size)
|
static void android_os_Parcel_setDataSize(JNIEnv* env, jclass clazz, jlong nativePtr, jint size)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -123,7 +123,7 @@ static void android_os_Parcel_setDataSize(JNIEnv* env, jclass clazz, jint native
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_setDataPosition(JNIEnv* env, jclass clazz, jint nativePtr, jint pos)
|
static void android_os_Parcel_setDataPosition(JNIEnv* env, jclass clazz, jlong nativePtr, jint pos)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -131,7 +131,7 @@ static void android_os_Parcel_setDataPosition(JNIEnv* env, jclass clazz, jint na
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_setDataCapacity(JNIEnv* env, jclass clazz, jint nativePtr, jint size)
|
static void android_os_Parcel_setDataCapacity(JNIEnv* env, jclass clazz, jlong nativePtr, jint size)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -142,7 +142,7 @@ static void android_os_Parcel_setDataCapacity(JNIEnv* env, jclass clazz, jint na
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static jboolean android_os_Parcel_pushAllowFds(JNIEnv* env, jclass clazz, jint nativePtr, jboolean allowFds)
|
static jboolean android_os_Parcel_pushAllowFds(JNIEnv* env, jclass clazz, jlong nativePtr, jboolean allowFds)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
jboolean ret = JNI_TRUE;
|
jboolean ret = JNI_TRUE;
|
||||||
@@ -152,7 +152,7 @@ static jboolean android_os_Parcel_pushAllowFds(JNIEnv* env, jclass clazz, jint n
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_restoreAllowFds(JNIEnv* env, jclass clazz, jint nativePtr, jboolean lastValue)
|
static void android_os_Parcel_restoreAllowFds(JNIEnv* env, jclass clazz, jlong nativePtr, jboolean lastValue)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -160,7 +160,7 @@ static void android_os_Parcel_restoreAllowFds(JNIEnv* env, jclass clazz, jint na
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_writeNative(JNIEnv* env, jclass clazz, jint nativePtr, jobject data,
|
static void android_os_Parcel_writeNative(JNIEnv* env, jclass clazz, jlong nativePtr, jobject data,
|
||||||
jint offset, jint length)
|
jint offset, jint length)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
@@ -187,7 +187,7 @@ static void android_os_Parcel_writeNative(JNIEnv* env, jclass clazz, jint native
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_writeInt(JNIEnv* env, jclass clazz, jint nativePtr, jint val) {
|
static void android_os_Parcel_writeInt(JNIEnv* env, jclass clazz, jlong nativePtr, jint val) {
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
const status_t err = parcel->writeInt32(val);
|
const status_t err = parcel->writeInt32(val);
|
||||||
if (err != NO_ERROR) {
|
if (err != NO_ERROR) {
|
||||||
@@ -195,7 +195,7 @@ static void android_os_Parcel_writeInt(JNIEnv* env, jclass clazz, jint nativePtr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_writeLong(JNIEnv* env, jclass clazz, jint nativePtr, jlong val)
|
static void android_os_Parcel_writeLong(JNIEnv* env, jclass clazz, jlong nativePtr, jlong val)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -206,7 +206,7 @@ static void android_os_Parcel_writeLong(JNIEnv* env, jclass clazz, jint nativePt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_writeFloat(JNIEnv* env, jclass clazz, jint nativePtr, jfloat val)
|
static void android_os_Parcel_writeFloat(JNIEnv* env, jclass clazz, jlong nativePtr, jfloat val)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -217,7 +217,7 @@ static void android_os_Parcel_writeFloat(JNIEnv* env, jclass clazz, jint nativeP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_writeDouble(JNIEnv* env, jclass clazz, jint nativePtr, jdouble val)
|
static void android_os_Parcel_writeDouble(JNIEnv* env, jclass clazz, jlong nativePtr, jdouble val)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -228,7 +228,7 @@ static void android_os_Parcel_writeDouble(JNIEnv* env, jclass clazz, jint native
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_writeString(JNIEnv* env, jclass clazz, jint nativePtr, jstring val)
|
static void android_os_Parcel_writeString(JNIEnv* env, jclass clazz, jlong nativePtr, jstring val)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -248,7 +248,7 @@ static void android_os_Parcel_writeString(JNIEnv* env, jclass clazz, jint native
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_writeStrongBinder(JNIEnv* env, jclass clazz, jint nativePtr, jobject object)
|
static void android_os_Parcel_writeStrongBinder(JNIEnv* env, jclass clazz, jlong nativePtr, jobject object)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -259,7 +259,7 @@ static void android_os_Parcel_writeStrongBinder(JNIEnv* env, jclass clazz, jint
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_writeFileDescriptor(JNIEnv* env, jclass clazz, jint nativePtr, jobject object)
|
static void android_os_Parcel_writeFileDescriptor(JNIEnv* env, jclass clazz, jlong nativePtr, jobject object)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -271,7 +271,7 @@ static void android_os_Parcel_writeFileDescriptor(JNIEnv* env, jclass clazz, jin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static jbyteArray android_os_Parcel_createByteArray(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jbyteArray android_os_Parcel_createByteArray(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
jbyteArray ret = NULL;
|
jbyteArray ret = NULL;
|
||||||
|
|
||||||
@@ -297,7 +297,7 @@ static jbyteArray android_os_Parcel_createByteArray(JNIEnv* env, jclass clazz, j
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jint android_os_Parcel_readInt(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jint android_os_Parcel_readInt(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -306,7 +306,7 @@ static jint android_os_Parcel_readInt(JNIEnv* env, jclass clazz, jint nativePtr)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jlong android_os_Parcel_readLong(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jlong android_os_Parcel_readLong(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -315,7 +315,7 @@ static jlong android_os_Parcel_readLong(JNIEnv* env, jclass clazz, jint nativePt
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jfloat android_os_Parcel_readFloat(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jfloat android_os_Parcel_readFloat(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -324,7 +324,7 @@ static jfloat android_os_Parcel_readFloat(JNIEnv* env, jclass clazz, jint native
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jdouble android_os_Parcel_readDouble(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jdouble android_os_Parcel_readDouble(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -333,7 +333,7 @@ static jdouble android_os_Parcel_readDouble(JNIEnv* env, jclass clazz, jint nati
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jstring android_os_Parcel_readString(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jstring android_os_Parcel_readString(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -347,7 +347,7 @@ static jstring android_os_Parcel_readString(JNIEnv* env, jclass clazz, jint nati
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jobject android_os_Parcel_readStrongBinder(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jobject android_os_Parcel_readStrongBinder(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -356,7 +356,7 @@ static jobject android_os_Parcel_readStrongBinder(JNIEnv* env, jclass clazz, jin
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jobject android_os_Parcel_readFileDescriptor(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jobject android_os_Parcel_readFileDescriptor(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -468,13 +468,13 @@ static void android_os_Parcel_clearFileDescriptor(JNIEnv* env, jclass clazz, job
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static jint android_os_Parcel_create(JNIEnv* env, jclass clazz)
|
static jlong android_os_Parcel_create(JNIEnv* env, jclass clazz)
|
||||||
{
|
{
|
||||||
Parcel* parcel = new Parcel();
|
Parcel* parcel = new Parcel();
|
||||||
return reinterpret_cast<jint>(parcel);
|
return reinterpret_cast<jlong>(parcel);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_freeBuffer(JNIEnv* env, jclass clazz, jint nativePtr)
|
static void android_os_Parcel_freeBuffer(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel != NULL) {
|
if (parcel != NULL) {
|
||||||
@@ -482,13 +482,13 @@ static void android_os_Parcel_freeBuffer(JNIEnv* env, jclass clazz, jint nativeP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_destroy(JNIEnv* env, jclass clazz, jint nativePtr)
|
static void android_os_Parcel_destroy(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
delete parcel;
|
delete parcel;
|
||||||
}
|
}
|
||||||
|
|
||||||
static jbyteArray android_os_Parcel_marshall(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jbyteArray android_os_Parcel_marshall(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
if (parcel == NULL) {
|
if (parcel == NULL) {
|
||||||
@@ -517,7 +517,7 @@ static jbyteArray android_os_Parcel_marshall(JNIEnv* env, jclass clazz, jint nat
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_unmarshall(JNIEnv* env, jclass clazz, jint nativePtr,
|
static void android_os_Parcel_unmarshall(JNIEnv* env, jclass clazz, jlong nativePtr,
|
||||||
jbyteArray data, jint offset, jint length)
|
jbyteArray data, jint offset, jint length)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
@@ -538,8 +538,8 @@ static void android_os_Parcel_unmarshall(JNIEnv* env, jclass clazz, jint nativeP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_appendFrom(JNIEnv* env, jclass clazz, jint thisNativePtr,
|
static void android_os_Parcel_appendFrom(JNIEnv* env, jclass clazz, jlong thisNativePtr,
|
||||||
jint otherNativePtr, jint offset, jint length)
|
jlong otherNativePtr, jint offset, jint length)
|
||||||
{
|
{
|
||||||
Parcel* thisParcel = reinterpret_cast<Parcel*>(thisNativePtr);
|
Parcel* thisParcel = reinterpret_cast<Parcel*>(thisNativePtr);
|
||||||
if (thisParcel == NULL) {
|
if (thisParcel == NULL) {
|
||||||
@@ -556,7 +556,7 @@ static void android_os_Parcel_appendFrom(JNIEnv* env, jclass clazz, jint thisNat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static jboolean android_os_Parcel_hasFileDescriptors(JNIEnv* env, jclass clazz, jint nativePtr)
|
static jboolean android_os_Parcel_hasFileDescriptors(JNIEnv* env, jclass clazz, jlong nativePtr)
|
||||||
{
|
{
|
||||||
jboolean ret = JNI_FALSE;
|
jboolean ret = JNI_FALSE;
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
@@ -568,7 +568,7 @@ static jboolean android_os_Parcel_hasFileDescriptors(JNIEnv* env, jclass clazz,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_writeInterfaceToken(JNIEnv* env, jclass clazz, jint nativePtr,
|
static void android_os_Parcel_writeInterfaceToken(JNIEnv* env, jclass clazz, jlong nativePtr,
|
||||||
jstring name)
|
jstring name)
|
||||||
{
|
{
|
||||||
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
Parcel* parcel = reinterpret_cast<Parcel*>(nativePtr);
|
||||||
@@ -583,7 +583,7 @@ static void android_os_Parcel_writeInterfaceToken(JNIEnv* env, jclass clazz, jin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Parcel_enforceInterface(JNIEnv* env, jclass clazz, jint nativePtr, jstring name)
|
static void android_os_Parcel_enforceInterface(JNIEnv* env, jclass clazz, jlong nativePtr, jstring name)
|
||||||
{
|
{
|
||||||
jboolean ret = JNI_FALSE;
|
jboolean ret = JNI_FALSE;
|
||||||
|
|
||||||
@@ -622,50 +622,50 @@ static void android_os_Parcel_enforceInterface(JNIEnv* env, jclass clazz, jint n
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
static const JNINativeMethod gParcelMethods[] = {
|
static const JNINativeMethod gParcelMethods[] = {
|
||||||
{"nativeDataSize", "(I)I", (void*)android_os_Parcel_dataSize},
|
{"nativeDataSize", "(J)I", (void*)android_os_Parcel_dataSize},
|
||||||
{"nativeDataAvail", "(I)I", (void*)android_os_Parcel_dataAvail},
|
{"nativeDataAvail", "(J)I", (void*)android_os_Parcel_dataAvail},
|
||||||
{"nativeDataPosition", "(I)I", (void*)android_os_Parcel_dataPosition},
|
{"nativeDataPosition", "(J)I", (void*)android_os_Parcel_dataPosition},
|
||||||
{"nativeDataCapacity", "(I)I", (void*)android_os_Parcel_dataCapacity},
|
{"nativeDataCapacity", "(J)I", (void*)android_os_Parcel_dataCapacity},
|
||||||
{"nativeSetDataSize", "(II)V", (void*)android_os_Parcel_setDataSize},
|
{"nativeSetDataSize", "(JI)V", (void*)android_os_Parcel_setDataSize},
|
||||||
{"nativeSetDataPosition", "(II)V", (void*)android_os_Parcel_setDataPosition},
|
{"nativeSetDataPosition", "(JI)V", (void*)android_os_Parcel_setDataPosition},
|
||||||
{"nativeSetDataCapacity", "(II)V", (void*)android_os_Parcel_setDataCapacity},
|
{"nativeSetDataCapacity", "(JI)V", (void*)android_os_Parcel_setDataCapacity},
|
||||||
|
|
||||||
{"nativePushAllowFds", "(IZ)Z", (void*)android_os_Parcel_pushAllowFds},
|
{"nativePushAllowFds", "(JZ)Z", (void*)android_os_Parcel_pushAllowFds},
|
||||||
{"nativeRestoreAllowFds", "(IZ)V", (void*)android_os_Parcel_restoreAllowFds},
|
{"nativeRestoreAllowFds", "(JZ)V", (void*)android_os_Parcel_restoreAllowFds},
|
||||||
|
|
||||||
{"nativeWriteByteArray", "(I[BII)V", (void*)android_os_Parcel_writeNative},
|
{"nativeWriteByteArray", "(J[BII)V", (void*)android_os_Parcel_writeNative},
|
||||||
{"nativeWriteInt", "(II)V", (void*)android_os_Parcel_writeInt},
|
{"nativeWriteInt", "(JI)V", (void*)android_os_Parcel_writeInt},
|
||||||
{"nativeWriteLong", "(IJ)V", (void*)android_os_Parcel_writeLong},
|
{"nativeWriteLong", "(JJ)V", (void*)android_os_Parcel_writeLong},
|
||||||
{"nativeWriteFloat", "(IF)V", (void*)android_os_Parcel_writeFloat},
|
{"nativeWriteFloat", "(JF)V", (void*)android_os_Parcel_writeFloat},
|
||||||
{"nativeWriteDouble", "(ID)V", (void*)android_os_Parcel_writeDouble},
|
{"nativeWriteDouble", "(JD)V", (void*)android_os_Parcel_writeDouble},
|
||||||
{"nativeWriteString", "(ILjava/lang/String;)V", (void*)android_os_Parcel_writeString},
|
{"nativeWriteString", "(JLjava/lang/String;)V", (void*)android_os_Parcel_writeString},
|
||||||
{"nativeWriteStrongBinder", "(ILandroid/os/IBinder;)V", (void*)android_os_Parcel_writeStrongBinder},
|
{"nativeWriteStrongBinder", "(JLandroid/os/IBinder;)V", (void*)android_os_Parcel_writeStrongBinder},
|
||||||
{"nativeWriteFileDescriptor", "(ILjava/io/FileDescriptor;)V", (void*)android_os_Parcel_writeFileDescriptor},
|
{"nativeWriteFileDescriptor", "(JLjava/io/FileDescriptor;)V", (void*)android_os_Parcel_writeFileDescriptor},
|
||||||
|
|
||||||
{"nativeCreateByteArray", "(I)[B", (void*)android_os_Parcel_createByteArray},
|
{"nativeCreateByteArray", "(J)[B", (void*)android_os_Parcel_createByteArray},
|
||||||
{"nativeReadInt", "(I)I", (void*)android_os_Parcel_readInt},
|
{"nativeReadInt", "(J)I", (void*)android_os_Parcel_readInt},
|
||||||
{"nativeReadLong", "(I)J", (void*)android_os_Parcel_readLong},
|
{"nativeReadLong", "(J)J", (void*)android_os_Parcel_readLong},
|
||||||
{"nativeReadFloat", "(I)F", (void*)android_os_Parcel_readFloat},
|
{"nativeReadFloat", "(J)F", (void*)android_os_Parcel_readFloat},
|
||||||
{"nativeReadDouble", "(I)D", (void*)android_os_Parcel_readDouble},
|
{"nativeReadDouble", "(J)D", (void*)android_os_Parcel_readDouble},
|
||||||
{"nativeReadString", "(I)Ljava/lang/String;", (void*)android_os_Parcel_readString},
|
{"nativeReadString", "(J)Ljava/lang/String;", (void*)android_os_Parcel_readString},
|
||||||
{"nativeReadStrongBinder", "(I)Landroid/os/IBinder;", (void*)android_os_Parcel_readStrongBinder},
|
{"nativeReadStrongBinder", "(J)Landroid/os/IBinder;", (void*)android_os_Parcel_readStrongBinder},
|
||||||
{"nativeReadFileDescriptor", "(I)Ljava/io/FileDescriptor;", (void*)android_os_Parcel_readFileDescriptor},
|
{"nativeReadFileDescriptor", "(J)Ljava/io/FileDescriptor;", (void*)android_os_Parcel_readFileDescriptor},
|
||||||
|
|
||||||
{"openFileDescriptor", "(Ljava/lang/String;I)Ljava/io/FileDescriptor;", (void*)android_os_Parcel_openFileDescriptor},
|
{"openFileDescriptor", "(Ljava/lang/String;I)Ljava/io/FileDescriptor;", (void*)android_os_Parcel_openFileDescriptor},
|
||||||
{"dupFileDescriptor", "(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;", (void*)android_os_Parcel_dupFileDescriptor},
|
{"dupFileDescriptor", "(Ljava/io/FileDescriptor;)Ljava/io/FileDescriptor;", (void*)android_os_Parcel_dupFileDescriptor},
|
||||||
{"closeFileDescriptor", "(Ljava/io/FileDescriptor;)V", (void*)android_os_Parcel_closeFileDescriptor},
|
{"closeFileDescriptor", "(Ljava/io/FileDescriptor;)V", (void*)android_os_Parcel_closeFileDescriptor},
|
||||||
{"clearFileDescriptor", "(Ljava/io/FileDescriptor;)V", (void*)android_os_Parcel_clearFileDescriptor},
|
{"clearFileDescriptor", "(Ljava/io/FileDescriptor;)V", (void*)android_os_Parcel_clearFileDescriptor},
|
||||||
|
|
||||||
{"nativeCreate", "()I", (void*)android_os_Parcel_create},
|
{"nativeCreate", "()J", (void*)android_os_Parcel_create},
|
||||||
{"nativeFreeBuffer", "(I)V", (void*)android_os_Parcel_freeBuffer},
|
{"nativeFreeBuffer", "(J)V", (void*)android_os_Parcel_freeBuffer},
|
||||||
{"nativeDestroy", "(I)V", (void*)android_os_Parcel_destroy},
|
{"nativeDestroy", "(J)V", (void*)android_os_Parcel_destroy},
|
||||||
|
|
||||||
{"nativeMarshall", "(I)[B", (void*)android_os_Parcel_marshall},
|
{"nativeMarshall", "(J)[B", (void*)android_os_Parcel_marshall},
|
||||||
{"nativeUnmarshall", "(I[BII)V", (void*)android_os_Parcel_unmarshall},
|
{"nativeUnmarshall", "(J[BII)V", (void*)android_os_Parcel_unmarshall},
|
||||||
{"nativeAppendFrom", "(IIII)V", (void*)android_os_Parcel_appendFrom},
|
{"nativeAppendFrom", "(JJII)V", (void*)android_os_Parcel_appendFrom},
|
||||||
{"nativeHasFileDescriptors", "(I)Z", (void*)android_os_Parcel_hasFileDescriptors},
|
{"nativeHasFileDescriptors", "(J)Z", (void*)android_os_Parcel_hasFileDescriptors},
|
||||||
{"nativeWriteInterfaceToken", "(ILjava/lang/String;)V", (void*)android_os_Parcel_writeInterfaceToken},
|
{"nativeWriteInterfaceToken", "(JLjava/lang/String;)V", (void*)android_os_Parcel_writeInterfaceToken},
|
||||||
{"nativeEnforceInterface", "(ILjava/lang/String;)V", (void*)android_os_Parcel_enforceInterface},
|
{"nativeEnforceInterface", "(JLjava/lang/String;)V", (void*)android_os_Parcel_enforceInterface},
|
||||||
};
|
};
|
||||||
|
|
||||||
const char* const kParcelPathName = "android/os/Parcel";
|
const char* const kParcelPathName = "android/os/Parcel";
|
||||||
@@ -678,7 +678,7 @@ int register_android_os_Parcel(JNIEnv* env)
|
|||||||
LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.Parcel");
|
LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.Parcel");
|
||||||
|
|
||||||
gParcelOffsets.clazz = (jclass) env->NewGlobalRef(clazz);
|
gParcelOffsets.clazz = (jclass) env->NewGlobalRef(clazz);
|
||||||
gParcelOffsets.mNativePtr = env->GetFieldID(clazz, "mNativePtr", "I");
|
gParcelOffsets.mNativePtr = env->GetFieldID(clazz, "mNativePtr", "J");
|
||||||
gParcelOffsets.obtain = env->GetStaticMethodID(clazz, "obtain",
|
gParcelOffsets.obtain = env->GetStaticMethodID(clazz, "obtain",
|
||||||
"()Landroid/os/Parcel;");
|
"()Landroid/os/Parcel;");
|
||||||
gParcelOffsets.recycle = env->GetMethodID(clazz, "recycle", "()V");
|
gParcelOffsets.recycle = env->GetMethodID(clazz, "recycle", "()V");
|
||||||
|
|||||||
@@ -267,7 +267,7 @@ protected:
|
|||||||
//data.print();
|
//data.print();
|
||||||
//printf("\n");
|
//printf("\n");
|
||||||
jboolean res = env->CallBooleanMethod(mObject, gBinderOffsets.mExecTransact,
|
jboolean res = env->CallBooleanMethod(mObject, gBinderOffsets.mExecTransact,
|
||||||
code, (int32_t)&data, (int32_t)reply, flags);
|
code, reinterpret_cast<jlong>(&data), reinterpret_cast<jlong>(reply), flags);
|
||||||
jthrowable excep = env->ExceptionOccurred();
|
jthrowable excep = env->ExceptionOccurred();
|
||||||
|
|
||||||
if (excep) {
|
if (excep) {
|
||||||
@@ -577,7 +577,7 @@ jobject javaObjectForIBinder(JNIEnv* env, const sp<IBinder>& val)
|
|||||||
if (object != NULL) {
|
if (object != NULL) {
|
||||||
LOGDEATH("objectForBinder %p: created new proxy %p !\n", val.get(), object);
|
LOGDEATH("objectForBinder %p: created new proxy %p !\n", val.get(), object);
|
||||||
// The proxy holds a reference to the native object.
|
// The proxy holds a reference to the native object.
|
||||||
env->SetIntField(object, gBinderProxyOffsets.mObject, (int)val.get());
|
env->SetLongField(object, gBinderProxyOffsets.mObject, (jlong)val.get());
|
||||||
val->incStrong((void*)javaObjectForIBinder);
|
val->incStrong((void*)javaObjectForIBinder);
|
||||||
|
|
||||||
// The native object needs to hold a weak reference back to the
|
// The native object needs to hold a weak reference back to the
|
||||||
@@ -590,7 +590,7 @@ jobject javaObjectForIBinder(JNIEnv* env, const sp<IBinder>& val)
|
|||||||
// Also remember the death recipients registered on this proxy
|
// Also remember the death recipients registered on this proxy
|
||||||
sp<DeathRecipientList> drl = new DeathRecipientList;
|
sp<DeathRecipientList> drl = new DeathRecipientList;
|
||||||
drl->incStrong((void*)javaObjectForIBinder);
|
drl->incStrong((void*)javaObjectForIBinder);
|
||||||
env->SetIntField(object, gBinderProxyOffsets.mOrgue, reinterpret_cast<jint>(drl.get()));
|
env->SetLongField(object, gBinderProxyOffsets.mOrgue, reinterpret_cast<jlong>(drl.get()));
|
||||||
|
|
||||||
// Note that a new object reference has been created.
|
// Note that a new object reference has been created.
|
||||||
android_atomic_inc(&gNumProxyRefs);
|
android_atomic_inc(&gNumProxyRefs);
|
||||||
@@ -606,13 +606,13 @@ sp<IBinder> ibinderForJavaObject(JNIEnv* env, jobject obj)
|
|||||||
|
|
||||||
if (env->IsInstanceOf(obj, gBinderOffsets.mClass)) {
|
if (env->IsInstanceOf(obj, gBinderOffsets.mClass)) {
|
||||||
JavaBBinderHolder* jbh = (JavaBBinderHolder*)
|
JavaBBinderHolder* jbh = (JavaBBinderHolder*)
|
||||||
env->GetIntField(obj, gBinderOffsets.mObject);
|
env->GetLongField(obj, gBinderOffsets.mObject);
|
||||||
return jbh != NULL ? jbh->get(env, obj) : NULL;
|
return jbh != NULL ? jbh->get(env, obj) : NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (env->IsInstanceOf(obj, gBinderProxyOffsets.mClass)) {
|
if (env->IsInstanceOf(obj, gBinderProxyOffsets.mClass)) {
|
||||||
return (IBinder*)
|
return (IBinder*)
|
||||||
env->GetIntField(obj, gBinderProxyOffsets.mObject);
|
env->GetLongField(obj, gBinderProxyOffsets.mObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
ALOGW("ibinderForJavaObject: %p is not a Binder object", obj);
|
ALOGW("ibinderForJavaObject: %p is not a Binder object", obj);
|
||||||
@@ -764,15 +764,15 @@ static void android_os_Binder_init(JNIEnv* env, jobject obj)
|
|||||||
}
|
}
|
||||||
ALOGV("Java Binder %p: acquiring first ref on holder %p", obj, jbh);
|
ALOGV("Java Binder %p: acquiring first ref on holder %p", obj, jbh);
|
||||||
jbh->incStrong((void*)android_os_Binder_init);
|
jbh->incStrong((void*)android_os_Binder_init);
|
||||||
env->SetIntField(obj, gBinderOffsets.mObject, (int)jbh);
|
env->SetLongField(obj, gBinderOffsets.mObject, (jlong)jbh);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void android_os_Binder_destroy(JNIEnv* env, jobject obj)
|
static void android_os_Binder_destroy(JNIEnv* env, jobject obj)
|
||||||
{
|
{
|
||||||
JavaBBinderHolder* jbh = (JavaBBinderHolder*)
|
JavaBBinderHolder* jbh = (JavaBBinderHolder*)
|
||||||
env->GetIntField(obj, gBinderOffsets.mObject);
|
env->GetLongField(obj, gBinderOffsets.mObject);
|
||||||
if (jbh != NULL) {
|
if (jbh != NULL) {
|
||||||
env->SetIntField(obj, gBinderOffsets.mObject, 0);
|
env->SetLongField(obj, gBinderOffsets.mObject, 0);
|
||||||
ALOGV("Java Binder %p: removing ref on holder %p", obj, jbh);
|
ALOGV("Java Binder %p: removing ref on holder %p", obj, jbh);
|
||||||
jbh->decStrong((void*)android_os_Binder_init);
|
jbh->decStrong((void*)android_os_Binder_init);
|
||||||
} else {
|
} else {
|
||||||
@@ -812,11 +812,11 @@ static int int_register_android_os_Binder(JNIEnv* env)
|
|||||||
|
|
||||||
gBinderOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
|
gBinderOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
|
||||||
gBinderOffsets.mExecTransact
|
gBinderOffsets.mExecTransact
|
||||||
= env->GetMethodID(clazz, "execTransact", "(IIII)Z");
|
= env->GetMethodID(clazz, "execTransact", "(IJJI)Z");
|
||||||
assert(gBinderOffsets.mExecTransact);
|
assert(gBinderOffsets.mExecTransact);
|
||||||
|
|
||||||
gBinderOffsets.mObject
|
gBinderOffsets.mObject
|
||||||
= env->GetFieldID(clazz, "mObject", "I");
|
= env->GetFieldID(clazz, "mObject", "J");
|
||||||
assert(gBinderOffsets.mObject);
|
assert(gBinderOffsets.mObject);
|
||||||
|
|
||||||
return AndroidRuntime::registerNativeMethods(
|
return AndroidRuntime::registerNativeMethods(
|
||||||
@@ -911,7 +911,7 @@ static int int_register_android_os_BinderInternal(JNIEnv* env)
|
|||||||
static jboolean android_os_BinderProxy_pingBinder(JNIEnv* env, jobject obj)
|
static jboolean android_os_BinderProxy_pingBinder(JNIEnv* env, jobject obj)
|
||||||
{
|
{
|
||||||
IBinder* target = (IBinder*)
|
IBinder* target = (IBinder*)
|
||||||
env->GetIntField(obj, gBinderProxyOffsets.mObject);
|
env->GetLongField(obj, gBinderProxyOffsets.mObject);
|
||||||
if (target == NULL) {
|
if (target == NULL) {
|
||||||
return JNI_FALSE;
|
return JNI_FALSE;
|
||||||
}
|
}
|
||||||
@@ -921,7 +921,7 @@ static jboolean android_os_BinderProxy_pingBinder(JNIEnv* env, jobject obj)
|
|||||||
|
|
||||||
static jstring android_os_BinderProxy_getInterfaceDescriptor(JNIEnv* env, jobject obj)
|
static jstring android_os_BinderProxy_getInterfaceDescriptor(JNIEnv* env, jobject obj)
|
||||||
{
|
{
|
||||||
IBinder* target = (IBinder*) env->GetIntField(obj, gBinderProxyOffsets.mObject);
|
IBinder* target = (IBinder*) env->GetLongField(obj, gBinderProxyOffsets.mObject);
|
||||||
if (target != NULL) {
|
if (target != NULL) {
|
||||||
const String16& desc = target->getInterfaceDescriptor();
|
const String16& desc = target->getInterfaceDescriptor();
|
||||||
return env->NewString(desc.string(), desc.size());
|
return env->NewString(desc.string(), desc.size());
|
||||||
@@ -934,7 +934,7 @@ static jstring android_os_BinderProxy_getInterfaceDescriptor(JNIEnv* env, jobjec
|
|||||||
static jboolean android_os_BinderProxy_isBinderAlive(JNIEnv* env, jobject obj)
|
static jboolean android_os_BinderProxy_isBinderAlive(JNIEnv* env, jobject obj)
|
||||||
{
|
{
|
||||||
IBinder* target = (IBinder*)
|
IBinder* target = (IBinder*)
|
||||||
env->GetIntField(obj, gBinderProxyOffsets.mObject);
|
env->GetLongField(obj, gBinderProxyOffsets.mObject);
|
||||||
if (target == NULL) {
|
if (target == NULL) {
|
||||||
return JNI_FALSE;
|
return JNI_FALSE;
|
||||||
}
|
}
|
||||||
@@ -1062,7 +1062,7 @@ static jboolean android_os_BinderProxy_transact(JNIEnv* env, jobject obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
IBinder* target = (IBinder*)
|
IBinder* target = (IBinder*)
|
||||||
env->GetIntField(obj, gBinderProxyOffsets.mObject);
|
env->GetLongField(obj, gBinderProxyOffsets.mObject);
|
||||||
if (target == NULL) {
|
if (target == NULL) {
|
||||||
jniThrowException(env, "java/lang/IllegalStateException", "Binder has been finalized!");
|
jniThrowException(env, "java/lang/IllegalStateException", "Binder has been finalized!");
|
||||||
return JNI_FALSE;
|
return JNI_FALSE;
|
||||||
@@ -1109,7 +1109,7 @@ static void android_os_BinderProxy_linkToDeath(JNIEnv* env, jobject obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
IBinder* target = (IBinder*)
|
IBinder* target = (IBinder*)
|
||||||
env->GetIntField(obj, gBinderProxyOffsets.mObject);
|
env->GetLongField(obj, gBinderProxyOffsets.mObject);
|
||||||
if (target == NULL) {
|
if (target == NULL) {
|
||||||
ALOGW("Binder has been finalized when calling linkToDeath() with recip=%p)\n", recipient);
|
ALOGW("Binder has been finalized when calling linkToDeath() with recip=%p)\n", recipient);
|
||||||
assert(false);
|
assert(false);
|
||||||
@@ -1119,7 +1119,7 @@ static void android_os_BinderProxy_linkToDeath(JNIEnv* env, jobject obj,
|
|||||||
|
|
||||||
if (!target->localBinder()) {
|
if (!target->localBinder()) {
|
||||||
DeathRecipientList* list = (DeathRecipientList*)
|
DeathRecipientList* list = (DeathRecipientList*)
|
||||||
env->GetIntField(obj, gBinderProxyOffsets.mOrgue);
|
env->GetLongField(obj, gBinderProxyOffsets.mOrgue);
|
||||||
sp<JavaDeathRecipient> jdr = new JavaDeathRecipient(env, recipient, list);
|
sp<JavaDeathRecipient> jdr = new JavaDeathRecipient(env, recipient, list);
|
||||||
status_t err = target->linkToDeath(jdr, NULL, flags);
|
status_t err = target->linkToDeath(jdr, NULL, flags);
|
||||||
if (err != NO_ERROR) {
|
if (err != NO_ERROR) {
|
||||||
@@ -1141,7 +1141,7 @@ static jboolean android_os_BinderProxy_unlinkToDeath(JNIEnv* env, jobject obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
IBinder* target = (IBinder*)
|
IBinder* target = (IBinder*)
|
||||||
env->GetIntField(obj, gBinderProxyOffsets.mObject);
|
env->GetLongField(obj, gBinderProxyOffsets.mObject);
|
||||||
if (target == NULL) {
|
if (target == NULL) {
|
||||||
ALOGW("Binder has been finalized when calling linkToDeath() with recip=%p)\n", recipient);
|
ALOGW("Binder has been finalized when calling linkToDeath() with recip=%p)\n", recipient);
|
||||||
return JNI_FALSE;
|
return JNI_FALSE;
|
||||||
@@ -1154,7 +1154,7 @@ static jboolean android_os_BinderProxy_unlinkToDeath(JNIEnv* env, jobject obj,
|
|||||||
|
|
||||||
// If we find the matching recipient, proceed to unlink using that
|
// If we find the matching recipient, proceed to unlink using that
|
||||||
DeathRecipientList* list = (DeathRecipientList*)
|
DeathRecipientList* list = (DeathRecipientList*)
|
||||||
env->GetIntField(obj, gBinderProxyOffsets.mOrgue);
|
env->GetLongField(obj, gBinderProxyOffsets.mOrgue);
|
||||||
sp<JavaDeathRecipient> origJDR = list->find(recipient);
|
sp<JavaDeathRecipient> origJDR = list->find(recipient);
|
||||||
LOGDEATH(" unlink found list %p and JDR %p", list, origJDR.get());
|
LOGDEATH(" unlink found list %p and JDR %p", list, origJDR.get());
|
||||||
if (origJDR != NULL) {
|
if (origJDR != NULL) {
|
||||||
@@ -1183,13 +1183,13 @@ static jboolean android_os_BinderProxy_unlinkToDeath(JNIEnv* env, jobject obj,
|
|||||||
static void android_os_BinderProxy_destroy(JNIEnv* env, jobject obj)
|
static void android_os_BinderProxy_destroy(JNIEnv* env, jobject obj)
|
||||||
{
|
{
|
||||||
IBinder* b = (IBinder*)
|
IBinder* b = (IBinder*)
|
||||||
env->GetIntField(obj, gBinderProxyOffsets.mObject);
|
env->GetLongField(obj, gBinderProxyOffsets.mObject);
|
||||||
DeathRecipientList* drl = (DeathRecipientList*)
|
DeathRecipientList* drl = (DeathRecipientList*)
|
||||||
env->GetIntField(obj, gBinderProxyOffsets.mOrgue);
|
env->GetLongField(obj, gBinderProxyOffsets.mOrgue);
|
||||||
|
|
||||||
LOGDEATH("Destroying BinderProxy %p: binder=%p drl=%p\n", obj, b, drl);
|
LOGDEATH("Destroying BinderProxy %p: binder=%p drl=%p\n", obj, b, drl);
|
||||||
env->SetIntField(obj, gBinderProxyOffsets.mObject, 0);
|
env->SetLongField(obj, gBinderProxyOffsets.mObject, 0);
|
||||||
env->SetIntField(obj, gBinderProxyOffsets.mOrgue, 0);
|
env->SetLongField(obj, gBinderProxyOffsets.mOrgue, 0);
|
||||||
drl->decStrong((void*)javaObjectForIBinder);
|
drl->decStrong((void*)javaObjectForIBinder);
|
||||||
b->decStrong((void*)javaObjectForIBinder);
|
b->decStrong((void*)javaObjectForIBinder);
|
||||||
|
|
||||||
@@ -1231,13 +1231,13 @@ static int int_register_android_os_BinderProxy(JNIEnv* env)
|
|||||||
assert(gBinderProxyOffsets.mSendDeathNotice);
|
assert(gBinderProxyOffsets.mSendDeathNotice);
|
||||||
|
|
||||||
gBinderProxyOffsets.mObject
|
gBinderProxyOffsets.mObject
|
||||||
= env->GetFieldID(clazz, "mObject", "I");
|
= env->GetFieldID(clazz, "mObject", "J");
|
||||||
assert(gBinderProxyOffsets.mObject);
|
assert(gBinderProxyOffsets.mObject);
|
||||||
gBinderProxyOffsets.mSelf
|
gBinderProxyOffsets.mSelf
|
||||||
= env->GetFieldID(clazz, "mSelf", "Ljava/lang/ref/WeakReference;");
|
= env->GetFieldID(clazz, "mSelf", "Ljava/lang/ref/WeakReference;");
|
||||||
assert(gBinderProxyOffsets.mSelf);
|
assert(gBinderProxyOffsets.mSelf);
|
||||||
gBinderProxyOffsets.mOrgue
|
gBinderProxyOffsets.mOrgue
|
||||||
= env->GetFieldID(clazz, "mOrgue", "I");
|
= env->GetFieldID(clazz, "mOrgue", "J");
|
||||||
assert(gBinderProxyOffsets.mOrgue);
|
assert(gBinderProxyOffsets.mOrgue);
|
||||||
|
|
||||||
clazz = env->FindClass("java/lang/Class");
|
clazz = env->FindClass("java/lang/Class");
|
||||||
|
|||||||
Reference in New Issue
Block a user