From 9c803fa52606aeb27d4d098161722fb111dd1b23 Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Thu, 13 Nov 2014 09:40:42 -0800 Subject: [PATCH] MTP: Update JNI for new packet getters Bug:18113092 Change-Id: I5d7473af1b57235fbc078c297a309e4a301c9fbd --- media/jni/android_mtp_MtpDatabase.cpp | 147 +++++++++++++------------- 1 file changed, 75 insertions(+), 72 deletions(-) diff --git a/media/jni/android_mtp_MtpDatabase.cpp b/media/jni/android_mtp_MtpDatabase.cpp index 62b4a3693a371..b8e850a32bbbc 100644 --- a/media/jni/android_mtp_MtpDatabase.cpp +++ b/media/jni/android_mtp_MtpDatabase.cpp @@ -469,6 +469,63 @@ out: return result; } +static bool readLongValue(int type, MtpDataPacket& packet, jlong& longValue) { + switch (type) { + case MTP_TYPE_INT8: { + int8_t temp; + if (!packet.getInt8(temp)) return false; + longValue = temp; + break; + } + case MTP_TYPE_UINT8: { + uint8_t temp; + if (!packet.getUInt8(temp)) return false; + longValue = temp; + break; + } + case MTP_TYPE_INT16: { + int16_t temp; + if (!packet.getInt16(temp)) return false; + longValue = temp; + break; + } + case MTP_TYPE_UINT16: { + uint16_t temp; + if (!packet.getUInt16(temp)) return false; + longValue = temp; + break; + } + case MTP_TYPE_INT32: { + int32_t temp; + if (!packet.getInt32(temp)) return false; + longValue = temp; + break; + } + case MTP_TYPE_UINT32: { + uint32_t temp; + if (!packet.getUInt32(temp)) return false; + longValue = temp; + break; + } + case MTP_TYPE_INT64: { + int64_t temp; + if (!packet.getInt64(temp)) return false; + longValue = temp; + break; + } + case MTP_TYPE_UINT64: { + uint64_t temp; + if (!packet.getUInt64(temp)) return false; + longValue = temp; + break; + } + default: + ALOGE("unsupported type in readLongValue"); + return false; + } + return true; +} + MtpResponseCode MyMtpDatabase::setObjectPropertyValue(MtpObjectHandle handle, MtpObjectProperty property, MtpDataPacket& packet) { @@ -480,49 +537,22 @@ MtpResponseCode MyMtpDatabase::setObjectPropertyValue(MtpObjectHandle handle, JNIEnv* env = AndroidRuntime::getJNIEnv(); jlong longValue = 0; jstring stringValue = NULL; + MtpResponseCode result = MTP_RESPONSE_INVALID_OBJECT_PROP_FORMAT; - switch (type) { - case MTP_TYPE_INT8: - longValue = packet.getInt8(); - break; - case MTP_TYPE_UINT8: - longValue = packet.getUInt8(); - break; - case MTP_TYPE_INT16: - longValue = packet.getInt16(); - break; - case MTP_TYPE_UINT16: - longValue = packet.getUInt16(); - break; - case MTP_TYPE_INT32: - longValue = packet.getInt32(); - break; - case MTP_TYPE_UINT32: - longValue = packet.getUInt32(); - break; - case MTP_TYPE_INT64: - longValue = packet.getInt64(); - break; - case MTP_TYPE_UINT64: - longValue = packet.getUInt64(); - break; - case MTP_TYPE_STR: - { - MtpStringBuffer buffer; - packet.getString(buffer); - stringValue = env->NewStringUTF((const char *)buffer); - break; - } - default: - ALOGE("unsupported type in setObjectPropertyValue\n"); - return MTP_RESPONSE_INVALID_OBJECT_PROP_FORMAT; + if (type == MTP_TYPE_STR) { + MtpStringBuffer buffer; + if (!packet.getString(buffer)) goto fail; + stringValue = env->NewStringUTF((const char *)buffer); + } else { + if (!readLongValue(type, packet, longValue)) goto fail; } - jint result = env->CallIntMethod(mDatabase, method_setObjectProperty, + result = env->CallIntMethod(mDatabase, method_setObjectProperty, (jint)handle, (jint)property, longValue, stringValue); if (stringValue) env->DeleteLocalRef(stringValue); +fail: checkAndClearExceptionFromCallback(env, __FUNCTION__); return result; } @@ -610,49 +640,22 @@ MtpResponseCode MyMtpDatabase::setDevicePropertyValue(MtpDeviceProperty property JNIEnv* env = AndroidRuntime::getJNIEnv(); jlong longValue = 0; jstring stringValue = NULL; + MtpResponseCode result = MTP_RESPONSE_INVALID_DEVICE_PROP_FORMAT; - switch (type) { - case MTP_TYPE_INT8: - longValue = packet.getInt8(); - break; - case MTP_TYPE_UINT8: - longValue = packet.getUInt8(); - break; - case MTP_TYPE_INT16: - longValue = packet.getInt16(); - break; - case MTP_TYPE_UINT16: - longValue = packet.getUInt16(); - break; - case MTP_TYPE_INT32: - longValue = packet.getInt32(); - break; - case MTP_TYPE_UINT32: - longValue = packet.getUInt32(); - break; - case MTP_TYPE_INT64: - longValue = packet.getInt64(); - break; - case MTP_TYPE_UINT64: - longValue = packet.getUInt64(); - break; - case MTP_TYPE_STR: - { - MtpStringBuffer buffer; - packet.getString(buffer); - stringValue = env->NewStringUTF((const char *)buffer); - break; - } - default: - ALOGE("unsupported type in setDevicePropertyValue\n"); - return MTP_RESPONSE_INVALID_OBJECT_PROP_FORMAT; + if (type == MTP_TYPE_STR) { + MtpStringBuffer buffer; + if (!packet.getString(buffer)) goto fail; + stringValue = env->NewStringUTF((const char *)buffer); + } else { + if (!readLongValue(type, packet, longValue)) goto fail; } - jint result = env->CallIntMethod(mDatabase, method_setDeviceProperty, + result = env->CallIntMethod(mDatabase, method_setDeviceProperty, (jint)property, longValue, stringValue); if (stringValue) env->DeleteLocalRef(stringValue); +fail: checkAndClearExceptionFromCallback(env, __FUNCTION__); return result; }