From 737bb567355940ec0938ab0bacc0eb18ad4201c7 Mon Sep 17 00:00:00 2001 From: Allen Byrne Date: Mon, 22 Aug 2016 12:05:00 -0500 Subject: [svn-r30313] HDFFV-9972: unsatisfied link error under debug on Windows. Added windows name suffix for debug to CMake cmd_arg for examples and test. Fix issues discovered under debug testing; Create a version of H5Iget_name that correctly returns the name. Rework PIN_JAVA_STRING macro and usage to eliminate possible memory leaks by using if-else instead of mid-routine return. Update example to use new H5Iget_name API. Tested: windows under debug --- java/examples/datasets/CMakeLists.txt | 6 +- java/examples/datatypes/CMakeLists.txt | 6 +- .../examples/datatypes/H5Ex_T_ObjectReference.java | 8 +- .../datatypes/H5Ex_T_ObjectReferenceAttribute.java | 8 +- java/examples/groups/CMakeLists.txt | 6 +- java/examples/intro/CMakeLists.txt | 6 +- java/src/hdf/hdf5lib/H5.java | 14 + java/src/jni/CMakeLists.txt | 3 + java/src/jni/h5aImp.c | 331 +++++---- java/src/jni/h5dImp.c | 191 ++--- java/src/jni/h5eImp.c | 43 +- java/src/jni/h5fImp.c | 69 +- java/src/jni/h5gImp.c | 126 ++-- java/src/jni/h5iImp.c | 39 + java/src/jni/h5iImp.h | 9 + java/src/jni/h5jni.h | 162 ++--- java/src/jni/h5lImp.c | 445 ++++++------ java/src/jni/h5lImp.h | 2 +- java/src/jni/h5oImp.c | 674 +++++++++-------- java/src/jni/h5pImp.c | 798 ++++++++++----------- java/src/jni/h5rImp.c | 56 +- java/src/jni/h5tImp.c | 189 ++--- java/src/jni/h5util.c | 61 +- java/test/CMakeLists.txt | 6 +- 24 files changed, 1626 insertions(+), 1632 deletions(-) diff --git a/java/examples/datasets/CMakeLists.txt b/java/examples/datasets/CMakeLists.txt index 5f5f37c..0ba2331 100644 --- a/java/examples/datasets/CMakeLists.txt +++ b/java/examples/datasets/CMakeLists.txt @@ -63,7 +63,11 @@ endforeach (HDFJAVA_JAR) MACRO (ADD_H5_TEST resultfile resultcode) if (CMAKE_BUILD_TYPE MATCHES Debug) - set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;") + if (WIN32) + set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_D;") + else() + set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;") + endif() endif(CMAKE_BUILD_TYPE MATCHES Debug) add_test ( NAME JAVA_datasets-${resultfile} diff --git a/java/examples/datatypes/CMakeLists.txt b/java/examples/datatypes/CMakeLists.txt index 1e305be..5ab513c 100644 --- a/java/examples/datatypes/CMakeLists.txt +++ b/java/examples/datatypes/CMakeLists.txt @@ -63,7 +63,11 @@ endforeach (HDFJAVA_JAR) MACRO (ADD_H5_TEST resultfile resultcode) if (CMAKE_BUILD_TYPE MATCHES Debug) - set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;") + if (WIN32) + set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_D;") + else() + set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;") + endif() endif(CMAKE_BUILD_TYPE MATCHES Debug) add_test ( NAME JAVA_datatypes-${resultfile} diff --git a/java/examples/datatypes/H5Ex_T_ObjectReference.java b/java/examples/datatypes/H5Ex_T_ObjectReference.java index 3cad6c9..8a09f5b 100644 --- a/java/examples/datatypes/H5Ex_T_ObjectReference.java +++ b/java/examples/datatypes/H5Ex_T_ObjectReference.java @@ -256,11 +256,10 @@ public class H5Ex_T_ObjectReference { object_id = H5.H5Rdereference(dataset_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_OBJECT, dset_data[indx]); object_type = H5.H5Rget_obj_type(dataset_id, HDF5Constants.H5R_OBJECT, dset_data[indx]); } - String[] obj_name = new String[1]; - long name_size = 1; + String obj_name = null; if (object_type >= 0) { // Get the length of the name and retrieve the name. - name_size = 1 + H5.H5Iget_name(object_id, obj_name, name_size); + obj_name = H5.H5Iget_name(object_id); } if ((object_id >= 0) && (object_type >= -1)) { switch (H5G_obj.get(object_type)) { @@ -299,8 +298,7 @@ public class H5Ex_T_ObjectReference { } } // Print the name. - if (name_size > 1) - System.out.println(": " + obj_name[0]); + System.out.println(": " + obj_name); } catch (Exception e) { e.printStackTrace(); diff --git a/java/examples/datatypes/H5Ex_T_ObjectReferenceAttribute.java b/java/examples/datatypes/H5Ex_T_ObjectReferenceAttribute.java index e354029..e366681 100644 --- a/java/examples/datatypes/H5Ex_T_ObjectReferenceAttribute.java +++ b/java/examples/datatypes/H5Ex_T_ObjectReferenceAttribute.java @@ -289,11 +289,10 @@ public class H5Ex_T_ObjectReferenceAttribute { object_id = H5.H5Rdereference(dataset_id, HDF5Constants.H5P_DEFAULT, HDF5Constants.H5R_OBJECT, dset_data[indx]); object_type = H5.H5Rget_obj_type(dataset_id, HDF5Constants.H5R_OBJECT, dset_data[indx]); } - String[] obj_name = new String[1]; - long name_size = 1; + String obj_name = null; if (object_type >= 0) { // Get the length of the name and retrieve the name. - name_size = 1 + H5.H5Iget_name(object_id, obj_name, name_size); + obj_name = H5.H5Iget_name(object_id); } if ((object_id >= 0) && (object_type >= -1)) { switch (H5G_obj.get(object_type)) { @@ -332,8 +331,7 @@ public class H5Ex_T_ObjectReferenceAttribute { } } // Print the name. - if (name_size > 1) - System.out.println(": " + obj_name[0]); + System.out.println(": " + obj_name); } catch (Exception e) { e.printStackTrace(); diff --git a/java/examples/groups/CMakeLists.txt b/java/examples/groups/CMakeLists.txt index 410168a..c23b7d3 100644 --- a/java/examples/groups/CMakeLists.txt +++ b/java/examples/groups/CMakeLists.txt @@ -62,7 +62,11 @@ add_custom_target(H5Ex_G_Visit_files ALL COMMENT "Copying files needed by H5Ex_G MACRO (ADD_H5_TEST resultfile resultcode) if (CMAKE_BUILD_TYPE MATCHES Debug) - set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;") + if (WIN32) + set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_D;") + else() + set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;") + endif() endif(CMAKE_BUILD_TYPE MATCHES Debug) add_test ( NAME JAVA_groups-${resultfile} diff --git a/java/examples/intro/CMakeLists.txt b/java/examples/intro/CMakeLists.txt index 8679943..6b77382 100644 --- a/java/examples/intro/CMakeLists.txt +++ b/java/examples/intro/CMakeLists.txt @@ -64,7 +64,11 @@ endforeach (example ${HDF_JAVA_OBJECT_EXAMPLES}) MACRO (ADD_H5_TEST resultfile resultcode) if (CMAKE_BUILD_TYPE MATCHES Debug) - set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;") + if (WIN32) + set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_D;") + else() + set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;") + endif() endif(CMAKE_BUILD_TYPE MATCHES Debug) add_test ( NAME JAVA_intro-${resultfile} diff --git a/java/src/hdf/hdf5lib/H5.java b/java/src/hdf/hdf5lib/H5.java index e4144c9..e5defe3 100644 --- a/java/src/hdf/hdf5lib/H5.java +++ b/java/src/hdf/hdf5lib/H5.java @@ -3351,8 +3351,22 @@ public class H5 implements java.io.Serializable { public synchronized static native long H5Iget_file_id(long obj_id) throws HDF5LibraryException; + @Deprecated public synchronized static native long H5Iget_name(long obj_id, String[] name, long size) throws HDF5LibraryException, NullPointerException; + /** + * H5Iget_name_str retrieves the name of an object specified by the identifier, obj_id. + * + * @param obj_id + * IN: Identifier of the object. + * + * @return String for Attribute name. + * + * @exception HDF5LibraryException + * - Error from the HDF-5 Library. + **/ + public synchronized static native String H5Iget_name_str(long obj_id) + throws HDF5LibraryException; public synchronized static native int H5Iget_ref(long obj_id) throws HDF5LibraryException, NullPointerException; diff --git a/java/src/jni/CMakeLists.txt b/java/src/jni/CMakeLists.txt index ef80072..2e4a821 100644 --- a/java/src/jni/CMakeLists.txt +++ b/java/src/jni/CMakeLists.txt @@ -57,6 +57,9 @@ SET_GLOBAL_VARIABLE (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF H5_SET_LIB_OPTIONS (${HDF5_JAVA_JNI_LIB_TARGET} ${HDF5_JAVA_JNI_LIB_NAME} SHARED ${HDF5_JAVA_PACKAGE_SOVERSION}) if (WIN32) get_filename_component (HDF5_JAVA_JNI_DLL_NAME ${HDF5_JAVA_JNI_LIB_TARGET} NAME_WE) + if (CMAKE_BUILD_TYPE MATCHES Debug) + set (HDF5_JAVA_JNI_DLL_NAME "${HDF5_JAVA_JNI_DLL_NAME}_D") + endif () # message (STATUS "HDF5_JAVA_JNI_DLL_NAME: ${HDF5_JAVA_JNI_DLL_NAME}") if (BUILD_TESTING) add_custom_target (HDF5_JAVA_JNI-Test-Copy ALL diff --git a/java/src/jni/h5aImp.c b/java/src/jni/h5aImp.c index 5af60fb..5af8aae 100644 --- a/java/src/jni/h5aImp.c +++ b/java/src/jni/h5aImp.c @@ -67,14 +67,15 @@ Java_hdf_hdf5lib_H5__1H5Acreate hid_t attr_id = -1; const char *aName; - PIN_JAVA_STRING(name, aName, -1); + PIN_JAVA_STRING(name, aName); + if (aName != NULL) { + attr_id = H5Acreate2((hid_t)loc_id, aName, (hid_t)type_id, (hid_t)space_id, (hid_t)create_plist, (hid_t)H5P_DEFAULT); - attr_id = H5Acreate2((hid_t)loc_id, aName, (hid_t)type_id, (hid_t)space_id, (hid_t)create_plist, (hid_t)H5P_DEFAULT); + UNPIN_JAVA_STRING(name, aName); - UNPIN_JAVA_STRING(name, aName); - - if (attr_id < 0) - h5libraryError(env); + if (attr_id < 0) + h5libraryError(env); + } return (jlong)attr_id; } /* end Java_hdf_hdf5lib_H5__1H5Acreate */ @@ -91,14 +92,15 @@ Java_hdf_hdf5lib_H5__1H5Aopen_1name hid_t attr_id = -1; const char *aName; - PIN_JAVA_STRING(name, aName, -1); + PIN_JAVA_STRING(name, aName); + if (aName != NULL) { + attr_id = H5Aopen_name((hid_t)loc_id, aName); - attr_id = H5Aopen_name((hid_t)loc_id, aName); + UNPIN_JAVA_STRING(name,aName); - UNPIN_JAVA_STRING(name,aName); - - if (attr_id < 0) - h5libraryError(env); + if (attr_id < 0) + h5libraryError(env); + } return (jlong)attr_id; } /* end Java_hdf_hdf5lib_H5__1H5Aopen_1name */ @@ -242,8 +244,7 @@ Java_hdf_hdf5lib_H5_H5Aget_1name ssize_t buf_size; /* get the length of the name */ - buf_size = H5Aget_name((hid_t)attr_id, NULL, 0); - + buf_size = H5Aget_name((hid_t)attr_id, 0, NULL); if (buf_size <= 0) { h5badArgument(env, "H5Aget_name: buf_size <= 0"); } /* end if */ @@ -299,14 +300,15 @@ Java_hdf_hdf5lib_H5_H5Adelete herr_t status = -1; const char *aName; - PIN_JAVA_STRING(name, aName, -1); - - status = H5Adelete((hid_t)loc_id, aName); + PIN_JAVA_STRING(name, aName); + if (aName != NULL) { + status = H5Adelete((hid_t)loc_id, aName); - UNPIN_JAVA_STRING(name, aName); + UNPIN_JAVA_STRING(name, aName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Adelete */ @@ -344,15 +346,16 @@ Java_hdf_hdf5lib_H5__1H5Acreate2 hid_t status = -1; const char *aName; - PIN_JAVA_STRING(name, aName, -1); + PIN_JAVA_STRING(name, aName); + if (aName != NULL) { + status = H5Acreate2((hid_t)loc_id, aName, (hid_t)type_id, + (hid_t)space_id, (hid_t)create_plist, (hid_t)access_plist ); - status = H5Acreate2((hid_t)loc_id, aName, (hid_t)type_id, - (hid_t)space_id, (hid_t)create_plist, (hid_t)access_plist ); + UNPIN_JAVA_STRING(name, aName); - UNPIN_JAVA_STRING(name, aName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jlong)status; } /* end Java_hdf_hdf5lib_H5__1H5Acreate2 */ @@ -371,14 +374,15 @@ Java_hdf_hdf5lib_H5__1H5Aopen hid_t retVal = -1; const char *aName; - PIN_JAVA_STRING(name, aName, -1); + PIN_JAVA_STRING(name, aName); + if (aName != NULL) { + retVal = H5Aopen((hid_t)obj_id, aName, (hid_t)access_plist); - retVal = H5Aopen((hid_t)obj_id, aName, (hid_t)access_plist); + UNPIN_JAVA_STRING(name, aName); - UNPIN_JAVA_STRING(name, aName); - - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jlong)retVal; } /* end Java_hdf_hdf5lib_H5__1H5Aopen */ @@ -395,15 +399,16 @@ Java_hdf_hdf5lib_H5__1H5Aopen_1by_1idx hid_t retVal = -1; const char *aName; - PIN_JAVA_STRING(name, aName, -1); - - retVal = H5Aopen_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, - (H5_iter_order_t)order, (hsize_t)n, (hid_t)aapl_id, (hid_t)lapl_id); + PIN_JAVA_STRING(name, aName); + if (aName != NULL) { + retVal = H5Aopen_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, + (H5_iter_order_t)order, (hsize_t)n, (hid_t)aapl_id, (hid_t)lapl_id); - UNPIN_JAVA_STRING(name, aName); + UNPIN_JAVA_STRING(name, aName); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jlong)retVal; } /* end Java_hdf_hdf5lib_H5__1H5Aopen_1by_1idx */ @@ -421,15 +426,16 @@ Java_hdf_hdf5lib_H5__1H5Acreate_1by_1name const char *aName; const char *attrName; - PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName, -1); - - retVal = H5Acreate_by_name((hid_t)loc_id, aName, attrName, (hid_t)type_id, - (hid_t)space_id, (hid_t)acpl_id, (hid_t)aapl_id, (hid_t)lapl_id); + PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); + if (aName != NULL && attrName != NULL) { + retVal = H5Acreate_by_name((hid_t)loc_id, aName, attrName, (hid_t)type_id, + (hid_t)space_id, (hid_t)acpl_id, (hid_t)aapl_id, (hid_t)lapl_id); - UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); + UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jlong)retVal; } /* end Java_hdf_hdf5lib_H5__1H5Acreate_1by_1name */ @@ -443,20 +449,23 @@ JNIEXPORT jboolean JNICALL Java_hdf_hdf5lib_H5_H5Aexists_1by_1name (JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jstring attr_name, jlong lapl_id) { - htri_t retVal = -1; + htri_t bval = JNI_FALSE; const char *aName; const char *attrName; - PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName, JNI_FALSE); - - retVal = H5Aexists_by_name((hid_t)loc_id, aName, attrName, (hid_t)lapl_id); + PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); + if (aName != NULL && attrName != NULL) { + bval = H5Aexists_by_name((hid_t)loc_id, aName, attrName, (hid_t)lapl_id); - UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); + UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); - if (retVal < 0) - h5libraryError(env); + if (bval > 0) + bval = JNI_TRUE; + else if (bval < 0) + h5libraryError(env); + } - return (jboolean)retVal; + return (jboolean)bval; } /* end Java_hdf_hdf5lib_H5_H5Aexists_1by_1name */ /* @@ -472,14 +481,15 @@ Java_hdf_hdf5lib_H5_H5Arename const char *oName; const char *nName; - PIN_JAVA_STRING_TWO(old_attr_name, oName, new_attr_name, nName, -1); - - retVal = H5Arename((hid_t)loc_id, oName, nName); + PIN_JAVA_STRING_TWO(old_attr_name, oName, new_attr_name, nName); + if (oName != NULL && nName != NULL) { + retVal = H5Arename((hid_t)loc_id, oName, nName); - UNPIN_JAVA_STRING_TWO(old_attr_name, oName, new_attr_name, nName); + UNPIN_JAVA_STRING_TWO(old_attr_name, oName, new_attr_name, nName); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jint)retVal; } /* end Java_hdf_hdf5lib_H5_H5Arename */ @@ -499,14 +509,15 @@ Java_hdf_hdf5lib_H5_H5Arename_1by_1name const char *oName; const char *nName; - PIN_JAVA_STRING_THREE(obj_name, aName, old_attr_name, oName, new_attr_name, nName, -1); - - retVal = H5Arename_by_name((hid_t)loc_id, aName, oName, nName, (hid_t)lapl_id); + PIN_JAVA_STRING_THREE(obj_name, aName, old_attr_name, oName, new_attr_name, nName); + if (aName != NULL && oName != NULL && nName != NULL) { + retVal = H5Arename_by_name((hid_t)loc_id, aName, oName, nName, (hid_t)lapl_id); - UNPIN_JAVA_STRING_THREE(obj_name, aName, old_attr_name, oName, new_attr_name, nName); + UNPIN_JAVA_STRING_THREE(obj_name, aName, old_attr_name, oName, new_attr_name, nName); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jint)retVal; } /* end Java_hdf_hdf5lib_H5_H5Arename_1by_1name */ @@ -526,44 +537,45 @@ Java_hdf_hdf5lib_H5_H5Aget_1name_1by_1idx jstring str = NULL; const char *aName; - PIN_JAVA_STRING(obj_name, aName, NULL); + PIN_JAVA_STRING(obj_name, aName); + if (aName != NULL) { + /* get the length of the attribute name */ + status_size = H5Aget_name_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, + (H5_iter_order_t) order, (hsize_t) n, (char*)NULL, (size_t)0, (hid_t)lapl_id); - /* get the length of the attribute name */ - status_size = H5Aget_name_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, - (H5_iter_order_t) order, (hsize_t) n, (char*)NULL, (size_t)0, (hid_t)lapl_id); - - if(status_size < 0) { - UNPIN_JAVA_STRING(obj_name, aName); - h5libraryError(env); - } /* end if */ - else { - buf_size = (size_t)status_size + 1;/* add extra space for the null terminator */ - - aValue = (char*)HDmalloc(sizeof(char) * buf_size); - if (aValue == NULL) { + if(status_size < 0) { UNPIN_JAVA_STRING(obj_name, aName); - h5outOfMemory(env, "H5Aget_name_by_idx: malloc failed "); + h5libraryError(env); } /* end if */ else { - status_size = H5Aget_name_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, - (H5_iter_order_t) order, (hsize_t) n, (char*)aValue, (size_t)buf_size, (hid_t)lapl_id); - - UNPIN_JAVA_STRING(obj_name, aName); + buf_size = (size_t)status_size + 1;/* add extra space for the null terminator */ - if (status_size < 0) { - HDfree(aValue); - h5libraryError(env); + aValue = (char*)HDmalloc(sizeof(char) * buf_size); + if (aValue == NULL) { + UNPIN_JAVA_STRING(obj_name, aName); + h5outOfMemory(env, "H5Aget_name_by_idx: malloc failed "); } /* end if */ else { - str = ENVPTR->NewStringUTF(ENVPAR aValue); - HDfree(aValue); - if (str == NULL) { - /* exception -- fatal JNI error */ - h5JNIFatalError(env, "H5Aget_name_by_idx: return string not created"); + status_size = H5Aget_name_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, + (H5_iter_order_t) order, (hsize_t) n, (char*)aValue, (size_t)buf_size, (hid_t)lapl_id); + + UNPIN_JAVA_STRING(obj_name, aName); + + if (status_size < 0) { + HDfree(aValue); + h5libraryError(env); } /* end if */ + else { + str = ENVPTR->NewStringUTF(ENVPAR aValue); + HDfree(aValue); + if (str == NULL) { + /* exception -- fatal JNI error */ + h5JNIFatalError(env, "H5Aget_name_by_idx: return string not created"); + } /* end if */ + } /* end else */ } /* end else */ } /* end else */ - } /* end else */ + } return str; } /* end Java_hdf_hdf5lib_H5_H5Aget_1name_1by_1idx */ @@ -628,23 +640,24 @@ Java_hdf_hdf5lib_H5_H5Aget_1info_1by_1idx jobject ret_obj = NULL; const char *aName; - PIN_JAVA_STRING(obj_name, aName, NULL); + PIN_JAVA_STRING(obj_name, aName); + if (aName != NULL) { + status = H5Aget_info_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, + (H5_iter_order_t)order, (hsize_t)n, &ainfo, (hid_t)lapl_id); - status = H5Aget_info_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, - (H5_iter_order_t)order, (hsize_t)n, &ainfo, (hid_t)lapl_id); - - UNPIN_JAVA_STRING(obj_name, aName); + UNPIN_JAVA_STRING(obj_name, aName); - if (status < 0) { - h5libraryError(env); - } /* end if */ - else { - args[0].z = ainfo.corder_valid; - args[1].j = ainfo.corder; - args[2].i = ainfo.cset; - args[3].j = (jlong)ainfo.data_size; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5A_info_t", "(ZJIJ)V", args); - } /* end else */ + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + args[0].z = ainfo.corder_valid; + args[1].j = ainfo.corder; + args[2].i = ainfo.cset; + args[3].j = (jlong)ainfo.data_size; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5A_info_t", "(ZJIJ)V", args); + } /* end else */ + } return ret_obj; } /* end Java_hdf_hdf5lib_H5_H5Aget_1info_1by_1idx */ @@ -664,22 +677,23 @@ Java_hdf_hdf5lib_H5_H5Aget_1info_1by_1name jvalue args[4]; jobject ret_obj = NULL; - PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName, NULL); + PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); + if (aName != NULL && attrName != NULL) { + status = H5Aget_info_by_name((hid_t)loc_id, aName, attrName, &ainfo, (hid_t)lapl_id); - status = H5Aget_info_by_name((hid_t)loc_id, aName, attrName, &ainfo, (hid_t)lapl_id); + UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); - UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); - - if (status < 0) { - h5libraryError(env); - } /* end if */ - else { - args[0].z = ainfo.corder_valid; - args[1].j = ainfo.corder; - args[2].i = ainfo.cset; - args[3].j = (jlong)ainfo.data_size; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5A_info_t", "(ZJIJ)V", args); - } /* end else */ + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + args[0].z = ainfo.corder_valid; + args[1].j = ainfo.corder; + args[2].i = ainfo.cset; + args[3].j = (jlong)ainfo.data_size; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5A_info_t", "(ZJIJ)V", args); + } /* end else */ + } return ret_obj; } /* end Java_hdf_hdf5lib_H5_H5Aget_1info_1by_1name */ @@ -696,14 +710,15 @@ Java_hdf_hdf5lib_H5_H5Adelete_1by_1name const char *aName; const char *attrName; - PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName, -1); - - retVal = H5Adelete_by_name((hid_t)loc_id, aName, attrName, (hid_t)lapl_id); + PIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); + if (aName != NULL && attrName != NULL) { + retVal = H5Adelete_by_name((hid_t)loc_id, aName, attrName, (hid_t)lapl_id); - UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); + UNPIN_JAVA_STRING_TWO(obj_name, aName, attr_name, attrName); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jint)retVal; } /* end Java_hdf_hdf5lib_H5_H5Adelete_1by_1name */ @@ -720,16 +735,17 @@ Java_hdf_hdf5lib_H5_H5Aexists htri_t bval = JNI_FALSE; const char *aName; - PIN_JAVA_STRING(attr_name, aName, JNI_FALSE); + PIN_JAVA_STRING(attr_name, aName); + if (aName != NULL) { + bval = H5Aexists((hid_t)obj_id, aName); - bval = H5Aexists((hid_t)obj_id, aName); + UNPIN_JAVA_STRING(attr_name, aName); - UNPIN_JAVA_STRING(attr_name, aName); - - if (bval > 0) - bval = JNI_TRUE; - else if (bval < 0) - h5libraryError(env); + if (bval > 0) + bval = JNI_TRUE; + else if (bval < 0) + h5libraryError(env); + } return (jboolean)bval; } /* end Java_hdf_hdf5lib_H5_H5Aexists */ @@ -746,14 +762,15 @@ Java_hdf_hdf5lib_H5_H5Adelete_1by_1idx herr_t status = -1; const char *aName; - PIN_JAVA_STRING0(obj_name, aName); - - status = H5Adelete_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t)n, (hid_t)lapl_id); + PIN_JAVA_STRING(obj_name, aName); + if (aName != NULL) { + status = H5Adelete_by_idx((hid_t)loc_id, aName, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t)n, (hid_t)lapl_id); - UNPIN_JAVA_STRING(obj_name, aName); + UNPIN_JAVA_STRING(obj_name, aName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Adelete_1by_1idx */ /* @@ -770,14 +787,15 @@ Java_hdf_hdf5lib_H5__1H5Aopen_1by_1name const char *aName; const char *oName; - PIN_JAVA_STRING_TWO(obj_name, oName, attr_name, aName, -1); - - status = H5Aopen_by_name((hid_t)loc_id, oName, aName, (hid_t)aapl_id, (hid_t)lapl_id); + PIN_JAVA_STRING_TWO(obj_name, oName, attr_name, aName); + if (oName != NULL && aName != NULL) { + status = H5Aopen_by_name((hid_t)loc_id, oName, aName, (hid_t)aapl_id, (hid_t)lapl_id); - UNPIN_JAVA_STRING_TWO(obj_name, oName, attr_name, aName); + UNPIN_JAVA_STRING_TWO(obj_name, oName, attr_name, aName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jlong)status; } /* end Java_hdf_hdf5lib_H5__1H5Aopen_1by_1name */ @@ -892,14 +910,15 @@ Java_hdf_hdf5lib_H5_H5Aiterate_1by_1name h5nullArgument(env, "H5Literate_by_name: op_data or callback_op is NULL"); } /* end if */ else { - PIN_JAVA_STRING(name, lName, -1); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + status = H5Aiterate_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t*)&start_idx, (H5A_operator2_t)H5A_iterate_cb, (void*)op_data, (hid_t)access_id); - status = H5Aiterate_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t*)&start_idx, (H5A_operator2_t)H5A_iterate_cb, (void*)op_data, (hid_t)access_id); + UNPIN_JAVA_STRING(name, lName); - UNPIN_JAVA_STRING(name, lName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end else */ return (jint)status; diff --git a/java/src/jni/h5dImp.c b/java/src/jni/h5dImp.c index 2ef14df..ed1db41 100644 --- a/java/src/jni/h5dImp.c +++ b/java/src/jni/h5dImp.c @@ -161,14 +161,15 @@ Java_hdf_hdf5lib_H5__1H5Dcreate hid_t dset_id = -1; const char *fileName; - PIN_JAVA_STRING(name, fileName, -1); + PIN_JAVA_STRING(name, fileName); + if (fileName != NULL) { + dset_id = H5Dcreate2((hid_t)loc_id, fileName, (hid_t)type_id, (hid_t)space_id, H5P_DEFAULT, (hid_t)create_plist_id, H5P_DEFAULT); - dset_id = H5Dcreate2((hid_t)loc_id, fileName, (hid_t)type_id, (hid_t)space_id, H5P_DEFAULT, (hid_t)create_plist_id, H5P_DEFAULT); + UNPIN_JAVA_STRING(name, fileName); - UNPIN_JAVA_STRING(name, fileName); - - if (dset_id < 0) - h5libraryError(env); + if (dset_id < 0) + h5libraryError(env); + } return (jlong)dset_id; } /* end Java_hdf_hdf5lib_H5__1H5Dcreate */ @@ -185,13 +186,14 @@ Java_hdf_hdf5lib_H5__1H5Dopen hid_t dset_id = -1; const char *fileName; - PIN_JAVA_STRING(name, fileName, -1); + PIN_JAVA_STRING(name, fileName); + if (fileName != NULL) { + dset_id = H5Dopen2((hid_t)loc_id, fileName, H5P_DEFAULT); - dset_id = H5Dopen2((hid_t)loc_id, fileName, H5P_DEFAULT); - - UNPIN_JAVA_STRING(name, fileName); - if (dset_id < 0) - h5libraryError(env); + UNPIN_JAVA_STRING(name, fileName); + if (dset_id < 0) + h5libraryError(env); + } return (jlong)dset_id; } /* end Java_hdf_hdf5lib_H5__1H5Dopen */ @@ -285,7 +287,7 @@ Java_hdf_hdf5lib_H5_H5Dread (JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id, jlong file_space_id, jlong xfer_plist_id, jbyteArray buf, jboolean isCriticalPinning) { - herr_t status; + herr_t status = -1; jbyte *buffP; jboolean isCopy; htri_t data_class; @@ -341,7 +343,7 @@ Java_hdf_hdf5lib_H5_H5Dwrite (JNIEnv *env, jclass clss, jlong dataset_id, jlong mem_type_id, jlong mem_space_id, jlong file_space_id, jlong xfer_plist_id, jbyteArray buf, jboolean isCriticalPinning) { - herr_t status; + herr_t status = -1; jbyte *buffP; jboolean isCopy; htri_t data_class; @@ -1445,13 +1447,14 @@ Java_hdf_hdf5lib_H5__1H5Dcreate2 hid_t dset_id = -1; const char *fileName; - PIN_JAVA_STRING(name, fileName, -1); - - dset_id = H5Dcreate2((hid_t)loc_id, fileName, (hid_t)type_id, (hid_t)space_id, (hid_t)link_plist_id, (hid_t)create_plist_id, (hid_t)access_plist_id); + PIN_JAVA_STRING(name, fileName); + if (fileName != NULL) { + dset_id = H5Dcreate2((hid_t)loc_id, fileName, (hid_t)type_id, (hid_t)space_id, (hid_t)link_plist_id, (hid_t)create_plist_id, (hid_t)access_plist_id); - UNPIN_JAVA_STRING(name, fileName); - if (dset_id < 0) - h5libraryError(env); + UNPIN_JAVA_STRING(name, fileName); + if (dset_id < 0) + h5libraryError(env); + } return (jlong)dset_id; } /* end Java_hdf_hdf5lib_H5__1H5Dcreate2 */ @@ -1465,16 +1468,17 @@ JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Dopen2 (JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_plist) { - hid_t dset_id; + hid_t dset_id = -1; const char *fileName; - PIN_JAVA_STRING(name, fileName, -1); + PIN_JAVA_STRING(name, fileName); + if (fileName != NULL) { + dset_id = H5Dopen2((hid_t)loc_id, fileName, (hid_t)access_plist); - dset_id = H5Dopen2((hid_t)loc_id, fileName, (hid_t)access_plist); - - UNPIN_JAVA_STRING(name, fileName); - if (dset_id < 0) - h5libraryError(env); + UNPIN_JAVA_STRING(name, fileName); + if (dset_id < 0) + h5libraryError(env); + } return (jlong)dset_id; } /* end Java_hdf_hdf5lib_H5__1H5Dopen2 */ @@ -1585,39 +1589,40 @@ Java_hdf_hdf5lib_H5_H5Dfill if (buf == NULL) { h5nullArgument(env, "H5Dfill: buf is NULL"); - return; } /* end if */ - buffP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy2); - if (buffP == NULL) { - h5JNIFatalError(env, "H5Dfill: buf not pinned"); - return; - } /* end if */ - - if(fill) { - fillP = ENVPTR->GetByteArrayElements(ENVPAR fill, &isCopy1); - if (fillP == NULL) { - ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, JNI_ABORT); - h5JNIFatalError( env, "H5Dfill: fill not pinned"); - return; + else { + buffP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy2); + if (buffP == NULL) { + h5JNIFatalError(env, "H5Dfill: buf not pinned"); } /* end if */ - } /* end if */ - else - fillP = NULL; + else { + if(fill) { + fillP = ENVPTR->GetByteArrayElements(ENVPAR fill, &isCopy1); + if (fillP == NULL) { + ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, JNI_ABORT); + h5JNIFatalError( env, "H5Dfill: fill not pinned"); + return; + } /* end if */ + } /* end if */ + else + fillP = NULL; - status = H5Dfill((const void*)fillP, (hid_t)fill_type_id, (void*)buffP, (hid_t)buf_type_id, (hid_t)space_id); - if(fillP) { - /* free the buffer without copying back */ - /* end if */ ENVPTR->ReleaseByteArrayElements(ENVPAR fill, fillP, JNI_ABORT); + status = H5Dfill((const void*)fillP, (hid_t)fill_type_id, (void*)buffP, (hid_t)buf_type_id, (hid_t)space_id); + if(fillP) { + /* free the buffer without copying back */ + ENVPTR->ReleaseByteArrayElements(ENVPAR fill, fillP, JNI_ABORT); + } /* end if */ + if (status < 0) { + ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, JNI_ABORT); + h5libraryError(env); + } /* end if */ + else { + if (isCopy2 == JNI_TRUE) { + ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, 0); + } /* end if */ + } /* end else */ + } } - if (status < 0) { - ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, JNI_ABORT); - h5libraryError(env); - } /* end if */ - else { - if (isCopy2 == JNI_TRUE) { - ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, 0); - } /* end if */ - } /* end else */ } /* end Java_hdf_hdf5lib_H5_H5Dfill */ /* @@ -1638,35 +1643,35 @@ Java_hdf_hdf5lib_H5_H5Dset_1extent if (buf == NULL) { h5nullArgument(env, "H5Dset_extent: buf is NULL"); - return; - } /* end if */ - - rank = ENVPTR->GetArrayLength(ENVPAR buf); - if (rank <= 0) { - h5JNIFatalError(env, "H5Dset_extent: rank <=0"); } /* end if */ else { - buffP = ENVPTR->GetLongArrayElements(ENVPAR buf, &isCopy); - if (buffP == NULL) { - h5JNIFatalError( env, "H5Dset_extent: buf not pinned"); + rank = ENVPTR->GetArrayLength(ENVPAR buf); + if (rank <= 0) { + h5JNIFatalError(env, "H5Dset_extent: rank <=0"); } /* end if */ else { - dims = (hsize_t*)HDmalloc((size_t)rank * sizeof(hsize_t)); - for (i = 0; i< rank; i++) - dims[i] = (hsize_t)buffP[i]; + buffP = ENVPTR->GetLongArrayElements(ENVPAR buf, &isCopy); + if (buffP == NULL) { + h5JNIFatalError( env, "H5Dset_extent: buf not pinned"); + } /* end if */ + else { + dims = (hsize_t*)HDmalloc((size_t)rank * sizeof(hsize_t)); + for (i = 0; i< rank; i++) + dims[i] = (hsize_t)buffP[i]; - status = H5Dset_extent((hid_t)loc_id, (hsize_t*)dims); + status = H5Dset_extent((hid_t)loc_id, (hsize_t*)dims); - HDfree (dims); + HDfree (dims); - /* free the buffer without copying back */ - ENVPTR->ReleaseLongArrayElements(ENVPAR buf, buffP, JNI_ABORT); + /* free the buffer without copying back */ + ENVPTR->ReleaseLongArrayElements(ENVPAR buf, buffP, JNI_ABORT); - if (status < 0) { - h5libraryError(env); - } /* end if */ + if (status < 0) { + h5libraryError(env); + } /* end if */ + } /* end else */ } /* end else */ - } /* end else */ + } } /* end Java_hdf_hdf5lib_H5_H5Dset_1extent */ static herr_t @@ -1747,34 +1752,32 @@ Java_hdf_hdf5lib_H5_H5Diterate if (op_data == NULL) { h5nullArgument(env, "H5Diterate: op_data is NULL"); - return -1; } /* end if */ - if (callback_op == NULL) { + else if (callback_op == NULL) { h5nullArgument(env, "H5Diterate: callback_op is NULL"); - return -1; } /* end if */ - - if (buf == NULL) { + else if (buf == NULL) { h5nullArgument(env, "H5Diterate: buf is NULL"); - return -1; - } /* end if */ - buffP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy); - if (buffP == NULL) { - h5JNIFatalError(env, "H5Diterate: buf not pinned"); } /* end if */ else { - status = H5Diterate((void*)buffP, (hid_t)buf_type, (hid_t)space, (H5D_operator_t)H5D_iterate_cb, (void*)op_data); - - if (status < 0) { - ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, JNI_ABORT); - h5libraryError(env); + buffP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy); + if (buffP == NULL) { + h5JNIFatalError(env, "H5Diterate: buf not pinned"); } /* end if */ else { - if (isCopy == JNI_TRUE) { - ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, 0); + status = H5Diterate((void*)buffP, (hid_t)buf_type, (hid_t)space, (H5D_operator_t)H5D_iterate_cb, (void*)op_data); + + if (status < 0) { + ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, JNI_ABORT); + h5libraryError(env); } /* end if */ + else { + if (isCopy == JNI_TRUE) { + ENVPTR->ReleaseByteArrayElements(ENVPAR buf, buffP, 0); + } /* end if */ + } /* end else */ } /* end else */ - } /* end else */ + } return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Diterate */ diff --git a/java/src/jni/h5eImp.c b/java/src/jni/h5eImp.c index 84cbacd..6e05515 100644 --- a/java/src/jni/h5eImp.c +++ b/java/src/jni/h5eImp.c @@ -98,14 +98,15 @@ Java_hdf_hdf5lib_H5_H5Eregister_1class const char* the_lib_name; const char* the_version; - PIN_JAVA_STRING_THREE(cls_name, the_cls_name, lib_name, the_lib_name, version, the_version, -1); + PIN_JAVA_STRING_THREE(cls_name, the_cls_name, lib_name, the_lib_name, version, the_version); + if (the_cls_name != NULL && the_lib_name != NULL && the_version != NULL) { + ret_val = H5Eregister_class(the_cls_name, the_lib_name, the_version); - ret_val = H5Eregister_class(the_cls_name, the_lib_name, the_version); + UNPIN_JAVA_STRING_THREE(cls_name, the_cls_name, lib_name, the_lib_name, version, the_version); - UNPIN_JAVA_STRING_THREE(cls_name, the_cls_name, lib_name, the_lib_name, version, the_version); - - if (ret_val < 0) - h5libraryError(env); + if (ret_val < 0) + h5libraryError(env); + } return (jlong)ret_val; } /* end Java_hdf_hdf5lib_H5_H5Eregister_1class */ @@ -159,14 +160,15 @@ Java_hdf_hdf5lib_H5_H5Ecreate_1msg h5badArgument(env, "H5Ecreate_msg: invalid argument"); } /* end if */ else { - PIN_JAVA_STRING(err_msg, the_err_msg, -1); - - ret_val = H5Ecreate_msg((hid_t)err_id, error_msg_type, the_err_msg); + PIN_JAVA_STRING(err_msg, the_err_msg); + if (the_err_msg != NULL) { + ret_val = H5Ecreate_msg((hid_t)err_id, error_msg_type, the_err_msg); - UNPIN_JAVA_STRING(err_msg, the_err_msg); + UNPIN_JAVA_STRING(err_msg, the_err_msg); - if (ret_val < 0) - h5libraryError(env); + if (ret_val < 0) + h5libraryError(env); + } } /* end else */ return (jlong)ret_val; @@ -305,7 +307,7 @@ Java_hdf_hdf5lib_H5_H5Eget_1class_1name */ JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Eset_1current_1stack - (JNIEnv *env, jclass cls, jlong stk_id) + (JNIEnv *env, jclass cls, jlong stk_id) { if (stk_id < 0) { h5badArgument(env, "H5Eset_current_stack: invalid argument"); @@ -358,15 +360,16 @@ Java_hdf_hdf5lib_H5_H5Epush2 h5badArgument(env, "H5Epush: invalid minor_id argument"); } /* end else if */ else { - PIN_JAVA_STRING_THREE0(filename, fName, funcname, fncName, err_desc, errMsg); + PIN_JAVA_STRING_THREE(filename, fName, funcname, fncName, err_desc, errMsg); + if (fName != NULL && fncName != NULL && errMsg != NULL) { + ret_val = H5Epush2((hid_t)stk_id, fName, fncName, (unsigned)linenumber, (hid_t)class_id, + (hid_t)major_id, (hid_t)minor_id, errMsg); - ret_val = H5Epush2((hid_t)stk_id, fName, fncName, (unsigned)linenumber, (hid_t)class_id, - (hid_t)major_id, (hid_t)minor_id, errMsg); + UNPIN_JAVA_STRING_THREE(filename, fName, funcname, fncName, err_desc, errMsg); - UNPIN_JAVA_STRING_THREE(filename, fName, funcname, fncName, err_desc, errMsg); - - if (ret_val < 0) - h5libraryError(env); + if (ret_val < 0) + h5libraryError(env); + } } /* end else */ } /* end Java_hdf_hdf5lib_H5_H5Epush2 */ diff --git a/java/src/jni/h5fImp.c b/java/src/jni/h5fImp.c index 33a5932..5862ae7 100644 --- a/java/src/jni/h5fImp.c +++ b/java/src/jni/h5fImp.c @@ -45,14 +45,15 @@ Java_hdf_hdf5lib_H5__1H5Fopen hid_t status = -1; const char *fileName; - PIN_JAVA_STRING(name, fileName, -1); + PIN_JAVA_STRING(name, fileName); + if (fileName != NULL) { + status = H5Fopen(fileName, (unsigned)flags, (hid_t)access_id ); - status = H5Fopen(fileName, (unsigned)flags, (hid_t)access_id ); + UNPIN_JAVA_STRING(name, fileName); - UNPIN_JAVA_STRING(name, fileName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jlong)status; } /* end Java_hdf_hdf5lib_H5__1H5Fopen */ @@ -69,14 +70,15 @@ Java_hdf_hdf5lib_H5__1H5Fcreate hid_t status = -1; const char *fileName; - PIN_JAVA_STRING(name, fileName, -1); + PIN_JAVA_STRING(name, fileName); + if (fileName != NULL) { + status = H5Fcreate(fileName, (unsigned)flags, create_id, access_id); - status = H5Fcreate(fileName, (unsigned)flags, create_id, access_id); + UNPIN_JAVA_STRING(name, fileName); - UNPIN_JAVA_STRING(name, fileName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jlong)status; } /* end Java_hdf_hdf5lib_H5__1H5Fcreate */ @@ -152,16 +154,17 @@ Java_hdf_hdf5lib_H5_H5Fis_1hdf5 htri_t bval = JNI_FALSE; const char *fileName; - PIN_JAVA_STRING(name, fileName, JNI_FALSE); - - bval = H5Fis_hdf5(fileName); + PIN_JAVA_STRING(name, fileName); + if (fileName != NULL) { + bval = H5Fis_hdf5(fileName); - UNPIN_JAVA_STRING(name, fileName); + UNPIN_JAVA_STRING(name, fileName); - if (bval > 0) - bval = JNI_TRUE; - else if (bval < 0) - h5libraryError(env); + if (bval > 0) + bval = JNI_TRUE; + else if (bval < 0) + h5libraryError(env); + } return (jboolean)bval; } /* end Java_hdf_hdf5lib_H5_H5Fis_1hdf5 */ @@ -251,14 +254,15 @@ Java_hdf_hdf5lib_H5_H5Fmount herr_t status = -1; const char *fileName; - PIN_JAVA_STRING(name, fileName, -1); - - status = H5Fmount((hid_t)loc_id, fileName, (hid_t)child_id, (hid_t)plist_id); + PIN_JAVA_STRING(name, fileName); + if (fileName != NULL) { + status = H5Fmount((hid_t)loc_id, fileName, (hid_t)child_id, (hid_t)plist_id); - UNPIN_JAVA_STRING(name, fileName); + UNPIN_JAVA_STRING(name, fileName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Fmount */ @@ -275,14 +279,15 @@ Java_hdf_hdf5lib_H5_H5Funmount herr_t status = -1; const char *fileName; - PIN_JAVA_STRING(name, fileName, -1); + PIN_JAVA_STRING(name, fileName); + if (fileName != NULL) { + status = H5Funmount((hid_t)loc_id, fileName); - status = H5Funmount((hid_t)loc_id, fileName); + UNPIN_JAVA_STRING(name, fileName); - UNPIN_JAVA_STRING(name, fileName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Funmount */ diff --git a/java/src/jni/h5gImp.c b/java/src/jni/h5gImp.c index a2c0de0..c40ed64 100644 --- a/java/src/jni/h5gImp.c +++ b/java/src/jni/h5gImp.c @@ -69,33 +69,30 @@ create_H5G_info_t jclass cls; jboolean jmounted; jint storage_type; - jobject obj; + jobject obj = NULL; jfieldID fid_storage_type, fid_nlinks, fid_max_corder, fid_mounted; cls = ENVPTR->FindClass(ENVPAR "hdf/hdf5lib/structs/H5G_info_t"); - if (cls == NULL) - return NULL; - - obj = ENVPTR->AllocObject(ENVPAR cls); - if (obj == NULL) - return NULL; - - fid_storage_type = ENVPTR->GetFieldID(ENVPAR cls, "storage_type", "I"); - fid_nlinks = ENVPTR->GetFieldID(ENVPAR cls, "nlinks", "J"); - fid_max_corder = ENVPTR->GetFieldID(ENVPAR cls, "max_corder", "J"); - fid_mounted = ENVPTR->GetFieldID(ENVPAR cls, "mounted", "Z"); - - if (fid_storage_type==NULL || fid_nlinks==NULL || fid_max_corder==NULL || fid_mounted == NULL) - return NULL; - - jmounted = (group_info.mounted==0) ? JNI_FALSE : JNI_TRUE; - storage_type = (jint)group_info.storage_type; - - ENVPTR->SetIntField(ENVPAR obj, fid_storage_type, (jint)storage_type); - ENVPTR->SetLongField(ENVPAR obj, fid_nlinks, (jlong)group_info.nlinks); - ENVPTR->SetLongField(ENVPAR obj, fid_max_corder, (jlong)group_info.max_corder); - ENVPTR->SetBooleanField(ENVPAR obj, fid_mounted, jmounted); - + if (cls != NULL) { + obj = ENVPTR->AllocObject(ENVPAR cls); + if (obj != NULL) { + if ((fid_storage_type = ENVPTR->GetFieldID(ENVPAR cls, "storage_type", "I")) != NULL) { + if ((fid_nlinks = ENVPTR->GetFieldID(ENVPAR cls, "nlinks", "J")) != NULL) { + if ((fid_max_corder = ENVPTR->GetFieldID(ENVPAR cls, "max_corder", "J")) != NULL) { + if ((fid_mounted = ENVPTR->GetFieldID(ENVPAR cls, "mounted", "Z")) != NULL) { + jmounted = (group_info.mounted==0) ? JNI_FALSE : JNI_TRUE; + storage_type = (jint)group_info.storage_type; + + ENVPTR->SetIntField(ENVPAR obj, fid_storage_type, (jint)storage_type); + ENVPTR->SetLongField(ENVPAR obj, fid_nlinks, (jlong)group_info.nlinks); + ENVPTR->SetLongField(ENVPAR obj, fid_max_corder, (jlong)group_info.max_corder); + ENVPTR->SetBooleanField(ENVPAR obj, fid_mounted, jmounted); + } + } + } + } + } + } return obj; } /* end create_H5G_info_t */ @@ -112,13 +109,14 @@ Java_hdf_hdf5lib_H5__1H5Gcreate2 hid_t group_id = -1; const char *gName; - PIN_JAVA_STRING(name, gName, -1); + PIN_JAVA_STRING(name, gName); + if (gName != NULL) { + group_id = H5Gcreate2((hid_t)loc_id, gName, (hid_t)link_plist_id, (hid_t)create_plist_id, (hid_t)access_plist_id ); - group_id = H5Gcreate2((hid_t)loc_id, gName, (hid_t)link_plist_id, (hid_t)create_plist_id, (hid_t)access_plist_id ); - - UNPIN_JAVA_STRING(name, gName); - if (group_id < 0) - h5libraryError(env); + UNPIN_JAVA_STRING(name, gName); + if (group_id < 0) + h5libraryError(env); + } return (jlong)group_id; } /* end Java_hdf_hdf5lib_H5__1H5Gcreate2 */ @@ -153,14 +151,15 @@ Java_hdf_hdf5lib_H5__1H5Gopen2 hid_t group_id = -1; const char *gName; - PIN_JAVA_STRING(name, gName, -1); + PIN_JAVA_STRING(name, gName); + if (gName != NULL) { + group_id = H5Gopen2((hid_t)loc_id, gName, (hid_t)access_plist_id ); - group_id = H5Gopen2((hid_t)loc_id, gName, (hid_t)access_plist_id ); + UNPIN_JAVA_STRING(name, gName); - UNPIN_JAVA_STRING(name, gName); - - if (group_id < 0) - h5libraryError(env); + if (group_id < 0) + h5libraryError(env); + } return (jlong)group_id; } /* end Java_hdf_hdf5lib_H5__1H5Gopen2 */ @@ -192,14 +191,15 @@ JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Gget_1info (JNIEnv *env, jclass cls, jlong loc_id) { + jobject obj = NULL; H5G_info_t group_info; - if (H5Gget_info((hid_t)loc_id, &group_info) < 0) { + if (H5Gget_info((hid_t)loc_id, &group_info) < 0) h5libraryError(env); - return NULL; - } /* end if */ + else + obj = create_H5G_info_t(env, group_info); - return create_H5G_info_t(env, group_info); + return obj; } /* end Java_hdf_hdf5lib_H5_H5Gget_1info */ /* @@ -211,22 +211,24 @@ JNIEXPORT jobject JNICALL Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1name (JNIEnv *env, jclass cls, jlong loc_id, jstring name, jlong lapl_id) { + jobject obj = NULL; herr_t ret_val = -1; const char *gName; H5G_info_t group_info; - PIN_JAVA_STRING(name, gName, NULL); + PIN_JAVA_STRING(name, gName); + if (gName != NULL) { + ret_val = H5Gget_info_by_name((hid_t)loc_id, gName, &group_info, (hid_t)lapl_id); - ret_val = H5Gget_info_by_name((hid_t)loc_id, gName, &group_info, (hid_t)lapl_id); + UNPIN_JAVA_STRING(name, gName); - UNPIN_JAVA_STRING(name, gName); - - if (ret_val < 0) { - h5libraryError(env); - return NULL; - } /* end if */ + if (ret_val < 0) + h5libraryError(env); + else + obj = create_H5G_info_t(env, group_info); + } - return create_H5G_info_t(env, group_info); + return obj; } /* end Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1name */ /* @@ -239,25 +241,27 @@ Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1idx (JNIEnv *env, jclass cls, jlong loc_id, jstring name, jint index_type, jint order, jlong n, jlong lapl_id) { + jobject obj = NULL; herr_t ret_val = -1; const char *gName; H5G_info_t group_info; H5_index_t cindex_type = (H5_index_t)index_type; H5_iter_order_t corder = (H5_iter_order_t)order; - PIN_JAVA_STRING(name, gName, NULL); - - ret_val = H5Gget_info_by_idx((hid_t)loc_id, gName, cindex_type, - corder, (hsize_t)n, &group_info, (hid_t)lapl_id); + PIN_JAVA_STRING(name, gName); + if (gName != NULL) { + ret_val = H5Gget_info_by_idx((hid_t)loc_id, gName, cindex_type, + corder, (hsize_t)n, &group_info, (hid_t)lapl_id); - UNPIN_JAVA_STRING(name, gName); + UNPIN_JAVA_STRING(name, gName); - if (ret_val < 0) { - h5libraryError(env); - return NULL; - } /* end if */ + if (ret_val < 0) + h5libraryError(env); + else + obj = create_H5G_info_t(env, group_info); + } - return create_H5G_info_t(env, group_info); + return obj; } /* end Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1idx */ /* @@ -267,7 +271,7 @@ Java_hdf_hdf5lib_H5_H5Gget_1info_1by_1idx */ JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Gflush - (JNIEnv *env, jclass clss, jlong loc_id) + (JNIEnv *env, jclass clss, jlong loc_id) { if (H5Gflush((hid_t)loc_id) < 0) h5libraryError(env); @@ -280,7 +284,7 @@ Java_hdf_hdf5lib_H5_H5Gflush */ JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Grefresh - (JNIEnv *env, jclass clss, jlong loc_id) + (JNIEnv *env, jclass clss, jlong loc_id) { if (H5Grefresh((hid_t)loc_id) < 0) h5libraryError(env); diff --git a/java/src/jni/h5iImp.c b/java/src/jni/h5iImp.c index 9fce3ef..d2f845a 100644 --- a/java/src/jni/h5iImp.c +++ b/java/src/jni/h5iImp.c @@ -91,6 +91,45 @@ Java_hdf_hdf5lib_H5_H5Iget_1name /* * Class: hdf_hdf5lib_H5 + * Method: H5Iget_name_str + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL +Java_hdf_hdf5lib_H5_H5Iget_1name_1str + (JNIEnv *env, jclass clss, jlong obj_id) +{ + char *aName; + jstring str = NULL; + ssize_t buf_size; + + /* get the length of the name */ + buf_size = H5Iget_name((hid_t)obj_id, NULL, 0); + + if (buf_size <= 0) { + h5badArgument(env, "H5Iget_name: 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, "H5Iget_name: malloc failed"); + } /* end if */ + else { + buf_size = H5Iget_name((hid_t)obj_id, 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_H5Iget_1name */ + +/* + * Class: hdf_hdf5lib_H5 * Method: H5Iget_ref * Signature: (J)I */ diff --git a/java/src/jni/h5iImp.h b/java/src/jni/h5iImp.h index f7472b8..f6fe56b 100644 --- a/java/src/jni/h5iImp.h +++ b/java/src/jni/h5iImp.h @@ -43,6 +43,15 @@ Java_hdf_hdf5lib_H5_H5Iget_1name /* * Class: hdf_hdf5lib_H5 + * Method: H5Iget_name_str + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL +Java_hdf_hdf5lib_H5_H5Iget_1name_1str + (JNIEnv*, jclass, jlong); + +/* + * Class: hdf_hdf5lib_H5 * Method: H5Iget_ref * Signature: (J)I */ diff --git a/java/src/jni/h5jni.h b/java/src/jni/h5jni.h index da49eeb..9414d31 100644 --- a/java/src/jni/h5jni.h +++ b/java/src/jni/h5jni.h @@ -67,29 +67,17 @@ /* Macros for string access */ -#define PIN_JAVA_STRING(javastr,localstr,retdefault) { \ +#define PIN_JAVA_STRING(javastr,localstr) { \ jboolean isCopy; \ + (localstr) = NULL; \ if ((javastr) == NULL) { \ h5nullArgument(env, "java string is NULL"); \ - return (retdefault); \ } \ - (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy); \ - if ((localstr) == NULL) { \ - h5JNIFatalError(env, "local c string is not pinned"); \ - return (retdefault); \ - } \ -} - -#define PIN_JAVA_STRING0(javastr,localstr) { \ - jboolean isCopy; \ - if ((javastr) == NULL) { \ - h5nullArgument(env, "java string is NULL"); \ - return; \ - } \ - (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy); \ - if ((localstr) == NULL) { \ - h5JNIFatalError(env, "local c string is not pinned"); \ - return; \ + else { \ + (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy); \ + if ((localstr) == NULL) { \ + h5JNIFatalError(env, "local c string is not pinned"); \ + } \ } \ } @@ -97,49 +85,28 @@ ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr)); \ } -#define PIN_JAVA_STRING_TWO(javastr,localstr,java2str,local2str,retdefault) { \ +#define PIN_JAVA_STRING_TWO(javastr,localstr,java2str,local2str) { \ jboolean isCopy; \ + (localstr) = NULL; \ + (local2str) = NULL; \ if ((javastr) == NULL) { \ h5nullArgument(env, "java string is NULL"); \ - return (retdefault); \ } \ - if ((java2str) == NULL) { \ + else if ((java2str) == NULL) { \ h5nullArgument(env, "second java string is NULL"); \ - return (retdefault); \ } \ - (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy); \ - if ((localstr) == NULL) { \ - h5JNIFatalError(env, "local c string is not pinned"); \ - return (retdefault); \ - } \ - (local2str) = ENVPTR->GetStringUTFChars(ENVPAR (java2str), &isCopy); \ - if ((local2str) == NULL) { \ - ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr)); \ - h5JNIFatalError(env, "second local c string is not pinned"); \ - return (retdefault); \ - } \ -} - -#define PIN_JAVA_STRING_TWO0(javastr,localstr,java2str,local2str) { \ - jboolean isCopy; \ - if ((javastr) == NULL) { \ - h5nullArgument(env, "java string is NULL"); \ - return; \ - } \ - if ((java2str) == NULL) { \ - h5nullArgument(env, "second java string is NULL"); \ - return; \ - } \ - (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy); \ - if ((localstr) == NULL) { \ - h5JNIFatalError(env, "local c string is not pinned"); \ - return; \ - } \ - (local2str) = ENVPTR->GetStringUTFChars(ENVPAR (java2str), &isCopy); \ - if ((local2str) == NULL) { \ - ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr)); \ - h5JNIFatalError(env, "second local c string is not pinned"); \ - return; \ + else { \ + (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy); \ + if ((localstr) == NULL) { \ + h5JNIFatalError(env, "local c string is not pinned"); \ + } \ + else { \ + (local2str) = ENVPTR->GetStringUTFChars(ENVPAR (java2str), &isCopy); \ + if ((local2str) == NULL) { \ + ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr)); \ + h5JNIFatalError(env, "second local c string is not pinned"); \ + } \ + } \ } \ } @@ -148,71 +115,40 @@ ENVPTR->ReleaseStringUTFChars(ENVPAR (java2str), (local2str)); \ } -#define PIN_JAVA_STRING_THREE(javastr,localstr,java2str,local2str,java3str,local3str,retdefault) { \ - jboolean isCopy; \ - if ((javastr) == NULL) { \ - h5nullArgument(env, "java string is NULL"); \ - return (retdefault); \ - } \ - if ((java2str) == NULL) { \ - h5nullArgument(env, "second java string is NULL"); \ - return (retdefault); \ - } \ - if ((java3str) == NULL) { \ - h5nullArgument(env, "third java string is NULL"); \ - return (retdefault); \ - } \ - (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy); \ - if ((localstr) == NULL) { \ - h5JNIFatalError(env, "local c string is not pinned"); \ - return (retdefault); \ - } \ - (local2str) = ENVPTR->GetStringUTFChars(ENVPAR (java2str), &isCopy); \ - if ((local2str) == NULL) { \ - ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr)); \ - h5JNIFatalError(env, "second local c string is not pinned"); \ - return (retdefault); \ - } \ - (local3str) = ENVPTR->GetStringUTFChars(ENVPAR (java3str), &isCopy); \ - if ((local3str) == NULL) { \ - ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr)); \ - ENVPTR->ReleaseStringUTFChars(ENVPAR (java2str), (local2str)); \ - h5JNIFatalError(env, "third local c string is not pinned"); \ - return (retdefault); \ - } \ -} - -#define PIN_JAVA_STRING_THREE0(javastr,localstr,java2str,local2str,java3str,local3str) { \ +#define PIN_JAVA_STRING_THREE(javastr,localstr,java2str,local2str,java3str,local3str) { \ jboolean isCopy; \ + (localstr) = NULL; \ + (local2str) = NULL; \ + (local3str) = NULL; \ if ((javastr) == NULL) { \ h5nullArgument(env, "java string is NULL"); \ - return; \ } \ - if ((java2str) == NULL) { \ + else if ((java2str) == NULL) { \ h5nullArgument(env, "second java string is NULL"); \ - return; \ } \ - if ((java3str) == NULL) { \ + else if ((java3str) == NULL) { \ h5nullArgument(env, "third java string is NULL"); \ - return; \ - } \ - (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy); \ - if ((localstr) == NULL) { \ - h5JNIFatalError(env, "local c string is not pinned"); \ - return; \ - } \ - (local2str) = ENVPTR->GetStringUTFChars(ENVPAR (java2str), &isCopy); \ - if ((local2str) == NULL) { \ - ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr)); \ - h5JNIFatalError(env, "second local c string is not pinned"); \ - return; \ } \ - (local3str) = ENVPTR->GetStringUTFChars(ENVPAR (java3str), &isCopy); \ - if ((local3str) == NULL) { \ - ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr)); \ - ENVPTR->ReleaseStringUTFChars(ENVPAR (java2str), (local2str)); \ - h5JNIFatalError(env, "third local c string is not pinned"); \ - return; \ + else { \ + (localstr) = ENVPTR->GetStringUTFChars(ENVPAR (javastr), &isCopy); \ + if ((localstr) == NULL) { \ + h5JNIFatalError(env, "local c string is not pinned"); \ + } \ + else { \ + (local2str) = ENVPTR->GetStringUTFChars(ENVPAR (java2str), &isCopy); \ + if ((local2str) == NULL) { \ + ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr)); \ + h5JNIFatalError(env, "second local c string is not pinned"); \ + } \ + else { \ + (local3str) = ENVPTR->GetStringUTFChars(ENVPAR (java3str), &isCopy); \ + if ((local3str) == NULL) { \ + ENVPTR->ReleaseStringUTFChars(ENVPAR (javastr), (localstr)); \ + ENVPTR->ReleaseStringUTFChars(ENVPAR (java2str), (local2str)); \ + h5JNIFatalError(env, "third local c string is not pinned"); \ + } \ + } \ + } \ } \ } diff --git a/java/src/jni/h5lImp.c b/java/src/jni/h5lImp.c index eecb1cd..473b1c7 100644 --- a/java/src/jni/h5lImp.c +++ b/java/src/jni/h5lImp.c @@ -52,14 +52,15 @@ Java_hdf_hdf5lib_H5_H5Lcopy const char *lCurName; const char *lDstName; - PIN_JAVA_STRING_TWO0(cur_name, lCurName, dst_name, lDstName); + PIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); + if (lCurName != NULL && lDstName != NULL) { + status = H5Lcopy((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); - status = H5Lcopy((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); + UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); - UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Lcopy */ /* @@ -77,14 +78,15 @@ Java_hdf_hdf5lib_H5_H5Lcreate_1external const char *lCurName; const char *lDstName; - PIN_JAVA_STRING_THREE0(file_name, lFileName, cur_name, lCurName, dst_name, lDstName); - - status = H5Lcreate_external(lFileName, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); + PIN_JAVA_STRING_THREE(file_name, lFileName, cur_name, lCurName, dst_name, lDstName); + if (lFileName != NULL && lCurName != NULL && lDstName != NULL) { + status = H5Lcreate_external(lFileName, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); - UNPIN_JAVA_STRING_THREE(file_name, lFileName, cur_name, lCurName, dst_name, lDstName); + UNPIN_JAVA_STRING_THREE(file_name, lFileName, cur_name, lCurName, dst_name, lDstName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Lcreate_1external */ /* @@ -101,14 +103,15 @@ Java_hdf_hdf5lib_H5_H5Lcreate_1hard const char *lCurName; const char *lDstName; - PIN_JAVA_STRING_TWO0(cur_name, lCurName, dst_name, lDstName); + PIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); + if (lCurName != NULL && lDstName != NULL) { + status = H5Lcreate_hard((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); - status = H5Lcreate_hard((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); + UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); - UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Lcreate_1hard */ /* @@ -125,14 +128,15 @@ Java_hdf_hdf5lib_H5_H5Lcreate_1soft const char *lCurName; const char *lDstName; - PIN_JAVA_STRING_TWO0(cur_name, lCurName, dst_name, lDstName); - - status = H5Lcreate_soft(lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); + PIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); + if (lCurName != NULL && lDstName != NULL) { + status = H5Lcreate_soft(lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); - UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); + UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Lcreate_1soft */ /* @@ -147,14 +151,15 @@ Java_hdf_hdf5lib_H5_H5Ldelete herr_t status = -1; const char *lName; - PIN_JAVA_STRING0(name, lName); - - status = H5Ldelete((hid_t)loc_id, lName, (hid_t)access_id); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + status = H5Ldelete((hid_t)loc_id, lName, (hid_t)access_id); - UNPIN_JAVA_STRING(name, lName); + UNPIN_JAVA_STRING(name, lName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Ldelete */ /* @@ -171,14 +176,15 @@ Java_hdf_hdf5lib_H5_H5Ldelete_1by_1idx herr_t status; const char *lName; - PIN_JAVA_STRING0(name, lName); - - status = H5Ldelete_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, n, (hid_t)access_id); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + status = H5Ldelete_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, n, (hid_t)access_id); - UNPIN_JAVA_STRING(name, lName); + UNPIN_JAVA_STRING(name, lName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Ldelete_1by_1idx */ /* @@ -193,16 +199,17 @@ Java_hdf_hdf5lib_H5_H5Lexists htri_t bval = JNI_FALSE; const char *lName; - PIN_JAVA_STRING(name, lName, JNI_FALSE); - - bval = H5Lexists((hid_t)loc_id, lName, (hid_t)access_id); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + bval = H5Lexists((hid_t)loc_id, lName, (hid_t)access_id); - UNPIN_JAVA_STRING(name, lName); + UNPIN_JAVA_STRING(name, lName); - if (bval > 0) - bval = JNI_TRUE; - else if (bval < 0) - h5libraryError(env); + if (bval > 0) + bval = JNI_TRUE; + else if (bval < 0) + h5libraryError(env); + } return (jboolean)bval; } /* end Java_hdf_hdf5lib_H5_H5Lexists */ @@ -222,26 +229,27 @@ Java_hdf_hdf5lib_H5_H5Lget_1info H5L_info_t infobuf; const char *lName; - PIN_JAVA_STRING(name, lName, NULL); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + status = H5Lget_info((hid_t)loc_id, lName, &infobuf, (hid_t)access_id); - status = H5Lget_info((hid_t)loc_id, lName, &infobuf, (hid_t)access_id); - - UNPIN_JAVA_STRING(name, lName); + UNPIN_JAVA_STRING(name, lName); - if (status < 0) { - h5libraryError(env); + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + args[0].i = infobuf.type; + args[1].z = infobuf.corder_valid; + args[2].j = infobuf.corder; + args[3].i = infobuf.cset; + if(infobuf.type==0) + args[4].j = (jlong)infobuf.u.address; + else + args[4].j = (jlong)infobuf.u.val_size; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5L_info_t", "(IZJIJ)V", args); + } /* end else */ } /* end if */ - else { - args[0].i = infobuf.type; - args[1].z = infobuf.corder_valid; - args[2].j = infobuf.corder; - args[3].i = infobuf.cset; - if(infobuf.type==0) - args[4].j = (jlong)infobuf.u.address; - else - args[4].j = (jlong)infobuf.u.val_size; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5L_info_t", "(IZJIJ)V", args); - } /* end else */ return ret_obj; } /* end Java_hdf_hdf5lib_H5_H5Lget_1info */ @@ -261,26 +269,27 @@ Java_hdf_hdf5lib_H5_H5Lget_1info_1by_1idx H5L_info_t infobuf; const char *lName; - PIN_JAVA_STRING(name, lName, NULL); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + status = H5Lget_info_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (hid_t)access_id); - status = H5Lget_info_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (hid_t)access_id); - - UNPIN_JAVA_STRING(name, lName); + UNPIN_JAVA_STRING(name, lName); - if (status < 0) { - h5libraryError(env); - } /* end if */ - else { - args[0].i = infobuf.type; - args[1].z = infobuf.corder_valid; - args[2].j = infobuf.corder; - args[3].i = infobuf.cset; - if(infobuf.type==0) - args[4].j = (jlong)infobuf.u.address; - else - args[4].j = (jlong)infobuf.u.val_size; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5L_info_t", "(IZJIJ)V", args); - } /* end els */ + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + args[0].i = infobuf.type; + args[1].z = infobuf.corder_valid; + args[2].j = infobuf.corder; + args[3].i = infobuf.cset; + if(infobuf.type==0) + args[4].j = (jlong)infobuf.u.address; + else + args[4].j = (jlong)infobuf.u.val_size; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5L_info_t", "(IZJIJ)V", args); + } /* end els */ + } return ret_obj; } /* end Java_hdf_hdf5lib_H5_H5Lget_1info_1by_1idx */ @@ -289,7 +298,7 @@ Java_hdf_hdf5lib_H5_H5Lget_1info_1by_1idx * Method: H5Lget_name_by_idx * Signature: (JLjava/lang/String;IIJJ)Ljava/lang/String; */ -JNIEXPORT jobject JNICALL +JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Lget_1name_1by_1idx (JNIEnv *env, jclass clss, jlong loc_id, jstring name, jint index_field, jint order, jlong link_n, jlong access_id) @@ -300,39 +309,38 @@ Java_hdf_hdf5lib_H5_H5Lget_1name_1by_1idx const char *lName; char *lValue; - PIN_JAVA_STRING(name, lName, NULL); - - /* get the length of the link name */ - status_size = H5Lget_name_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (char*)NULL, (size_t)0, H5P_DEFAULT); - if(status_size < 0) { - UNPIN_JAVA_STRING(name, lName); - h5libraryError(env); - } /* end if */ - else { - buf_size = (size_t)status_size + 1;/* add extra space for the null terminator */ - - lValue = (char*)HDmalloc(sizeof(char) * buf_size); - if (lValue == NULL) { - UNPIN_JAVA_STRING(name, lName); - h5outOfMemory(env, "H5Lget_name_by_idx: malloc failed "); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + /* get the length of the link name */ + status_size = H5Lget_name_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (char*)NULL, (size_t)0, H5P_DEFAULT); + if(status_size < 0) { + h5libraryError(env); } /* end if */ else { - status_size = H5Lget_name_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (char*)lValue, (size_t)buf_size, (hid_t)access_id); + buf_size = (size_t)status_size + 1;/* add extra space for the null terminator */ - UNPIN_JAVA_STRING(name, lName); - - if (status_size < 0) { - HDfree(lValue); - h5libraryError(env); + lValue = (char*)HDmalloc(sizeof(char) * buf_size); + if (lValue == NULL) { + h5outOfMemory(env, "H5Lget_name_by_idx: malloc failed "); } /* end if */ else { - str = ENVPTR->NewStringUTF(ENVPAR lValue); - HDfree(lValue); - if (str == NULL) - h5JNIFatalError(env, "H5Lget_name_by_idx: return string not created"); + status_size = H5Lget_name_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (char*)lValue, (size_t)buf_size, (hid_t)access_id); + + if (status_size < 0) { + HDfree(lValue); + h5libraryError(env); + } /* end if */ + else { + str = ENVPTR->NewStringUTF(ENVPAR lValue); + HDfree(lValue); + if (str == NULL) + h5JNIFatalError(env, "H5Lget_name_by_idx: return string not created"); + } /* end else */ } /* end else */ } /* end else */ - } /* end else */ + UNPIN_JAVA_STRING(name, lName); + } + return str; } /* end Java_hdf_hdf5lib_H5_H5Lget_1name_1by_1idx */ @@ -354,79 +362,70 @@ Java_hdf_hdf5lib_H5_H5Lget_1value const char *obj_name; jstring str; - PIN_JAVA_STRING(name, lName, -1); - infobuf.type = -1; - /* get the length of the link val */ - status = H5Lget_info((hid_t)loc_id, lName, &infobuf, H5P_DEFAULT); - if(status < 0) { - UNPIN_JAVA_STRING(name, lName); - h5libraryError(env); - } /* end if */ - else { - buf_size = infobuf.u.val_size + 1;/* add extra space for the null terminator */ - - if(infobuf.type == H5L_TYPE_HARD) { - UNPIN_JAVA_STRING(name, lName); - h5JNIFatalError(env, "H5Lget_val: link is hard type"); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + /* get the length of the link val */ + status = H5Lget_info((hid_t)loc_id, lName, &infobuf, H5P_DEFAULT); + if(status < 0) { + h5libraryError(env); } /* end if */ else { - lValue = (char*)HDmalloc(sizeof(char) * buf_size); - if (lValue == NULL) { - UNPIN_JAVA_STRING(name, lName); - h5outOfMemory(env, "H5Lget_val: malloc failed"); + buf_size = infobuf.u.val_size + 1;/* add extra space for the null terminator */ + + if(infobuf.type == H5L_TYPE_HARD) { + h5JNIFatalError(env, "H5Lget_val: link is hard type"); } /* end if */ else { - status = H5Lget_val((hid_t)loc_id, lName, (void*)lValue, buf_size, (hid_t)access_id); - - UNPIN_JAVA_STRING(name, lName); - - if (status < 0) { - HDfree(lValue); - h5libraryError(env); + lValue = (char*)HDmalloc(sizeof(char) * buf_size); + if (lValue == NULL) { + h5outOfMemory(env, "H5Lget_val: malloc failed"); } /* end if */ - else if(infobuf.type == H5L_TYPE_EXTERNAL) { - status = H5Lunpack_elink_val(lValue, (size_t)infobuf.u.val_size, (unsigned*)NULL, &file_name, &obj_name); + else { + status = H5Lget_val((hid_t)loc_id, lName, (void*)lValue, buf_size, (hid_t)access_id); + if (status < 0) { - HDfree(lValue); h5libraryError(env); } /* end if */ - else { - str = ENVPTR->NewStringUTF(ENVPAR obj_name); - if (str == NULL) { - HDfree(lValue); - h5JNIFatalError(env, "H5Lget_val: return string not created"); + else if(infobuf.type == H5L_TYPE_EXTERNAL) { + status = H5Lunpack_elink_val(lValue, (size_t)infobuf.u.val_size, (unsigned*)NULL, &file_name, &obj_name); + if (status < 0) { + h5libraryError(env); } /* end if */ else { - ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str); - - str = ENVPTR->NewStringUTF(ENVPAR file_name); + str = ENVPTR->NewStringUTF(ENVPAR obj_name); if (str == NULL) { - HDfree(lValue); h5JNIFatalError(env, "H5Lget_val: return string not created"); } /* end if */ else { - ENVPTR->SetObjectArrayElement(ENVPAR link_value, 1, str); - HDfree(lValue); + ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str); + + str = ENVPTR->NewStringUTF(ENVPAR file_name); + if (str == NULL) { + h5JNIFatalError(env, "H5Lget_val: return string not created"); + } /* end if */ + else { + ENVPTR->SetObjectArrayElement(ENVPAR link_value, 1, str); + } /* end else */ } /* end else */ } /* end else */ - } /* end else */ - } /* end else if */ - else { - str = ENVPTR->NewStringUTF(ENVPAR lValue); - if (str == NULL) { - /* exception -- fatal JNI error */ - HDfree(lValue); - h5JNIFatalError(env, "H5Lget_val: return string not created"); - } /* end if */ + } /* end else if */ else { - ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str); - HDfree(lValue); + str = ENVPTR->NewStringUTF(ENVPAR lValue); + if (str == NULL) { + /* exception -- fatal JNI error */ + h5JNIFatalError(env, "H5Lget_val: return string not created"); + } /* end if */ + else { + ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str); + } /* end else */ } /* end else */ + HDfree(lValue); } /* end else */ } /* end else */ } /* end else */ - } /* end else */ + UNPIN_JAVA_STRING(name, lName); + } return infobuf.type; } /* end Java_hdf_hdf5lib_H5_H5Lget_1val */ @@ -450,80 +449,69 @@ Java_hdf_hdf5lib_H5_H5Lget_1value_1by_1idx const char *obj_name; jstring str; - PIN_JAVA_STRING(name, lName, -1); - infobuf.type = -1; - /* get the length of the link valuee */ - status = H5Lget_info_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (hid_t)access_id); - if(status < 0) { - UNPIN_JAVA_STRING(name, lName); - h5libraryError(env); - return -1; - } /* end if */ - else { - buf_size = infobuf.u.val_size; - if(buf_size < 0) { - UNPIN_JAVA_STRING(name, lName); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + /* get the length of the link valuee */ + status = H5Lget_info_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (hid_t)access_id); + if(status < 0) { h5libraryError(env); - return -1; } /* end if */ else { - lValue = (void*)HDmalloc(buf_size); - if (lValue == NULL) { - UNPIN_JAVA_STRING(name, lName); - h5outOfMemory(env, "H5Lget_val_by_idx: malloc failed "); - return -1; + buf_size = infobuf.u.val_size; + if(buf_size < 0) { + h5libraryError(env); } /* end if */ else { - status = H5Lget_val_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (void*)lValue, (size_t)buf_size, (hid_t)access_id); - - UNPIN_JAVA_STRING(name, lName); - - if (status < 0) { - HDfree(lValue); - h5libraryError(env); + lValue = (void*)HDmalloc(buf_size); + if (lValue == NULL) { + h5outOfMemory(env, "H5Lget_val_by_idx: malloc failed "); } /* end if */ - else if(infobuf.type == H5L_TYPE_EXTERNAL) { - status = H5Lunpack_elink_val((char*)lValue, (size_t)infobuf.u.val_size, (unsigned*)NULL, (const char**)&file_name, (const char**)&obj_name); + else { + status = H5Lget_val_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (void*)lValue, (size_t)buf_size, (hid_t)access_id); + if (status < 0) { - HDfree(lValue); h5libraryError(env); } /* end if */ - else { - str = ENVPTR->NewStringUTF(ENVPAR obj_name); - if (str == NULL) { - HDfree(lValue); - h5JNIFatalError(env, "H5Lget_val_by_idx: return string not created"); + else if(infobuf.type == H5L_TYPE_EXTERNAL) { + status = H5Lunpack_elink_val((char*)lValue, (size_t)infobuf.u.val_size, (unsigned*)NULL, (const char**)&file_name, (const char**)&obj_name); + if (status < 0) { + h5libraryError(env); } /* end if */ else { - ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str); - - str = ENVPTR->NewStringUTF(ENVPAR file_name); + str = ENVPTR->NewStringUTF(ENVPAR obj_name); if (str == NULL) { - HDfree(lValue); h5JNIFatalError(env, "H5Lget_val_by_idx: return string not created"); } /* end if */ else { - ENVPTR->SetObjectArrayElement(ENVPAR link_value, 1, str); - HDfree(lValue); + ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str); + + str = ENVPTR->NewStringUTF(ENVPAR file_name); + if (str == NULL) { + h5JNIFatalError(env, "H5Lget_val_by_idx: return string not created"); + } /* end if */ + else { + ENVPTR->SetObjectArrayElement(ENVPAR link_value, 1, str); + } /* end else */ } /* end else */ } /* end else */ - } /* end else */ - } /* end else if */ - else { - str = ENVPTR->NewStringUTF(ENVPAR (char *)lValue); - if (str == NULL) { - HDfree(lValue); - h5JNIFatalError(env, "H5Lget_val_by_idx: return string not created"); - } /* end if */ + } /* end else if */ else { - ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str); - HDfree(lValue); + str = ENVPTR->NewStringUTF(ENVPAR (char *)lValue); + if (str == NULL) { + h5JNIFatalError(env, "H5Lget_val_by_idx: return string not created"); + } /* end if */ + else { + ENVPTR->SetObjectArrayElement(ENVPAR link_value, 0, str); + } /* end else */ } /* end else */ + HDfree(lValue); } /* end else */ } /* end else */ } /* end else */ - } /* end else */ + UNPIN_JAVA_STRING(name, lName); + } + return infobuf.type; } /* end Java_hdf_hdf5lib_H5_H5Lget_1val_1by_1idx */ @@ -541,20 +529,21 @@ Java_hdf_hdf5lib_H5_H5Lmove const char *lCurName; const char *lDstName; - PIN_JAVA_STRING_TWO0(cur_name, lCurName, dst_name, lDstName); + PIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); + if (lCurName != NULL && lDstName != NULL) { + status = H5Lmove((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); - status = H5Lmove((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); + UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); - UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Lmove */ static herr_t H5L_iterate_cb - (hid_t g_id, const char *name, const H5L_info_t *info, void *op_data) + (hid_t g_id, const char *name, const H5L_info_t *info, void *op_data) { JNIEnv *cbenv; jint status; @@ -645,14 +634,15 @@ Java_hdf_hdf5lib_H5_H5Lvisit_1by_1name h5nullArgument(env, "H5Lvisit_by_name: op_data or callback_op is NULL"); } /* end if */ else { - PIN_JAVA_STRING(name, lName, -1); - - status = H5Lvisit_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5L_iterate_t)H5L_iterate_cb, (void*)op_data, (hid_t)access_id); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + status = H5Lvisit_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5L_iterate_t)H5L_iterate_cb, (void*)op_data, (hid_t)access_id); - UNPIN_JAVA_STRING(name, lName); + UNPIN_JAVA_STRING(name, lName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end else */ return status; @@ -708,14 +698,15 @@ Java_hdf_hdf5lib_H5_H5Literate_1by_1name h5nullArgument(env, "H5Literate_by_name: op_data or callback_op is NULL"); } /* end if */ else { - PIN_JAVA_STRING(name, lName, -1); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + status = H5Literate_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t*)&start_idx, (H5L_iterate_t)H5L_iterate_cb, (void*)op_data, (hid_t)access_id); - status = H5Literate_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (hsize_t*)&start_idx, (H5L_iterate_t)H5L_iterate_cb, (void*)op_data, (hid_t)access_id); - - UNPIN_JAVA_STRING(name, lName); + UNPIN_JAVA_STRING(name, lName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end else */ return status; diff --git a/java/src/jni/h5lImp.h b/java/src/jni/h5lImp.h index 93a187b..6b2f3e1 100644 --- a/java/src/jni/h5lImp.h +++ b/java/src/jni/h5lImp.h @@ -110,7 +110,7 @@ Java_hdf_hdf5lib_H5_H5Lget_1info_1by_1idx * Method: H5Lget_name_by_idx * Signature: (JLjava/lang/String;IIJJ)Ljava/lang/String; */ -JNIEXPORT jobject JNICALL +JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Lget_1name_1by_1idx (JNIEnv*, jclass, jlong, jstring, jint, jint, jlong, jlong); diff --git a/java/src/jni/h5oImp.c b/java/src/jni/h5oImp.c index 872bb4c..24f6988 100644 --- a/java/src/jni/h5oImp.c +++ b/java/src/jni/h5oImp.c @@ -46,17 +46,18 @@ JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Oopen (JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_plist_id) { - hid_t status; + hid_t status = -1; const char *oName; - PIN_JAVA_STRING(name, oName, -1); + PIN_JAVA_STRING(name, oName); + if (oName != NULL) { + status = H5Oopen((hid_t)loc_id, oName, (hid_t)access_plist_id ); - status = H5Oopen((hid_t)loc_id, oName, (hid_t)access_plist_id ); - - UNPIN_JAVA_STRING(name, oName); + UNPIN_JAVA_STRING(name, oName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jlong)status; } /* end Java_hdf_hdf5lib_H5__1H5Oopen */ @@ -92,14 +93,15 @@ Java_hdf_hdf5lib_H5_H5Ocopy const char *lCurName; const char *lDstName; - PIN_JAVA_STRING_TWO0(cur_name, lCurName, dst_name, lDstName); + PIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); + if (lCurName != NULL && lDstName != NULL) { + status = H5Ocopy((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); - status = H5Ocopy((hid_t)cur_loc_id, lCurName, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); + UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); - UNPIN_JAVA_STRING_TWO(cur_name, lCurName, dst_name, lDstName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Ocopy */ /* @@ -123,44 +125,44 @@ Java_hdf_hdf5lib_H5_H5Oget_1info if (status < 0) { h5libraryError(env); - return NULL; } /* end if */ - - args[0].i = (jint)infobuf.hdr.version; - args[1].i = (jint)infobuf.hdr.nmesgs; - args[2].i = (jint)infobuf.hdr.nchunks; - args[3].i = (jint)infobuf.hdr.flags; - args[4].j = (jlong)infobuf.hdr.space.total; - args[5].j = (jlong)infobuf.hdr.space.meta; - args[6].j = (jlong)infobuf.hdr.space.mesg; - args[7].j = (jlong)infobuf.hdr.space.free; - args[8].j = (jlong)infobuf.hdr.mesg.present; - args[9].j = (jlong)infobuf.hdr.mesg.shared; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_hdr_info_t", "(IIIIJJJJJJ)V", args); - hdrinfobuf = ret_obj; - - args[0].j = (jlong)infobuf.meta_size.obj.index_size; - args[1].j = (jlong)infobuf.meta_size.obj.heap_size; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); - ihinfobuf1 = ret_obj; - args[0].j = (jlong)infobuf.meta_size.attr.index_size; - args[1].j = (jlong)infobuf.meta_size.attr.heap_size; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); - ihinfobuf2 = ret_obj; - - args[0].j = (jlong)infobuf.fileno; - args[1].j = (jlong)infobuf.addr; - args[2].i = infobuf.type; - args[3].i = (jint)infobuf.rc; - args[4].j = (jlong)infobuf.num_attrs; - args[5].j = infobuf.atime; - args[6].j = infobuf.mtime; - args[7].j = infobuf.ctime; - args[8].j = infobuf.btime; - args[9].l = hdrinfobuf; - args[10].l = ihinfobuf1; - args[11].l = ihinfobuf2; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_info_t", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V", args); + else { + args[0].i = (jint)infobuf.hdr.version; + args[1].i = (jint)infobuf.hdr.nmesgs; + args[2].i = (jint)infobuf.hdr.nchunks; + args[3].i = (jint)infobuf.hdr.flags; + args[4].j = (jlong)infobuf.hdr.space.total; + args[5].j = (jlong)infobuf.hdr.space.meta; + args[6].j = (jlong)infobuf.hdr.space.mesg; + args[7].j = (jlong)infobuf.hdr.space.free; + args[8].j = (jlong)infobuf.hdr.mesg.present; + args[9].j = (jlong)infobuf.hdr.mesg.shared; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_hdr_info_t", "(IIIIJJJJJJ)V", args); + hdrinfobuf = ret_obj; + + args[0].j = (jlong)infobuf.meta_size.obj.index_size; + args[1].j = (jlong)infobuf.meta_size.obj.heap_size; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); + ihinfobuf1 = ret_obj; + args[0].j = (jlong)infobuf.meta_size.attr.index_size; + args[1].j = (jlong)infobuf.meta_size.attr.heap_size; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); + ihinfobuf2 = ret_obj; + + args[0].j = (jlong)infobuf.fileno; + args[1].j = (jlong)infobuf.addr; + args[2].i = infobuf.type; + args[3].i = (jint)infobuf.rc; + args[4].j = (jlong)infobuf.num_attrs; + args[5].j = infobuf.atime; + args[6].j = infobuf.mtime; + args[7].j = infobuf.ctime; + args[8].j = infobuf.btime; + args[9].l = hdrinfobuf; + args[10].l = ihinfobuf1; + args[11].l = ihinfobuf2; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_info_t", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V", args); + } return ret_obj; } /* end Java_hdf_hdf5lib_H5_H5Oget_1info */ @@ -183,52 +185,53 @@ Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1name jobject ihinfobuf2; jobject ret_obj = NULL; - PIN_JAVA_STRING(name, lName, NULL); - - status = H5Oget_info_by_name((hid_t)loc_id, lName, &infobuf, (hid_t)access_id); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + status = H5Oget_info_by_name((hid_t)loc_id, lName, &infobuf, (hid_t)access_id); - UNPIN_JAVA_STRING(name, lName); + UNPIN_JAVA_STRING(name, lName); - if (status < 0) { - h5libraryError(env); - return NULL; - } /* end if */ - - args[0].i = (jint)infobuf.hdr.version; - args[1].i = (jint)infobuf.hdr.nmesgs; - args[2].i = (jint)infobuf.hdr.nchunks; - args[3].i = (jint)infobuf.hdr.flags; - args[4].j = (jlong)infobuf.hdr.space.total; - args[5].j = (jlong)infobuf.hdr.space.meta; - args[6].j = (jlong)infobuf.hdr.space.mesg; - args[7].j = (jlong)infobuf.hdr.space.free; - args[8].j = (jlong)infobuf.hdr.mesg.present; - args[9].j = (jlong)infobuf.hdr.mesg.shared; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_hdr_info_t", "(IIIIJJJJJJ)V", args); - hdrinfobuf = ret_obj; - - args[0].j = (jlong)infobuf.meta_size.obj.index_size; - args[1].j = (jlong)infobuf.meta_size.obj.heap_size; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); - ihinfobuf1 = ret_obj; - args[0].j = (jlong)infobuf.meta_size.attr.index_size; - args[1].j = (jlong)infobuf.meta_size.attr.heap_size; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); - ihinfobuf2 = ret_obj; - - args[0].j = (jlong)infobuf.fileno; - args[1].j = (jlong)infobuf.addr; - args[2].i = infobuf.type; - args[3].i = (jint)infobuf.rc; - args[4].j = (jlong)infobuf.num_attrs; - args[5].j = infobuf.atime; - args[6].j = infobuf.mtime; - args[7].j = infobuf.ctime; - args[8].j = infobuf.btime; - args[9].l = hdrinfobuf; - args[10].l = ihinfobuf1; - args[11].l = ihinfobuf2; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_info_t", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V", args); + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + args[0].i = (jint)infobuf.hdr.version; + args[1].i = (jint)infobuf.hdr.nmesgs; + args[2].i = (jint)infobuf.hdr.nchunks; + args[3].i = (jint)infobuf.hdr.flags; + args[4].j = (jlong)infobuf.hdr.space.total; + args[5].j = (jlong)infobuf.hdr.space.meta; + args[6].j = (jlong)infobuf.hdr.space.mesg; + args[7].j = (jlong)infobuf.hdr.space.free; + args[8].j = (jlong)infobuf.hdr.mesg.present; + args[9].j = (jlong)infobuf.hdr.mesg.shared; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_hdr_info_t", "(IIIIJJJJJJ)V", args); + hdrinfobuf = ret_obj; + + args[0].j = (jlong)infobuf.meta_size.obj.index_size; + args[1].j = (jlong)infobuf.meta_size.obj.heap_size; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); + ihinfobuf1 = ret_obj; + args[0].j = (jlong)infobuf.meta_size.attr.index_size; + args[1].j = (jlong)infobuf.meta_size.attr.heap_size; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); + ihinfobuf2 = ret_obj; + + args[0].j = (jlong)infobuf.fileno; + args[1].j = (jlong)infobuf.addr; + args[2].i = infobuf.type; + args[3].i = (jint)infobuf.rc; + args[4].j = (jlong)infobuf.num_attrs; + args[5].j = infobuf.atime; + args[6].j = infobuf.mtime; + args[7].j = infobuf.ctime; + args[8].j = infobuf.btime; + args[9].l = hdrinfobuf; + args[10].l = ihinfobuf1; + args[11].l = ihinfobuf2; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_info_t", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V", args); + } + } return ret_obj; } /* end Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1name */ @@ -252,52 +255,53 @@ Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1idx jobject ihinfobuf2; jobject ret_obj = NULL; - PIN_JAVA_STRING(name, lName, NULL); + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + status = H5Oget_info_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (hid_t)access_id); - status = H5Oget_info_by_idx((hid_t)loc_id, lName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, &infobuf, (hid_t)access_id); + UNPIN_JAVA_STRING(name, lName); - UNPIN_JAVA_STRING(name, lName); - - if (status < 0) { - h5libraryError(env); - return NULL; - } /* end if */ - - args[0].i = (jint)infobuf.hdr.version; - args[1].i = (jint)infobuf.hdr.nmesgs; - args[2].i = (jint)infobuf.hdr.nchunks; - args[3].i = (jint)infobuf.hdr.flags; - args[4].j = (jlong)infobuf.hdr.space.total; - args[5].j = (jlong)infobuf.hdr.space.meta; - args[6].j = (jlong)infobuf.hdr.space.mesg; - args[7].j = (jlong)infobuf.hdr.space.free; - args[8].j = (jlong)infobuf.hdr.mesg.present; - args[9].j = (jlong)infobuf.hdr.mesg.shared; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_hdr_info_t", "(IIIIJJJJJJ)V", args); - hdrinfobuf = ret_obj; - - args[0].j = (jlong)infobuf.meta_size.obj.index_size; - args[1].j = (jlong)infobuf.meta_size.obj.heap_size; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); - ihinfobuf1 = ret_obj; - args[0].j = (jlong)infobuf.meta_size.attr.index_size; - args[1].j = (jlong)infobuf.meta_size.attr.heap_size; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); - ihinfobuf2 = ret_obj; - - args[0].j = (jlong)infobuf.fileno; - args[1].j = (jlong)infobuf.addr; - args[2].i = infobuf.type; - args[3].i = (jint)infobuf.rc; - args[4].j = (jlong)infobuf.num_attrs; - args[5].j = infobuf.atime; - args[6].j = infobuf.mtime; - args[7].j = infobuf.ctime; - args[8].j = infobuf.btime; - args[9].l = hdrinfobuf; - args[10].l = ihinfobuf1; - args[11].l = ihinfobuf2; - CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_info_t", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V", args); + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + args[0].i = (jint)infobuf.hdr.version; + args[1].i = (jint)infobuf.hdr.nmesgs; + args[2].i = (jint)infobuf.hdr.nchunks; + args[3].i = (jint)infobuf.hdr.flags; + args[4].j = (jlong)infobuf.hdr.space.total; + args[5].j = (jlong)infobuf.hdr.space.meta; + args[6].j = (jlong)infobuf.hdr.space.mesg; + args[7].j = (jlong)infobuf.hdr.space.free; + args[8].j = (jlong)infobuf.hdr.mesg.present; + args[9].j = (jlong)infobuf.hdr.mesg.shared; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_hdr_info_t", "(IIIIJJJJJJ)V", args); + hdrinfobuf = ret_obj; + + args[0].j = (jlong)infobuf.meta_size.obj.index_size; + args[1].j = (jlong)infobuf.meta_size.obj.heap_size; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); + ihinfobuf1 = ret_obj; + args[0].j = (jlong)infobuf.meta_size.attr.index_size; + args[1].j = (jlong)infobuf.meta_size.attr.heap_size; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5_ih_info_t", "(JJ)V", args); + ihinfobuf2 = ret_obj; + + args[0].j = (jlong)infobuf.fileno; + args[1].j = (jlong)infobuf.addr; + args[2].i = infobuf.type; + args[3].i = (jint)infobuf.rc; + args[4].j = (jlong)infobuf.num_attrs; + args[5].j = infobuf.atime; + args[6].j = infobuf.mtime; + args[7].j = infobuf.ctime; + args[8].j = infobuf.btime; + args[9].l = hdrinfobuf; + args[10].l = ihinfobuf1; + args[11].l = ihinfobuf2; + CALL_CONSTRUCTOR("hdf/hdf5lib/structs/H5O_info_t", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V", args); + } + } return ret_obj; } /* end Java_hdf_hdf5lib_H5_H5Oget_1info_1by_1idx */ @@ -315,14 +319,15 @@ Java_hdf_hdf5lib_H5_H5Olink herr_t status = -1; const char *lDstName; - PIN_JAVA_STRING0(dst_name, lDstName); - - status = H5Olink((hid_t)cur_loc_id, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); + PIN_JAVA_STRING(dst_name, lDstName); + if (lDstName != NULL) { + status = H5Olink((hid_t)cur_loc_id, (hid_t)dst_loc_id, lDstName, (hid_t)create_id, (hid_t)access_id); - UNPIN_JAVA_STRING(dst_name, lDstName); + UNPIN_JAVA_STRING(dst_name, lDstName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Olink */ static herr_t @@ -347,90 +352,71 @@ H5O_iterate_cb return -1; } /* end if */ cls = CBENVPTR->GetObjectClass(CBENVPAR visit_callback); - if (cls == 0) { - /* printf("JNI H5O_iterate_cb error: GetObjectClass failed\n"); */ - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; - } /* end if */ - mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLjava/lang/String;Lhdf/hdf5lib/structs/H5O_info_t;Lhdf/hdf5lib/callbacks/H5O_iterate_t;)I"); - if (mid == 0) { - /* printf("JNI H5O_iterate_cb error: GetMethodID failed\n"); */ - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; + if (cls != 0) { + mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(JLjava/lang/String;Lhdf/hdf5lib/structs/H5O_info_t;Lhdf/hdf5lib/callbacks/H5O_iterate_t;)I"); + if (mid != 0) { + str = CBENVPTR->NewStringUTF(CBENVPAR name); + + args[0].i = (jint)info->hdr.version; + args[1].i = (jint)info->hdr.nmesgs; + args[2].i = (jint)info->hdr.nchunks; + args[3].i = (jint)info->hdr.flags; + args[4].j = (jlong)info->hdr.space.total; + args[5].j = (jlong)info->hdr.space.meta; + args[6].j = (jlong)info->hdr.space.mesg; + args[7].j = (jlong)info->hdr.space.free; + args[8].j = (jlong)info->hdr.mesg.present; + args[9].j = (jlong)info->hdr.mesg.shared; + // get a reference to the H5_hdr_info_t class + cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5O_hdr_info_t"); + if (cls != 0) { + // get a reference to the constructor; the name is + constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "", "(IIIIJJJJJJ)V"); + if (constructor != 0) { + hdrinfobuf = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args); + + args[0].j = (jlong)info->meta_size.obj.index_size; + args[1].j = (jlong)info->meta_size.obj.heap_size; + // get a reference to the H5_ih_info_t class + cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5_ih_info_t"); + if (cls != 0) { + // get a reference to the constructor; the name is + constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "", "(JJ)V"); + if (constructor != 0) { + ihinfobuf1 = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args); + args[0].j = (jlong)info->meta_size.attr.index_size; + args[1].j = (jlong)info->meta_size.attr.heap_size; + ihinfobuf2 = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args); + + args[0].j = (jlong)info->fileno; + args[1].j = (jlong)info->addr; + args[2].i = info->type; + args[3].i = (jint)info->rc; + args[4].j = (jlong)info->num_attrs; + args[5].j = info->atime; + args[6].j = info->mtime; + args[7].j = info->ctime; + args[8].j = info->btime; + args[9].l = hdrinfobuf; + args[10].l = ihinfobuf1; + args[11].l = ihinfobuf2; + // get a reference to the H5O_info_t class + cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5O_info_t"); + if (cls != 0) { + // get a reference to the constructor; the name is + constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V"); + if (constructor != 0) { + cb_info_t = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args); + + status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, g_id, str, cb_info_t, op_data); + } + } + } + } + } + } + } } /* end if */ - str = CBENVPTR->NewStringUTF(CBENVPAR name); - - args[0].i = (jint)info->hdr.version; - args[1].i = (jint)info->hdr.nmesgs; - args[2].i = (jint)info->hdr.nchunks; - args[3].i = (jint)info->hdr.flags; - args[4].j = (jlong)info->hdr.space.total; - args[5].j = (jlong)info->hdr.space.meta; - args[6].j = (jlong)info->hdr.space.mesg; - args[7].j = (jlong)info->hdr.space.free; - args[8].j = (jlong)info->hdr.mesg.present; - args[9].j = (jlong)info->hdr.mesg.shared; - // get a reference to the H5_hdr_info_t class - cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5O_hdr_info_t"); - if (cls == 0) { - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; - } /* end if */ - // get a reference to the constructor; the name is - constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "", "(IIIIJJJJJJ)V"); - if (constructor == 0) { - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; - } /* end if */ - hdrinfobuf = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args); - - args[0].j = (jlong)info->meta_size.obj.index_size; - args[1].j = (jlong)info->meta_size.obj.heap_size; - // get a reference to the H5_ih_info_t class - cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5_ih_info_t"); - if (cls == 0) { - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; - } /* end if */ - // get a reference to the constructor; the name is - constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "", "(JJ)V"); - if (constructor == 0) { - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; - } /* end if */ - ihinfobuf1 = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args); - args[0].j = (jlong)info->meta_size.attr.index_size; - args[1].j = (jlong)info->meta_size.attr.heap_size; - ihinfobuf2 = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args); - - args[0].j = (jlong)info->fileno; - args[1].j = (jlong)info->addr; - args[2].i = info->type; - args[3].i = (jint)info->rc; - args[4].j = (jlong)info->num_attrs; - args[5].j = info->atime; - args[6].j = info->mtime; - args[7].j = info->ctime; - args[8].j = info->btime; - args[9].l = hdrinfobuf; - args[10].l = ihinfobuf1; - args[11].l = ihinfobuf2; - // get a reference to the H5O_info_t class - cls = CBENVPTR->FindClass(CBENVPAR "hdf/hdf5lib/structs/H5O_info_t"); - if (cls == 0) { - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; - } /* end if */ - // get a reference to the constructor; the name is - constructor = CBENVPTR->GetMethodID(CBENVPAR cls, "", "(JJIIJJJJJLhdf/hdf5lib/structs/H5O_hdr_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;Lhdf/hdf5lib/structs/H5_ih_info_t;)V"); - if (constructor == 0) { - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; - } /* end if */ - cb_info_t = CBENVPTR->NewObjectA(CBENVPAR cls, constructor, args); - - status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, g_id, str, cb_info_t, op_data); - JVMPTR->DetachCurrentThread(JVMPAR); return status; @@ -453,17 +439,16 @@ Java_hdf_hdf5lib_H5_H5Ovisit if (op_data == NULL) { h5nullArgument(env, "H5Ovisit: op_data is NULL"); - return -1; } /* end if */ - if (callback_op == NULL) { + else if (callback_op == NULL) { h5nullArgument(env, "H5Ovisit: callback_op is NULL"); - return -1; } /* end if */ + else { + status = H5Ovisit((hid_t)grp_id, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5O_iterate_t)H5O_iterate_cb, (void*)op_data); - status = H5Ovisit((hid_t)grp_id, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5O_iterate_t)H5O_iterate_cb, (void*)op_data); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return status; } /* end Java_hdf_hdf5lib_H5_H5Ovisit */ @@ -488,19 +473,21 @@ Java_hdf_hdf5lib_H5_H5Ovisit_1by_1name h5nullArgument(env, "H5Ovisit_by_name: op_data is NULL"); return -1; } /* end if */ - if (callback_op == NULL) { + else if (callback_op == NULL) { h5nullArgument(env, "H5Ovisit_by_name: callback_op is NULL"); return -1; } /* end if */ + else { + PIN_JAVA_STRING(name, lName); + if (lName != NULL) { + status = H5Ovisit_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5O_iterate_t)H5O_iterate_cb, (void*)op_data, (hid_t)access_id); - PIN_JAVA_STRING(name, lName, -1); - - status = H5Ovisit_by_name((hid_t)grp_id, lName, (H5_index_t)idx_type, (H5_iter_order_t)order, (H5O_iterate_t)H5O_iterate_cb, (void*)op_data, (hid_t)access_id); - - UNPIN_JAVA_STRING(name, lName); + UNPIN_JAVA_STRING(name, lName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } + } return status; } /* end Java_hdf_hdf5lib_H5_H5Ovisit_1by_1name */ @@ -515,24 +502,20 @@ Java_hdf_hdf5lib_H5_H5Oset_1comment (JNIEnv *env, jclass clss, jlong loc_id, jstring comment) { herr_t status = -1; - const char *oComment; + const char *oComment = NULL; jboolean isCopy; if (comment == NULL) { - oComment = NULL; + status = H5Oset_comment((hid_t)loc_id, oComment); } /* end if */ else { oComment = ENVPTR->GetStringUTFChars(ENVPAR comment, &isCopy); - if (oComment == NULL) { - h5JNIFatalError( env, "H5Oset_comment: comment not pinned"); - return; - } /* end if */ - } /* end else */ - - status = H5Oset_comment((hid_t)loc_id, oComment); + if (oComment != NULL) { + status = H5Oset_comment((hid_t)loc_id, oComment); - if(oComment) - ENVPTR->ReleaseStringUTFChars(ENVPAR comment, oComment); + ENVPTR->ReleaseStringUTFChars(ENVPAR comment, oComment); + } + } /* end else */ if (status < 0) h5libraryError(env); @@ -552,30 +535,25 @@ Java_hdf_hdf5lib_H5_H5Oset_1comment_1by_1name const char *oName; const char *oComment; - PIN_JAVA_STRING0(name, oName); - - if (comment == NULL) { - oComment = NULL; - } /* end if */ - else { - jboolean isCopy; - oComment = ENVPTR->GetStringUTFChars(ENVPAR comment, &isCopy); - if (oComment == NULL) { - UNPIN_JAVA_STRING(name, oName); - h5JNIFatalError( env, "H5Oset_comment_by_name: comment not pinned"); - return; + PIN_JAVA_STRING(name, oName); + if (oName != NULL) { + if (comment == NULL) { + status = H5Oset_comment_by_name((hid_t)loc_id, oName, NULL, (hid_t)access_id); } /* end if */ - } /* end else */ - - status = H5Oset_comment_by_name((hid_t)loc_id, oName, oComment, (hid_t)access_id); + else { + jboolean isCopy; + oComment = ENVPTR->GetStringUTFChars(ENVPAR comment, &isCopy); + if (oComment != NULL) { + status = H5Oset_comment_by_name((hid_t)loc_id, oName, oComment, (hid_t)access_id); + ENVPTR->ReleaseStringUTFChars(ENVPAR comment, oComment); + } /* end if */ + } /* end else */ - UNPIN_JAVA_STRING(name, oName); - - if(oComment) - ENVPTR->ReleaseStringUTFChars(ENVPAR comment, oComment); + UNPIN_JAVA_STRING(name, oName); - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Oset_1comment_1by_1name */ /* @@ -596,34 +574,30 @@ Java_hdf_hdf5lib_H5_H5Oget_1comment buf_size = H5Oget_comment((hid_t)loc_id, NULL, 0); if (buf_size < 0) { h5badArgument( env, "H5Oget_comment: buf_size < 0"); - return NULL; - } /* end if */ - if (buf_size == 0) { - return NULL; } /* end if */ - - buf_size++; /* add extra space for the null terminator */ - oComment = (char *)HDmalloc(sizeof(char) * (size_t)buf_size); - if (oComment == NULL) { - /* exception -- out of memory */ - h5outOfMemory( env, "H5Oget_comment: malloc failed"); - return NULL; - } /* end if */ - - status = H5Oget_comment((hid_t)loc_id, oComment, (size_t)buf_size); - - if (status >= 0) { - /* may throw OutOfMemoryError */ - str = ENVPTR->NewStringUTF(ENVPAR oComment); - HDfree(oComment); - if (str == NULL) { - h5JNIFatalError( env, "H5Oget_comment: return string not allocated"); + else if (buf_size > 0) { + buf_size++; /* add extra space for the null terminator */ + oComment = (char *)HDmalloc(sizeof(char) * (size_t)buf_size); + if (oComment == NULL) { + /* exception -- out of memory */ + h5outOfMemory( env, "H5Oget_comment: malloc failed"); } /* end if */ - } /* end if */ - else { - HDfree(oComment); - h5libraryError(env); - } /* end else */ + else { + status = H5Oget_comment((hid_t)loc_id, oComment, (size_t)buf_size); + + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + /* may throw OutOfMemoryError */ + str = ENVPTR->NewStringUTF(ENVPAR oComment); + if (str == NULL) { + h5JNIFatalError( env, "H5Oget_comment: return string not allocated"); + } /* end if */ + } /* end else */ + HDfree(oComment); + } + } /* end else if */ return (jstring)str; } /* end Java_hdf_hdf5lib_H5_H5Oget_1comment */ @@ -643,43 +617,37 @@ Java_hdf_hdf5lib_H5_H5Oget_1comment_1by_1name ssize_t status; jstring str = NULL; - PIN_JAVA_STRING(name, oName, NULL); - - /* get the length of the comment */ - buf_size = H5Oget_comment_by_name((hid_t)loc_id, oName, NULL, 0, (hid_t)access_id); - if (buf_size < 0) { - UNPIN_JAVA_STRING(name, oName); - h5badArgument( env, "H5Oget_comment_by_name: buf_size < 0"); - return NULL; - } /* end if */ - if (buf_size == 0) { - UNPIN_JAVA_STRING(name, oName); - return NULL; - } /* end if */ - - buf_size++; /* add extra space for the null terminator */ - oComment = (char *)HDmalloc(sizeof(char) * (size_t)buf_size); - if (oComment == NULL) { - UNPIN_JAVA_STRING(name, oName); - h5outOfMemory( env, "H5Oget_comment_by_name: malloc failed"); - return NULL; - } /* end if */ - - status = H5Oget_comment_by_name((hid_t)loc_id, oName, oComment, (size_t)buf_size, (hid_t)access_id); - UNPIN_JAVA_STRING(name, oName); - - if (status >= 0) { - /* may throw OutOfMemoryError */ - str = ENVPTR->NewStringUTF(ENVPAR oComment); - HDfree(oComment); - if (str == NULL) { - h5JNIFatalError( env, "H5Oget_comment_by_name: return string not allocated"); + PIN_JAVA_STRING(name, oName); + if (oName != NULL) { + /* get the length of the comment */ + buf_size = H5Oget_comment_by_name((hid_t)loc_id, oName, NULL, 0, (hid_t)access_id); + if (buf_size < 0) { + h5badArgument( env, "H5Oget_comment_by_name: buf_size < 0"); } /* end if */ - } /* end if */ - else { - HDfree(oComment); - h5libraryError(env); - } /* end else */ + else if (buf_size > 0) { + buf_size++; /* add extra space for the null terminator */ + oComment = (char *)HDmalloc(sizeof(char) * (size_t)buf_size); + if (oComment == NULL) { + h5outOfMemory( env, "H5Oget_comment_by_name: malloc failed"); + } /* end if */ + else { + status = H5Oget_comment_by_name((hid_t)loc_id, oName, oComment, (size_t)buf_size, (hid_t)access_id); + + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + /* may throw OutOfMemoryError */ + str = ENVPTR->NewStringUTF(ENVPAR oComment); + if (str == NULL) { + h5JNIFatalError( env, "H5Oget_comment_by_name: return string not allocated"); + } /* end if */ + } /* end else */ + HDfree(oComment); + } + } /* end if */ + UNPIN_JAVA_STRING(name, oName); + } return (jstring)str; } /* end Java_hdf_hdf5lib_H5_H5Oget_1comment_1by_1name */ @@ -696,16 +664,17 @@ Java_hdf_hdf5lib_H5_H5Oexists_1by_1name htri_t bval = JNI_FALSE; const char *oName; - PIN_JAVA_STRING(name, oName, JNI_FALSE); - - bval = H5Oexists_by_name((hid_t)loc_id, oName, (hid_t)access_id); + PIN_JAVA_STRING(name, oName); + if (oName != NULL) { + bval = H5Oexists_by_name((hid_t)loc_id, oName, (hid_t)access_id); - UNPIN_JAVA_STRING(name, oName); + UNPIN_JAVA_STRING(name, oName); - if (bval > 0) - bval = JNI_TRUE; - else if (bval < 0) - h5libraryError(env); + if (bval > 0) + bval = JNI_TRUE; + else if (bval < 0) + h5libraryError(env); + } return (jboolean)bval; } /* end Java_hdf_hdf5lib_H5_H5Oexists_1by_1name */ @@ -767,14 +736,15 @@ Java_hdf_hdf5lib_H5__1H5Oopen_1by_1idx hid_t retVal = -1; const char *oName; - PIN_JAVA_STRING(name, oName, -1); + PIN_JAVA_STRING(name, oName); + if (oName != NULL) { + retVal = H5Oopen_by_idx((hid_t)loc_id, oName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (hid_t)lapl_id ); - retVal = H5Oopen_by_idx((hid_t)loc_id, oName, (H5_index_t)index_field, (H5_iter_order_t)order, (hsize_t)link_n, (hid_t)lapl_id ); + UNPIN_JAVA_STRING(name, oName); - UNPIN_JAVA_STRING(name, oName); - - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jlong)retVal; } /* end Java_hdf_hdf5lib_H5__1H5Oopen_1by_1idx */ @@ -786,7 +756,7 @@ Java_hdf_hdf5lib_H5__1H5Oopen_1by_1idx */ JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Oflush - (JNIEnv *env, jclass clss, jlong loc_id) + (JNIEnv *env, jclass clss, jlong loc_id) { if (H5Oflush((hid_t)loc_id) < 0) h5libraryError(env); @@ -799,7 +769,7 @@ Java_hdf_hdf5lib_H5_H5Oflush */ JNIEXPORT void JNICALL Java_hdf_hdf5lib_H5_H5Orefresh - (JNIEnv *env, jclass clss, jlong loc_id) + (JNIEnv *env, jclass clss, jlong loc_id) { if (H5Orefresh((hid_t)loc_id) < 0) h5libraryError(env); diff --git a/java/src/jni/h5pImp.c b/java/src/jni/h5pImp.c index 11dcbe5..ad79733 100644 --- a/java/src/jni/h5pImp.c +++ b/java/src/jni/h5pImp.c @@ -632,14 +632,15 @@ Java_hdf_hdf5lib_H5_H5Pset_1external off = (off_t)offset; sz = (hsize_t)size; - PIN_JAVA_STRING(name, fileName, -1); + PIN_JAVA_STRING(name, fileName); + if (fileName != NULL) { + status = H5Pset_external(plid, fileName, off, sz); - status = H5Pset_external(plid, fileName, off, sz); + UNPIN_JAVA_STRING(name, fileName); - UNPIN_JAVA_STRING(name, fileName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Pset_1external */ @@ -675,66 +676,57 @@ Java_hdf_hdf5lib_H5_H5Pget_1external herr_t status = -1; jlong *theArray; jboolean isCopy; - char *file; + char *file = NULL; jstring str; off_t o; hsize_t s; if (name_size < 0) { h5badArgument(env, "H5Pget_external: name_size < 0"); - return -1; } /* end if */ - else if (name_size == 0) { - file = NULL; + else if ((size != NULL) && (ENVPTR->GetArrayLength(ENVPAR size) < 2)) { + h5badArgument(env, "H5Pget_external: size input array < 2"); } /* end else if */ else { - file = (char *)HDmalloc(sizeof(char)*(size_t)name_size); - } /* end else */ + if (name_size > 0) { + file = (char *)HDmalloc(sizeof(char)*(size_t)name_size); + } /* end else */ - if (size != NULL) { - if (ENVPTR->GetArrayLength(ENVPAR size) < 2) { - HDfree(file); - h5badArgument(env, "H5Pget_external: size input array < 2"); - return -1; - } /* end if */ - theArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR size, &isCopy); - if (theArray == NULL) { + status = H5Pget_external((hid_t) plist, (unsigned)idx, (size_t)name_size, + file, (off_t *)&o, (hsize_t *)&s); + if (status < 0) { HDfree(file); - h5JNIFatalError( env, "H5Pget_external: size array not pinned"); - return -1; - } /* end if */ - } /* end if */ - - status = H5Pget_external((hid_t) plist, (unsigned)idx, (size_t)name_size, - file, (off_t *)&o, (hsize_t *)&s); - if (status < 0) { - if (size != NULL) { - ENVPTR->ReleaseLongArrayElements(ENVPAR size, theArray, JNI_ABORT); - } /* end if */ - HDfree(file); - h5libraryError(env); - } /* end if */ - else { - if (size != NULL) { - theArray[0] = o; - theArray[1] = (jlong)s; - ENVPTR->ReleaseLongArrayElements(ENVPAR size, theArray, 0); + h5libraryError(env); } /* end if */ + else { + if (size != NULL) { + theArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR size, &isCopy); + if (theArray == NULL) { + h5JNIFatalError( env, "H5Pget_external: size array not pinned"); + } /* end if */ + else { + theArray[0] = o; + theArray[1] = (jlong)s; + ENVPTR->ReleaseLongArrayElements(ENVPAR size, theArray, 0); + } + } /* end if */ - if (file != NULL) { - /* NewStringUTF may throw OutOfMemoryError */ - str = ENVPTR->NewStringUTF(ENVPAR file); - if (str == NULL) { - HDfree(file); - h5JNIFatalError(env, "H5Pget_external: return array not created"); + if (file != NULL) { + /* NewStringUTF may throw OutOfMemoryError */ + str = ENVPTR->NewStringUTF(ENVPAR file); + if (str == NULL) { + HDfree(file); + h5JNIFatalError(env, "H5Pget_external: return array not created"); + } /* end if */ + else { + /* SetObjectArrayElement may raise exceptions */ + ENVPTR->SetObjectArrayElement(ENVPAR name, 0, (jobject)str); + HDfree(file); + } /* end else */ } /* end if */ - else { - /* SetObjectArrayElement may raise exceptions */ - ENVPTR->SetObjectArrayElement(ENVPAR name, 0, (jobject)str); - HDfree(file); - } /* end else */ - } /* end if */ - } /* end else */ + } /* end else */ + } + return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Pget_1external */ @@ -748,26 +740,28 @@ Java_hdf_hdf5lib_H5_H5Pset_1fill_1value (JNIEnv *env, jclass clss, jlong plist_id, jlong type_id, jbyteArray value) { jint status = -1; - jbyte *byteP; + jbyte *byteP = NULL; jboolean isCopy; if (value != NULL) { byteP = ENVPTR->GetByteArrayElements(ENVPAR value, &isCopy); if (byteP == NULL) { h5JNIFatalError(env, "H5Pget_fill_value: value array not pinned"); - return -1; } /* end if */ - } /* end if */ - - status = H5Pset_fill_value((hid_t)plist_id, (hid_t)type_id, byteP); + else { + status = H5Pset_fill_value((hid_t)plist_id, (hid_t)type_id, byteP); - if (value != NULL) - ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT); + ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT); + } + } /* end if */ + else { + status = H5Pset_fill_value((hid_t)plist_id, (hid_t)type_id, byteP); + } if (status < 0) h5libraryError(env); - return status; + return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Pset_1fill_1value */ /* @@ -802,7 +796,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1fill_1value } /* end else */ } /* end else */ - return status; + return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Pget_1fill_1value */ /* @@ -874,6 +868,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1filter jint *flagsArray; jlong *cd_nelmtsArray; jint *cd_valuesArray; + jint mode = JNI_ABORT; jboolean isCopy; jstring str; char *filter; @@ -893,65 +888,59 @@ Java_hdf_hdf5lib_H5_H5Pget_1filter else { filter = (char *)HDmalloc(sizeof(char)*(size_t)namelen); if (filter == NULL) { - h5outOfMemory(env, "H5Pget_filter: namelent malloc failed"); - return -1; - } /* end if */ - flagsArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR flags, &isCopy); - if (flagsArray == NULL) { - HDfree(filter); - h5JNIFatalError(env, "H5Pget_filter: flags array not pinned"); - return -1; - } /* end if */ - cd_nelmtsArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR cd_nelmts, &isCopy); - if (cd_nelmtsArray == NULL) { - ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT); - HDfree(filter); - h5JNIFatalError(env, "H5Pget_filter: nelmts array not pinned"); - return -1; - } /* end if */ - cd_valuesArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR cd_values, &isCopy); - if (cd_valuesArray == NULL) { - ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT); - ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT); - HDfree(filter); - h5JNIFatalError(env, "H5Pget_filter: elmts array not pinned"); - return -1; - } /* end if */ - - { /* direct cast (size_t *)variable fails on 32-bit environment */ - long long cd_nelmts_temp = *(cd_nelmtsArray); - size_t cd_nelmts_t = (size_t)cd_nelmts_temp; - unsigned int filter_config; - status = H5Pget_filter2((hid_t)plist, (unsigned)filter_number, - (unsigned int *)flagsArray, &cd_nelmts_t, (unsigned int *)cd_valuesArray, - (size_t)namelen, filter, &filter_config); - - *cd_nelmtsArray = (jlong)cd_nelmts_t; - } /* end direct cast special */ - - if (status < 0) { - ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, JNI_ABORT); - ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, JNI_ABORT); - ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, JNI_ABORT); - HDfree(filter); - h5libraryError(env); + h5outOfMemory(env, "H5Pget_filter: namelen malloc failed"); } /* end if */ else { - ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, 0); - ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, 0); - ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, 0); - - /* NewStringUTF may throw OutOfMemoryError */ - str = ENVPTR->NewStringUTF(ENVPAR filter); - HDfree(filter); - if (str == NULL) { - h5JNIFatalError(env, "H5Pget_filter: return string not pinned"); + flagsArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR flags, &isCopy); + if (flagsArray == NULL) { + h5JNIFatalError(env, "H5Pget_filter: flags array not pinned"); } /* end if */ else { - /* SetObjectArrayElement may throw exceptiosn */ - ENVPTR->SetObjectArrayElement(ENVPAR name, 0, (jobject)str); - } /* end else */ - } /* end else */ + cd_nelmtsArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR cd_nelmts, &isCopy); + if (cd_nelmtsArray == NULL) { + h5JNIFatalError(env, "H5Pget_filter: nelmts array not pinned"); + } /* end if */ + else { + cd_valuesArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR cd_values, &isCopy); + if (cd_valuesArray == NULL) { + h5JNIFatalError(env, "H5Pget_filter: elmts array not pinned"); + } /* end if */ + else { + /* direct cast (size_t *)variable fails on 32-bit environment */ + long long cd_nelmts_temp = *(cd_nelmtsArray); + size_t cd_nelmts_t = (size_t)cd_nelmts_temp; + unsigned int filter_config; + status = H5Pget_filter2((hid_t)plist, (unsigned)filter_number, + (unsigned int *)flagsArray, &cd_nelmts_t, (unsigned int *)cd_valuesArray, + (size_t)namelen, filter, &filter_config); + + *cd_nelmtsArray = (jlong)cd_nelmts_t; + /* end direct cast special */ + + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + mode = 0; + + /* NewStringUTF may throw OutOfMemoryError */ + str = ENVPTR->NewStringUTF(ENVPAR filter); + if (str == NULL) { + h5JNIFatalError(env, "H5Pget_filter: return string not pinned"); + } /* end if */ + else { + /* SetObjectArrayElement may throw exceptiosn */ + ENVPTR->SetObjectArrayElement(ENVPAR name, 0, (jobject)str); + } /* end else */ + } /* end else */ + ENVPTR->ReleaseIntArrayElements(ENVPAR cd_values, cd_valuesArray, mode); + } + ENVPTR->ReleaseLongArrayElements(ENVPAR cd_nelmts, cd_nelmtsArray, mode); + } + ENVPTR->ReleaseIntArrayElements(ENVPAR flags, flagsArray, mode); + } + HDfree(filter); + } } /* end else */ return (jint)status; @@ -1007,15 +996,12 @@ Java_hdf_hdf5lib_H5_H5Pget_1cache { herr_t status = -1; jint mode; - jdouble *w0Array; - jlong *rdcc_nelmtsArray; - jlong *nbytesArray; + jdouble *w0Array = (jdouble *)NULL; + jlong *rdcc_nelmtsArray = (jlong *)NULL; + jlong *nbytesArray = (jlong *)NULL; jboolean isCopy; - if (rdcc_w0 == NULL) { - w0Array = (jdouble *)NULL; - } /* end if */ - else { + if (rdcc_w0 != NULL) { w0Array = (jdouble *)ENVPTR->GetDoubleArrayElements(ENVPAR rdcc_w0, &isCopy); if (w0Array == NULL) { h5JNIFatalError(env, "H5Pget_cache: w0_array array not pinned"); @@ -1023,10 +1009,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1cache } /* end if */ } /* end else */ - if (rdcc_nelmts == NULL) { - rdcc_nelmtsArray = (jlong *) NULL; - } /* end if */ - else { + if (rdcc_nelmts != NULL) { rdcc_nelmtsArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR rdcc_nelmts, &isCopy); if (rdcc_nelmtsArray == NULL) { /* exception -- out of memory */ @@ -1038,10 +1021,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1cache } /* end if */ } /* end else */ - if (rdcc_nbytes == NULL) { - nbytesArray = (jlong *) NULL; - } /* end if */ - else { + if (rdcc_nbytes != NULL) { nbytesArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR rdcc_nbytes, &isCopy); if (nbytesArray == NULL) { if (w0Array != NULL) { @@ -1148,7 +1128,7 @@ Java_hdf_hdf5lib_H5_H5Pset_1buffer if (bkg != NULL) ENVPTR->ReleaseByteArrayElements(ENVPAR bkg, bkgP, 0); - return status; + return (jint)status; #endif } /* end Java_hdf_hdf5lib_H5_H5Pset_1buffer */ @@ -1200,7 +1180,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1buffer ENVPTR->ReleaseByteArrayElements(ENVPAR tconv, tconvP, 0); ENVPTR->ReleaseByteArrayElements(ENVPAR bkg, bkgP, 0); - return status; + return (jint)status; #endif } /* end Java_hdf_hdf5lib_H5_H5Pget_1buffer */ @@ -1998,6 +1978,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1fapl_1family herr_t status = -1; jlong *sizeArray; jlong *plistArray; + jint mode = JNI_ABORT; jboolean isCopy; hsize_t *sa; size_t i; @@ -2013,39 +1994,36 @@ Java_hdf_hdf5lib_H5_H5Pget_1fapl_1family sizeArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR memb_size, &isCopy); if (sizeArray == NULL) { h5JNIFatalError(env, "H5Pget_family: sizeArray not pinned"); - return -1; - } /* end if */ - rank = (size_t)ENVPTR->GetArrayLength(ENVPAR memb_size); - sa = (hsize_t *)HDmalloc(rank * sizeof(hsize_t)); - if (sa == NULL) { - ENVPTR->ReleaseLongArrayElements(ENVPAR memb_size, sizeArray, JNI_ABORT); - h5JNIFatalError(env, "H5Screate-simple: dims not converted to hsize_t"); - return -1; - } /* end if */ - plistArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR memb_plist, &isCopy); - if (plistArray == NULL) { - HDfree(sa); - ENVPTR->ReleaseLongArrayElements(ENVPAR memb_size, sizeArray, JNI_ABORT); - h5JNIFatalError(env, "H5Pget_family: plistArray not pinned"); - return -1; - } /* end if */ - - status = H5Pget_fapl_family ((hid_t)tid, sa, (hid_t *)plistArray); - - if (status < 0) { - HDfree(sa); - ENVPTR->ReleaseLongArrayElements(ENVPAR memb_size, sizeArray, JNI_ABORT); - ENVPTR->ReleaseLongArrayElements(ENVPAR memb_plist, plistArray, JNI_ABORT); - h5libraryError(env); } /* end if */ else { - for (i = 0; i < rank; i++) { - sizeArray[i] = (jlong)sa[i]; - } /* end for */ - HDfree(sa); - ENVPTR->ReleaseLongArrayElements(ENVPAR memb_size, sizeArray, 0); - ENVPTR->ReleaseLongArrayElements(ENVPAR memb_plist, plistArray, 0); - } /* end else */ + rank = (size_t)ENVPTR->GetArrayLength(ENVPAR memb_size); + sa = (hsize_t *)HDmalloc(rank * sizeof(hsize_t)); + if (sa == NULL) { + h5JNIFatalError(env, "H5Screate-simple: dims not converted to hsize_t"); + } /* end if */ + else { + plistArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR memb_plist, &isCopy); + if (plistArray == NULL) { + h5JNIFatalError(env, "H5Pget_family: plistArray not pinned"); + } /* end if */ + else { + status = H5Pget_fapl_family ((hid_t)tid, sa, (hid_t *)plistArray); + + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + for (i = 0; i < rank; i++) { + sizeArray[i] = (jlong)sa[i]; + } /* end for */ + mode = 0; + } /* end else */ + ENVPTR->ReleaseLongArrayElements(ENVPAR memb_plist, plistArray, mode); + } + HDfree(sa); + } + ENVPTR->ReleaseLongArrayElements(ENVPAR memb_size, sizeArray, mode); + } } /* end else */ return (jint)status; @@ -2079,6 +2057,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1fapl_1core (JNIEnv *env, jclass clss, jlong fapl_id, jlongArray increment, jbooleanArray backing_store) { herr_t status = -1; + jint mode = JNI_ABORT; jlong *incArray; jboolean *backArray; jboolean isCopy; @@ -2093,34 +2072,32 @@ Java_hdf_hdf5lib_H5_H5Pget_1fapl_1core incArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR increment, &isCopy); if (incArray == NULL) { h5JNIFatalError(env, "H5Pget_fapl_core: incArray not pinned"); - return -1; - } /* end if */ - - backArray = (jboolean *)ENVPTR->GetBooleanArrayElements(ENVPAR backing_store, &isCopy); - if (backArray == NULL) { - ENVPTR->ReleaseLongArrayElements(ENVPAR increment, incArray, JNI_ABORT); - h5JNIFatalError(env, "H5Pget_fapl_core: backArray not pinned"); - return -1; } /* end if */ + else { + backArray = (jboolean *)ENVPTR->GetBooleanArrayElements(ENVPAR backing_store, &isCopy); + if (backArray == NULL) { + h5JNIFatalError(env, "H5Pget_fapl_core: backArray not pinned"); + } /* end if */ + else { + /* direct cast (size_t *)variable fails on 32-bit environment */ + long long inc_temp = *(incArray); + size_t inc_t = (size_t)inc_temp; - { /* direct cast (size_t *)variable fails on 32-bit environment */ - long long inc_temp = *(incArray); - size_t inc_t = (size_t)inc_temp; - - status = H5Pget_fapl_core((hid_t)fapl_id, &inc_t, (hbool_t *)backArray); + status = H5Pget_fapl_core((hid_t)fapl_id, &inc_t, (hbool_t *)backArray); - *incArray = (jlong)inc_t; - } /* end direct cast special */ + *incArray = (jlong)inc_t; + /* end direct cast special */ - if (status < 0) { - ENVPTR->ReleaseLongArrayElements(ENVPAR increment, incArray, JNI_ABORT); - ENVPTR->ReleaseBooleanArrayElements(ENVPAR backing_store, backArray, JNI_ABORT); - h5libraryError(env); - } /* end if */ - else { - ENVPTR->ReleaseLongArrayElements(ENVPAR increment, incArray, 0); - ENVPTR->ReleaseBooleanArrayElements(ENVPAR backing_store, backArray, 0); - } /* end else */ + if (status < 0) { + h5libraryError(env); + } /* end if */ + else { + mode = 0; + } /* end else */ + ENVPTR->ReleaseBooleanArrayElements(ENVPAR backing_store, backArray, mode); + } + ENVPTR->ReleaseLongArrayElements(ENVPAR increment, incArray, mode); + } } /* end else */ return (jint)status; @@ -2175,14 +2152,15 @@ Java_hdf_hdf5lib_H5_H5Pset_1fapl_1log herr_t retVal = -1; const char *pLogfile; - PIN_JAVA_STRING0(logfile, pLogfile); - - retVal = H5Pset_fapl_log( (hid_t)fapl_id, pLogfile, (unsigned long long)flags, (size_t)buf_size ); + PIN_JAVA_STRING(logfile, pLogfile); + if (pLogfile != NULL) { + retVal = H5Pset_fapl_log( (hid_t)fapl_id, pLogfile, (unsigned long long)flags, (size_t)buf_size ); - UNPIN_JAVA_STRING(logfile, pLogfile); + UNPIN_JAVA_STRING(logfile, pLogfile); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1log */ /* @@ -2200,7 +2178,7 @@ Java_hdf_hdf5lib_H5_H5P1remove_1filter if (status < 0) h5libraryError(env); - return status; + return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5P1remove_1filter */ @@ -2216,14 +2194,15 @@ Java_hdf_hdf5lib_H5_H5Pset hid_t retVal = -1; const char *cstr; - PIN_JAVA_STRING(name, cstr, -1); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + retVal = H5Pset((hid_t)plid, cstr, &val); - retVal = H5Pset((hid_t)plid, cstr, &val); - - UNPIN_JAVA_STRING(name, cstr); + UNPIN_JAVA_STRING(name, cstr); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jlong)retVal; } /* end Java_hdf_hdf5lib_H5_H5Pset */ @@ -2240,16 +2219,17 @@ Java_hdf_hdf5lib_H5_H5Pexist htri_t bval = JNI_FALSE; const char *cstr; - PIN_JAVA_STRING(name, cstr, JNI_FALSE); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + bval = H5Pexist((hid_t)plid, cstr); - bval = H5Pexist((hid_t)plid, cstr); - - UNPIN_JAVA_STRING(name, cstr); + UNPIN_JAVA_STRING(name, cstr); - if (bval > 0) - bval = JNI_TRUE; - else if (bval < 0) - h5libraryError(env); + if (bval > 0) + bval = JNI_TRUE; + else if (bval < 0) + h5libraryError(env); + } return (jboolean)bval; } /* end Java_hdf_hdf5lib_H5_H5Pexist */ @@ -2265,16 +2245,17 @@ Java_hdf_hdf5lib_H5_H5Pget_1size { hid_t retVal = -1; const char *cstr; - size_t size; + size_t size = 0; - PIN_JAVA_STRING(name, cstr, -1); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + retVal = H5Pget_size((hid_t)plid, cstr, &size); - retVal = H5Pget_size((hid_t)plid, cstr, &size); - - UNPIN_JAVA_STRING(name, cstr); + UNPIN_JAVA_STRING(name, cstr); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jlong) size; } /* end Java_hdf_hdf5lib_H5_H5Pget_1size */ @@ -2306,7 +2287,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1class_1name (JNIEnv *env, jclass clss, jlong plid) { char *c_str; - jstring j_str; + jstring j_str = NULL; c_str = H5Pget_class_name((hid_t)plid); if (c_str == NULL) { @@ -2371,14 +2352,15 @@ Java_hdf_hdf5lib_H5_H5Pget const char *cstr; jint val; - PIN_JAVA_STRING(name, cstr, -1); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + retVal = H5Pget((hid_t)plid, cstr, &val); - retVal = H5Pget((hid_t)plid, cstr, &val); - - UNPIN_JAVA_STRING(name, cstr); + UNPIN_JAVA_STRING(name, cstr); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jint)val; } /* end Java_hdf_hdf5lib_H5_H5Pget */ @@ -2413,14 +2395,15 @@ Java_hdf_hdf5lib_H5_H5Pcopy_1prop herr_t retVal = -1; const char *cstr; - PIN_JAVA_STRING(name, cstr, -1); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + retVal = H5Pcopy_prop((hid_t)dst_plid, (hid_t)src_plid, cstr); - retVal = H5Pcopy_prop((hid_t)dst_plid, (hid_t)src_plid, cstr); - - UNPIN_JAVA_STRING(name, cstr); + UNPIN_JAVA_STRING(name, cstr); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jint)retVal; } /* end Java_hdf_hdf5lib_H5_H5Pcopy_1prop */ @@ -2437,14 +2420,15 @@ Java_hdf_hdf5lib_H5_H5Premove herr_t retVal = -1; const char *cstr; - PIN_JAVA_STRING(name, cstr, -1); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + retVal = H5Premove((hid_t)plid, cstr); - retVal = H5Premove((hid_t)plid, cstr); - - UNPIN_JAVA_STRING(name, cstr); + UNPIN_JAVA_STRING(name, cstr); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jint)retVal; } /* end Java_hdf_hdf5lib_H5_H5Premove */ @@ -2461,14 +2445,15 @@ Java_hdf_hdf5lib_H5_H5Punregister herr_t retVal = -1; const char *cstr; - PIN_JAVA_STRING(name, cstr, -1); - - retVal = H5Punregister((hid_t)plid, cstr); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + retVal = H5Punregister((hid_t)plid, cstr); - UNPIN_JAVA_STRING(name, cstr); + UNPIN_JAVA_STRING(name, cstr); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jint)retVal; } /* end Java_hdf_hdf5lib_H5_H5Punregister */ @@ -2976,14 +2961,15 @@ Java_hdf_hdf5lib_H5_H5Pset_1data_1transform herr_t retVal = -1; const char *express; - PIN_JAVA_STRING(expression, express, -1); - - retVal = H5Pset_data_transform((hid_t)plist_id, express); + PIN_JAVA_STRING(expression, express); + if (express != NULL) { + retVal = H5Pset_data_transform((hid_t)plist_id, express); - UNPIN_JAVA_STRING(expression, express); + UNPIN_JAVA_STRING(expression, express); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } return (jint)retVal; } /* end Java_hdf_hdf5lib_H5_H5Pset_1data_1transform */ @@ -3566,14 +3552,15 @@ Java_hdf_hdf5lib_H5_H5Pset_1elink_1prefix herr_t retVal = -1; const char *aName; - PIN_JAVA_STRING(prefix, aName, -1); + PIN_JAVA_STRING(prefix, aName); + if (aName != NULL) { + retVal = H5Pset_elink_prefix((hid_t)lapl_id, aName); - retVal = H5Pset_elink_prefix((hid_t)lapl_id, aName); + UNPIN_JAVA_STRING(prefix, aName); - UNPIN_JAVA_STRING(prefix, aName); - - if(retVal < 0) - h5libraryError(env); + if(retVal < 0) + h5libraryError(env); + } return (jint)retVal; } /* end Java_hdf_hdf5lib_H5_H5Pset_1elink_1prefix */ @@ -3589,7 +3576,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1elink_1prefix { size_t size = 0; char *pre; - jlong prefix_size; + jlong prefix_size = -1; jstring str = NULL; if (prefix == NULL) { @@ -3966,14 +3953,15 @@ Java_hdf_hdf5lib_H5_H5Pset_1fapl_1split const char *mstr; const char *rstr; - PIN_JAVA_STRING_TWO0(metaext, mstr, rawext, rstr); + PIN_JAVA_STRING_TWO(metaext, mstr, rawext, rstr); + if (mstr != NULL && rstr != NULL) { + retVal = H5Pset_fapl_split((hid_t)fapl_id, mstr, (hid_t)meta_pl_id, rstr, (hid_t)raw_pl_id); - retVal = H5Pset_fapl_split((hid_t)fapl_id, mstr, (hid_t)meta_pl_id, rstr, (hid_t)raw_pl_id); + UNPIN_JAVA_STRING_TWO(metaext, mstr, rawext, rstr); - UNPIN_JAVA_STRING_TWO(metaext, mstr, rawext, rstr); - - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1split */ /* @@ -4034,7 +4022,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1sieve_1buf_1size { size_t s; - if ( H5Pget_sieve_buf_size((hid_t)plist, &s) < 0) + if (H5Pget_sieve_buf_size((hid_t)plist, &s) < 0) h5libraryError(env); return (jlong)s; @@ -4486,13 +4474,13 @@ Java_hdf_hdf5lib_H5_H5Pset_1mdc_1config cacheinfo.metadata_write_strategy = ENVPTR->GetIntField(ENVPAR cache_config, fid); if(ENVPTR->ExceptionOccurred(ENVONLY)) { h5JNIFatalError(env, "H5Pset_mdc_config: loading metadata_write_strategy failed"); - return; } /* end if */ + else { + status = H5Pset_mdc_config((hid_t)plist, &cacheinfo); - status = H5Pset_mdc_config((hid_t)plist, &cacheinfo); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Pset_1mdc_1config */ /* @@ -4521,15 +4509,12 @@ Java_hdf_hdf5lib_H5_H5Pget_1chunk_1cache { herr_t status = -1; jint mode; - jdouble *w0Array; - jlong *rdcc_nslotsArray; - jlong *nbytesArray; + jdouble *w0Array = (jdouble *)NULL; + jlong *rdcc_nslotsArray = (jlong *)NULL; + jlong *nbytesArray = (jlong *)NULL; jboolean isCopy; - if (rdcc_w0 == NULL) { - w0Array = (jdouble *)NULL; - } /* end if */ - else { + if (rdcc_w0 != NULL) { w0Array = (jdouble *)ENVPTR->GetDoubleArrayElements(ENVPAR rdcc_w0, &isCopy); if (w0Array == NULL) { h5JNIFatalError(env, "H5Pget_chunk_cache: w0_array array not pinned"); @@ -4537,10 +4522,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1chunk_1cache } /* end if */ } /* end else */ - if (rdcc_nslots == NULL) { - rdcc_nslotsArray = (jlong *)NULL; - } /* end if */ - else { + if (rdcc_nslots != NULL) { rdcc_nslotsArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR rdcc_nslots, &isCopy); if (rdcc_nslotsArray == NULL) { /* exception -- out of memory */ @@ -4552,10 +4534,7 @@ Java_hdf_hdf5lib_H5_H5Pget_1chunk_1cache } /* end if */ } /* end else */ - if (rdcc_nbytes == NULL) { - nbytesArray = (jlong *)NULL; - } /* end if */ - else { + if (rdcc_nbytes != NULL) { nbytesArray = (jlong *)ENVPTR->GetLongArrayElements(ENVPAR rdcc_nbytes, &isCopy); if (nbytesArray == NULL) { if (w0Array != NULL) { @@ -4691,14 +4670,15 @@ Java_hdf_hdf5lib_H5_H5Pset_1virtual const char *fstr; const char *dstr; - PIN_JAVA_STRING_TWO0(src_file_name, fstr, src_dset_name, dstr); - - retVal = H5Pset_virtual((hid_t)dcpl_id, (hid_t)vspace_id, fstr, dstr, (hid_t)src_space_id); + PIN_JAVA_STRING_TWO(src_file_name, fstr, src_dset_name, dstr); + if (fstr != NULL && dstr != NULL) { + retVal = H5Pset_virtual((hid_t)dcpl_id, (hid_t)vspace_id, fstr, dstr, (hid_t)src_space_id); - UNPIN_JAVA_STRING_TWO(src_file_name, fstr, src_dset_name, dstr); + UNPIN_JAVA_STRING_TWO(src_file_name, fstr, src_dset_name, dstr); - if (retVal < 0) - h5libraryError(env); + if (retVal < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Pset_1virtual */ /* @@ -4981,7 +4961,7 @@ H5P_cls_create_cb } /* end if */ } /* end if */ JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5P_cls_create_cb */ static herr_t @@ -4989,7 +4969,7 @@ H5P_cls_copy_cb (hid_t new_prop_id, hid_t old_prop_id, void *copy_data) { JNIEnv *cbenv; - jint status; + jint status = -1; jclass cls; jmethodID mid; jmethodID constructor; @@ -5004,7 +4984,7 @@ H5P_cls_copy_cb } /* end if */ } /* end if */ JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5P_cls_ccopy_cb */ static herr_t @@ -5012,7 +4992,7 @@ H5P_cls_close_cb (hid_t prop_id, void *close_data) { JNIEnv *cbenv; - jint status; + jint status = -1; jclass cls; jmethodID mid; jmethodID constructor; @@ -5027,7 +5007,7 @@ H5P_cls_close_cb } /* end if */ } /* end if */ JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5P_cls_close_cb */ static herr_t @@ -5035,7 +5015,7 @@ H5D_append_cb (hid_t dataset_id, hsize_t *cur_dims, void *op_data) { JNIEnv *cbenv; - jint status; + jint status = -1; jclass cls; jmethodID mid; jlongArray cur_dimsArray; @@ -5046,33 +5026,22 @@ H5D_append_cb return -1; } /* end if */ cls = CBENVPTR->GetObjectClass(CBENVPAR visit_callback); - if (cls == 0) { - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; - } /* end if */ - mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(J[JLhdf/hdf5lib/callbacks/H5D_append_t;)I"); - if (mid == 0) { - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; - } /* end if */ - - if (cur_dims == NULL) { - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; - } /* end if */ - - cur_dimsArray = CBENVPTR->NewLongArray(CBENVPAR 2); - if (cur_dimsArray == NULL) { - JVMPTR->DetachCurrentThread(JVMPAR); - return -1; + if (cls != 0) { + mid = CBENVPTR->GetMethodID(CBENVPAR cls, "callback", "(J[JLhdf/hdf5lib/callbacks/H5D_append_t;)I"); + if (mid != 0) { + if (cur_dims != NULL) { + cur_dimsArray = CBENVPTR->NewLongArray(CBENVPAR 2); + if (cur_dimsArray != NULL) { + CBENVPTR->SetLongArrayRegion(CBENVPAR cur_dimsArray, 0, 2, (const jlong *)cur_dims); + + status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, dataset_id, cur_dims, op_data); + } + } + } } /* end if */ - CBENVPTR->SetLongArrayRegion(CBENVPAR cur_dimsArray, 0, 2, (const jlong *)cur_dims); - - status = CBENVPTR->CallIntMethod(CBENVPAR visit_callback, mid, dataset_id, cur_dims, op_data); - JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5D_append_cb */ /* @@ -5115,14 +5084,15 @@ Java_hdf_hdf5lib_H5__1H5Pcreate_1class_1nocb hid_t class_id = -1; const char *cstr; - PIN_JAVA_STRING(name, cstr, -1); - - class_id = H5Pcreate_class((hid_t)parent_class, cstr, NULL, NULL, NULL, NULL, NULL, NULL); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + class_id = H5Pcreate_class((hid_t)parent_class, cstr, NULL, NULL, NULL, NULL, NULL, NULL); - UNPIN_JAVA_STRING(name, cstr); + UNPIN_JAVA_STRING(name, cstr); - if (class_id < 0) - h5libraryError(env); + if (class_id < 0) + h5libraryError(env); + } return (jlong)class_id; } /* end Java_hdf_hdf5lib_H5__1H5Pcreate_1class_1nocb */ @@ -5143,15 +5113,16 @@ Java_hdf_hdf5lib_H5__1H5Pcreate_1class close_callback = close_op; create_callback = create_op; - PIN_JAVA_STRING(name, cstr, -1); - - class_id = H5Pcreate_class((hid_t)parent_class, cstr, (H5P_cls_create_func_t)H5P_cls_create_cb, (void*) create_data, - (H5P_cls_copy_func_t)H5P_cls_copy_cb, (void*) copy_data, (H5P_cls_close_func_t)H5P_cls_close_cb, (void*) close_data); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + class_id = H5Pcreate_class((hid_t)parent_class, cstr, (H5P_cls_create_func_t)H5P_cls_create_cb, (void*) create_data, + (H5P_cls_copy_func_t)H5P_cls_copy_cb, (void*) copy_data, (H5P_cls_close_func_t)H5P_cls_close_cb, (void*) close_data); - UNPIN_JAVA_STRING(name, cstr); + UNPIN_JAVA_STRING(name, cstr); - if (class_id < 0) - h5libraryError(env); + if (class_id < 0) + h5libraryError(env); + } return (jlong)class_id; } /* end Java_hdf_hdf5lib_H5__1H5Pcreate_1class */ @@ -5161,7 +5132,7 @@ H5P_prp_create_cb (const char *name, size_t size, void *value) { JNIEnv *cbenv; - jint status; + jint status = -1; jclass cls; jmethodID mid; jmethodID constructor; @@ -5178,7 +5149,7 @@ H5P_prp_create_cb } /* end if */ } /* end if */ JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5P_prp_create_cb */ static herr_t @@ -5186,7 +5157,7 @@ H5P_prp_copy_cb (const char *name, size_t size, void *value) { JNIEnv *cbenv; - jint status; + jint status = -1; jclass cls; jmethodID mid; jmethodID constructor; @@ -5203,7 +5174,7 @@ H5P_prp_copy_cb } /* end if */ } /* end if */ JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5P_prp_copy_cb */ static herr_t @@ -5211,7 +5182,7 @@ H5P_prp_close_cb (const char *name, size_t size, void *value) { JNIEnv *cbenv; - jint status; + jint status = -1; jclass cls; jmethodID mid; jmethodID constructor; @@ -5228,7 +5199,7 @@ H5P_prp_close_cb } /* end if */ } /* end if */ JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5P_prp_close_cb */ static int @@ -5236,7 +5207,7 @@ H5P_prp_compare_cb (void *value1, void *value2, size_t size) { JNIEnv *cbenv; - jint status; + jint status = -1; jclass cls; jmethodID mid; jmethodID constructor; @@ -5251,7 +5222,7 @@ H5P_prp_compare_cb } /* end if */ } /* end if */ JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5P_prp_compare_cb */ static herr_t @@ -5259,7 +5230,7 @@ H5P_prp_get_cb (hid_t prop_id, const char *name, size_t size, void *value) { JNIEnv *cbenv; - jint status; + jint status = -1; jclass cls; jmethodID mid; jmethodID constructor; @@ -5276,7 +5247,7 @@ H5P_prp_get_cb } /* end if */ } /* end if */ JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5P_prp_get_cb */ static herr_t @@ -5284,7 +5255,7 @@ H5P_prp_set_cb (hid_t prop_id, const char *name, size_t size, void *value) { JNIEnv *cbenv; - jint status; + jint status = -1; jclass cls; jmethodID mid; jmethodID constructor; @@ -5301,7 +5272,7 @@ H5P_prp_set_cb } /* end if */ } /* end if */ JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5P_prp_set_cb */ static herr_t @@ -5309,7 +5280,7 @@ H5P_prp_delete_cb (hid_t prop_id, const char *name, size_t size, void *value) { JNIEnv *cbenv; - jint status; + jint status = -1; jclass cls; jmethodID mid; jmethodID constructor; @@ -5326,7 +5297,7 @@ H5P_prp_delete_cb } /* end if */ } /* end if */ JVMPTR->DetachCurrentThread(JVMPAR); - return status; + return (herr_t)status; } /* end H5P_prp_delete_cb */ /* @@ -5343,24 +5314,25 @@ Java_hdf_hdf5lib_H5_H5Pregister2_1nocb jboolean isCopy2; const char *cstr; - PIN_JAVA_STRING0(name, cstr); - buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2); - if (buffP == NULL) { - UNPIN_JAVA_STRING(name, cstr); - h5JNIFatalError(env, "H5Pregister2: buf not pinned"); - } /* end if */ - else { - status = H5Pregister2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - - UNPIN_JAVA_STRING(name, cstr); - if (status < 0) { - ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT); - h5libraryError(env); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2); + if (buffP == NULL) { + h5JNIFatalError(env, "H5Pregister2: buf not pinned"); } /* end if */ else { - ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0); + status = H5Pregister2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + + if (status < 0) { + ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT); + h5libraryError(env); + } /* end if */ + else { + ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0); + } /* end else */ } /* end else */ - } /* end else */ + UNPIN_JAVA_STRING(name, cstr); + } } /* end Java_hdf_hdf5lib_H5_H5Pregister2_1nocb */ /* @@ -5386,26 +5358,27 @@ Java_hdf_hdf5lib_H5_H5Pregister2 get_callback = prp_get; delete_callback = prp_delete; - PIN_JAVA_STRING0(name, cstr); - buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2); - if (buffP == NULL) { - UNPIN_JAVA_STRING(name, cstr); - h5JNIFatalError(env, "H5Pregister2: buf not pinned"); - } /* end if */ - else { - status = H5Pregister2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, (H5P_prp_create_func_t)H5P_prp_create_cb, - (H5P_prp_set_func_t)H5P_prp_set_cb, (H5P_prp_get_func_t)H5P_prp_get_cb, (H5P_prp_delete_func_t)H5P_prp_delete_cb, - (H5P_prp_copy_func_t)H5P_prp_copy_cb, (H5P_prp_compare_func_t)H5P_prp_compare_cb, (H5P_prp_close_func_t)H5P_prp_close_cb); - - UNPIN_JAVA_STRING(name, cstr); - if (status < 0) { - ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT); - h5libraryError(env); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2); + if (buffP == NULL) { + h5JNIFatalError(env, "H5Pregister2: buf not pinned"); } /* end if */ else { - ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0); + status = H5Pregister2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, (H5P_prp_create_func_t)H5P_prp_create_cb, + (H5P_prp_set_func_t)H5P_prp_set_cb, (H5P_prp_get_func_t)H5P_prp_get_cb, (H5P_prp_delete_func_t)H5P_prp_delete_cb, + (H5P_prp_copy_func_t)H5P_prp_copy_cb, (H5P_prp_compare_func_t)H5P_prp_compare_cb, (H5P_prp_close_func_t)H5P_prp_close_cb); + + if (status < 0) { + ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT); + h5libraryError(env); + } /* end if */ + else { + ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0); + } /* end else */ } /* end else */ - } /* end else */ + UNPIN_JAVA_STRING(name, cstr); + } } /* end Java_hdf_hdf5lib_H5_H5Pregister2 */ /* @@ -5422,24 +5395,25 @@ Java_hdf_hdf5lib_H5_H5Pinsert2_1nocb jboolean isCopy2; const char *cstr; - PIN_JAVA_STRING0(name, cstr); - buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2); - if (buffP == NULL) { - UNPIN_JAVA_STRING(name, cstr); - h5JNIFatalError(env, "H5Pinsert2: buf not pinned"); - } /* end if */ - else { - status = H5Pinsert2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, NULL, NULL, NULL, NULL, NULL, NULL); - - UNPIN_JAVA_STRING(name, cstr); - if (status < 0) { - ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT); - h5libraryError(env); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2); + if (buffP == NULL) { + h5JNIFatalError(env, "H5Pinsert2: buf not pinned"); } /* end if */ else { - ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0); + status = H5Pinsert2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, NULL, NULL, NULL, NULL, NULL, NULL); + + if (status < 0) { + ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT); + h5libraryError(env); + } /* end if */ + else { + ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0); + } /* end else */ } /* end else */ - } /* end else */ + UNPIN_JAVA_STRING(name, cstr); + } } /* end Java_hdf_hdf5lib_H5_H5Pinsert2 */ @@ -5465,26 +5439,28 @@ Java_hdf_hdf5lib_H5_H5Pinsert2 get_callback = prp_get; delete_callback = prp_delete; - PIN_JAVA_STRING0(name, cstr); - buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2); - if (buffP == NULL) { - UNPIN_JAVA_STRING(name, cstr); - h5JNIFatalError(env, "H5Pinsert2: buf not pinned"); - } /* end if */ - else { - status = H5Pinsert2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, - (H5P_prp_set_func_t)H5P_prp_set_cb, (H5P_prp_get_func_t)H5P_prp_get_cb, (H5P_prp_delete_func_t)H5P_prp_delete_cb, - (H5P_prp_copy_func_t)H5P_prp_copy_cb, (H5P_prp_compare_func_t)H5P_prp_compare_cb, (H5P_prp_close_func_t)H5P_prp_close_cb); - - UNPIN_JAVA_STRING(name, cstr); - if (status < 0) { - ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT); - h5libraryError(env); + PIN_JAVA_STRING(name, cstr); + if (cstr != NULL) { + buffP = ENVPTR->GetByteArrayElements(ENVPAR def_value, &isCopy2); + if (buffP == NULL) { + UNPIN_JAVA_STRING(name, cstr); + h5JNIFatalError(env, "H5Pinsert2: buf not pinned"); } /* end if */ else { - ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0); + status = H5Pinsert2((hid_t)cls_id, cstr, (size_t)prp_size, (void*)buffP, + (H5P_prp_set_func_t)H5P_prp_set_cb, (H5P_prp_get_func_t)H5P_prp_get_cb, (H5P_prp_delete_func_t)H5P_prp_delete_cb, + (H5P_prp_copy_func_t)H5P_prp_copy_cb, (H5P_prp_compare_func_t)H5P_prp_compare_cb, (H5P_prp_close_func_t)H5P_prp_close_cb); + + if (status < 0) { + ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, JNI_ABORT); + h5libraryError(env); + } /* end if */ + else { + ENVPTR->ReleaseByteArrayElements(ENVPAR def_value, buffP, 0); + } /* end else */ } /* end else */ - } /* end else */ + UNPIN_JAVA_STRING(name, cstr); + } } /* end Java_hdf_hdf5lib_H5_H5Pinsert2 */ static herr_t @@ -5561,9 +5537,9 @@ Java_hdf_hdf5lib_H5_H5Piterate theArray = (jint *)ENVPTR->GetIntArrayElements(ENVPAR idx, &isCopy); if (theArray == NULL) { h5JNIFatalError(env, "H5Piterate: idx not pinned"); - return -1; } /* end if */ - status = H5Piterate((hid_t)prop_id, (int*)&theArray[0], (H5P_iterate_t)H5P_iterate_cb, (void*)op_data); + else + status = H5Piterate((hid_t)prop_id, (int*)&theArray[0], (H5P_iterate_t)H5P_iterate_cb, (void*)op_data); } /* end else */ if (status < 0) { @@ -5575,7 +5551,7 @@ Java_hdf_hdf5lib_H5_H5Piterate ENVPTR->ReleaseIntArrayElements(ENVPAR idx, theArray, 0); } /* end else */ - return status; + return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Piterate */ #ifdef __cplusplus diff --git a/java/src/jni/h5rImp.c b/java/src/jni/h5rImp.c index df0ea3c..647f973 100644 --- a/java/src/jni/h5rImp.c +++ b/java/src/jni/h5rImp.c @@ -46,45 +46,41 @@ Java_hdf_hdf5lib_H5_H5Rcreate jbyte *refP; jboolean isCopy2; - PIN_JAVA_STRING(name, rName, -1); - - if (ref == NULL) { - UNPIN_JAVA_STRING(name, rName); - h5nullArgument( env, "H5Rcreate: ref is NULL"); - } /* end if */ - else { - if ((ref_type == H5R_OBJECT) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_OBJ_REF_BUF_SIZE) { - UNPIN_JAVA_STRING(name, rName); - h5badArgument( env, "H5Rcreate: ref input array != H5R_OBJ_REF_BUF_SIZE"); + PIN_JAVA_STRING(name, rName); + if (rName != NULL) { + if (ref == NULL) { + h5nullArgument( env, "H5Rcreate: ref is NULL"); } /* end if */ - else if ((ref_type == H5R_DATASET_REGION) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_DSET_REG_REF_BUF_SIZE) { - UNPIN_JAVA_STRING(name, rName); - h5badArgument( env, "H5Rcreate: region ref input array != H5R_DSET_REG_REF_BUF_SIZE"); - } /* end else if */ - else if ((ref_type != H5R_OBJECT) && (ref_type != H5R_DATASET_REGION)) { - UNPIN_JAVA_STRING(name, rName); - h5badArgument( env, "H5Rcreate: ref_type unknown type "); - } /* end else if */ else { - refP = (jbyte*)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy2); - if (refP == NULL) { - UNPIN_JAVA_STRING(name, rName); - h5JNIFatalError(env, "H5Rcreate: ref not pinned"); + if ((ref_type == H5R_OBJECT) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_OBJ_REF_BUF_SIZE) { + h5badArgument( env, "H5Rcreate: ref input array != H5R_OBJ_REF_BUF_SIZE"); } /* end if */ + else if ((ref_type == H5R_DATASET_REGION) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_DSET_REG_REF_BUF_SIZE) { + h5badArgument( env, "H5Rcreate: region ref input array != H5R_DSET_REG_REF_BUF_SIZE"); + } /* end else if */ + else if ((ref_type != H5R_OBJECT) && (ref_type != H5R_DATASET_REGION)) { + h5badArgument( env, "H5Rcreate: ref_type unknown type "); + } /* end else if */ else { - status = H5Rcreate(refP, (hid_t)loc_id, rName, (H5R_type_t)ref_type, (hid_t)space_id); - - UNPIN_JAVA_STRING(name, rName); - if (status < 0) { - ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT); - h5libraryError(env); + refP = (jbyte*)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy2); + if (refP == NULL) { + h5JNIFatalError(env, "H5Rcreate: ref not pinned"); } /* end if */ else { - ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, 0); + status = H5Rcreate(refP, (hid_t)loc_id, rName, (H5R_type_t)ref_type, (hid_t)space_id); + + if (status < 0) { + ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT); + h5libraryError(env); + } /* end if */ + else { + ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, 0); + } /* end else */ } /* end else */ } /* end else */ } /* end else */ - } /* end else */ + UNPIN_JAVA_STRING(name, rName); + } return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Rcreate */ diff --git a/java/src/jni/h5tImp.c b/java/src/jni/h5tImp.c index 55e16f8..1467b41 100644 --- a/java/src/jni/h5tImp.c +++ b/java/src/jni/h5tImp.c @@ -43,17 +43,18 @@ JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Topen2 (JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_plist) { - hid_t status; + hid_t status = -1; const char *tName; - PIN_JAVA_STRING(name, tName, -1); + PIN_JAVA_STRING(name, tName); + if (tName != NULL) { + status = H5Topen2((hid_t)loc_id, tName, (hid_t)access_plist); - status = H5Topen2((hid_t)loc_id, tName, (hid_t)access_plist); + UNPIN_JAVA_STRING(name, tName); - UNPIN_JAVA_STRING(name, tName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jlong)status; } /* end Java_hdf_hdf5lib_H5__1H5Topen2 */ @@ -789,14 +790,15 @@ Java_hdf_hdf5lib_H5_H5Tget_1member_1index const char *tName; int index = -1; - PIN_JAVA_STRING(field_name, tName, -1); + PIN_JAVA_STRING(field_name, tName); + if (tName != NULL) { + index = H5Tget_member_index((hid_t)type_id, tName); - index = H5Tget_member_index((hid_t)type_id, tName); + UNPIN_JAVA_STRING(field_name, tName); - UNPIN_JAVA_STRING(field_name, tName); - - if (index < 0) - h5libraryError(env); + if (index < 0) + h5libraryError(env); + } return (jint)index; } /* end Java_hdf_hdf5lib_H5_H5Tget_1member_1index */ @@ -858,17 +860,18 @@ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Tinsert (JNIEnv *env, jclass clss, jlong type_id, jstring name, jlong offset, jlong field_id) { - herr_t status; + herr_t status = -1; const char *tName; long off = (long)offset; - PIN_JAVA_STRING(name, tName, -1); + PIN_JAVA_STRING(name, tName); + if (tName != NULL) { + status = H5Tinsert((hid_t)type_id, tName, (size_t)off, field_id); - status = H5Tinsert((hid_t)type_id, tName, (size_t)off, field_id); - - UNPIN_JAVA_STRING(name,tName); - if (status < 0) - h5libraryError(env); + UNPIN_JAVA_STRING(name,tName); + if (status < 0) + h5libraryError(env); + } return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Tinsert */ @@ -939,14 +942,15 @@ Java_hdf_hdf5lib_H5_H5Tset_1tag herr_t status = -1; const char *tagP; - PIN_JAVA_STRING(tag, tagP, -1); + PIN_JAVA_STRING(tag, tagP); + if (tagP != NULL) { + status = H5Tset_tag((hid_t)type, tagP); - status = H5Tset_tag((hid_t)type, tagP); + UNPIN_JAVA_STRING(tag,tagP); - UNPIN_JAVA_STRING(tag,tagP); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Tset_1tag */ @@ -1029,21 +1033,22 @@ Java_hdf_hdf5lib_H5_H5Tenum_1insert_1int h5nullArgument(env, "H5Tenum_insert: value is NULL"); } /* end if */ else { - PIN_JAVA_STRING(name, nameP, -1); - - intP = ENVPTR->GetIntArrayElements(ENVPAR value, &isCopy2); - if (intP == NULL) { - h5JNIFatalError(env, "H5Tenum_insert: value not pinned"); - } /* end if */ - else { - status = H5Tenum_insert((hid_t)type_id, nameP, intP); + PIN_JAVA_STRING(name, nameP); + if (nameP != NULL) { + intP = ENVPTR->GetIntArrayElements(ENVPAR value, &isCopy2); + if (intP == NULL) { + h5JNIFatalError(env, "H5Tenum_insert: value not pinned"); + } /* end if */ + else { + status = H5Tenum_insert((hid_t)type_id, nameP, intP); - ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, JNI_ABORT); + ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, JNI_ABORT); - if (status < 0) - h5libraryError(env); - } /* end else */ - UNPIN_JAVA_STRING(name, nameP); + if (status < 0) + h5libraryError(env); + } /* end else */ + UNPIN_JAVA_STRING(name, nameP); + } } /* end else */ return (jint)status; @@ -1067,21 +1072,22 @@ Java_hdf_hdf5lib_H5_H5Tenum_1insert h5nullArgument(env, "H5Tenum_insert: value is NULL"); } /* end if */ else { - PIN_JAVA_STRING0(name, nameP); - - byteP = ENVPTR->GetByteArrayElements(ENVPAR value, &isCopy2); - if (byteP == NULL) { - h5JNIFatalError(env, "H5Tenum_insert: value not pinned"); - } /* end if */ - else { - status = H5Tenum_insert((hid_t)type_id, nameP, byteP); + PIN_JAVA_STRING(name, nameP); + if (nameP != NULL) { + byteP = ENVPTR->GetByteArrayElements(ENVPAR value, &isCopy2); + if (byteP == NULL) { + h5JNIFatalError(env, "H5Tenum_insert: value not pinned"); + } /* end if */ + else { + status = H5Tenum_insert((hid_t)type_id, nameP, byteP); - ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT); + ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT); - if (status < 0) - h5libraryError(env); - } /* end else */ - UNPIN_JAVA_STRING(name, nameP); + if (status < 0) + h5libraryError(env); + } /* end else */ + UNPIN_JAVA_STRING(name, nameP); + } } /* end else */ } /* end Java_hdf_hdf5lib_H5_H5Tenum_1insert */ @@ -1218,23 +1224,24 @@ Java_hdf_hdf5lib_H5_H5Tenum_1valueof_1int h5nullArgument(env, "H5Tenum_valueof: value is NULL"); } /* end if */ else { - PIN_JAVA_STRING(name, nameP, -1); - - intP = ENVPTR->GetIntArrayElements(ENVPAR value, &isCopy2); - if (intP == NULL) { - h5JNIFatalError(env, "H5Tenum_valueof: value not pinned"); - } /* end if */ - else { - status = H5Tenum_valueof((hid_t)type_id, nameP, intP); - - if (status < 0) { - ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, JNI_ABORT); - h5libraryError(env); + PIN_JAVA_STRING(name, nameP); + if (nameP != NULL) { + intP = ENVPTR->GetIntArrayElements(ENVPAR value, &isCopy2); + if (intP == NULL) { + h5JNIFatalError(env, "H5Tenum_valueof: value not pinned"); } /* end if */ - else - ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, 0); - } /* end else */ - UNPIN_JAVA_STRING(name, nameP); + else { + status = H5Tenum_valueof((hid_t)type_id, nameP, intP); + + if (status < 0) { + ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, JNI_ABORT); + h5libraryError(env); + } /* end if */ + else + ENVPTR->ReleaseIntArrayElements(ENVPAR value, intP, 0); + } /* end else */ + UNPIN_JAVA_STRING(name, nameP); + } } /* end else */ return (jint)status; @@ -1258,23 +1265,24 @@ Java_hdf_hdf5lib_H5_H5Tenum_1valueof h5nullArgument(env, "H5Tenum_valueof: value is NULL"); } /* end if */ else { - PIN_JAVA_STRING0(name, nameP); - - byteP = ENVPTR->GetByteArrayElements(ENVPAR value, &isCopy2); - if (byteP == NULL) { - h5JNIFatalError(env, "H5Tenum_valueof: value not pinned"); - } /* end if */ - else { - status = H5Tenum_valueof((hid_t)type_id, nameP, byteP); - - if (status < 0) { - ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT); - h5libraryError(env); + PIN_JAVA_STRING(name, nameP); + if (nameP != NULL) { + byteP = ENVPTR->GetByteArrayElements(ENVPAR value, &isCopy2); + if (byteP == NULL) { + h5JNIFatalError(env, "H5Tenum_valueof: value not pinned"); } /* end if */ - else - ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, 0); - } /* end else */ - UNPIN_JAVA_STRING(name, nameP); + else { + status = H5Tenum_valueof((hid_t)type_id, nameP, byteP); + + if (status < 0) { + ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, JNI_ABORT); + h5libraryError(env); + } /* end if */ + else + ENVPTR->ReleaseByteArrayElements(ENVPAR value, byteP, 0); + } /* end else */ + UNPIN_JAVA_STRING(name, nameP); + } } /* end else */ } /* end Java_hdf_hdf5lib_H5_H5Tenum_1valueof */ @@ -1487,14 +1495,15 @@ Java_hdf_hdf5lib_H5_H5Tcommit herr_t status = -1; const char *tName; - PIN_JAVA_STRING0(name, tName); + PIN_JAVA_STRING(name, tName); + if (tName != NULL) { + status = H5Tcommit2((hid_t)loc_id, tName, (hid_t)type, (hid_t)link_plist_id, (hid_t)create_plist_id, (hid_t)access_plist_id); - status = H5Tcommit2((hid_t)loc_id, tName, (hid_t)type, (hid_t)link_plist_id, (hid_t)create_plist_id, (hid_t)access_plist_id); + UNPIN_JAVA_STRING(name, tName); - UNPIN_JAVA_STRING(name, tName); - - if (status < 0) - h5libraryError(env); + if (status < 0) + h5libraryError(env); + } } /* end Java_hdf_hdf5lib_H5_H5Tcommit */ /* diff --git a/java/src/jni/h5util.c b/java/src/jni/h5util.c index f9bd291..acf57c8 100644 --- a/java/src/jni/h5util.c +++ b/java/src/jni/h5util.c @@ -2634,49 +2634,50 @@ Java_hdf_hdf5lib_H5_H5export_1dataset h5nullArgument(env, "HDF5Library_export_data: object_path is NULL"); } /* end else if */ else { - PIN_JAVA_STRING0(file_name, fileName); + PIN_JAVA_STRING(file_name, fileName); + if (fileName != NULL) { + file_id = H5Fopen(fileName, (unsigned)H5F_ACC_RDWR, (hid_t)H5P_DEFAULT); - file_id = H5Fopen(fileName, (unsigned)H5F_ACC_RDWR, (hid_t)H5P_DEFAULT); + UNPIN_JAVA_STRING(file_name, fileName); - UNPIN_JAVA_STRING(file_name, fileName); - - if (file_id < 0) { - /* throw exception */ - h5libraryError(env); - } /* end if */ - else { - object_name = ENVPTR->GetStringUTFChars(ENVPAR object_path, &isCopy2); - if (object_name == NULL) { - h5JNIFatalError( env, "H5Dopen: object name not pinned"); + if (file_id < 0) { + /* throw exception */ + h5libraryError(env); } /* end if */ else { - dataset_id = H5Dopen2(file_id, object_name, H5P_DEFAULT); - - ENVPTR->ReleaseStringUTFChars(ENVPAR object_path, object_name); - - if (dataset_id < 0) { - H5Fclose(file_id); - h5libraryError(env); + object_name = ENVPTR->GetStringUTFChars(ENVPAR object_path, &isCopy2); + if (object_name == NULL) { + h5JNIFatalError( env, "H5Dopen: object name not pinned"); } /* end if */ else { - file_export = ENVPTR->GetStringUTFChars(ENVPAR file_export_name, 0); - stream = HDfopen(file_export, "w+"); - ENVPTR->ReleaseStringUTFChars(ENVPAR file_export_name, file_export); + dataset_id = H5Dopen2(file_id, object_name, H5P_DEFAULT); - ret_val = h5str_dump_simple_dset(stream, dataset_id, binary_order); + ENVPTR->ReleaseStringUTFChars(ENVPAR object_path, object_name); - if (stream) - HDfclose(stream); + if (dataset_id < 0) { + H5Fclose(file_id); + h5libraryError(env); + } /* end if */ + else { + file_export = ENVPTR->GetStringUTFChars(ENVPAR file_export_name, 0); + stream = HDfopen(file_export, "w+"); + ENVPTR->ReleaseStringUTFChars(ENVPAR file_export_name, file_export); - H5Dclose(dataset_id); + ret_val = h5str_dump_simple_dset(stream, dataset_id, binary_order); - H5Fclose(file_id); + if (stream) + HDfclose(stream); - if (ret_val < 0) - h5libraryError(env); + H5Dclose(dataset_id); + + H5Fclose(file_id); + + if (ret_val < 0) + h5libraryError(env); + } /* end else */ } /* end else */ } /* end else */ - } /* end else */ + } } /* end else */ } /* end Java_hdf_hdf5lib_H5_H5export_1dataset */ diff --git a/java/test/CMakeLists.txt b/java/test/CMakeLists.txt index 27f1903..8cb41f7 100644 --- a/java/test/CMakeLists.txt +++ b/java/test/CMakeLists.txt @@ -88,7 +88,11 @@ set (CMAKE_JAVA_CLASSPATH "${CMAKE_JAVA_CLASSPATH}${CMAKE_JAVA_INCLUDE_FLAG_SEP} set (testfilter "OK (598 tests)") if (CMAKE_BUILD_TYPE MATCHES Debug) - set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;") + if (WIN32) + set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_D;") + else() + set (CMD_ARGS "-Dhdf.hdf5lib.H5.loadLibraryName=hdf5_java_debug;") + endif() endif(CMAKE_BUILD_TYPE MATCHES Debug) add_test ( -- cgit v0.12