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) 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 2012-08-26: drjoe
[R] make ExternalReference slot ref to contain reference [R] make ExternalReference slot ref to contain reference

View file

@ -15,8 +15,10 @@ class Callback {
public: public:
virtual ~Callback() {} virtual ~Callback() {}
virtual void run(char* dataBufferAA, int sizeAA, char* dataBufferBB, int sizeBB) { virtual void run(char* dataBufferAA, int sizeAA, char* dataBufferBB, int sizeBB) {
memset(dataBufferAA, -1, sizeAA); if (dataBufferAA)
memset(dataBufferBB, -1, sizeBB); memset(dataBufferAA, -1, sizeAA);
if (dataBufferBB)
memset(dataBufferBB, -1, sizeBB);
} }
}; };
@ -45,6 +47,9 @@ public:
} }
return sum; 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) if (sum != 9*2*8 + 13*3*5)
throw new RuntimeException("Unexpected sum: " + sum); 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 @Override
public void run(byte[] dataBufferAA, byte[] dataBufferBB) public void run(byte[] dataBufferAA, byte[] dataBufferBB)
{ {
for (int i = 0; i < dataBufferAA.length; i++) if (dataBufferAA != null)
dataBufferAA[i] = (byte)(dataBufferAA[i] * 2); for (int i = 0; i < dataBufferAA.length; i++)
dataBufferAA[i] = (byte)(dataBufferAA[i] * 2);
for (int i = 0; i < dataBufferBB.length; i++) if (dataBufferBB != null)
dataBufferBB[i] = (byte)(dataBufferBB[i] * 3); 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(javain) (char *STRING, size_t LENGTH) "$javainput"
%typemap(freearg) (char *STRING, size_t LENGTH) "" %typemap(freearg) (char *STRING, size_t LENGTH) ""
%typemap(in) (char *STRING, size_t LENGTH) { %typemap(in) (char *STRING, size_t LENGTH) {
if ($input) {
$1 = (char *) JCALL2(GetByteArrayElements, jenv, $input, 0); $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) { %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) { %typemap(directorin, descriptor="[B") (char *STRING, size_t LENGTH) {
jbyteArray jb = (jenv)->NewByteArray($2); jbyteArray jb = (jenv)->NewByteArray($2);