diff options
author | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2015-01-10 13:59:00 -0800 |
---|---|---|
committer | Hoa V. DINH <dinh.viet.hoa@gmail.com> | 2015-01-10 13:59:00 -0800 |
commit | 9342e50fcb0f6f44f6f7372a30278a39d63557d8 (patch) | |
tree | d6c4cbc2e2e12c5db22fc0e992ae36346bfca89f /src/java/TypesUtils.cpp | |
parent | b3713c0d84c3c00fbd5583cc2fe6913bfdcecd44 (diff) |
Fixed crash. Range right bound mapping for Java.
Diffstat (limited to 'src/java/TypesUtils.cpp')
-rw-r--r-- | src/java/TypesUtils.cpp | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/src/java/TypesUtils.cpp b/src/java/TypesUtils.cpp index 7c500e84..8d4b96b4 100644 --- a/src/java/TypesUtils.cpp +++ b/src/java/TypesUtils.cpp @@ -11,17 +11,7 @@ using namespace mailcore; static chash * cppClassHash = NULL; static chash * javaClassHash = NULL; -/* - case jniBoolean: name += "Z"; break; - case jniVoid: name += "V"; break; - case jniByte: name += "B"; break; - case jniChar: name += "C"; break; - case jniShort: name += "S"; break; - case jniInt: name += "I"; break; - case jniLong: name += "J"; break; - case jniFloat: name += "F"; break; - case jniDouble: name += "D"; break; -*/ +#define RANGE_MAX (1 >> 63 - 1) static void init(void); static void real_init(void); @@ -30,7 +20,13 @@ jobject mailcore::rangeToJava(JNIEnv * env, Range range) { jclass cls = env->FindClass("com/libmailcore/Range"); jmethodID constructor = env->GetMethodID(cls, "<init>", "(JJ)V"); - jobject javaObject = env->NewObject(cls, constructor, (jlong) range.location, (jlong) range.length); + jobject javaObject; + if (range.length == UINT64_MAX) { + javaObject = env->NewObject(cls, constructor, (jlong) range.location, (jlong) RANGE_MAX); + } + else { + javaObject = env->NewObject(cls, constructor, (jlong) range.location, (jlong) range.length); + } return javaObject; } @@ -41,7 +37,12 @@ Range mailcore::rangeFromJava(JNIEnv * env, jobject obj) jfieldID lengthField = env->GetFieldID(cls, "length", "J"); jlong location = env->GetLongField(obj, locationField); jlong length = env->GetLongField(obj, lengthField); - return RangeMake((uint64_t) location, (uint64_t) length); + if (length == RANGE_MAX) { + return RangeMake((uint64_t) location, UINT64_MAX); + } + else { + return RangeMake((uint64_t) location, (uint64_t) length); + } } time_t mailcore::javaDateToTime(JNIEnv * env, jobject date) |