From: Arnaud Giersch Date: Mon, 31 Mar 2014 14:22:45 +0000 (+0200) Subject: Fix bug with Java bindings on 32-bit systems. X-Git-Tag: v3_11~189^2~1 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/0b6c16ecd84be5920348c169146ce5799998069b Fix bug with Java bindings on 32-bit systems. On 32-bit systems, sizeof(NetworkLink*) < sizeof(jlong), and the elements must be copied one by one. --- diff --git a/src/bindings/java/surf.i b/src/bindings/java/surf.i index 28b4f6ea47..91e75dce72 100644 --- a/src/bindings/java/surf.i +++ b/src/bindings/java/surf.i @@ -40,9 +40,14 @@ JAVA_ARRAYSOFCLASSES(NetworkLink); %typemap(out) NetworkLinkDynar { long l = xbt_dynar_length($1); $result = jenv->NewLongArray(l); - NetworkLink **lout = (NetworkLink **)xbt_dynar_to_array($1); - jenv->SetLongArrayRegion($result, 0, l, (const jlong*)lout); - free(lout); + unsigned i; + NetworkLink *link; + jlong *elts = jenv->GetLongArrayElements($result, NULL); + xbt_dynar_foreach($1, i, link) { + elts[i] = (jlong)link; + } + jenv->ReleaseLongArrayElements($result, elts, 0); + xbt_dynar_free(&$1); } /* Allow to subclass Plugin and send java object to C++ code */