Пример #1
0
Int32 FileBackupHelperBase::performBackup_native(
	/* [in] */ IFileDescriptor* oldState,
    /* [in] */ android::BackupDataWriter* dataStream,
    /* [in] */ IFileDescriptor* newState,
    /* [in] */ ArrayOf<String>* files,
    /* [in] */ ArrayOf<String>* keys)
{
    Int32 err = 0;

    // all parameters have already been checked against NULL
    Int32 oldStateFD = -1;
    if (oldState != NULL) {
    	oldState->GetDescriptor(&oldStateFD);
    }

    assert(newState != NULL);
    Int32 newStateFD = 0;
    newState->GetDescriptor(&newStateFD);

    assert(files != NULL);
    const Int32 fileCount = files->GetLength();
    char const** filesUTF = (char const**)malloc(sizeof(char*)*fileCount);
    for (Int32 i=0; i<fileCount; i++) {
        filesUTF[i] = (*files)[i];
    }

    assert(keys != NULL);
    const Int32 keyCount = keys->GetLength();
    char const** keysUTF = (char const**)malloc(sizeof(char*)*keyCount);
    for (Int32 i=0; i<keyCount; i++) {
        keysUTF[i] = (*keys)[i];;
    }

    err = back_up_files(oldStateFD, dataStream, newStateFD, filesUTF, keysUTF, fileCount);

    free(filesUTF);
    free(keysUTF);

    return err;
}
static int
performBackup_native(JNIEnv* env, jobject clazz, jobject oldState, int data,
        jobject newState, jobjectArray files, jobjectArray keys)
{
    int err;

    // all parameters have already been checked against null
    int oldStateFD = oldState != NULL ? env->GetIntField(oldState, s_descriptorField) : -1;
    int newStateFD = env->GetIntField(newState, s_descriptorField);
    BackupDataWriter* dataStream = (BackupDataWriter*)data;

    const int fileCount = env->GetArrayLength(files);
    char const** filesUTF = (char const**)malloc(sizeof(char*)*fileCount);
    for (int i=0; i<fileCount; i++) {
        filesUTF[i] = env->GetStringUTFChars((jstring)env->GetObjectArrayElement(files, i), NULL);
    }

    const int keyCount = env->GetArrayLength(keys);
    char const** keysUTF = (char const**)malloc(sizeof(char*)*keyCount);
    for (int i=0; i<keyCount; i++) {
        keysUTF[i] = env->GetStringUTFChars((jstring)env->GetObjectArrayElement(keys, i), NULL);
    }

    err = back_up_files(oldStateFD, dataStream, newStateFD, filesUTF, keysUTF, fileCount);

    for (int i=0; i<fileCount; i++) {
        env->ReleaseStringUTFChars((jstring)env->GetObjectArrayElement(files, i), filesUTF[i]);
    }
    free(filesUTF);

    for (int i=0; i<keyCount; i++) {
        env->ReleaseStringUTFChars((jstring)env->GetObjectArrayElement(keys, i), keysUTF[i]);
    }
    free(keysUTF);

    return err;
}