/** * Convert a GSList to an array of filenames (without the parent folder) */ static jobjectArray toFilenamesArray(JNIEnv *env, GSList* list) { jstring str; jclass stringCls; GSList *iterator; jobjectArray array; int i; char* entry; if (NULL == list) { return NULL; } stringCls = (*env)->FindClass(env, "java/lang/String"); if (stringCls == NULL) { JNU_ThrowInternalError(env, "Could not get java.lang.String class"); return NULL; } array = (*env)->NewObjectArray(env, fp_gtk_g_slist_length(list), stringCls, NULL); if (array == NULL) { JNU_ThrowInternalError(env, "Could not instantiate array files array"); return NULL; } i = 0; for (iterator = list; iterator; iterator = iterator->next) { entry = (char*) iterator->data; entry = strrchr(entry, '/') + 1; str = (*env)->NewStringUTF(env, entry); (*env)->SetObjectArrayElement(env, array, i, str); i++; } return array; }
/** * Convert a GSList to an array of filenames */ static jobjectArray toFilenamesArray(JNIEnv *env, GSList* list, jstring* jcurrent_folder) { jstring str; jclass stringCls; GSList *iterator; jobjectArray array; int i; gchar* entry; gchar * baseDir; gboolean isFromSameDir; if (list == NULL) { return NULL; } stringCls = (*env)->FindClass(env, "java/lang/String"); if (stringCls == NULL) { (*env)->ExceptionClear(env); JNU_ThrowInternalError(env, "Could not get java.lang.String class"); return NULL; } array = (*env)->NewObjectArray(env, fp_gtk_g_slist_length(list), stringCls, NULL); if (array == NULL) { (*env)->ExceptionClear(env); JNU_ThrowInternalError(env, "Could not instantiate array files array"); return NULL; } isFromSameDir = isFromSameDirectory(list, &baseDir); *jcurrent_folder = (*env)->NewStringUTF(env, baseDir); if (*jcurrent_folder == NULL) { free(baseDir); return NULL; } for (iterator = list, i=0; iterator; iterator = iterator->next, i++) { entry = (gchar*) iterator->data; if (isFromSameDir) { entry = strrchr(entry, '/') + 1; } else if (entry[0] == '/') { entry++; } str = (*env)->NewStringUTF(env, entry); if((*env)->ExceptionCheck(env)){ break; } if (str) { (*env)->SetObjectArrayElement(env, array, i, str); if((*env)->ExceptionCheck(env)){ break; } } } free(baseDir); return array; }