Bug 320441 - JavaXPCOM is not 64-bit safe. patch by bsmedberg and myself. r=bsmedberg

git-svn-id: svn://10.0.0.236/trunk@186134 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
pedemont%us.ibm.com
2005-12-15 22:50:38 +00:00
parent 1e0d614918
commit 66d2d55b28
3 changed files with 27 additions and 27 deletions

View File

@@ -138,7 +138,7 @@ CreateJavaArray(JNIEnv* env, PRUint8 aType, PRUint32 aSize, const nsID& aIID,
}
case nsXPTType::T_VOID:
array = env->NewIntArray(aSize);
array = env->NewLongArray(aSize);
break;
default:
@@ -227,7 +227,7 @@ GetNativeArrayElement(PRUint8 aType, void* aArray, PRUint32 aIndex,
break;
case nsXPTType::T_VOID:
aResult->val.u32 = NS_STATIC_CAST(PRUint32*, aArray)[aIndex];
aResult->val.p = NS_STATIC_CAST(void**, aArray)[aIndex];
break;
default:
@@ -297,7 +297,7 @@ CreateNativeArray(PRUint8 aType, PRUint32 aSize, void** aResult)
break;
case nsXPTType::T_VOID:
array = PR_Malloc(aSize * sizeof(PRUint32));
array = PR_Malloc(aSize * sizeof(void*));
break;
default:
@@ -850,16 +850,16 @@ SetupParams(JNIEnv *env, const jobject aParam, PRUint8 aType, PRBool aIsOut,
break;
}
// handle "void *" as an "int" in Java
// handle "void *" as an "long" in Java
case nsXPTType::T_VOID:
{
LOG(("int (void*)\n"));
LOG(("long (void*)\n"));
if (!aIsOut && !aIsArrayElement) { // 'in'
aVariant.val.p = (void*) env->CallIntMethod(aParam, intValueMID);
aVariant.val.p = (void*) env->CallLongMethod(aParam, longValueMID);
} else { // 'inout' & 'array'
jint value;
jlong value;
if (aParam) {
env->GetIntArrayRegion((jintArray) aParam, aIndex, 1, &value);
env->GetLongArrayRegion((jlongArray) aParam, aIndex, 1, &value);
}
if (aIsOut) { // 'inout'
@@ -871,7 +871,7 @@ SetupParams(JNIEnv *env, const jobject aParam, PRUint8 aType, PRBool aIsOut,
}
aVariant.SetPtrIsData();
} else { // 'array'
NS_STATIC_CAST(PRUint32*, aVariant.val.p)[aIndex] = value;
NS_STATIC_CAST(void**, aVariant.val.p)[aIndex] = (void*) value;
}
}
break;
@@ -1217,11 +1217,11 @@ FinalizeParams(JNIEnv *env, const nsXPTParamInfo &aParamInfo, PRUint8 aType,
case nsXPTType::T_VOID:
{
if (NS_SUCCEEDED(aInvokeResult)) {
jint value = NS_REINTERPRET_CAST(jint, aVariant.val.p);
jlong value = NS_REINTERPRET_CAST(jlong, aVariant.val.p);
if (aParamInfo.IsRetval() && !aIsArrayElement) {
*aParam = env->NewObject(intClass, intInitMID, value);
*aParam = env->NewObject(longClass, longInitMID, value);
} else if ((aParamInfo.IsOut() || aIsArrayElement) && *aParam) {
env->SetIntArrayRegion((jintArray) *aParam, aIndex, 1, &value);
env->SetLongArrayRegion((jlongArray) *aParam, aIndex, 1, &value);
}
}
break;
@@ -1686,8 +1686,8 @@ GetXPCOMInstFromProxy(JNIEnv* env, jobject aJavaObject, void** aResult)
if (!aResult)
return NS_ERROR_NULL_POINTER;
long xpcom_obj = env->CallStaticLongMethod(xpcomJavaProxyClass,
getNativeXPCOMInstMID, aJavaObject);
jlong xpcom_obj = env->CallStaticLongMethod(xpcomJavaProxyClass,
getNativeXPCOMInstMID, aJavaObject);
if (!xpcom_obj || env->ExceptionCheck()) {
return NS_ERROR_FAILURE;