Files
hdf5/java/src-jni/jni/h5pDCPLImp.c
T
Scot Breitenfeld 7dd5182d91 Fix CI regressions found after the review-remediation push
Verified against the fork's actual GitHub Actions CI (not just local
builds) and found two real regressions plus applied formatting the CI
bot detected but couldn't push:

- test/CMakeTests.cmake: register test_filters_v3.h5 (the Critical #3
  golden file) in HDF5_REFERENCE_TEST_FILES so a fresh checkout's build
  tree actually stages it -- it only passed locally because the file had
  been generated directly inside an existing local build directory. Was
  failing H5TEST-tfilter2 on every CI job running the standard suite.

- tools/lib/CMakeLists.txt: link the tools library against LINK_LIBS
  (libm), matching src/CMakeLists.txt's existing pattern. The new
  hex-float code in h5tools_dump.c is the first tools-library code to
  need floor()/isfinite(), and FreeBSD/OpenBSD's stricter linkers reject
  the resulting undefined symbols (Linux tolerated it silently). Was
  breaking the link step on FreeBSD 14.3/15.0 and OpenBSD 7.9.

- Applied the clang-format fixes the CI bot found but couldn't push back
  (pre-existing fork credentials gap, confirmed unrelated to this
  branch): tfilter.cpp, h5pDCPLImp.c, H5Znbit.c, tfilter2.c,
  h5tools_dump.c.

