AArch64: Use long for pointers in App/Backup

For storing pointers, long is used, as
native pointers can be 64-bit.

In addition, some minor changes have been done
to conform with standard JNI practice (e.g. use
of jint instead of int in JNI function prototypes)

Change-Id: I7aee49dc26cf6c86af8f1d882e9cd1cc145a1977
Signed-off-by: Ashok Bhat <ashok.bhat@arm.com>
Signed-off-by: Marcus Oakland <marcus.oakland@arm.com>
Signed-off-by: Kévin PETIT <kevin.petit@arm.com>
diff --git a/core/java/android/app/NativeActivity.java b/core/java/android/app/NativeActivity.java
index 4ca3747..2e05edb 100644
--- a/core/java/android/app/NativeActivity.java
+++ b/core/java/android/app/NativeActivity.java
@@ -76,7 +76,7 @@
     private NativeContentView mNativeContentView;
     private InputMethodManager mIMM;
 
-    private int mNativeHandle;
+    private long mNativeHandle;
     
     private InputQueue mCurInputQueue;
     private SurfaceHolder mCurSurfaceHolder;
@@ -91,27 +91,26 @@
 
     private boolean mDestroyed;
     
-    private native int loadNativeCode(String path, String funcname, MessageQueue queue,
+    private native long loadNativeCode(String path, String funcname, MessageQueue queue,
             String internalDataPath, String obbPath, String externalDataPath, int sdkVersion,
             AssetManager assetMgr, byte[] savedState);
-    private native void unloadNativeCode(int handle);
-    
-    private native void onStartNative(int handle);
-    private native void onResumeNative(int handle);
-    private native byte[] onSaveInstanceStateNative(int handle);
-    private native void onPauseNative(int handle);
-    private native void onStopNative(int handle);
-    private native void onConfigurationChangedNative(int handle);
-    private native void onLowMemoryNative(int handle);
-    private native void onWindowFocusChangedNative(int handle, boolean focused);
-    private native void onSurfaceCreatedNative(int handle, Surface surface);
-    private native void onSurfaceChangedNative(int handle, Surface surface,
+    private native void unloadNativeCode(long handle);
+    private native void onStartNative(long handle);
+    private native void onResumeNative(long handle);
+    private native byte[] onSaveInstanceStateNative(long handle);
+    private native void onPauseNative(long handle);
+    private native void onStopNative(long handle);
+    private native void onConfigurationChangedNative(long handle);
+    private native void onLowMemoryNative(long handle);
+    private native void onWindowFocusChangedNative(long handle, boolean focused);
+    private native void onSurfaceCreatedNative(long handle, Surface surface);
+    private native void onSurfaceChangedNative(long handle, Surface surface,
             int format, int width, int height);
-    private native void onSurfaceRedrawNeededNative(int handle, Surface surface);
-    private native void onSurfaceDestroyedNative(int handle);
-    private native void onInputQueueCreatedNative(int handle, int queuePtr);
-    private native void onInputQueueDestroyedNative(int handle, int queuePtr);
-    private native void onContentRectChangedNative(int handle, int x, int y, int w, int h);
+    private native void onSurfaceRedrawNeededNative(long handle, Surface surface);
+    private native void onSurfaceDestroyedNative(long handle);
+    private native void onInputQueueCreatedNative(long handle, long queuePtr);
+    private native void onInputQueueDestroyedNative(long handle, long queuePtr);
+    private native void onContentRectChangedNative(long handle, int x, int y, int w, int h);
 
     static class NativeContentView extends View {
         NativeActivity mActivity;
diff --git a/core/java/android/app/backup/BackupDataInput.java b/core/java/android/app/backup/BackupDataInput.java
index 43b920a..03205fb 100644
--- a/core/java/android/app/backup/BackupDataInput.java
+++ b/core/java/android/app/backup/BackupDataInput.java
@@ -59,7 +59,7 @@
  * }</pre>
  */
 public class BackupDataInput {
-    int mBackupReader;
+    long mBackupReader;
 
     private EntityHeader mHeader = new EntityHeader();
     private boolean mHeaderReady;
@@ -185,10 +185,10 @@
         }
     }
 
-    private native static int ctor(FileDescriptor fd);
-    private native static void dtor(int mBackupReader);
+    private native static long ctor(FileDescriptor fd);
+    private native static void dtor(long mBackupReader);
 
-    private native int readNextHeader_native(int mBackupReader, EntityHeader entity);
-    private native int readEntityData_native(int mBackupReader, byte[] data, int offset, int size);
-    private native int skipEntityData_native(int mBackupReader);
+    private native int readNextHeader_native(long mBackupReader, EntityHeader entity);
+    private native int readEntityData_native(long mBackupReader, byte[] data, int offset, int size);
+    private native int skipEntityData_native(long mBackupReader);
 }
