From 43628ec1bfa01e5575d7da26306fb62535136f06 Mon Sep 17 00:00:00 2001 From: schlaepfer Date: Wed, 10 May 2006 13:17:22 +0000 Subject: [PATCH] - allocate and return Strings (interface changes) - Version 00.02.00 git-svn-id: https://svn.code.sf.net/p/libusbjava/code/trunk@149 94ad28fe-ef68-46b1-9651-e7ae4fcf1c4c --- libusbdll/.cdtproject | 4 ++- libusbdll/LibusbWin.cpp | 57 +++++++++++++++++++++++++---------------- libusbdll/LibusbWin.h | 24 ++++++++--------- 3 files changed, 50 insertions(+), 35 deletions(-) diff --git a/libusbdll/.cdtproject b/libusbdll/.cdtproject index 384716e..5824d61 100644 --- a/libusbdll/.cdtproject +++ b/libusbdll/.cdtproject @@ -49,6 +49,8 @@ + + @@ -57,7 +59,7 @@ make - + dll false true diff --git a/libusbdll/LibusbWin.cpp b/libusbdll/LibusbWin.cpp index 596d793..0d77c6a 100644 --- a/libusbdll/LibusbWin.cpp +++ b/libusbdll/LibusbWin.cpp @@ -4,6 +4,7 @@ * Computer Science Laboratory, inf.ntb.ch * Andreas Schläpfer, aschlaepfer@ntb.ch * + * Version 00.02.00 */ #include @@ -586,51 +587,63 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbWin_usb_1control_1msg /* * Class: ch_ntb_usb_LibusbWin * Method: usb_get_string - * Signature: (IIILjava/lang/String;I)I + * Signature: (III)Ljava/lang/String; */ -JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1string - (JNIEnv *env, jobject obj, jint dev_handle, jint index, jint langid, jstring jbuf, jint buflen) +JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1string + (JNIEnv *env, jobject obj, jint dev_handle, jint index, jint langid) { - const jchar *buf = env->GetStringChars(jbuf, NULL); - int retVal = usb_get_string((usb_dev_handle *) dev_handle, index, langid, (char *) buf, buflen); - jbuf = env->NewString(buf, buflen); - return retVal; + char string[256]; + int retVal = usb_get_string((usb_dev_handle *) dev_handle, index, langid, string, 256); + if (retVal > 0) + return env->NewStringUTF(string); + return 0; } /* * Class: ch_ntb_usb_LibusbWin * Method: usb_get_string_simple - * Signature: (IILjava/lang/String;I)I + * Signature: (II)Ljava/lang/String; */ -JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1string_1simple - (JNIEnv *env, jobject obj, jint dev_handle, jint index, jstring jbuf, jint buflen) +JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1string_1simple + (JNIEnv *env, jobject obj, jint dev_handle, jint index) { - const jchar *buf = env->GetStringChars(jbuf, NULL); - int retVal = usb_get_string_simple((usb_dev_handle *) dev_handle, index, (char *) buf, buflen); - jbuf = env->NewString(buf, buflen); - return retVal; + char string[256]; + int retVal = usb_get_string_simple((usb_dev_handle *) dev_handle, index, string, 256); + if (retVal > 0) + return env->NewStringUTF(string); + return 0; } /* * Class: ch_ntb_usb_LibusbWin * Method: usb_get_descriptor - * Signature: (IBBLjava/lang/String;I)I + * Signature: (IBBI)Ljava/lang/String; */ -JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1descriptor - (JNIEnv *env, jobject obj, jint dev_handle, jbyte type, jbyte index, jstring buf, jint size) +JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1descriptor + (JNIEnv *env, jobject obj, jint dev_handle, jbyte type, jbyte index, jint size) { - return usb_get_descriptor((usb_dev_handle *) dev_handle, (unsigned) type, (unsigned) index, buf, size); + char *string = (char *) malloc(size * sizeof(char)); + int retVal = usb_get_descriptor((usb_dev_handle *) dev_handle, (unsigned) type, + (unsigned) index, string, size); + if (retVal > 0) + return env->NewStringUTF(string); + return 0; } /* * Class: ch_ntb_usb_LibusbWin * Method: usb_get_descriptor_by_endpoint - * Signature: (IIBBLjava/lang/String;I)I + * Signature: (IIBBI)Ljava/lang/String; */ -JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1descriptor_1by_1endpoint - (JNIEnv *env, jobject obj, jint dev_handle, jint ep, jbyte type, jbyte index, jstring buf, jint size) +JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1descriptor_1by_1endpoint + (JNIEnv *env, jobject obj, jint dev_handle, jint ep, jbyte type, jbyte index, jint size) { - return usb_get_descriptor_by_endpoint((usb_dev_handle *) dev_handle, ep, (unsigned) type, (unsigned) index, buf, size); + char *string = (char *) malloc(size * sizeof(char)); + int retVal = usb_get_descriptor_by_endpoint((usb_dev_handle *) dev_handle, ep, (unsigned) type, + (unsigned) index, string, size); + if (retVal > 0) + return env->NewStringUTF(string); + return 0; } /* diff --git a/libusbdll/LibusbWin.h b/libusbdll/LibusbWin.h index 97542f9..574603b 100644 --- a/libusbdll/LibusbWin.h +++ b/libusbdll/LibusbWin.h @@ -114,34 +114,34 @@ JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbWin_usb_1control_1msg /* * Class: ch_ntb_usb_LibusbWin * Method: usb_get_string - * Signature: (IIILjava/lang/String;I)I + * Signature: (III)Ljava/lang/String; */ -JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1string - (JNIEnv *, jobject, jint, jint, jint, jstring, jint); +JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1string + (JNIEnv *, jobject, jint, jint, jint); /* * Class: ch_ntb_usb_LibusbWin * Method: usb_get_string_simple - * Signature: (IILjava/lang/String;I)I + * Signature: (II)Ljava/lang/String; */ -JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1string_1simple - (JNIEnv *, jobject, jint, jint, jstring, jint); +JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1string_1simple + (JNIEnv *, jobject, jint, jint); /* * Class: ch_ntb_usb_LibusbWin * Method: usb_get_descriptor - * Signature: (IBBLjava/lang/String;I)I + * Signature: (IBBI)Ljava/lang/String; */ -JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1descriptor - (JNIEnv *, jobject, jint, jbyte, jbyte, jstring, jint); +JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1descriptor + (JNIEnv *, jobject, jint, jbyte, jbyte, jint); /* * Class: ch_ntb_usb_LibusbWin * Method: usb_get_descriptor_by_endpoint - * Signature: (IIBBLjava/lang/String;I)I + * Signature: (IIBBI)Ljava/lang/String; */ -JNIEXPORT jint JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1descriptor_1by_1endpoint - (JNIEnv *, jobject, jint, jint, jbyte, jbyte, jstring, jint); +JNIEXPORT jstring JNICALL Java_ch_ntb_usb_LibusbWin_usb_1get_1descriptor_1by_1endpoint + (JNIEnv *, jobject, jint, jint, jbyte, jbyte, jint); /* * Class: ch_ntb_usb_LibusbWin