summaryrefslogtreecommitdiffstats
path: root/java/src/jni/h5plImp.c
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/jni/h5plImp.c')
-rw-r--r--java/src/jni/h5plImp.c177
1 files changed, 105 insertions, 72 deletions
diff --git a/java/src/jni/h5plImp.c b/java/src/jni/h5plImp.c
index d551120..4e096f1 100644
--- a/java/src/jni/h5plImp.c
+++ b/java/src/jni/h5plImp.c
@@ -26,7 +26,10 @@ extern "C" {
#include "h5jni.h"
#include "h5plImp.h"
-extern JavaVM *jvm;
+/*
+ * Pointer to the JNI's Virtual Machine; used for callback functions.
+ */
+/* extern JavaVM *jvm; */
/*
* Class: hdf_hdf5lib_H5
@@ -37,9 +40,13 @@ JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLset_1loading_1state
(JNIEnv *env, jclass clss, jint plugin_flags)
{
- if (H5PLset_loading_state((unsigned int)plugin_flags) < 0) {
- h5libraryError(env);
- }
+ UNUSED(clss);
+
+ if (H5PLset_loading_state((unsigned int)plugin_flags) < 0)
+ H5_LIBRARY_ERROR(ENVONLY);
+
+done:
+ return;
} /* end Java_hdf_hdf5lib_H5_H5PLset_1loading_1state */
/*
@@ -52,9 +59,13 @@ Java_hdf_hdf5lib_H5_H5PLget_1loading_1state
(JNIEnv *env, jclass clss)
{
unsigned int plugin_type = 0;
- if (H5PLget_loading_state(&plugin_type) < 0) {
- h5libraryError(env);
- }
+
+ UNUSED(clss);
+
+ if (H5PLget_loading_state(&plugin_type) < 0)
+ H5_LIBRARY_ERROR(ENVONLY);
+
+done:
return (jint)plugin_type;
} /* end Java_hdf_hdf5lib_H5_H5PLget_1loading_1state */
@@ -67,18 +78,19 @@ JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLappend
(JNIEnv *env, jclass clss, jobjectArray plugin_path)
{
- const char *aName;
- herr_t retVal = -1;
+ const char *newPath = NULL;
+ herr_t retVal = FAIL;
- PIN_JAVA_STRING(plugin_path, aName);
- if (aName != NULL) {
- retVal = H5PLappend(aName);
+ UNUSED(clss);
- UNPIN_JAVA_STRING(plugin_path, aName);
+ PIN_JAVA_STRING(ENVONLY, plugin_path, newPath, NULL, "H5PLappend: new path not pinned");
- if (retVal < 0)
- h5libraryError(env);
- }
+ if ((retVal = H5PLappend(newPath)) < 0)
+ H5_LIBRARY_ERROR(ENVONLY);
+
+done:
+ if (newPath)
+ UNPIN_JAVA_STRING(ENVONLY, plugin_path, newPath);
} /* end Java_hdf_hdf5lib_H5_H5PLappend */
/*
* Class: hdf_hdf5lib_H5
@@ -89,18 +101,19 @@ JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLprepend
(JNIEnv *env, jclass clss, jobjectArray plugin_path)
{
- const char *aName;
- herr_t retVal = -1;
+ const char *newPath = NULL;
+ herr_t retVal = FAIL;
+
+ UNUSED(clss);
- PIN_JAVA_STRING(plugin_path, aName);
- if (aName != NULL) {
- retVal = H5PLprepend(aName);
+ PIN_JAVA_STRING(ENVONLY, plugin_path, newPath, NULL, "H5PLprepend: new path not pinned");
- UNPIN_JAVA_STRING(plugin_path, aName);
+ if ((retVal = H5PLprepend(newPath)) < 0)
+ H5_LIBRARY_ERROR(ENVONLY);
- if (retVal < 0)
- h5libraryError(env);
- }
+done:
+ if (newPath)
+ UNPIN_JAVA_STRING(ENVONLY, plugin_path, newPath);
} /* end Java_hdf_hdf5lib_H5_H5PLprepend */
/*
@@ -112,18 +125,22 @@ JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLreplace
(JNIEnv *env, jclass clss, jobjectArray plugin_path, jint index)
{
- const char *aName;
- herr_t retVal = -1;
+ const char *newPath = NULL;
+ herr_t retVal = FAIL;
+
+ UNUSED(clss);
- PIN_JAVA_STRING(plugin_path, aName);
- if (aName != NULL) {
- retVal = H5PLreplace(aName, index);
+ if (index < 0)
+ H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5PLreplace: index < 0");
- UNPIN_JAVA_STRING(plugin_path, aName);
+ PIN_JAVA_STRING(ENVONLY, plugin_path, newPath, NULL, "H5PLreplace: new path not pinned");
- if (retVal < 0)
- h5libraryError(env);
- }
+ if ((retVal = H5PLreplace(newPath, (unsigned) index)) < 0)
+ H5_LIBRARY_ERROR(ENVONLY);
+
+done:
+ if (newPath)
+ UNPIN_JAVA_STRING(ENVONLY, plugin_path, newPath);
} /* end Java_hdf_hdf5lib_H5_H5PLreplace */
/*
@@ -135,18 +152,22 @@ JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLinsert
(JNIEnv *env, jclass clss, jobjectArray plugin_path, jint index)
{
- const char *aName;
- herr_t retVal = -1;
+ const char *newPath = NULL;
+ herr_t retVal = FAIL;
+
+ UNUSED(clss);
+
+ if (index < 0)
+ H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5PLinsert: index < 0");
- PIN_JAVA_STRING(plugin_path, aName);
- if (aName != NULL) {
- retVal = H5PLinsert(aName, index);
+ PIN_JAVA_STRING(ENVONLY, plugin_path, newPath, NULL, "H5PLinsert: new path not pinned");
- UNPIN_JAVA_STRING(plugin_path, aName);
+ if ((retVal = H5PLinsert(newPath, (unsigned) index)) < 0)
+ H5_LIBRARY_ERROR(ENVONLY);
- if (retVal < 0)
- h5libraryError(env);
- }
+done:
+ if (newPath)
+ UNPIN_JAVA_STRING(ENVONLY, plugin_path, newPath);
} /* end Java_hdf_hdf5lib_H5_H5PLinsert */
/*
@@ -158,8 +179,16 @@ JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLremove
(JNIEnv *env, jclass clss, jint index)
{
- if (H5PLremove(index) < 0)
- h5libraryError(env);
+ UNUSED(clss);
+
+ if (index < 0)
+ H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5PLremove: index < 0");
+
+ if (H5PLremove((unsigned) index) < 0)
+ H5_LIBRARY_ERROR(ENVONLY);
+
+done:
+ return;
} /* end Java_hdf_hdf5lib_H5_H5PLremove */
/*
@@ -171,33 +200,33 @@ JNIEXPORT jstring JNICALL
Java_hdf_hdf5lib_H5_H5PLget
(JNIEnv *env, jclass clss, jint index)
{
- char *aName;
jstring str = NULL;
ssize_t buf_size;
+ char *aName = NULL;
+
+ UNUSED(clss);
+
+ if (index < 0)
+ H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5PLget: index < 0");
+
+ /* Get the length of the name */
+ if ((buf_size = H5PLget((unsigned) index, NULL, 0)) < 0)
+ H5_LIBRARY_ERROR(ENVONLY);
+
+ if (NULL == (aName = (char *) HDmalloc(sizeof(char) * (size_t)buf_size + 1)))
+ H5_JNI_FATAL_ERROR(ENVONLY, "H5PLget: failed to allocate plugin name buffer");
+
+ if ((H5PLget((unsigned) index, aName, (size_t)buf_size + 1)) < 0)
+ H5_LIBRARY_ERROR(ENVONLY);
+ aName[buf_size] = '\0';
+
+ if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, aName)))
+ CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
+
+done:
+ if (aName)
+ HDfree(aName);
- /* get the length of the name */
- buf_size = H5PLget(index, NULL, 0);
-
- if (buf_size <= 0) {
- h5badArgument(env, "H5PLget: buf_size <= 0");
- } /* end if */
- else {
- buf_size++; /* add extra space for the null terminator */
- aName = (char*)HDmalloc(sizeof(char) * (size_t)buf_size);
- if (aName == NULL) {
- h5outOfMemory(env, "H5PLget: malloc failed");
- } /* end if */
- else {
- buf_size = H5PLget(index, aName, (size_t)buf_size);
- if (buf_size < 0) {
- h5libraryError(env);
- } /* end if */
- else {
- str = ENVPTR->NewStringUTF(ENVPAR aName);
- }
- HDfree(aName);
- }
- }
return str;
} /* end Java_hdf_hdf5lib_H5_H5PLget */
@@ -211,9 +240,13 @@ Java_hdf_hdf5lib_H5_H5PLsize
(JNIEnv *env, jclass clss)
{
unsigned int listsize = 0;
- if (H5PLsize(&listsize) < 0) {
- h5libraryError(env);
- }
+
+ UNUSED(clss);
+
+ if (H5PLsize(&listsize) < 0)
+ H5_LIBRARY_ERROR(ENVONLY);
+
+done:
return (jint)listsize;
} /* end Java_hdf_hdf5lib_H5_H5PLsize */