@@ -495,12 +495,23 @@ bool MCJavaStringFromNative(JNIEnv *env, const char *p_string, jstring &r_java_s
495495 }
496496 else
497497 {
498- // HH-2017-04-22 [[ Bug 19609 ]]: Convert cstring to Java UTF string directly
499- r_java_string = env->NewStringUTF (p_string);
500- return true ;
498+ MCString t_mcstring (p_string);
499+ return MCJavaStringFromNative (env, &t_mcstring, r_java_string);
501500 }
502501}
503502
503+ bool MCJavaStringFromNativeUTF8 (JNIEnv *env, const char *p_string, jstring &r_java_string)
504+ {
505+ if (p_string == nil)
506+ {
507+ r_java_string = nil;
508+ return true ;
509+ }
510+ else
511+ {
512+ return nil != (r_java_string = env->NewStringUTF (p_string));
513+ }
514+ }
504515bool MCJavaStringFromUnicode (JNIEnv *env, const MCString *p_string, jstring &r_java_string)
505516{
506517 if (p_string == nil)
@@ -1404,6 +1415,8 @@ static MCJavaType native_sigchar_to_returntype(char p_sigchar)
14041415 return kMCJavaTypeVoid ;
14051416 case ' s' :
14061417 return kMCJavaTypeCString ;
1418+ case ' t' :
1419+ return kMCJavaTypeUtf8CString ;
14071420 case ' S' :
14081421 return kMCJavaTypeMCString ;
14091422 case ' U' :
@@ -1449,6 +1462,7 @@ static const char *return_type_to_java_sig(MCJavaType p_type)
14491462 case kMCJavaTypeBoolean : // boolean
14501463 return " Z" ;
14511464 case kMCJavaTypeCString : // string from char *
1465+ case kMCJavaTypeUtf8CString : // string from utf8 char *
14521466 case kMCJavaTypeMCString : // string from MCString *
14531467 case kMCJavaTypeMCStringUnicode : // string from utf16 MCString *
14541468 case kMCJavaTypeMCStringRef : // string from MCStringRef
@@ -1702,11 +1716,23 @@ bool MCJavaConvertParameters(JNIEnv *env, const char *p_signature, va_list p_arg
17021716 case kMCJavaTypeCString :
17031717 {
17041718 t_cstring = va_arg (p_args, const char *);
1705-
1719+
17061720 t_success = MCJavaStringFromNative (env, t_cstring, t_java_string);
17071721 if (t_success)
17081722 t_value . l = t_java_string;
17091723
1724+ t_delete = true ;
1725+ t_object = true ;
1726+ }
1727+ break ;
1728+ case kMCJavaTypeUtf8CString :
1729+ {
1730+ t_cstring = va_arg (p_args, const char *);
1731+
1732+ t_success = MCJavaStringFromNativeUTF8 (env, t_cstring, t_java_string);
1733+ if (t_success)
1734+ t_value . l = t_java_string;
1735+
17101736 t_delete = true ;
17111737 t_object = true ;
17121738 }
0 commit comments