Verified via ctest -R H5TEST-tfilter2 on a build tree with the stale
golden-file copy removed (reproducing CI's exact test invocation), plus
a full local rebuild (0 warnings/errors) and the Fortran/parallel suites.

Details and CI failure logs analyzed in REVIEW-6153.md's new
"Post-push CI verification" section.
2026-09-03 13:15:38 -05:00

1582 lines
49 KiB
C

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* All rights reserved. *
* *
* This file is part of HDF5. The full HDF5 copyright notice, including *
* terms governing use, modification, and redistribution, is contained in *
* the LICENSE file, which can be found at the root of the source code *
* distribution tree, or in https://www.hdfgroup.org/licenses. *
* If you do not have access to either file, you may request a copy from *
* help@hdfgroup.org. *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#include <stdlib.h>
#include "hdf5.h"
#include "h5jni.h"
#include "h5pDCPLImp.h"
/*
* Pointer to the JNI's Virtual Machine; used for callback functions.
*/
/* extern JavaVM *jvm; */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_layout
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1layout(JNIEnv *env, jclass clss, jlong plist, jint layout)
{
herr_t retVal = FAIL;
UNUSED(clss);
if ((retVal = H5Pset_layout((hid_t)plist, (H5D_layout_t)layout)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1layout */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_layout
* Signature: (J)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1layout(JNIEnv *env, jclass clss, jlong plist)
{
H5D_layout_t retVal = H5D_LAYOUT_ERROR;
UNUSED(clss);
if (H5D_LAYOUT_ERROR == (retVal = H5Pget_layout((hid_t)plist)))
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1layout */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_chunk
* Signature: (JI[B)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1chunk(JNIEnv *env, jclass clss, jlong plist, jint ndims, jbyteArray dim)
{
jboolean isCopy;
hsize_t *chunk_dims = NULL;
uint8_t *theArray_p = NULL;
size_t rank;
jsize arrLen;
jbyte *theArray = NULL;
herr_t status = FAIL;
UNUSED(clss);
if (ndims < 0)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_chunk: ndims < 0");
if (NULL == dim)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_chunk: dim array is NULL");
if ((arrLen = ENVPTR->GetArrayLength(ENVONLY, dim)) < 0) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_chunk: dim array length < 0");
}
rank = (size_t)arrLen / sizeof(jlong);
if (rank < (size_t)ndims)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_chunk: dims array rank < ndims");
PIN_BYTE_ARRAY(ENVONLY, dim, theArray, &isCopy, "H5Pset_chunk: dim array not pinned");
if (NULL == (chunk_dims = malloc(rank * sizeof(hsize_t))))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pset_chunk: memory allocation failed");
theArray_p = (uint8_t *)theArray;
for (size_t i = 0; i < rank; i++) {
jlong dim_val;
memcpy(&dim_val, theArray_p, sizeof(jlong));
if (dim_val < 0)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_chunk: chunk dimensions can't be negative");
chunk_dims[i] = (hsize_t)dim_val;
theArray_p += sizeof(jlong);
}
if ((status = H5Pset_chunk((hid_t)plist, (int)ndims, chunk_dims)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
free(chunk_dims);
if (theArray)
UNPIN_BYTE_ARRAY(ENVONLY, dim, theArray, JNI_ABORT);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1chunk */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_chunk
* Signature: (JI[J)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1chunk(JNIEnv *env, jclass clss, jlong plist, jint max_ndims, jlongArray dims)
{
jboolean isCopy;
hsize_t *da = NULL;
jlong *theArray = NULL;
jsize arrLen;
int i;
herr_t status = FAIL;
UNUSED(clss);
if (NULL == dims)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_chunk: dims is NULL");
if ((arrLen = ENVPTR->GetArrayLength(ENVONLY, dims)) < 0) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_chunk: dims array length < 0");
}
if (arrLen < max_ndims)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_chunk: dims array < max_ndims");
PIN_LONG_ARRAY(ENVONLY, dims, theArray, &isCopy, "H5Pget_chunk: input dims not pinned");
if (NULL == (da = (hsize_t *)malloc((size_t)max_ndims * sizeof(hsize_t))))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_chunk: memory allocation failed");
if ((status = H5Pget_chunk((hid_t)plist, (int)max_ndims, da)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
for (i = 0; i < max_ndims; i++)
theArray[i] = (jlong)da[i];
done:
if (da)
free(da);
if (theArray)
UNPIN_LONG_ARRAY(ENVONLY, dims, theArray, (status < 0) ? JNI_ABORT : 0);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1chunk */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_chunk_opts
* Signature: (JI)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1chunk_1opts(JNIEnv *env, jclass clss, jlong dcpl_id, jint opts)
{
herr_t retVal = FAIL;
UNUSED(clss);
if ((retVal = H5Pset_chunk_opts((hid_t)dcpl_id, (unsigned)opts)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1chunk_1opts */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_chunk_opts
* Signature: (J)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts(JNIEnv *env, jclass clss, jlong dcpl_id)
{
unsigned opts = 0;
UNUSED(clss);
if (H5Pget_chunk_opts((hid_t)dcpl_id, &opts) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)opts;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_dset_no_attrs_hint
* Signature: (JZ)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1dset_1no_1attrs_1hint(JNIEnv *env, jclass clss, jlong dcpl_id, jboolean minimize)
{
bool minimize_val;
herr_t retVal = FAIL;
UNUSED(clss);
minimize_val = (JNI_TRUE == minimize) ? true : false;
if ((retVal = H5Pset_dset_no_attrs_hint((hid_t)dcpl_id, (bool)minimize_val)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1dset_1no_1attrs_1hint */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_dset_no_attrs_hint
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1dset_1no_1attrs_1hint(JNIEnv *env, jclass clss, jlong dcpl_id)
{
bool minimize = false;
jboolean bval = JNI_FALSE;
UNUSED(clss);
if (H5Pget_dset_no_attrs_hint((hid_t)dcpl_id, (bool *)&minimize) < 0)
H5_LIBRARY_ERROR(ENVONLY);
if (minimize == true)
bval = JNI_TRUE;
done:
return bval;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1dset_1no_1attrs_1hint */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_deflate
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1deflate(JNIEnv *env, jclass clss, jlong plist, jint level)
{
herr_t retVal = FAIL;
UNUSED(clss);
if ((retVal = H5Pset_deflate((hid_t)plist, (unsigned)level)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1deflate */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_fill_value
* Signature: (JJ[B)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fill_1value(JNIEnv *env, jclass clss, jlong plist_id, jlong type_id,
jbyteArray value)
{
jboolean isCopy;
jbyte *byteP = NULL;
herr_t status = FAIL;
UNUSED(clss);
if (NULL == value) {
if ((status = H5Pset_fill_value((hid_t)plist_id, (hid_t)type_id, byteP)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
}
else {
PIN_BYTE_ARRAY(ENVONLY, value, byteP, &isCopy, "H5Pget_fill_value: value array not pinned");
if ((status = H5Pset_fill_value((hid_t)plist_id, (hid_t)type_id, byteP)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
}
done:
if (byteP)
UNPIN_BYTE_ARRAY(ENVONLY, value, byteP, JNI_ABORT);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1fill_1value */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_fill_value
* Signature: (JJ[B)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fill_1value(JNIEnv *env, jclass clss, jlong plist_id, jlong type_id,
jbyteArray value)
{
jboolean isCopy;
herr_t status = FAIL;
jbyte *byteP = NULL;
UNUSED(clss);
if (NULL == value)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_fill_value: value is NULL");
PIN_BYTE_ARRAY(ENVONLY, value, byteP, &isCopy, "H5Pget_fill_value: value array not pinned");
if ((status = H5Pget_fill_value((hid_t)plist_id, (hid_t)type_id, byteP)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
if (byteP)
UNPIN_BYTE_ARRAY(ENVONLY, value, byteP, (status < 0) ? JNI_ABORT : 0);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1fill_1value */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pfill_value_defined
* Signature: (J[I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pfill_1value_1defined(JNIEnv *env, jclass clss, jlong plist, jintArray status)
{
H5D_fill_value_t value = H5D_FILL_VALUE_ERROR;
jboolean isCopy;
jint *theArray = NULL;
herr_t retVal = FAIL;
UNUSED(clss);
if (NULL == status)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pfill_value_defined: status is NULL");
PIN_INT_ARRAY(ENVONLY, status, theArray, &isCopy, "H5Pfill_value_defined: status not pinned");
if ((retVal = H5Pfill_value_defined((hid_t)plist, &value)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
theArray[0] = (jint)value;
done:
if (theArray)
UNPIN_INT_ARRAY(ENVONLY, status, theArray, (retVal < 0) ? JNI_ABORT : 0);
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pfill_1value_1defined */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_fill_time
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fill_1time(JNIEnv *env, jclass clss, jlong plist, jint fill_time)
{
herr_t retVal = FAIL;
UNUSED(clss);
if ((retVal = H5Pset_fill_time((hid_t)plist, (H5D_fill_time_t)fill_time)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1fill_1time */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_fill_time
* Signature: (J[I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fill_1time(JNIEnv *env, jclass clss, jlong plist, jintArray fill_time)
{
H5D_fill_time_t time = H5D_FILL_TIME_ERROR;
jboolean isCopy;
jint *theArray = NULL;
herr_t retVal = FAIL;
UNUSED(clss);
if (NULL == fill_time)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_fill_time: fill_time is NULL");
PIN_INT_ARRAY(ENVONLY, fill_time, theArray, &isCopy, "H5Pget_fill_time: fill_time not pinned");
if ((retVal = H5Pget_fill_time((hid_t)plist, &time)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
theArray[0] = (jint)time;
done:
if (theArray)
UNPIN_INT_ARRAY(ENVONLY, fill_time, theArray, (retVal < 0) ? JNI_ABORT : 0);
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1fill_1time */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_alloc_time
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1alloc_1time(JNIEnv *env, jclass clss, jlong plist, jint alloc_time)
{
herr_t retVal = FAIL;
UNUSED(clss);
if ((retVal = H5Pset_alloc_time((hid_t)plist, (H5D_alloc_time_t)alloc_time)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1alloc_1time */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_alloc_time
* Signature: (J[I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1alloc_1time(JNIEnv *env, jclass clss, jlong plist, jintArray alloc_time)
{
H5D_alloc_time_t time = H5D_ALLOC_TIME_ERROR;
jboolean isCopy;
jint *theArray = NULL;
herr_t retVal = FAIL;
UNUSED(clss);
if (NULL == alloc_time)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_alloc_time: alloc_time is NULL");
PIN_INT_ARRAY(ENVONLY, alloc_time, theArray, &isCopy, "H5Pget_alloc_time: alloc_time not pinned");
if ((retVal = H5Pget_alloc_time((hid_t)plist, &time)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
theArray[0] = time;
done:
if (theArray)
UNPIN_INT_ARRAY(ENVONLY, alloc_time, theArray, (retVal < 0) ? JNI_ABORT : 0);
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1alloc_1time */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_filter
* Signature: (JIIJ[I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1filter(JNIEnv *env, jclass clss, jlong plist, jint filter, jint flags,
jlong cd_nelmts, jintArray cd_values)
{
jboolean isCopy;
jint *theArray = NULL;
herr_t status = FAIL;
UNUSED(clss);
if (NULL == cd_values) {
if ((status = H5Pset_filter((hid_t)plist, (H5Z_filter_t)filter, (unsigned int)flags,
(size_t)cd_nelmts, NULL)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
}
else {
PIN_INT_ARRAY(ENVONLY, cd_values, theArray, &isCopy, "H5Pset_filter: input array not pinned");
if ((status = H5Pset_filter((hid_t)plist, (H5Z_filter_t)filter, (unsigned int)flags,
(size_t)cd_nelmts, (const unsigned int *)theArray)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
}
done:
if (theArray)
UNPIN_INT_ARRAY(ENVONLY, cd_values, theArray, JNI_ABORT);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1filter */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pall_filters_avail
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pall_1filters_1avail(JNIEnv *env, jclass clss, jlong dcpl_id)
{
htri_t bval = JNI_FALSE;
UNUSED(clss);
if ((bval = H5Pall_filters_avail((hid_t)dcpl_id)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
bval = (bval > 0) ? JNI_TRUE : JNI_FALSE;
done:
return (jboolean)bval;
} /* end Java_hdf_hdf5lib_H5_H5Pall_1filters_1avail */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_nfilters
* Signature: (J)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1nfilters(JNIEnv *env, jclass clss, jlong plist)
{
int retVal = -1;
UNUSED(clss);
if ((retVal = H5Pget_nfilters((hid_t)plist)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1nfilters */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_filter
* Signature: (JI[I[J[IJ[Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1filter(JNIEnv *env, jclass clss, jlong plist, jint filter_number, jintArray flags,
jlongArray cd_nelmts, jintArray cd_values, jlong namelen,
jobjectArray name)
{
jboolean isCopy;
jstring str;
jint *flagsArray = NULL;
jlong *cd_nelmtsArray = NULL;
jint *cd_valuesArray = NULL;
char *filter = NULL;
herr_t status = FAIL;
UNUSED(clss);
if (namelen <= 0)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter: namelen <= 0");
if (NULL == flags)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter: flags is NULL");
if (NULL == cd_nelmts)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter: cd_nelmts is NULL");
if (NULL == cd_values)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter: cd_values is NULL");
if (NULL == (filter = (char *)malloc(sizeof(char) * (size_t)namelen)))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_filter: memory allocation failed");
PIN_INT_ARRAY(ENVONLY, flags, flagsArray, &isCopy, "H5Pget_filter: flags array not pinned");
PIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, &isCopy, "H5Pget_filter: nelmts array not pinned");
PIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, &isCopy, "H5Pget_filter: elmts array not pinned");
/* direct cast (size_t *)variable fails on 32-bit environment */
{
unsigned int filter_config;
long long cd_nelmts_temp = *cd_nelmtsArray;
size_t cd_nelmts_t = (size_t)cd_nelmts_temp;
if ((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)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
filter[namelen - 1] = '\0';
*cd_nelmtsArray = (jlong)cd_nelmts_t;
}
if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, filter))) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_OUT_OF_MEMORY_ERROR(
ENVONLY, "H5Pget_filter: out of memory - unable to construct string from UTF characters");
}
ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, (jobject)str);
CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
done:
if (cd_valuesArray)
UNPIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, (status < 0) ? JNI_ABORT : 0);
if (cd_nelmtsArray)
UNPIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, (status < 0) ? JNI_ABORT : 0);
if (flagsArray)
UNPIN_INT_ARRAY(ENVONLY, flags, flagsArray, (status < 0) ? JNI_ABORT : 0);
if (filter)
free(filter);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1filter */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_filter2
* Signature: (JI[I[J[IJ[Ljava/lang/String;[I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1filter2(JNIEnv *env, jclass clss, jlong plist, jint filter_number,
jintArray flags, jlongArray cd_nelmts, jintArray cd_values, jlong namelen,
jobjectArray name, jintArray filter_config)
{
jboolean isCopy;
jstring str;
jint *flagsArray = NULL;
jlong *cd_nelmtsArray = NULL;
jint *cd_valuesArray = NULL;
jint *filter_configArray = NULL;
char *filter = NULL;
herr_t status = FAIL;
UNUSED(clss);
if (namelen <= 0)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter2: namelen <= 0");
if (NULL == flags)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter2: flags is NULL");
if (NULL == cd_nelmts)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter2: cd_nelmts is NULL");
if (NULL == filter_config)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter2: filter_config is NULL");
if (NULL == (filter = (char *)malloc(sizeof(char) * (size_t)namelen)))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_filter2: memory allocation failed");
PIN_INT_ARRAY(ENVONLY, flags, flagsArray, &isCopy, "H5Pget_filter2: flags array not pinned");
PIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, &isCopy, "H5Pget_filter2: nelmts array not pinned");
PIN_INT_ARRAY(ENVONLY, filter_config, filter_configArray, &isCopy,
"H5Pget_filter2: filter_config array not pinned");
if (NULL == cd_values && *cd_nelmtsArray == 0) {
/* direct cast (size_t *)variable fails on 32-bit environment */
long long cd_nelmts_temp = 0;
size_t cd_nelmts_t = (size_t)cd_nelmts_temp;
if ((status = H5Pget_filter2((hid_t)plist, (unsigned)filter_number, (unsigned int *)flagsArray,
&cd_nelmts_t, NULL, (size_t)namelen, filter,
(unsigned int *)filter_configArray)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
filter[namelen - 1] = '\0';
*cd_nelmtsArray = (jlong)cd_nelmts_t;
}
else {
if (NULL == cd_values)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter2: cd_values is NULL");
PIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, &isCopy, "H5Pget_filter2: elmts array not pinned");
{
/* 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;
if ((status = H5Pget_filter2((hid_t)plist, (unsigned)filter_number, (unsigned int *)flagsArray,
&cd_nelmts_t, (unsigned int *)cd_valuesArray, (size_t)namelen,
filter, (unsigned int *)filter_configArray)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
filter[namelen - 1] = '\0';
*cd_nelmtsArray = (jlong)cd_nelmts_t;
} /* end direct cast special */
}
if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, filter))) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_OUT_OF_MEMORY_ERROR(
ENVONLY, "H5Pget_filter2: out of memory - unable to construct string from UTF characters");
}
ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, (jobject)str);
CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
done:
if (cd_valuesArray)
UNPIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, (status < 0) ? JNI_ABORT : 0);
if (filter_configArray)
UNPIN_INT_ARRAY(ENVONLY, filter_config, filter_configArray, (status < 0) ? JNI_ABORT : 0);
if (cd_nelmtsArray)
UNPIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, (status < 0) ? JNI_ABORT : 0);
if (flagsArray)
UNPIN_INT_ARRAY(ENVONLY, flags, flagsArray, (status < 0) ? JNI_ABORT : 0);
if (filter)
free(filter);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1filter2 */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_filter_by_id
* Signature: (JI[I[J[IJ[Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id(JNIEnv *env, jclass clss, jlong plist, jint filter,
jintArray flags, jlongArray cd_nelmts, jintArray cd_values,
jlong namelen, jobjectArray name)
{
jboolean isCopy;
jstring str;
jlong *cd_nelmtsArray = NULL;
jint *cd_valuesArray = NULL;
jint *flagsArray = NULL;
char *aName = NULL;
long bs;
int rank;
herr_t status = FAIL;
UNUSED(clss);
bs = (long)namelen;
if (bs <= 0)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: namelen <= 0");
if (NULL == flags)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: flags is NULL");
if (NULL == cd_nelmts)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: cd_nelmts is NULL");
if (NULL == cd_values)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: cd_values is NULL");
if (NULL == name)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: name is NULL");
if (NULL == (aName = (char *)malloc(sizeof(char) * (size_t)bs)))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_filter_by_id: memory allocation failed");
PIN_INT_ARRAY(ENVONLY, flags, flagsArray, &isCopy, "H5Pget_filter_by_id: flags not pinned");
PIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, &isCopy, "H5Pget_filter_by_id: cd_nelms not pinned");
PIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, &isCopy,
"H5Pget_filter_by_id: cd_values array not pinned");
if ((rank = ENVPTR->GetArrayLength(ENVONLY, cd_values)) < 0) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: cd_values array length < 0");
}
{
/* direct cast (size_t *)variable fails on 32-bit environment */
unsigned int filter_config;
long long cd_nelmts_temp = *cd_nelmtsArray;
size_t cd_nelmts_t = (size_t)cd_nelmts_temp;
if ((status = H5Pget_filter_by_id2((hid_t)plist, (H5Z_filter_t)filter, (unsigned int *)flagsArray,
&cd_nelmts_t, (unsigned int *)cd_valuesArray, (size_t)namelen,
(char *)aName, &filter_config)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
aName[bs - 1] = '\0';
*cd_nelmtsArray = (jlong)cd_nelmts_t;
} /* end direct cast special */
if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, aName))) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_OUT_OF_MEMORY_ERROR(
ENVONLY, "H5Pget_filter_by_id: out of memory - unable to construct string from UTF characters");
}
ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, (jobject)str);
CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
done:
if (cd_valuesArray)
UNPIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, (status < 0) ? JNI_ABORT : 0);
if (cd_nelmtsArray)
UNPIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, (status < 0) ? JNI_ABORT : 0);
if (flagsArray)
UNPIN_INT_ARRAY(ENVONLY, flags, flagsArray, (status < 0) ? JNI_ABORT : 0);
if (aName)
free(aName);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_filter_by_id2
* Signature: (JI[I[J[IJ[Ljava/lang/String;[I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id2(JNIEnv *env, jclass clss, jlong plist, jint filter,
jintArray flags, jlongArray cd_nelmts, jintArray cd_values,
jlong namelen, jobjectArray name, jintArray filter_config)
{
jboolean isCopy;
jstring str;
jlong *cd_nelmtsArray = NULL;
jint *cd_valuesArray = NULL;
jint *flagsArray = NULL;
jint *filter_configArray = NULL;
long bs;
char *aName = NULL;
herr_t status = FAIL;
UNUSED(clss);
bs = (long)namelen;
if (bs <= 0)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: namelen <= 0");
if (NULL == flags)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: flags is NULL");
if (NULL == cd_nelmts)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: cd_nelmts is NULL");
if (NULL == cd_values)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: cd_values is NULL");
if (NULL == name)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: name is NULL");
if (NULL == filter_config)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: filter_config is NULL");
if (NULL == (aName = (char *)malloc(sizeof(char) * (size_t)bs)))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_filter_by_id2: memory allocation failed");
PIN_INT_ARRAY(ENVONLY, flags, flagsArray, &isCopy, "H5Pget_filter_by_id2: flags not pinned");
PIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, &isCopy, "H5Pget_filter_by_id2: cd_nelms not pinned");
PIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, &isCopy,
"H5Pget_filter_by_id2: cd_values array not pinned");
PIN_INT_ARRAY(ENVONLY, filter_config, filter_configArray, &isCopy,
"H5Pget_filter_by_id2: filter_config not pinned");
{
/* 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;
if ((status = H5Pget_filter_by_id2((hid_t)plist, (H5Z_filter_t)filter, (unsigned int *)flagsArray,
&cd_nelmts_t, (unsigned int *)cd_valuesArray, (size_t)namelen,
(char *)aName, (unsigned int *)filter_configArray)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
aName[bs - 1] = '\0';
*cd_nelmtsArray = (jlong)cd_nelmts_t;
} /* end direct cast special handling */
if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, aName))) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_OUT_OF_MEMORY_ERROR(
ENVONLY, "H5Pget_filter_by_id2: out of memory - unable to construct string from UTF characters");
}
ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, (jobject)str);
CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
done:
if (filter_configArray)
UNPIN_INT_ARRAY(ENVONLY, filter_config, filter_configArray, (status < 0) ? JNI_ABORT : 0);
if (cd_valuesArray)
UNPIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, (status < 0) ? JNI_ABORT : 0);
if (cd_nelmtsArray)
UNPIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, (status < 0) ? JNI_ABORT : 0);
if (flagsArray)
UNPIN_INT_ARRAY(ENVONLY, flags, flagsArray, (status < 0) ? JNI_ABORT : 0);
if (aName)
free(aName);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id2 */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pmodify_filter
* Signature: (JIIJ[I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pmodify_1filter(JNIEnv *env, jclass clss, jlong plist, jint filter, jint flags,
jlong cd_nelmts, jintArray cd_values)
{
jboolean isCopy;
jint *cd_valuesP = NULL;
herr_t status = FAIL;
UNUSED(clss);
if (NULL == cd_values)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pmodify_filter: cd_values is NULL");
PIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesP, &isCopy, "H5Pmodify_filter: cd_values not pinned");
if ((status = H5Pmodify_filter((hid_t)plist, (H5Z_filter_t)filter, (const unsigned int)flags,
(size_t)cd_nelmts, (unsigned int *)cd_valuesP)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
if (cd_valuesP)
UNPIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesP, JNI_ABORT);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pmodify_1filter */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Premove_filter
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5P1remove_1filter(JNIEnv *env, jclass clss, jlong obj_id, jint filter)
{
herr_t status = FAIL;
UNUSED(clss);
if ((status = H5Premove_filter((hid_t)obj_id, (H5Z_filter_t)filter)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5P1remove_1filter */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_fletcher32
* Signature: (J)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fletcher32(JNIEnv *env, jclass clss, jlong plist)
{
herr_t retVal = FAIL;
UNUSED(clss);
if ((retVal = H5Pset_fletcher32((hid_t)plist)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1fletcher32 */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_nbit
* Signature: (J)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1nbit(JNIEnv *env, jclass clss, jlong plist_id)
{
herr_t retVal = FAIL;
UNUSED(clss);
if ((retVal = H5Pset_nbit((hid_t)plist_id)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1nbit */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_scaleoffset
* Signature: (JII)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1scaleoffset(JNIEnv *env, jclass clss, jlong plist_id, jint scale_type,
jint scale_factor)
{
herr_t retVal = FAIL;
UNUSED(clss);
if (scale_factor < 0)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_scaleoffset: scale factor must be >= 0");
if (scale_type != H5Z_SO_FLOAT_DSCALE && scale_type != H5Z_SO_FLOAT_ESCALE && scale_type != H5Z_SO_INT)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_scaleoffset: invalid scale type");
if ((retVal = H5Pset_scaleoffset((hid_t)plist_id, (H5Z_SO_scale_type_t)scale_type, scale_factor)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1scaleoffset */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_shuffle
* Signature: (J)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1shuffle(JNIEnv *env, jclass clss, jlong plist)
{
herr_t retVal = FAIL;
UNUSED(clss);
if ((retVal = H5Pset_shuffle((hid_t)plist)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1shuffle */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_szip
* Signature: (JII)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1szip(JNIEnv *env, jclass clss, jlong plist, jint options_mask,
jint pixels_per_block)
{
herr_t retVal = FAIL;
UNUSED(clss);
if ((retVal = H5Pset_szip((hid_t)plist, (unsigned int)options_mask, (unsigned int)pixels_per_block)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1szip */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_external
* Signature: (JLjava/lang/String;JJ)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1external(JNIEnv *env, jclass clss, jlong plist, jstring name, jlong offset,
jlong size)
{
const char *fileName = NULL;
herr_t status = FAIL;
UNUSED(clss);
if (NULL == name)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_external: file name is NULL");
PIN_JAVA_STRING(ENVONLY, name, fileName, NULL, "H5Pset_external: file name not pinned");
if ((status = H5Pset_external((hid_t)plist, fileName, (HDoff_t)offset, (hsize_t)size)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
if (fileName)
UNPIN_JAVA_STRING(ENVONLY, name, fileName);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pset_1external */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_external
* Signature: (JIJ[Ljava/lang/String;[J)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1external(JNIEnv *env, jclass clss, jlong plist, jint idx, jlong name_size,
jobjectArray name, jlongArray size)
{
jboolean isCopy;
jstring str;
hsize_t s;
HDoff_t o;
jsize arrLen;
jlong *theArray = NULL;
char *file = NULL;
herr_t status = FAIL;
UNUSED(clss);
if (name_size < 0)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_external: name_size < 0");
if ((arrLen = ENVPTR->GetArrayLength(ENVONLY, size)) < 0) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_external: size array length < 0");
}
if ((size != NULL) && (arrLen < 2))
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_external: size input array < 2");
if (name_size > 0)
if (NULL == (file = (char *)malloc(sizeof(char) * (size_t)name_size)))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_external: memory allocation failed");
if ((status = H5Pget_external((hid_t)plist, (unsigned)idx, (size_t)name_size, file, &o, (hsize_t *)&s)) <
0)
H5_LIBRARY_ERROR(ENVONLY);
if (NULL != size) {
PIN_LONG_ARRAY(ENVONLY, size, theArray, &isCopy, "H5Pget_external: size array not pinned");
theArray[0] = o;
theArray[1] = (jlong)s;
}
if (NULL != file) {
file[name_size - 1] = '\0';
if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, file))) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_OUT_OF_MEMORY_ERROR(
ENVONLY, "H5Pget_external: out of memory - unable to construct string from UTF characters");
}
ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, (jobject)str);
CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
}
done:
if (theArray)
UNPIN_LONG_ARRAY(ENVONLY, size, theArray, (status < 0) ? JNI_ABORT : 0);
if (file)
free(file);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1external */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_external_count
* Signature: (J)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1external_1count(JNIEnv *env, jclass clss, jlong plist)
{
int retVal = -1;
UNUSED(clss);
if ((retVal = H5Pget_external_count((hid_t)plist)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jint)retVal;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1external_1count */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_virtual
* Signature: (JJLjava/lang/String;Ljava/lang/String;J)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1virtual(JNIEnv *env, jclass clss, jlong dcpl_id, jlong vspace_id,
jstring src_file_name, jstring src_dset_name, jlong src_space_id)
{
const char *fstr = NULL;
const char *dstr = NULL;
herr_t retVal = FAIL;
UNUSED(clss);
if (NULL == src_file_name)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_virtual: src_file_name is NULL");
if (NULL == src_dset_name)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_virtual: src_dset_name is NULL");
PIN_JAVA_STRING(ENVONLY, src_file_name, fstr, NULL, "H5Pset_virtual: src_file_name not pinned");
PIN_JAVA_STRING(ENVONLY, src_dset_name, dstr, NULL, "H5Pset_virtual: src_dset_name not pinned");
if ((retVal = H5Pset_virtual((hid_t)dcpl_id, (hid_t)vspace_id, fstr, dstr, (hid_t)src_space_id)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
if (dstr)
UNPIN_JAVA_STRING(ENVONLY, src_dset_name, dstr);
if (fstr)
UNPIN_JAVA_STRING(ENVONLY, src_file_name, fstr);
} /* end Java_hdf_hdf5lib_H5_H5Pset_1virtual */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_virtual_count
* Signature: (J)J
*/
JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1count(JNIEnv *env, jclass clss, jlong dcpl_id)
{
size_t s = 0;
UNUSED(clss);
if (H5Pget_virtual_count((hid_t)dcpl_id, &s) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jlong)s;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1count */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_virtual_dsetname
* Signature: (JJ)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1dsetname(JNIEnv *env, jclass clss, jlong dcpl_id, jlong idx)
{
ssize_t buf_size;
char *dname = NULL;
jstring str = NULL;
UNUSED(clss);
/* get the length of the filename */
if ((buf_size = H5Pget_virtual_dsetname((hid_t)dcpl_id, (size_t)idx, NULL, 0)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
if (NULL == (dname = (char *)malloc(sizeof(char) * (size_t)buf_size + 1)))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_virtual_dsetname: memory allocation failed");
if (H5Pget_virtual_dsetname((hid_t)dcpl_id, (size_t)idx, dname, (size_t)buf_size + 1) < 0)
H5_LIBRARY_ERROR(ENVONLY);
dname[buf_size] = '\0';
if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, dname))) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_OUT_OF_MEMORY_ERROR(
ENVONLY,
"H5Pget_virtual_dsetname: out of memory - unable to construct string from UTF characters");
}
done:
if (dname)
free(dname);
return (jstring)str;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1dsetname */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_virtual_filename
* Signature: (JJ)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1filename(JNIEnv *env, jclass clss, jlong dcpl_id, jlong idx)
{
ssize_t buf_size;
char *fname = NULL;
jstring str = NULL;
UNUSED(clss);
/* get the length of the filename */
if ((buf_size = H5Pget_virtual_filename((hid_t)dcpl_id, (size_t)idx, NULL, 0)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
if (NULL == (fname = (char *)malloc(sizeof(char) * (size_t)buf_size + 1)))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_virtual_filename: memory allocation failed");
if (H5Pget_virtual_filename((hid_t)dcpl_id, (size_t)idx, fname, (size_t)buf_size + 1) < 0)
H5_LIBRARY_ERROR(ENVONLY);
fname[buf_size] = '\0';
if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, fname))) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_OUT_OF_MEMORY_ERROR(
ENVONLY,
"H5Pget_virtual_filename: out of memory - unable to construct string from UTF characters");
}
done:
if (fname)
free(fname);
return (jstring)str;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1filename */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_virtual_srcspace
* Signature: (JJ)J
*/
JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1srcspace(JNIEnv *env, jclass clss, jlong dcpl_id, jlong idx)
{
hid_t space_id = H5I_INVALID_HID;
UNUSED(clss);
if ((space_id = H5Pget_virtual_srcspace((hid_t)dcpl_id, (size_t)idx)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jlong)space_id;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1srcspace */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_virtual_vspace
* Signature: (JJ)J
*/
JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1vspace(JNIEnv *env, jclass clss, jlong dcpl_id, jlong idx)
{
hid_t space_id = H5I_INVALID_HID;
UNUSED(clss);
if ((space_id = H5Pget_virtual_vspace((hid_t)dcpl_id, (size_t)idx)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
return (jlong)space_id;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1vspace */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pset_virtual_prefix
* Signature: (JLjava/lang/String;)V
*/
JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1virtual_1prefix(JNIEnv *env, jclass clss, jlong dapl_id, jstring prefix)
{
const char *virtPrefix = NULL;
herr_t retVal = FAIL;
UNUSED(clss);
if (NULL == prefix)
H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_virtual_prefix: virtual prefix is NULL");
PIN_JAVA_STRING(ENVONLY, prefix, virtPrefix, NULL, "H5Pset_virtual_prefix: virtual prefix not pinned");
if ((retVal = H5Pset_virtual_prefix((hid_t)dapl_id, virtPrefix)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
if (virtPrefix)
UNPIN_JAVA_STRING(ENVONLY, prefix, virtPrefix);
} /* end Java_hdf_hdf5lib_H5_H5Pset_1virtual_1prefix */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_virtual_prefix
* Signature: (J)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1prefix(JNIEnv *env, jclass clss, jlong dapl_id)
{
ssize_t prefix_size = -1;
char *pre = NULL;
jstring str = NULL;
UNUSED(clss);
if ((prefix_size = H5Pget_virtual_prefix((hid_t)dapl_id, (char *)NULL, 0)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
if (NULL == (pre = (char *)malloc(sizeof(char) * (size_t)prefix_size + 1)))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_virtual_prefix: memory allocation failed");
if (H5Pget_virtual_prefix((hid_t)dapl_id, (char *)pre, (size_t)prefix_size + 1) < 0)
H5_LIBRARY_ERROR(ENVONLY);
pre[prefix_size] = '\0';
if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, pre))) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_OUT_OF_MEMORY_ERROR(
ENVONLY, "H5Pget_virtual_prefix: out of memory - unable to construct string from UTF characters");
}
done:
if (pre)
free(pre);
return (jstring)str;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1prefix */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pappend_filter (string form)
* Signature: (JIILjava/lang/String;)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pappend_1filter_1str(JNIEnv *env, jclass clss, jlong plist_id, jint filter_id,
jint flags, jstring params)
{
H5Z_params_t p;
const char *c_params = NULL;
jboolean isCopy;
herr_t status = FAIL;
UNUSED(clss);
if (params)
PIN_JAVA_STRING(ENVONLY, params, c_params, &isCopy, "H5Pappend_filter: params string not pinned");
p.type = H5Z_PARAMS_STRING;
p.u.str = c_params;
if ((status = H5Pappend_filter((hid_t)plist_id, (H5Z_filter_t)filter_id, (unsigned)flags, &p)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
if (c_params)
UNPIN_JAVA_STRING(ENVONLY, params, c_params);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pappend_1filter_1str */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pappend_filter (raw cd_values form)
* Signature: (JII[I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pappend_1filter_1raw(JNIEnv *env, jclass clss, jlong plist_id, jint filter_id,
jint flags, jintArray cd_values)
{
H5Z_params_t p;
jint *c_cd_values = NULL;
jboolean isCopy;
herr_t status = FAIL;
jsize cd_nelmts = 0;
UNUSED(clss);
if (cd_values) {
cd_nelmts = ENVPTR->GetArrayLength(ENVONLY, cd_values);
if (cd_nelmts < 0)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pappend_filter: cd_values array length < 0");
PIN_INT_ARRAY(ENVONLY, cd_values, c_cd_values, &isCopy, "H5Pappend_filter: cd_values not pinned");
}
p.type = H5Z_PARAMS_CDVALUES;
p.u.raw.cd_nelmts = (size_t)cd_nelmts;
p.u.raw.cd_values = (const unsigned *)c_cd_values;
if ((status = H5Pappend_filter((hid_t)plist_id, (H5Z_filter_t)filter_id, (unsigned)flags, &p)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
if (c_cd_values)
UNPIN_INT_ARRAY(ENVONLY, cd_values, c_cd_values, JNI_ABORT);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pappend_1filter_1raw */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pmodify_filter_by_idx (string form)
* Signature: (JIILjava/lang/String;)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pmodify_1filter_1by_1idx_1str(JNIEnv *env, jclass clss, jlong plist_id, jint filter_idx,
jint flags, jstring params)
{
H5Z_params_t p;
const char *c_params = NULL;
jboolean isCopy;
herr_t status = FAIL;
UNUSED(clss);
if (params)
PIN_JAVA_STRING(ENVONLY, params, c_params, &isCopy,
"H5Pmodify_filter_by_idx: params string not pinned");
p.type = H5Z_PARAMS_STRING;
p.u.str = c_params;
if ((status = H5Pmodify_filter_by_idx((hid_t)plist_id, (unsigned)filter_idx, (unsigned)flags, &p)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
if (c_params)
UNPIN_JAVA_STRING(ENVONLY, params, c_params);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pmodify_1filter_1by_1idx_1str */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pmodify_filter_by_idx (raw cd_values form)
* Signature: (JII[I)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pmodify_1filter_1by_1idx_1raw(JNIEnv *env, jclass clss, jlong plist_id, jint filter_idx,
jint flags, jintArray cd_values)
{
H5Z_params_t p;
jint *c_cd_values = NULL;
jboolean isCopy;
herr_t status = FAIL;
jsize cd_nelmts = 0;
UNUSED(clss);
if (cd_values) {
cd_nelmts = ENVPTR->GetArrayLength(ENVONLY, cd_values);
if (cd_nelmts < 0)
H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pmodify_filter_by_idx: cd_values array length < 0");
PIN_INT_ARRAY(ENVONLY, cd_values, c_cd_values, &isCopy,
"H5Pmodify_filter_by_idx: cd_values not pinned");
}
p.type = H5Z_PARAMS_CDVALUES;
p.u.raw.cd_nelmts = (size_t)cd_nelmts;
p.u.raw.cd_values = (const unsigned *)c_cd_values;
if ((status = H5Pmodify_filter_by_idx((hid_t)plist_id, (unsigned)filter_idx, (unsigned)flags, &p)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
done:
if (c_cd_values)
UNPIN_INT_ARRAY(ENVONLY, cd_values, c_cd_values, JNI_ABORT);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pmodify_1filter_1by_1idx_1raw */
/*
* Class: hdf_hdf5lib_H5
* Method: H5Pget_filter_params_by_idx
* Signature: (JI[Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1filter_1params_1by_1idx(JNIEnv *env, jclass clss, jlong plist_id, jint idx,
jobjectArray params)
{
jstring str;
char *buf = NULL;
size_t plen = 0;
herr_t status = FAIL;
UNUSED(clss);
/* Query the exact length first (buf == NULL), matching the H5Iget_name JNI idiom,
* so the buffer below is sized to fit the stored string without truncation. */
if ((status = H5Pget_filter_params_by_idx((hid_t)plist_id, (unsigned)idx, NULL, 0, &plen)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
if (NULL == (buf = (char *)malloc(plen + 1)))
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_filter_params_by_idx: malloc failed");
if (plen > 0) {
/* Populate the exact-size buffer. */
if ((status = H5Pget_filter_params_by_idx((hid_t)plist_id, (unsigned)idx, buf, plen + 1, &plen)) < 0)
H5_LIBRARY_ERROR(ENVONLY);
}
buf[plen] = '\0';
if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, buf))) {
CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
H5_OUT_OF_MEMORY_ERROR(ENVONLY, "H5Pget_filter_params_by_idx: could not create string");
}
ENVPTR->SetObjectArrayElement(ENVONLY, params, 0, str);
CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
done:
if (buf)
free(buf);
return (jint)status;
} /* end Java_hdf_hdf5lib_H5_H5Pget_1filter_1params_1by_1idx */
#ifdef __cplusplus
} /* end extern "C" */
#endif /* __cplusplus */