diff --git a/core/java/android/app/backup/BackupDataOutput.java b/core/java/android/app/backup/BackupDataOutput.java
index 22668b6..3a070b6 100644
--- a/core/java/android/app/backup/BackupDataOutput.java
+++ b/core/java/android/app/backup/BackupDataOutput.java
@@ -62,7 +62,7 @@
  * @see BackupAgent
  */
 public class BackupDataOutput {
-    int mBackupWriter;
+    long mBackupWriter;
 
     /** @hide */
     public BackupDataOutput(FileDescriptor fd) {
@@ -121,11 +121,11 @@
         }
     }
 
-    private native static int ctor(FileDescriptor fd);
-    private native static void dtor(int mBackupWriter);
+    private native static long ctor(FileDescriptor fd);
+    private native static void dtor(long mBackupWriter);
 
-    private native static int writeEntityHeader_native(int mBackupWriter, String key, int dataSize);
-    private native static int writeEntityData_native(int mBackupWriter, byte[] data, int size);
-    private native static void setKeyPrefix_native(int mBackupWriter, String keyPrefix);
+    private native static int writeEntityHeader_native(long mBackupWriter, String key, int dataSize);
+    private native static int writeEntityData_native(long mBackupWriter, byte[] data, int size);
+    private native static void setKeyPrefix_native(long mBackupWriter, String keyPrefix);
 }
 
diff --git a/core/java/android/app/backup/FileBackupHelperBase.java b/core/java/android/app/backup/FileBackupHelperBase.java
index 887a2e6..4ed5197 100644
--- a/core/java/android/app/backup/FileBackupHelperBase.java
+++ b/core/java/android/app/backup/FileBackupHelperBase.java
@@ -29,7 +29,7 @@
 class FileBackupHelperBase {
     private static final String TAG = "FileBackupHelperBase";
 
-    int mPtr;
+    long mPtr;
     Context mContext;
     boolean mExceptionLogged;
     
@@ -115,14 +115,13 @@
         return false;
     }
 
-    private static native int ctor();
-    private static native void dtor(int ptr);
+    private static native long ctor();
+    private static native void dtor(long ptr);
 
     native private static int performBackup_native(FileDescriptor oldState,
-            int data, FileDescriptor newState, String[] files, String[] keys);
-    
-    private static native int writeFile_native(int ptr, String filename, int backupReader);
-    private static native int writeSnapshot_native(int ptr, FileDescriptor fd);
+            long data, FileDescriptor newState, String[] files, String[] keys);
+    private static native int writeFile_native(long ptr, String filename, long backupReader);
+    private static native int writeSnapshot_native(long ptr, FileDescriptor fd);
 }
 
 
diff --git a/core/jni/android_app_NativeActivity.cpp b/core/jni/android_app_NativeActivity.cpp
index 5418006..9c44093 100644
--- a/core/jni/android_app_NativeActivity.cpp
+++ b/core/jni/android_app_NativeActivity.cpp
@@ -241,10 +241,10 @@
 
 // ------------------------------------------------------------------------
 
-static jint
+static jlong
 loadNativeCode_native(JNIEnv* env, jobject clazz, jstring path, jstring funcName,
         jobject messageQueue, jstring internalDataDir, jstring obbDir,
-        jstring externalDataDir, int sdkVersion,
+        jstring externalDataDir, jint sdkVersion,
         jobject jAssetMgr, jbyteArray savedState)
 {
     LOG_TRACE("loadNativeCode_native");
@@ -338,11 +338,11 @@
         }
     }
     
-    return (jint)code;
+    return (jlong)code;
 }
 
 static void
