/* * Class: hdf_hdf5lib_H5 * Method: H5Eget_msg * Signature: (J[I)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Eget_1msg (JNIEnv *env, jclass cls, jlong msg_id, jintArray error_msg_type_list) { char *namePtr; jstring str = NULL; jboolean isCopy; ssize_t buf_size; jint *theArray; H5E_type_t error_msg_type; if (msg_id < 0) { h5badArgument(env, "H5Eget_msg: invalid argument"); } /* end if */ else if (error_msg_type_list == NULL) { h5nullArgument(env, "H5Eget_msg: error_msg_type_list is NULL"); } /* end if */ else { /* get the length of the name */ buf_size = H5Eget_msg((hid_t)msg_id, NULL, NULL, 0); if ((buf_size < 0) || (buf_size == 0)) { h5JNIFatalError(env, "H5Eget_msg: Invalid message"); } /* end if */ else { buf_size++; /* add extra space for the null terminator */ namePtr = (char*)HDmalloc(sizeof(char) * (size_t)buf_size); if (namePtr == NULL) { h5outOfMemory(env, "H5Eget_msg: malloc failed"); } /* end if */ else { theArray = (jint*)ENVPTR->GetIntArrayElements(ENVPAR error_msg_type_list, &isCopy); if (theArray == NULL) { HDfree(namePtr); h5JNIFatalError(env, "H5Eget_msg: error_msg_type_list not pinned"); } /* end if */ else { buf_size = H5Eget_msg((hid_t)msg_id, &error_msg_type, (char *)namePtr, (size_t)buf_size); if (buf_size < 0) { HDfree(namePtr); ENVPTR->ReleaseIntArrayElements(ENVPAR error_msg_type_list, theArray, JNI_ABORT); h5libraryError(env); } /* end if */ else { theArray[0] = error_msg_type; ENVPTR->ReleaseIntArrayElements(ENVPAR error_msg_type_list, theArray, 0); str = ENVPTR->NewStringUTF(ENVPAR namePtr); HDfree(namePtr); } /* end else */ } /* end else */ } /* end else */ } /* end else */ } /* end else */ return str; } /* end Java_hdf_hdf5lib_H5_H5Eget_1msg */
herr_t H5AreadVL_str (JNIEnv *env, hid_t aid, hid_t tid, jobjectArray buf) { char **strs; jstring jstr; jint i; jint n; hid_t sid; hsize_t dims[H5S_MAX_RANK]; herr_t status = -1; n = ENVPTR->GetArrayLength(ENVPAR buf); strs =(char**)HDcalloc((size_t)n, sizeof(char*)); if (strs == NULL) { h5JNIFatalError(env, "H5AreadVL_str: failed to allocate buff for read variable length strings"); } /* end if */ else { status = H5Aread(aid, tid, strs); if (status < 0) { dims[0] = (hsize_t)n; sid = H5Screate_simple(1, dims, NULL); H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, strs); H5Sclose(sid); HDfree(strs); h5JNIFatalError(env, "H5AreadVL_str: failed to read variable length strings"); } /* end if */ else { for (i=0; i < n; i++) { jstr = ENVPTR->NewStringUTF(ENVPAR strs[i]); ENVPTR->SetObjectArrayElement(ENVPAR buf, i, jstr); H5free_memory (strs[i]); } /* end for */ /* for repeatedly reading a dataset with a large number of strs (e.g., 1,000,000 strings, H5Dvlen_reclaim() may crash on Windows because the Java GC will not be able to collect free space in time. Instead, use "H5free_memory(strs[i])" above to free individual strings after it is done. H5Dvlen_reclaim(tid, mem_sid, xfer_plist_id, strs); */ HDfree(strs); } /* end else */ } /* end else */ return status; } /* end H5AreadVL_str */
/* * Class: hdf_hdf5lib_H5 * Method: _H5Rdereference * Signature: (JJI[B)J */ JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5__1H5Rdereference(JNIEnv *env, jclass clss, jlong dataset, jlong access_list, jint ref_type, jbyteArray ref) { jboolean isCopy; jbyte *refP; hid_t retVal = -1; if (ref == NULL) { h5nullArgument( env, "H5Rdereference: ref is NULL"); } /* end if */ else if ((ref_type == H5R_OBJECT) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_OBJ_REF_BUF_SIZE) { h5badArgument( env, "H5Rdereference: obj ref input array != H5R_OBJ_REF_BUF_SIZE"); } /* end else if */ else if ((ref_type == H5R_DATASET_REGION) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_DSET_REG_REF_BUF_SIZE) { h5badArgument( env, "H5Rdereference: region ref input array != H5R_DSET_REG_REF_BUF_SIZE"); } /* end else if */ else { refP = (jbyte*)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy); if (refP == NULL) { h5JNIFatalError(env, "H5Rderefernce: ref not pinned"); } /* end if */ else { retVal = H5Rdereference2((hid_t)dataset, (hid_t)access_list, (H5R_type_t)ref_type, refP); ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT); if (retVal < 0) h5libraryError(env); } /* end else */ } /* end else */ return (jlong)retVal; } /* end Java_hdf_hdf5lib_H5__1H5Rdereference */
/* * Class: hdf_hdf5lib_H5 * Method: H5get_libversion * Signature: ([I)I */ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5get_1libversion (JNIEnv *env, jclass clss, jintArray libversion) { unsigned *theArray = NULL; herr_t status = -1; jboolean isCopy; if (libversion == NULL) { h5nullArgument(env, "H5get_version: libversion is NULL"); } /* end if */ else { theArray = (unsigned*)ENVPTR->GetIntArrayElements(ENVPAR libversion, &isCopy); if (theArray == NULL) { h5JNIFatalError( env, "H5get_libversion: input not pinned"); } /* end if */ else { status = H5get_libversion(&(theArray[0]), &(theArray[1]), &(theArray[2])); if (status < 0) { ENVPTR->ReleaseIntArrayElements(ENVPAR libversion, (jint*)theArray, JNI_ABORT); h5libraryError(env); } /* end if */ ENVPTR->ReleaseIntArrayElements(ENVPAR libversion, (jint*)theArray,0); } /* end else */ } /* end else */ return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5get_1libversion */
/* * Class: hdf_hdf5lib_H5 * Method: H5Aread * Signature: (JJ[B)I */ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Aread (JNIEnv *env, jclass clss, jlong attr_id, jlong mem_type_id, jbyteArray buf) { herr_t status = -1; jbyte *byteP; jboolean isCopy; if (buf == NULL) { h5nullArgument( env,"H5Aread: buf is NULL"); } /* end if */ else { byteP = ENVPTR->GetByteArrayElements(ENVPAR buf, &isCopy); if (byteP == NULL) { h5JNIFatalError( env,"H5Aread: buf is not pinned"); } /* end if */ else { status = H5Aread((hid_t)attr_id, (hid_t)mem_type_id, byteP); if (status < 0) { ENVPTR->ReleaseByteArrayElements(ENVPAR buf, byteP, JNI_ABORT); h5libraryError(env); } /* end if */ else { ENVPTR->ReleaseByteArrayElements(ENVPAR buf, byteP, 0); } /* end else */ } /* end else */ } /* end else */ return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Aread */
/* * Class: hdf_hdf5lib_H5 * Method: H5G_obj_t H5Rget_obj_type * Signature: (JI[B)I */ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Rget_1obj_1type(JNIEnv *env, jclass clss, jlong loc_id, jint ref_type, jbyteArray ref) { int retVal =-1; jboolean isCopy; jbyte *refP; H5O_type_t object_info; if (ref == NULL) { h5nullArgument( env, "H5Rget_object_type: ref is NULL"); } /* end if */ else { refP = (jbyte*)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy); if (refP == NULL) { h5JNIFatalError(env, "H5Rget_object_type: ref not pinned"); } /* end if */ else { retVal = H5Rget_obj_type2((hid_t)loc_id, (H5R_type_t)ref_type, refP, &object_info); if(retVal >= 0) retVal = object_info; ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT); if (retVal < 0) h5libraryError(env); } /* end else */ } /* end else */ return (jint)retVal; } /* end Java_hdf_hdf5lib_H5_H5Rget_1obj_1type */
/* * Class: hdf_hdf5lib_H5 * Method: int H5Rget_obj_type2 * Signature: (JI[B[I)I */ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Rget_1obj_1type2(JNIEnv *env, jclass clss, jlong loc_id, jint ref_type, jbyteArray ref, jintArray ref_obj) { jint status; jboolean isCopy; jbyte *refP; jint *ref_objP; int retVal = -1; if (ref == NULL) { h5nullArgument( env, "H5Rget_object_type: ref is NULL"); } /* end if */ else if (ref_obj == NULL) { h5nullArgument( env, "H5Rget_object_type: ref_obj is NULL"); } /* end else if */ else { refP = (jbyte *)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy); if (refP == NULL) { h5JNIFatalError(env, "H5Rget_object_type: ref not pinned"); } /* end if */ else { ref_objP = (jint *)ENVPTR->GetIntArrayElements(ENVPAR ref_obj, &isCopy); if (ref_objP == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR ref,refP,0); h5JNIFatalError(env, "H5Rget_object_type: ref_obj not pinned"); } /* end if */ else { status = H5Rget_obj_type2((hid_t)loc_id, (H5R_type_t)ref_type, refP, (H5O_type_t*)ref_objP); retVal = ref_objP[0]; ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT); if (status < 0) { ENVPTR->ReleaseIntArrayElements(ENVPAR ref_obj,ref_objP, JNI_ABORT); h5libraryError(env); } /* end if */ else { ENVPTR->ReleaseIntArrayElements(ENVPAR ref_obj, ref_objP, 0); } /* end else */ } /* end else */ } /* end else */ } /* end else */ return (jint)retVal; } /* end Java_hdf_hdf5lib_H5_H5Rget_1obj_1type2 */
/* * Class: hdf_hdf5lib_H5 * Method: H5Rget_name * Signature: (JI[B[Ljava/lang/String;J)J */ JNIEXPORT jlong JNICALL Java_hdf_hdf5lib_H5_H5Rget_1name(JNIEnv *env, jclass clss, jlong loc_id, jint ref_type, jbyteArray ref, jobjectArray name, jlong size) { jlong ret_val = -1; jbyte *refP; jboolean isCopy; char *aName = NULL; jstring str; size_t bs; bs = (size_t)size; if (bs <= 0) { h5badArgument(env, "H5Rget_name: size <= 0"); } /* end if */ else if (ref == NULL) { h5nullArgument(env, "H5Rget_name: ref is NULL"); } /* end else if */ else { if ((ref_type == H5R_OBJECT) && ENVPTR->GetArrayLength(ENVPAR ref) != H5R_OBJ_REF_BUF_SIZE) { h5badArgument(env, "H5Rget_name: obj 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, "H5Rget_name: region ref input array != H5R_DSET_REG_REF_BUF_SIZE"); } /* end else if */ else { refP = (jbyte *)ENVPTR->GetByteArrayElements(ENVPAR ref, &isCopy); if (refP == NULL) { h5JNIFatalError(env, "H5Rget_name: ref not pinned"); } /* end if */ else { aName = (char*)HDmalloc(sizeof(char)*bs); if (aName == NULL) { ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT); h5outOfMemory(env, "H5Rget_name: malloc failed"); } /* end if */ else { ret_val = (jlong)H5Rget_name((hid_t)loc_id, (H5R_type_t)ref_type, refP, aName, bs) ; ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, JNI_ABORT); if (ret_val < 0) { HDfree(aName); h5libraryError(env); } /* end if */ else { str = ENVPTR->NewStringUTF(ENVPAR aName); ENVPTR->SetObjectArrayElement(ENVPAR name, 0, str); HDfree(aName); } /* end else */ } /* end else */ } /* end else */ } /* end else */ } /* end else */ return ret_val; } /* end Java_hdf_hdf5lib_H5_H5Rget_1name */
/* * Class: hdf_hdf5lib_H5 * Method: H5Aget_name_by_idx * Signature: (JLjava/lang/String;IIJJ)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Aget_1name_1by_1idx (JNIEnv *env, jclass clss, jlong loc_id, jstring obj_name, jint idx_type, jint order, jlong n, jlong lapl_id) { size_t buf_size; char *aValue; jlong status_size; jstring str = NULL; const char *aName; 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); 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) { UNPIN_JAVA_STRING(obj_name, aName); h5outOfMemory(env, "H5Aget_name_by_idx: malloc failed "); } /* 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); 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 */ } return str; } /* end Java_hdf_hdf5lib_H5_H5Aget_1name_1by_1idx */
herr_t H5AwriteVL_str (JNIEnv *env, hid_t aid, hid_t tid, jobjectArray buf) { herr_t status = -1; char **wdata; jsize size; jint i; size = ENVPTR->GetArrayLength(ENVPAR (jarray) buf); wdata = (char**)HDcalloc((size_t)size + 1, sizeof(char*)); if (!wdata) { h5JNIFatalError(env, "H5AwriteVL_str: cannot allocate buffer"); } /* end if */ else { HDmemset(wdata, 0, (size_t)size * sizeof(char*)); for (i = 0; i < size; ++i) { jstring obj = (jstring) ENVPTR->GetObjectArrayElement(ENVPAR (jobjectArray) buf, i); if (obj != 0) { jsize length = ENVPTR->GetStringUTFLength(ENVPAR obj); const char *utf8 = ENVPTR->GetStringUTFChars(ENVPAR obj, 0); if (utf8) { wdata[i] = (char*)HDmalloc((size_t)length + 1); if (wdata[i]) { HDmemset(wdata[i], 0, ((size_t)length + 1)); HDstrncpy(wdata[i], utf8, (size_t)length); } /* end if */ } /* end if */ ENVPTR->ReleaseStringUTFChars(ENVPAR obj, utf8); ENVPTR->DeleteLocalRef(ENVPAR obj); } /* end if */ } /* end for (i = 0; i < size; ++i) */ status = H5Awrite((hid_t)aid, (hid_t)tid, wdata); for (i = 0; i < size; i++) { if(wdata[i]) { HDfree(wdata[i]); } /* end if */ } /* end for */ HDfree(wdata); if (status < 0) h5libraryError(env); } /* end else */ return (jint)status; }
/* * Class: hdf_hdf5lib_H5 * Method: H5Rcreate * Signature: ([BJLjava/lang/String;IJ)I */ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Rcreate(JNIEnv *env, jclass clss, jbyteArray ref, jlong loc_id, jstring name, jint ref_type, jlong space_id) { const char *rName; herr_t status = -1; 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"); } /* 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"); } /* end 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); } /* end if */ else { ENVPTR->ReleaseByteArrayElements(ENVPAR ref, refP, 0); } /* end else */ } /* end else */ } /* end else */ } /* end else */ return (jint)status; } /* end Java_hdf_hdf5lib_H5_H5Rcreate */
/* * Class: hdf_hdf5lib_H5 * Method: H5Lget_name_by_idx * Signature: (JLjava/lang/String;IIJJ)Ljava/lang/String; */ 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) { jlong status_size; jstring str = NULL; size_t buf_size; const char *lName; char *lValue; 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 { buf_size = (size_t)status_size + 1;/* add extra space for the null terminator */ lValue = (char*)HDmalloc(sizeof(char) * buf_size); if (lValue == NULL) { h5outOfMemory(env, "H5Lget_name_by_idx: malloc failed "); } /* 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); 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 */ UNPIN_JAVA_STRING(name, lName); } return str; } /* end Java_hdf_hdf5lib_H5_H5Lget_1name_1by_1idx */
/* * Class: hdf_hdf5lib_H5 * Method: H5Oget_comment_by_name * Signature: (JLjava/lang/String;J)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Oget_1comment_1by_1name (JNIEnv *env, jclass clss, jlong loc_id, jstring name, jlong access_id) { char *oComment; const char *oName; ssize_t buf_size; ssize_t status; jstring str = NULL; 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 */ 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 */
/* * Class: hdf_hdf5lib_H5 * Method: H5Oget_comment * Signature: (J)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_hdf_hdf5lib_H5_H5Oget_1comment (JNIEnv *env, jclass clss, jlong loc_id) { char *oComment; ssize_t buf_size; ssize_t status; jstring str = NULL; /* get the length of the comment */ buf_size = H5Oget_comment((hid_t)loc_id, NULL, 0); if (buf_size < 0) { h5badArgument( env, "H5Oget_comment: buf_size < 0"); } /* end if */ 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 */ 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 */
/* * Class: hdf_hdf5lib_H5 * Method: H5Lget_value * Signature: (JLjava/lang/String;[Ljava/lang/String;J)I */ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Lget_1value (JNIEnv *env, jclass clss, jlong loc_id, jstring name, jobjectArray link_value, jlong access_id) { size_t buf_size; herr_t status; H5L_info_t infobuf; const char *lName; char *lValue; const char *file_name; const char *obj_name; jstring str; infobuf.type = -1; 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 { 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 { lValue = (char*)HDmalloc(sizeof(char) * buf_size); if (lValue == NULL) { h5outOfMemory(env, "H5Lget_val: malloc failed"); } /* end if */ else { status = H5Lget_val((hid_t)loc_id, lName, (void*)lValue, buf_size, (hid_t)access_id); if (status < 0) { h5libraryError(env); } /* 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); if (status < 0) { h5libraryError(env); } /* end if */ else { str = ENVPTR->NewStringUTF(ENVPAR obj_name); if (str == NULL) { h5JNIFatalError(env, "H5Lget_val: return string not created"); } /* end if */ else { 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 if */ else { 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 */ UNPIN_JAVA_STRING(name, lName); } return infobuf.type; } /* end Java_hdf_hdf5lib_H5_H5Lget_1val */
/* * Class: hdf_hdf5lib_H5 * Method: H5Lget_value_by_idx * Signature: (JLjava/lang/String;IIJ[Ljava/lang/String;J)I */ JNIEXPORT jint JNICALL Java_hdf_hdf5lib_H5_H5Lget_1value_1by_1idx (JNIEnv *env, jclass clss, jlong loc_id, jstring name, jint index_field, jint order, jlong link_n, jobjectArray link_value, jlong access_id) { herr_t status; size_t buf_size; H5L_info_t infobuf; const char *lName; void *lValue; const char *file_name; const char *obj_name; jstring str; infobuf.type = -1; 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); } /* end if */ else { buf_size = infobuf.u.val_size; if(buf_size == 0) { h5libraryError(env); } /* end if */ else { lValue = (void*)HDmalloc(buf_size); if (lValue == NULL) { h5outOfMemory(env, "H5Lget_val_by_idx: malloc failed "); } /* 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); if (status < 0) { h5libraryError(env); } /* 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); if (status < 0) { h5libraryError(env); } /* end if */ else { str = ENVPTR->NewStringUTF(ENVPAR obj_name); if (str == NULL) { h5JNIFatalError(env, "H5Lget_val_by_idx: return string not created"); } /* end if */ else { 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 if */ else { 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 */ UNPIN_JAVA_STRING(name, lName); } return infobuf.type; } /* end Java_hdf_hdf5lib_H5_H5Lget_1val_1by_1idx */
herr_t H5AreadVL_asstr (JNIEnv *env, hid_t aid, hid_t tid, jobjectArray buf) { jint i; jint n; hid_t sid; jstring jstr; h5str_t h5str; hvl_t *rdata; hsize_t dims[H5S_MAX_RANK]; size_t size; size_t max_len = 0; herr_t status = -1; /* Get size of string array */ n = ENVPTR->GetArrayLength(ENVPAR buf); /* we will need to read n number of hvl_t structures */ rdata = (hvl_t*)HDcalloc((size_t)n, sizeof(hvl_t)); if (rdata == NULL) { h5JNIFatalError(env, "H5AreadVL_asstr: failed to allocate buff for read"); } /* end if */ else { status = H5Aread(aid, tid, rdata); if (status < 0) { dims[0] = (hsize_t)n; sid = H5Screate_simple(1, dims, NULL); H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, rdata); H5Sclose(sid); HDfree(rdata); h5JNIFatalError(env, "H5AreadVL_asstr: failed to read data"); } /* end if */ else { /* calculate the largest size of all the hvl_t structures read */ max_len = 1; for (i=0; i < n; i++) { if ((rdata + i)->len > max_len) max_len = (rdata + i)->len; } /* create one malloc to hold largest element */ size = H5Tget_size(tid) * max_len; HDmemset(&h5str, 0, sizeof(h5str_t)); h5str_new(&h5str, 4 * size); if (h5str.s == NULL) { dims[0] = (hsize_t)n; sid = H5Screate_simple(1, dims, NULL); H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, rdata); H5Sclose(sid); HDfree(rdata); h5JNIFatalError(env, "H5AreadVL_asstr: failed to allocate buf"); } /* end if */ else { H5T_class_t tclass = H5Tget_class(tid); /* convert each element to char string */ for (i=0; i < n; i++) { h5str.s[0] = '\0'; h5str_vlsprintf(&h5str, aid, tid, rdata+i, 0); jstr = ENVPTR->NewStringUTF(ENVPAR h5str.s); ENVPTR->SetObjectArrayElement(ENVPAR buf, i, jstr); } /* end for */ h5str_free(&h5str); dims[0] = (hsize_t)n; sid = H5Screate_simple(1, dims, NULL); H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, rdata); H5Sclose(sid); HDfree(rdata); } /* end else */ } /* end else */ } /* end else */ return status; }