summaryrefslogtreecommitdiff
path: root/Lib/java/java.swg
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2016-03-31 18:42:08 +0100
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2016-03-31 18:56:32 +0100
commita15bbbaee5f55c4341b9c657e2c338c3bf9a1fce (patch)
tree72611448f3728cd4d8b4e6ce15e2032cefff62d9 /Lib/java/java.swg
parent8322686e84c31c3245c48f995367fabd84dde6c0 (diff)
downloadswig-a15bbbaee5f55c4341b9c657e2c338c3bf9a1fce.tar.gz
Java - unsigned long long marshalling improvements for negative numbers
Affects marshalling of negative numbers from Java to C only. A cast to signed long long in the C layer will now result in the expected value. Closes #623.
Diffstat (limited to 'Lib/java/java.swg')
-rw-r--r--Lib/java/java.swg28
1 files changed, 20 insertions, 8 deletions
diff --git a/Lib/java/java.swg b/Lib/java/java.swg
index f25a86605..96ca562b6 100644
--- a/Lib/java/java.swg
+++ b/Lib/java/java.swg
@@ -310,8 +310,11 @@ SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
bae = JCALL2(GetByteArrayElements, jenv, ba, 0);
sz = JCALL1(GetArrayLength, jenv, ba);
$1 = 0;
- for(i=0; i<sz; i++) {
- $1 = ($1 << 8) | ($1_type)(unsigned char)bae[i];
+ if (sz > 0) {
+ $1 = ($1_type)(signed char)bae[0];
+ for(i=1; i<sz; i++) {
+ $1 = ($1 << 8) | ($1_type)(unsigned char)bae[i];
+ }
}
JCALL3(ReleaseByteArrayElements, jenv, ba, bae, 0);
}
@@ -334,8 +337,11 @@ SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
bae = JCALL2(GetByteArrayElements, jenv, ba, 0);
sz = JCALL1(GetArrayLength, jenv, ba);
$result = 0;
- for(i=0; i<sz; i++) {
- $result = ($result << 8) | ($1_type)(unsigned char)bae[i];
+ if (sz > 0) {
+ $result = ($1_type)(signed char)bae[0];
+ for(i=1; i<sz; i++) {
+ $result = ($result << 8) | ($1_type)(unsigned char)bae[i];
+ }
}
JCALL3(ReleaseByteArrayElements, jenv, ba, bae, 0);
}
@@ -552,8 +558,11 @@ SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
sz = JCALL1(GetArrayLength, jenv, ba);
$1 = &temp;
temp = 0;
- for(i=0; i<sz; i++) {
- temp = (temp << 8) | ($*1_ltype)(unsigned char)bae[i];
+ if (sz > 0) {
+ temp = ($*1_ltype)(signed char)bae[0];
+ for(i=1; i<sz; i++) {
+ temp = (temp << 8) | ($*1_ltype)(unsigned char)bae[i];
+ }
}
JCALL3(ReleaseByteArrayElements, jenv, ba, bae, 0);
}
@@ -578,8 +587,11 @@ SWIGINTERN const char * SWIG_UnpackData(const char *c, void *ptr, size_t sz) {
sz = JCALL1(GetArrayLength, jenv, ba);
$result = &temp;
temp = 0;
- for(i=0; i<sz; i++) {
- temp = (temp << 8) | ($*1_ltype)(unsigned char)bae[i];
+ if (sz > 0) {
+ temp = ($*1_ltype)(signed char)bae[0];
+ for(i=1; i<sz; i++) {
+ temp = (temp << 8) | ($*1_ltype)(unsigned char)bae[i];
+ }
}
JCALL3(ReleaseByteArrayElements, jenv, ba, bae, 0);
}