-unloadNativeCode_native(JNIEnv* env, jobject clazz, jint handle)
+unloadNativeCode_native(JNIEnv* env, jobject clazz, jlong handle)
 {
     LOG_TRACE("unloadNativeCode_native");
     if (handle != 0) {
@@ -352,7 +352,7 @@
 }
 
 static void
-onStart_native(JNIEnv* env, jobject clazz, jint handle)
+onStart_native(JNIEnv* env, jobject clazz, jlong handle)
 {
     LOG_TRACE("onStart_native");
     if (handle != 0) {
@@ -364,7 +364,7 @@
 }
 
 static void
-onResume_native(JNIEnv* env, jobject clazz, jint handle)
+onResume_native(JNIEnv* env, jobject clazz, jlong handle)
 {
     LOG_TRACE("onResume_native");
     if (handle != 0) {
@@ -376,7 +376,7 @@
 }
 
 static jbyteArray
-onSaveInstanceState_native(JNIEnv* env, jobject clazz, jint handle)
+onSaveInstanceState_native(JNIEnv* env, jobject clazz, jlong handle)
 {
     LOG_TRACE("onSaveInstanceState_native");
 
@@ -403,7 +403,7 @@
 }
 
 static void
-onPause_native(JNIEnv* env, jobject clazz, jint handle)
+onPause_native(JNIEnv* env, jobject clazz, jlong handle)
 {
     LOG_TRACE("onPause_native");
     if (handle != 0) {
@@ -415,7 +415,7 @@
 }
 
 static void
-onStop_native(JNIEnv* env, jobject clazz, jint handle)
+onStop_native(JNIEnv* env, jobject clazz, jlong handle)
 {
     LOG_TRACE("onStop_native");
     if (handle != 0) {
@@ -427,7 +427,7 @@
 }
 
 static void
-onConfigurationChanged_native(JNIEnv* env, jobject clazz, jint handle)
+onConfigurationChanged_native(JNIEnv* env, jobject clazz, jlong handle)
 {
     LOG_TRACE("onConfigurationChanged_native");
     if (handle != 0) {
@@ -439,7 +439,7 @@
 }
 
 static void
-onLowMemory_native(JNIEnv* env, jobject clazz, jint handle)
+onLowMemory_native(JNIEnv* env, jobject clazz, jlong handle)
 {
     LOG_TRACE("onLowMemory_native");
     if (handle != 0) {
@@ -451,7 +451,7 @@
 }
 
 static void
-onWindowFocusChanged_native(JNIEnv* env, jobject clazz, jint handle, jboolean focused)
+onWindowFocusChanged_native(JNIEnv* env, jobject clazz, jlong handle, jboolean focused)
 {
     LOG_TRACE("onWindowFocusChanged_native");
     if (handle != 0) {
@@ -463,7 +463,7 @@
 }
 
 static void
-onSurfaceCreated_native(JNIEnv* env, jobject clazz, jint handle, jobject surface)
+onSurfaceCreated_native(JNIEnv* env, jobject clazz, jlong handle, jobject surface)
 {
     LOG_TRACE("onSurfaceCreated_native");
     if (handle != 0) {
@@ -483,7 +483,7 @@
 }
 
 static void
-onSurfaceChanged_native(JNIEnv* env, jobject clazz, jint handle, jobject surface,
+onSurfaceChanged_native(JNIEnv* env, jobject clazz, jlong handle, jobject surface,
         jint format, jint width, jint height)
 {
     LOG_TRACE("onSurfaceChanged_native");
@@ -524,7 +524,7 @@
 }
 
 static void
-onSurfaceRedrawNeeded_native(JNIEnv* env, jobject clazz, jint handle)
+onSurfaceRedrawNeeded_native(JNIEnv* env, jobject clazz, jlong handle)
 {
     LOG_TRACE("onSurfaceRedrawNeeded_native");
     if (handle != 0) {
@@ -536,7 +536,7 @@
 }
 
 static void
-onSurfaceDestroyed_native(JNIEnv* env, jobject clazz, jint handle, jobject surface)
+onSurfaceDestroyed_native(JNIEnv* env, jobject clazz, jlong handle, jobject surface)
 {
     LOG_TRACE("onSurfaceDestroyed_native");
     if (handle != 0) {
@@ -550,7 +550,7 @@
 }
 
 static void
-onInputQueueCreated_native(JNIEnv* env, jobject clazz, jint handle, jint queuePtr)
+onInputQueueCreated_native(JNIEnv* env, jobject clazz, jlong handle, jlong queuePtr)
 {
     LOG_TRACE("onInputChannelCreated_native");
     if (handle != 0) {
@@ -563,7 +563,7 @@
 }
 
 static void
-onInputQueueDestroyed_native(JNIEnv* env, jobject clazz, jint handle, jint queuePtr)
+onInputQueueDestroyed_native(JNIEnv* env, jobject clazz, jlong handle, jlong queuePtr)
 {
     LOG_TRACE("onInputChannelDestroyed_native");
     if (handle != 0) {
@@ -576,7 +576,7 @@
 }
 
 static void
-onContentRectChanged_native(JNIEnv* env, jobject clazz, jint handle,
+onContentRectChanged_native(JNIEnv* env, jobject clazz, jlong handle,
         jint x, jint y, jint w, jint h)
 {
     LOG_TRACE("onContentRectChanged_native");
@@ -594,26 +594,26 @@
 }
 
 static const JNINativeMethod g_methods[] = {
-    { "loadNativeCode", "(Ljava/lang/String;Ljava/lang/String;Landroid/os/MessageQueue;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/content/res/AssetManager;[B)I",
+    { "loadNativeCode", "(Ljava/lang/String;Ljava/lang/String;Landroid/os/MessageQueue;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILandroid/content/res/AssetManager;[B)J",
             (void*)loadNativeCode_native },
-    { "unloadNativeCode", "(I)V", (void*)unloadNativeCode_native },
-    { "onStartNative", "(I)V", (void*)onStart_native },
-    { "onResumeNative", "(I)V", (void*)onResume_native },
-    { "onSaveInstanceStateNative", "(I)[B", (void*)onSaveInstanceState_native },
-    { "onPauseNative", "(I)V", (void*)onPause_native },
-    { "onStopNative", "(I)V", (void*)onStop_native },
-    { "onConfigurationChangedNative", "(I)V", (void*)onConfigurationChanged_native },
-    { "onLowMemoryNative", "(I)V", (void*)onLowMemory_native },
-    { "onWindowFocusChangedNative", "(IZ)V", (void*)onWindowFocusChanged_native },
-    { "onSurfaceCreatedNative", "(ILandroid/view/Surface;)V", (void*)onSurfaceCreated_native },
-    { "onSurfaceChangedNative", "(ILandroid/view/Surface;III)V", (void*)onSurfaceChanged_native },
-    { "onSurfaceRedrawNeededNative", "(ILandroid/view/Surface;)V", (void*)onSurfaceRedrawNeeded_native },
-    { "onSurfaceDestroyedNative", "(I)V", (void*)onSurfaceDestroyed_native },
-    { "onInputQueueCreatedNative", "(II)V",
+    { "unloadNativeCode", "(J)V", (void*)unloadNativeCode_native },
+    { "onStartNative", "(J)V", (void*)onStart_native },
+    { "onResumeNative", "(J)V", (void*)onResume_native },
+    { "onSaveInstanceStateNative", "(J)[B", (void*)onSaveInstanceState_native },
+    { "onPauseNative", "(J)V", (void*)onPause_native },
+    { "onStopNative", "(J)V", (void*)onStop_native },
+    { "onConfigurationChangedNative", "(J)V", (void*)onConfigurationChanged_native },
+    { "onLowMemoryNative", "(J)V", (void*)onLowMemory_native },
+    { "onWindowFocusChangedNative", "(JZ)V", (void*)onWindowFocusChanged_native },
+    { "onSurfaceCreatedNative", "(JLandroid/view/Surface;)V", (void*)onSurfaceCreated_native },
+    { "onSurfaceChangedNative", "(JLandroid/view/Surface;III)V", (void*)onSurfaceChanged_native },
+    { "onSurfaceRedrawNeededNative", "(JLandroid/view/Surface;)V", (void*)onSurfaceRedrawNeeded_native },
+    { "onSurfaceDestroyedNative", "(J)V", (void*)onSurfaceDestroyed_native },
+    { "onInputQueueCreatedNative", "(JJ)V",
         (void*)onInputQueueCreated_native },
-    { "onInputQueueDestroyedNative", "(II)V",
+    { "onInputQueueDestroyedNative", "(JJ)V",
         (void*)onInputQueueDestroyed_native },
-    { "onContentRectChangedNative", "(IIIII)V", (void*)onContentRectChanged_native },
+    { "onContentRectChangedNative", "(JIIII)V", (void*)onContentRectChanged_native },
 };
 
 static const char* const kNativeActivityPathName = "android/app/NativeActivity";
diff --git a/core/jni/android_app_backup_FullBackup.cpp b/core/jni/android_app_backup_FullBackup.cpp
index 2ca645a..3cfaa82 100644
--- a/core/jni/android_app_backup_FullBackup.cpp
+++ b/core/jni/android_app_backup_FullBackup.cpp
@@ -70,7 +70,7 @@
  * path:        absolute path to the file to be saved
  * dataOutput:  the BackupDataOutput object that we're saving into
  */
-static int backupToTar(JNIEnv* env, jobject clazz, jstring packageNameObj,
+static jint backupToTar(JNIEnv* env, jobject clazz, jstring packageNameObj,
         jstring domainObj, jstring linkdomain,
         jstring rootpathObj, jstring pathObj, jobject dataOutputObj) {
     int ret;
@@ -92,22 +92,22 @@
     if (packagenamechars) env->ReleaseStringUTFChars(packageNameObj, packagenamechars);
 
     // Extract the data output fd
-    BackupDataWriter* writer = (BackupDataWriter*) env->GetIntField(dataOutputObj,
+    BackupDataWriter* writer = (BackupDataWriter*) env->GetLongField(dataOutputObj,
             sBackupDataOutput.mBackupWriter);
 
     // Validate
     if (!writer) {
         ALOGE("No output stream provided [%s]", path.string());
-        return -1;
+        return (jint) -1;
     }
 
     if (path.length() < rootpath.length()) {
         ALOGE("file path [%s] shorter than root path [%s]",
                 path.string(), rootpath.string());
-        return -1;
+        return (jint) -1;
     }
 
-    return write_tarfile(packageName, domain, rootpath, path, writer);
+    return (jint) write_tarfile(packageName, domain, rootpath, path, writer);
 }
 
 static const JNINativeMethod g_methods[] = {
@@ -121,7 +121,7 @@
     jclass clazz = env->FindClass("android/app/backup/BackupDataOutput");
     LOG_FATAL_IF(clazz == NULL, "Unable to find class android.app.backup.BackupDataOutput");
 
-    sBackupDataOutput.mBackupWriter = env->GetFieldID(clazz, "mBackupWriter", "I");
+    sBackupDataOutput.mBackupWriter = env->GetFieldID(clazz, "mBackupWriter", "J");
     LOG_FATAL_IF(sBackupDataOutput.mBackupwriter == NULL,
             "Unable to find mBackupWriter field in android.app.backup.BackupDataOutput");
 
diff --git a/core/jni/android_backup_BackupDataInput.cpp b/core/jni/android_backup_BackupDataInput.cpp
index 25b0007..90763b0 100644
--- a/core/jni/android_backup_BackupDataInput.cpp
+++ b/core/jni/android_backup_BackupDataInput.cpp
@@ -29,25 +29,25 @@
 static jfieldID s_keyField = 0;
 static jfieldID s_dataSizeField = 0;
 
-static int
+static jlong
 ctor_native(JNIEnv* env, jobject clazz, jobject fileDescriptor)
 {
     int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
     if (fd == -1) {
-        return NULL;
+        return (jlong)NULL;
     }
 
-    return (int)new BackupDataReader(fd);
+    return (jlong)new BackupDataReader(fd);
 }
 
 static void
-dtor_native(JNIEnv* env, jobject clazz, int r)
+dtor_native(JNIEnv* env, jobject clazz, jlong r)
 {
     delete (BackupDataReader*)r;
 }
 
 static jint
-readNextHeader_native(JNIEnv* env, jobject clazz, int r, jobject entity)
+readNextHeader_native(JNIEnv* env, jobject clazz, jlong r, jobject entity)
 {
     int err;
     bool done;
@@ -89,7 +89,7 @@
 }
 
 static jint
-readEntityData_native(JNIEnv* env, jobject clazz, int r, jbyteArray data, int offset, int size)
+readEntityData_native(JNIEnv* env, jobject clazz, jlong r, jbyteArray data, jint offset, jint size)
 {
     int err;
     BackupDataReader* reader = (BackupDataReader*)r;
@@ -112,7 +112,7 @@
 }
 
 static jint
-skipEntityData_native(JNIEnv* env, jobject clazz, int r)
+skipEntityData_native(JNIEnv* env, jobject clazz, jlong r)
 {
     int err;
     BackupDataReader* reader = (BackupDataReader*)r;
@@ -123,12 +123,12 @@
 }
 
 static const JNINativeMethod g_methods[] = {
-    { "ctor", "(Ljava/io/FileDescriptor;)I", (void*)ctor_native },
-    { "dtor", "(I)V", (void*)dtor_native },
-    { "readNextHeader_native", "(ILandroid/app/backup/BackupDataInput$EntityHeader;)I",
+    { "ctor", "(Ljava/io/FileDescriptor;)J", (void*)ctor_native },
+    { "dtor", "(J)V", (void*)dtor_native },
+    { "readNextHeader_native", "(JLandroid/app/backup/BackupDataInput$EntityHeader;)I",
             (void*)readNextHeader_native },
-    { "readEntityData_native", "(I[BII)I", (void*)readEntityData_native },
-    { "skipEntityData_native", "(I)I", (void*)skipEntityData_native },
+    { "readEntityData_native", "(J[BII)I", (void*)readEntityData_native },
+    { "skipEntityData_native", "(J)I", (void*)skipEntityData_native },
 };
 
 int register_android_backup_BackupDataInput(JNIEnv* env)
diff --git a/core/jni/android_backup_BackupDataOutput.cpp b/core/jni/android_backup_BackupDataOutput.cpp
index e8f0fb8..8244e1b 100644
--- a/core/jni/android_backup_BackupDataOutput.cpp
+++ b/core/jni/android_backup_BackupDataOutput.cpp
@@ -25,25 +25,25 @@
 namespace android
 {
 
-static int
+static jlong
 ctor_native(JNIEnv* env, jobject clazz, jobject fileDescriptor)
 {
     int fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
     if (fd == -1) {
-        return NULL;
+        return (jlong)NULL;
     }
 
-    return (int)new BackupDataWriter(fd);
+    return (jlong)new BackupDataWriter(fd);
 }
 
 static void
-dtor_native(JNIEnv* env, jobject clazz, int w)
+dtor_native(JNIEnv* env, jobject clazz, jlong w)
 {
     delete (BackupDataWriter*)w;
 }
 
 static jint
-writeEntityHeader_native(JNIEnv* env, jobject clazz, int w, jstring key, int dataSize)
+writeEntityHeader_native(JNIEnv* env, jobject clazz, jlong w, jstring key, jint dataSize)
 {
     int err;
     BackupDataWriter* writer = (BackupDataWriter*)w;
@@ -56,11 +56,11 @@
 
     env->ReleaseStringUTFChars(key, keyUTF);
 
-    return err;
+    return (jint)err;
 }
 
 static jint
-writeEntityData_native(JNIEnv* env, jobject clazz, int w, jbyteArray data, int size)
+writeEntityData_native(JNIEnv* env, jobject clazz, jlong w, jbyteArray data, jint size)
 {
     int err;
     BackupDataWriter* writer = (BackupDataWriter*)w;
@@ -79,11 +79,11 @@
 
     env->ReleaseByteArrayElements(data, dataBytes, JNI_ABORT);
 
-    return err;
+    return (jint)err;
 }
 
 static void
-setKeyPrefix_native(JNIEnv* env, jobject clazz, int w, jstring keyPrefixObj)
+setKeyPrefix_native(JNIEnv* env, jobject clazz, jlong w, jstring keyPrefixObj)
 {
     int err;
     BackupDataWriter* writer = (BackupDataWriter*)w;
@@ -97,11 +97,11 @@
 }
 
 static const JNINativeMethod g_methods[] = {
-    { "ctor", "(Ljava/io/FileDescriptor;)I", (void*)ctor_native },
-    { "dtor", "(I)V", (void*)dtor_native },
-    { "writeEntityHeader_native", "(ILjava/lang/String;I)I", (void*)writeEntityHeader_native },
-    { "writeEntityData_native", "(I[BI)I", (void*)writeEntityData_native },
-    { "setKeyPrefix_native", "(ILjava/lang/String;)V", (void*)setKeyPrefix_native },
+    { "ctor", "(Ljava/io/FileDescriptor;)J", (void*)ctor_native },
+    { "dtor", "(J)V", (void*)dtor_native },
+    { "writeEntityHeader_native", "(JLjava/lang/String;I)I", (void*)writeEntityHeader_native },
+    { "writeEntityData_native", "(J[BI)I", (void*)writeEntityData_native },
+    { "setKeyPrefix_native", "(JLjava/lang/String;)V", (void*)setKeyPrefix_native },
 };
 
 int register_android_backup_BackupDataOutput(JNIEnv* env)
diff --git a/core/jni/android_backup_BackupHelperDispatcher.cpp b/core/jni/android_backup_BackupHelperDispatcher.cpp
index 3e36677..a8b7d44 100644
--- a/core/jni/android_backup_BackupHelperDispatcher.cpp
+++ b/core/jni/android_backup_BackupHelperDispatcher.cpp
@@ -40,7 +40,7 @@
 static jfieldID s_chunkSizeField = 0;
 static jfieldID s_keyPrefixField = 0;
 
-static int
+static jint
 readHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj)
 {
     chunk_header_v1 flattenedHeader;
@@ -52,7 +52,7 @@
 
     amt = read(fd, &flattenedHeader.headerSize, sizeof(flattenedHeader.headerSize));
     if (amt != sizeof(flattenedHeader.headerSize)) {
-        return -1;
+        return (jint) -1;
     }
 
     int remainingHeader = flattenedHeader.headerSize - sizeof(flattenedHeader.headerSize);
@@ -62,7 +62,7 @@
         if (remainingHeader > 0) {
             lseek(fd, remainingHeader, SEEK_CUR);
             // >0 means skip this chunk
-            return 1;
+            return (jint) 1;
         }
     }
 
@@ -70,7 +70,7 @@
             sizeof(chunk_header_v1)-sizeof(flattenedHeader.headerSize));
     if (amt <= 0) {
         ALOGW("Failed reading chunk header");
-        return -1;
+        return (jint) -1;
     }
     remainingHeader -= sizeof(chunk_header_v1)-sizeof(flattenedHeader.headerSize);
 
@@ -80,7 +80,7 @@
         if (remainingHeader > 0) {
             lseek(fd, remainingHeader, SEEK_CUR);
             // >0 means skip this chunk
-            return 1;
+            return (jint) 1;
         }
     }
 
@@ -96,13 +96,13 @@
             remainingHeader < flattenedHeader.nameLength) {
         ALOGW("Malformed V1 header remainingHeader=%d dataSize=%d nameLength=%d", remainingHeader,
                 flattenedHeader.dataSize, flattenedHeader.nameLength);
-        return -1;
+        return (jint) -1;
     }
 
     buf = keyPrefix.lockBuffer(flattenedHeader.nameLength);
     if (buf == NULL) {
         ALOGW("unable to allocate %d bytes", flattenedHeader.nameLength);
-        return -1;
+        return (jint) -1;
     }
 
     amt = read(fd, buf, flattenedHeader.nameLength);
@@ -119,17 +119,17 @@
     env->SetIntField(headerObj, s_chunkSizeField, flattenedHeader.dataSize);
     env->SetObjectField(headerObj, s_keyPrefixField, env->NewStringUTF(keyPrefix.string()));
 
-    return 0;
+    return (jint) 0;
 }
 
-static int
+static jint
 skipChunk_native(JNIEnv* env, jobject clazz, jobject fdObj, jint bytesToSkip)
 {
     int fd = jniGetFDFromFileDescriptor(env, fdObj);
 
     lseek(fd, bytesToSkip, SEEK_CUR);
 
-    return 0;
+    return (jint) 0;
 }
 
 static int
@@ -139,7 +139,7 @@
     return len == 0 ? len : 4 - len;
 }
 
-static int
+static jint
 allocateHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj)
 {
     int pos;
@@ -161,10 +161,10 @@
 
     lseek(fd, headerSize, SEEK_CUR);
 
-    return pos;
+    return (jint) pos;
 }
 
-static int
+static jint
 writeHeader_native(JNIEnv* env, jobject clazz, jobject headerObj, jobject fdObj, jint pos)
 {
     int err;
@@ -188,26 +188,26 @@
     lseek(fd, pos, SEEK_SET);
     err = write(fd, &header, sizeof(chunk_header_v1));
     if (err != sizeof(chunk_header_v1)) {
-        return errno;
+        return (jint) errno;
     }
 
     buf = env->GetStringUTFChars(nameObj, NULL);
     err = write(fd, buf, header.nameLength);
     env->ReleaseStringUTFChars(nameObj, buf);
     if (err != header.nameLength) {
-        return errno;
+        return (jint) errno;
     }
 
     if (namePadding != 0) {
         int zero = 0;
         err = write(fd, &zero, namePadding);
         if (err != namePadding) {
-            return errno;
+            return (jint) errno;
         }
     }
 
     lseek(fd, prevPos, SEEK_SET);
-    return 0;
+    return (jint) 0;
 }
 
 static const JNINativeMethod g_methods[] = {
diff --git a/core/jni/android_backup_FileBackupHelperBase.cpp b/core/jni/android_backup_FileBackupHelperBase.cpp
index bb3a751..66e3e9d 100644
--- a/core/jni/android_backup_FileBackupHelperBase.cpp
+++ b/core/jni/android_backup_FileBackupHelperBase.cpp
@@ -25,20 +25,20 @@
 namespace android
 {
 
-static int
+static jlong
 ctor(JNIEnv* env, jobject clazz)
 {
-    return (int)new RestoreHelperBase();
+    return (jlong)new RestoreHelperBase();
 }
 
 static void
-dtor(JNIEnv* env, jobject clazz, jint ptr)
+dtor(JNIEnv* env, jobject clazz, jlong ptr)
 {
     delete (RestoreHelperBase*)ptr;
 }
 
-static int
-performBackup_native(JNIEnv* env, jobject clazz, jobject oldState, int data,
+static jint
+performBackup_native(JNIEnv* env, jobject clazz, jobject oldState, jlong data,
         jobject newState, jobjectArray files, jobjectArray keys)
 {
     int err;
@@ -72,12 +72,12 @@
     }
     free(keysUTF);
 
-    return err;
+    return (jint) err;
 }
 
 
-static int
-writeFile_native(JNIEnv* env, jobject clazz, jint ptr, jstring filenameObj, int backupReaderPtr)
+static jint
+writeFile_native(JNIEnv* env, jobject clazz, jlong ptr, jstring filenameObj, jlong backupReaderPtr)
 {
     int err;
     RestoreHelperBase* restore = (RestoreHelperBase*)ptr;
@@ -90,11 +90,11 @@
 
     env->ReleaseStringUTFChars(filenameObj, filename);
 
-    return err;
+    return (jint) err;
 }
 
-static int
-writeSnapshot_native(JNIEnv* env, jobject clazz, jint ptr, jobject fileDescriptor)
+static jint
+writeSnapshot_native(JNIEnv* env, jobject clazz, jlong ptr, jobject fileDescriptor)
 {
     int err;
 
@@ -103,17 +103,17 @@
 
     err = restore->WriteSnapshot(fd);
 
-    return err;
+    return (jint) err;
 }
 
 static const JNINativeMethod g_methods[] = {
-    { "ctor", "()I", (void*)ctor },
-    { "dtor", "(I)V", (void*)dtor },
+    { "ctor", "()J", (void*)ctor },
+    { "dtor", "(J)V", (void*)dtor },
     { "performBackup_native",
-       "(Ljava/io/FileDescriptor;ILjava/io/FileDescriptor;[Ljava/lang/String;[Ljava/lang/String;)I",
+       "(Ljava/io/FileDescriptor;JLjava/io/FileDescriptor;[Ljava/lang/String;[Ljava/lang/String;)I",
        (void*)performBackup_native },
-    { "writeFile_native", "(ILjava/lang/String;I)I", (void*)writeFile_native },
-    { "writeSnapshot_native", "(ILjava/io/FileDescriptor;)I", (void*)writeSnapshot_native },
+    { "writeFile_native", "(JLjava/lang/String;J)I", (void*)writeFile_native },
+    { "writeSnapshot_native", "(JLjava/io/FileDescriptor;)I", (void*)writeSnapshot_native },
 };
 
 int register_android_backup_FileBackupHelperBase(JNIEnv* env)