Fix (char *STRING, size_t LENGTH) typemaps to accept NULL string

git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk@13736 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
William S Fulton 2012-09-07 06:07:20 +00:00
commit 593c708a78
4 changed files with 28 additions and 8 deletions

View file

@ -4,6 +4,9 @@ See the RELEASENOTES file for a summary of changes in each release.
Version 2.0.9 (in progress)
===========================
2012-09-06: wsfulton
[Java] Fix (char *STRING, size_t LENGTH) typemaps to accept NULL string.
2012-08-26: drjoe
[R] make ExternalReference slot ref to contain reference

View file

@ -15,8 +15,10 @@ class Callback {
public:
virtual ~Callback() {}
virtual void run(char* dataBufferAA, int sizeAA, char* dataBufferBB, int sizeBB) {
memset(dataBufferAA, -1, sizeAA);
memset(dataBufferBB, -1, sizeBB);
if (dataBufferAA)
memset(dataBufferAA, -1, sizeAA);
if (dataBufferBB)
memset(dataBufferBB, -1, sizeBB);
}
};
@ -45,6 +47,9 @@ public:
}
return sum;
}
void call_null() {
_callback->run(NULL, 0, NULL, 0);
}
};
%}

View file

@ -21,6 +21,11 @@ public class director_binary_string_runme {
if (sum != 9*2*8 + 13*3*5)
throw new RuntimeException("Unexpected sum: " + sum);
new Callback().run(null, null);
callback = new DirectorBinaryStringCallback();
caller.setCallback(callback);
caller.call_null();
}
}
@ -32,11 +37,13 @@ class DirectorBinaryStringCallback extends Callback {
@Override
public void run(byte[] dataBufferAA, byte[] dataBufferBB)
{
for (int i = 0; i < dataBufferAA.length; i++)
dataBufferAA[i] = (byte)(dataBufferAA[i] * 2);
if (dataBufferAA != null)
for (int i = 0; i < dataBufferAA.length; i++)
dataBufferAA[i] = (byte)(dataBufferAA[i] * 2);
for (int i = 0; i < dataBufferBB.length; i++)
dataBufferBB[i] = (byte)(dataBufferBB[i] * 3);
if (dataBufferBB != null)
for (int i = 0; i < dataBufferBB.length; i++)
dataBufferBB[i] = (byte)(dataBufferBB[i] * 3);
}
}

View file

@ -1301,11 +1301,16 @@ SWIG_PROXY_CONSTRUCTOR(true, true, SWIGTYPE)
%typemap(javain) (char *STRING, size_t LENGTH) "$javainput"
%typemap(freearg) (char *STRING, size_t LENGTH) ""
%typemap(in) (char *STRING, size_t LENGTH) {
if ($input) {
$1 = (char *) JCALL2(GetByteArrayElements, jenv, $input, 0);
$2 = (size_t) JCALL1(GetArrayLength, jenv, $input);
$2 = (size_t) JCALL1(GetArrayLength, jenv, $input);
} else {
$1 = 0;
$2 = 0;
}
}
%typemap(argout) (char *STRING, size_t LENGTH) {
JCALL3(ReleaseByteArrayElements, jenv, $input, (jbyte *)$1, 0);
if ($input) JCALL3(ReleaseByteArrayElements, jenv, $input, (jbyte *)$1, 0);
}
%typemap(directorin, descriptor="[B") (char *STRING, size_t LENGTH) {
jbyteArray jb = (jenv)->NewByteArray($2);