Skip to content

Commit c5d47b9

Browse files
authored
Fixed string storage in iOS SQLite implementation to respect char pairs for emojii support
Fixed issue #3692 authored-by: Keylon Duran <Keylon Duran@SF-IT-17>
1 parent 7915809 commit c5d47b9

File tree

3 files changed

+20
-17
lines changed

3 files changed

+20
-17
lines changed

CodenameOne/src/com/codename1/ui/Button.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1117,4 +1117,4 @@ public void setText(String t) {
11171117
}
11181118
super.setText(t);
11191119
}
1120-
}
1120+
}

CodenameOne/src/com/codename1/ui/layouts/GridLayout.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,4 +416,4 @@ public boolean isHideZeroSized() {
416416
public void setHideZeroSized(boolean hideZeroSized) {
417417
this.hideZeroSized = hideZeroSized;
418418
}
419-
}
419+
}

Ports/iOSPort/nativeSources/IOSNative.m

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6180,31 +6180,34 @@ JAVA_SHORT com_codename1_impl_ios_IOSNative_sqlCursorValueAtColumnShort___long_i
61806180

61816181
#ifdef NEW_CODENAME_ONE_VM
61826182
JAVA_OBJECT com_codename1_impl_ios_IOSNative_sqlCursorValueAtColumnString___long_int_R_java_lang_String(CN1_THREAD_STATE_MULTI_ARG JAVA_OBJECT instanceObject, JAVA_LONG statement, JAVA_INT col) {
6183+
61836184
enteringNativeAllocations();
6185+
61846186
const char* result = (const char*)sqlite3_column_text((sqlite3_stmt*)statement, col);
61856187
if(result == 0) {
61866188
return JAVA_NULL;
61876189
}
6188-
JAVA_OBJECT str = __NEW_INSTANCE_java_lang_String(threadStateData);
6189-
struct obj__java_lang_String* ss = (struct obj__java_lang_String*)str;
6190+
61906191
NSString* ns = [NSString stringWithUTF8String:result];
6192+
if (!ns) {
6193+
return JAVA_NULL;
6194+
}
6195+
61916196
[ns retain];
6197+
6198+
JAVA_OBJECT str = __NEW_INSTANCE_java_lang_String(threadStateData);
6199+
struct obj__java_lang_String* ss = (struct obj__java_lang_String*)str;
61926200
ss->java_lang_String_nsString = (JAVA_LONG)ns;
6193-
6194-
JAVA_OBJECT destArr = __NEW_ARRAY_JAVA_CHAR(threadStateData, [ns length]);
6201+
6202+
NSUInteger len = [ns length];
6203+
JAVA_OBJECT destArr = __NEW_ARRAY_JAVA_CHAR(threadStateData, len);
61956204
ss->java_lang_String_value = destArr;
6196-
ss->java_lang_String_count = [ns length];
6197-
6198-
__block JAVA_ARRAY_CHAR* dest = (JAVA_ARRAY_CHAR*)((JAVA_ARRAY)destArr)->data;
6199-
__block int length = 0;
6200-
[ns enumerateSubstringsInRange:NSMakeRange(0, [ns length])
6201-
options:NSStringEnumerationByComposedCharacterSequences
6202-
usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
6203-
dest[length] = (JAVA_CHAR)[ns characterAtIndex:length];
6204-
length++;
6205-
}];
6205+
ss->java_lang_String_count = len;
6206+
6207+
JAVA_ARRAY_CHAR* dest = (JAVA_ARRAY_CHAR*)((JAVA_ARRAY)destArr)->data;
6208+
[ns getCharacters:(unichar*)dest range:NSMakeRange(0, len)];
6209+
62066210
finishedNativeAllocations();
6207-
62086211
return str;
62096212
}
62106213
#else // NEW_CODENAME_ONE_VM

0 commit comments

Comments
 (0)