@@ -145,7 +145,7 @@ static jlong getLong_native(JNIEnv * env, jobject object, jint row, jint column)
145
145
{
146
146
int32_t err;
147
147
CursorWindow * window = GET_WINDOW (env, object);
148
- LOG_WINDOW (" Getting long for %d,%d from %p" , row, column, window);
148
+ LOG_WINDOW (" Getting long for %d,%d from %p" , row, column, window);
149
149
150
150
field_slot_t field;
151
151
err = window->read_field_slot (row, column, &field);
@@ -164,14 +164,13 @@ LOG_WINDOW("Getting long for %d,%d from %p", row, column, window);
164
164
} else if (type == FIELD_TYPE_STRING) {
165
165
uint32_t size = field.data .buffer .size ;
166
166
if (size > 0 ) {
167
- #if WINDOW_STORAGE_UTF8
168
- return strtoll ((char const *)window->offsetToPtr (field.data .buffer .offset ), NULL , 0 );
169
- #else
170
- return strtoll ((char const *)window->offsetToPtr (field.data .buffer .offset ), NULL , 0 );
171
- // String8 ascii((char16_t *) window->offsetToPtr(field.data.buffer.offset), size / 2);
172
- // char const * str = ascii.string();
173
- // return strtoll(str, NULL, 0);
174
- #endif
167
+ long long int result;
168
+ jstring data = env->NewString ((const jchar*)window->offsetToPtr (field.data .buffer .offset ), (jsize)size);
169
+ const char * utf8data = env->GetStringUTFChars (data, NULL );
170
+ result = strtoll (utf8data, NULL , 0 );
171
+ if (utf8data) env->ReleaseStringUTFChars (data, utf8data);
172
+ if (data) env->DeleteLocalRef (data);
173
+ return result;
175
174
} else {
176
175
return 0 ;
177
176
}
@@ -373,7 +372,7 @@ static jcharArray copyStringToBuffer_native(JNIEnv* env, jobject object, jint ro
373
372
{
374
373
int32_t err;
375
374
CursorWindow * window = GET_WINDOW (env, object);
376
- LOG_WINDOW (" Copying string for %d,%d from %p" , row, column, window);
375
+ LOG_WINDOW (" Copying string for %d,%d from %p" , row, column, window);
377
376
378
377
field_slot_t field;
379
378
err = window->read_field_slot (row, column, &field);
@@ -495,14 +494,13 @@ LOG_WINDOW("Getting double for %d,%d from %p", row, column, window);
495
494
} else if (type == FIELD_TYPE_STRING) {
496
495
uint32_t size = field.data .buffer .size ;
497
496
if (size > 0 ) {
498
- #if WINDOW_STORAGE_UTF8
499
- return strtod ((char const *)window->offsetToPtr (field.data .buffer .offset ), NULL );
500
- #else
501
- return strtod ((char const *)window->offsetToPtr (field.data .buffer .offset ), NULL );
502
- // String8 ascii((char16_t *) window->offsetToPtr(field.data.buffer.offset), size / 2);
503
- // char const * str = ascii.string();
504
- // return strtod(str, NULL);
505
- #endif
497
+ double result;
498
+ jstring data = env->NewString ((const jchar*)window->offsetToPtr (field.data .buffer .offset ), (jsize)size);
499
+ const char * utf8data = env->GetStringUTFChars (data, NULL );
500
+ result = strtod (utf8data, NULL );
501
+ if (utf8data) env->ReleaseStringUTFChars (data, utf8data);
502
+ if (data) env->DeleteLocalRef (data);
503
+ return result;
506
504
} else {
507
505
return 0.0 ;
508
506
}
0 commit comments