implemented basic char_to_java()
This commit is contained in:
@@ -125,6 +125,9 @@ You can run `$INSTALL_DIR/bin/native-platform` to run the test application.
|
|||||||
|
|
||||||
### Improvements
|
### Improvements
|
||||||
|
|
||||||
|
* Cache class, method and field lookups (in particular for String conversions).
|
||||||
|
* Determine C charset once at startup
|
||||||
|
* Change readLink() implementation so that it does not need to NULL terminate the encoded content
|
||||||
* Implement java_to_char_str()
|
* Implement java_to_char_str()
|
||||||
* Use iconv() to convert from C char string to UTF-16 when converting from C char string to Java String.
|
* Use iconv() to convert from C char string to UTF-16 when converting from C char string to Java String.
|
||||||
* Support for cygwin terminal
|
* Support for cygwin terminal
|
||||||
|
|||||||
@@ -23,11 +23,26 @@ void mark_failed_with_errno(JNIEnv *env, const char* message, jobject result) {
|
|||||||
mark_failed_with_code(env, message, errno, result);
|
mark_failed_with_code(env, message, errno, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
char_str* java_to_char_str(JNIEnv *env, jstring string, jobject result) {
|
char* java_to_char(JNIEnv *env, jstring string, jobject result) {
|
||||||
return NULL;
|
// TODO - share this code with nnn_getSystemInfo() below
|
||||||
}
|
locale_t locale = newlocale(LC_CTYPE_MASK, "", NULL);
|
||||||
|
if (locale == NULL) {
|
||||||
|
mark_failed_with_message(env, "could not create locale", result);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void char_str_free(char_str* str) {
|
jstring encoding = env->NewStringUTF(nl_langinfo_l(CODESET, locale));
|
||||||
|
freelocale(locale);
|
||||||
|
|
||||||
|
jclass strClass = env->FindClass("java/lang/String");
|
||||||
|
jmethodID method = env->GetMethodID(strClass, "getBytes", "(Ljava/lang/String;)[B");
|
||||||
|
jbyteArray byteArray = (jbyteArray)env->CallObjectMethod(string, method, encoding);
|
||||||
|
size_t len = env->GetArrayLength(byteArray);
|
||||||
|
char* chars = (char*)malloc(len + 1);
|
||||||
|
env->GetByteArrayRegion(byteArray, 0, len, (jbyte*)chars);
|
||||||
|
chars[len] = 0;
|
||||||
|
|
||||||
|
return chars;
|
||||||
}
|
}
|
||||||
|
|
||||||
jstring char_to_java(JNIEnv* env, const char* chars, jobject result) {
|
jstring char_to_java(JNIEnv* env, const char* chars, jobject result) {
|
||||||
|
|||||||
@@ -51,26 +51,12 @@ extern void wchar_str_free(wchar_str* str);
|
|||||||
*/
|
*/
|
||||||
extern jstring wchar_to_java(JNIEnv* env, const wchar_t* chars, size_t len, jobject result);
|
extern jstring wchar_to_java(JNIEnv* env, const wchar_t* chars, size_t len, jobject result);
|
||||||
|
|
||||||
typedef struct char_struct {
|
|
||||||
// NULL terminated
|
|
||||||
char* chars;
|
|
||||||
// Number of chars in the string, excluding the NULL terminator
|
|
||||||
size_t len;
|
|
||||||
jstring source;
|
|
||||||
JNIEnv *env;
|
|
||||||
} char_str;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Converts the given Java string to a char_str. Should call char_str_free() when finished.
|
* Converts the given Java string to a char_str. Should call free() when finished.
|
||||||
*
|
*
|
||||||
* Returns NULL on failure.
|
* Returns NULL on failure.
|
||||||
*/
|
*/
|
||||||
extern char_str* java_to_char_str(JNIEnv *env, jstring string, jobject result);
|
extern char* java_to_char(JNIEnv *env, jstring string, jobject result);
|
||||||
|
|
||||||
/*
|
|
||||||
* Releases resources used by the given string.
|
|
||||||
*/
|
|
||||||
extern void char_str_free(char_str* str);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Converts the given NULL terminated char string to a Java string.
|
* Converts the given NULL terminated char string to a Java string.
|
||||||
|
|||||||
Reference in New Issue
Block a user