@@ -145,7 +145,7 @@ static jlong getLong_native(JNIEnv * env, jobject object, jint row, jint column)
145145{
146146 int32_t err;
147147 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);
149149
150150 field_slot_t field;
151151 err = window->read_field_slot (row, column, &field);
@@ -164,14 +164,13 @@ LOG_WINDOW("Getting long for %d,%d from %p", row, column, window);
164164 } else if (type == FIELD_TYPE_STRING) {
165165 uint32_t size = field.data .buffer .size ;
166166 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;
175174 } else {
176175 return 0 ;
177176 }
@@ -373,7 +372,7 @@ static jcharArray copyStringToBuffer_native(JNIEnv* env, jobject object, jint ro
373372{
374373 int32_t err;
375374 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);
377376
378377 field_slot_t field;
379378 err = window->read_field_slot (row, column, &field);
@@ -495,14 +494,13 @@ LOG_WINDOW("Getting double for %d,%d from %p", row, column, window);
495494 } else if (type == FIELD_TYPE_STRING) {
496495 uint32_t size = field.data .buffer .size ;
497496 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;
506504 } else {
507505 return 0.0 ;
508506 }
0 commit comments