2005/9/14, Michael Koch <[EMAIL PROTECTED]>:
> UURGH, NO. This will break SWT on 32 bit archs - if it works on 64 bit archs 
> at all.
> 
> You cannont compare normal C code with JNI C code. JNI C code has much higher 
> restrictions.

There's that cry of outrage! Hehe. Are there any 32-bit architectures
where int is not synonymous with long? The patch I plan on applying
follows. Incidentally, this worked just fine on i386, tested with
swingwtdemo as a native gcj application, and with Azureus using the
Sun JVM.

Cheers,
Shaun

--- swt-gtk-3.1.orig/xpcom.cpp
+++ swt-gtk-3.1/xpcom.cpp
@@ -32,6 +32,8 @@
 
  extern "C" {
 
+typedef long jintptr_t; // For 64 bit architectures.
+
  #define XPCOM_NATIVE(func) Java_org_eclipse_swt_internal_mozilla_XPCOM_##func
 
  #ifndef NO_Call
@@ -141,7 +143,7 @@
 {
        jint rc = 0;
        XPCOM_NATIVE_ENTER(env, that, PR_1Malloc_FUNC);
-       rc = (jint)PR_Malloc(arg0);
+       rc = (jintptr_t)PR_Malloc(arg0);
        XPCOM_NATIVE_EXIT(env, that, PR_1Malloc_FUNC);
        return rc;
 }
@@ -1868,7 +1870,7 @@
 {
        jint rc = 0;
        XPCOM_NATIVE_ENTER(env, that, nsEmbedCString_1get_FUNC);
-       rc = (jint)((nsEmbedCString *)arg0)->get();
+       rc = (jintptr_t)((nsEmbedCString *)arg0)->get();
        XPCOM_NATIVE_EXIT(env, that, nsEmbedCString_1get_FUNC);
        return rc;
 }
@@ -1880,7 +1882,7 @@
 {
        jint rc = 0;
        XPCOM_NATIVE_ENTER(env, that, nsEmbedCString_1new___FUNC);
-       rc = (jint)new nsEmbedCString();
+       rc = (jintptr_t)new nsEmbedCString();
        XPCOM_NATIVE_EXIT(env, that, nsEmbedCString_1new___FUNC);
        return rc;
 }
@@ -1894,7 +1896,7 @@
        jint rc = 0;
        XPCOM_NATIVE_ENTER(env, that, nsEmbedCString_1new___3BI_FUNC);
        if (arg0) if ((lparg0 = env->GetByteArrayElements(arg0, NULL)) ==
NULL) goto fail;
-       rc = (jint)new nsEmbedCString((const char *)lparg0, arg1);
+       rc = (jintptr_t)new nsEmbedCString((const char *)lparg0, arg1);
  fail:
        if (arg0 && lparg0) env->ReleaseByteArrayElements(arg0, lparg0, 0);
        XPCOM_NATIVE_EXIT(env, that, nsEmbedCString_1new___3BI_FUNC);
@@ -1930,7 +1932,7 @@
 {
        jint rc = 0;
        XPCOM_NATIVE_ENTER(env, that, nsEmbedString_1get_FUNC);
-       rc = (jint)((nsEmbedString *)arg0)->get();
+       rc = (jintptr_t)((nsEmbedString *)arg0)->get();
        XPCOM_NATIVE_EXIT(env, that, nsEmbedString_1get_FUNC);
        return rc;
 }
@@ -1942,7 +1944,7 @@
 {
        jint rc = 0;
        XPCOM_NATIVE_ENTER(env, that, nsEmbedString_1new___FUNC);
-       rc = (jint)new nsEmbedString();
+       rc = (jintptr_t)new nsEmbedString();
        XPCOM_NATIVE_EXIT(env, that, nsEmbedString_1new___FUNC);
        return rc;
 }
@@ -1956,7 +1958,7 @@
        jint rc = 0;
        XPCOM_NATIVE_ENTER(env, that, nsEmbedString_1new___3C_FUNC);
        if (arg0) if ((lparg0 = env->GetCharArrayElements(arg0, NULL)) ==
NULL) goto fail;
-       rc = (jint)new nsEmbedString(lparg0);
+       rc = (jintptr_t)new nsEmbedString(lparg0);
  fail:
        if (arg0 && lparg0) env->ReleaseCharArrayElements(arg0, lparg0, 0);
        XPCOM_NATIVE_EXIT(env, that, nsEmbedString_1new___3C_FUNC);
@@ -2008,7 +2010,7 @@
 {
        jint rc = 0;
        XPCOM_NATIVE_ENTER(env, that, nsID_1new_FUNC);
-       rc = (jint)new nsID();
+       rc = (jintptr_t)new nsID();
        XPCOM_NATIVE_EXIT(env, that, nsID_1new_FUNC);
        return rc;
 }

Reply via email to