diff --git a/jni/GnuPGData.c b/jni/GnuPGData.c index cf83d41..143e546 100644 --- a/jni/GnuPGData.c +++ b/jni/GnuPGData.c @@ -5,9 +5,17 @@ #include "gpgmeutils.h" #include +#include #define BUFSIZE 1024 + +JNIEXPORT jsize JNICALL +Java_com_freiheit_gnupg_GnuPGData_gpgmeSize(JNIEnv * env, jobject self, jlong data) +{ + return (jsize) (DATA(data))->data.mem.size; +} + JNIEXPORT jlong JNICALL Java_com_freiheit_gnupg_GnuPGData_gpgmeDataNewFromMem(JNIEnv * env, jobject self, diff --git a/src/com/freiheit/gnupg/GnuPGData.java b/src/com/freiheit/gnupg/GnuPGData.java index 0ac9d28..7e58c60 100644 --- a/src/com/freiheit/gnupg/GnuPGData.java +++ b/src/com/freiheit/gnupg/GnuPGData.java @@ -99,11 +99,11 @@ public void write(OutputStream out) throws IOException{ /** Helper method to print out the data/string from this data object. - @return String representation of the data contained in this data object (expect weired results with binary data) + @return String representation of the data contained in this data object (expect weird results with binary data) */ public String toString(){ String result = null; - ByteArrayOutputStream baos = new ByteArrayOutputStream(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(this.size()); try{ this.write(baos); result = baos.toString(); @@ -135,6 +135,11 @@ protected void finalize(){ destroy(); } + public int size() { + return gpgmeSize(getInternalRepresentation()); + } + + private native int gpgmeSize(long l); private native long gpgmeDataNewFromMem(byte[] plain); private native long gpgmeDataNew(); private native void gpgmeDataWrite(long l, OutputStream out) throws IOException;