static jint android_content_XmlBlock_nativeCreate(JNIEnv* env, jobject clazz, jbyteArray bArray, jint off, jint len) { if (bArray == NULL) { doThrow(env, "java/lang/NullPointerException"); return 0; } jsize bLen = env->GetArrayLength(bArray); if (off < 0 || off >= bLen || len < 0 || len > bLen || (off+len) > bLen) { doThrow(env, "java/lang/IndexOutOfBoundsException"); return 0; } jbyte* b = env->GetByteArrayElements(bArray, NULL); ResXMLTree* osb = new ResXMLTree(b+off, len, true); env->ReleaseByteArrayElements(bArray, b, 0); if (osb == NULL || osb->getError() != NO_ERROR) { doThrow(env, "java/lang/IllegalArgumentException"); return 0; } return (jint)osb; }