1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2  * Copyright by The HDF Group.                                               *
3  * Copyright by the Board of Trustees of the University of Illinois.         *
4  * All rights reserved.                                                      *
5  *                                                                           *
6  * This file is part of HDF5.  The full HDF5 copyright notice, including     *
7  * terms governing use, modification, and redistribution, is contained in    *
8  * the COPYING file, which can be found at the root of the source code       *
9  * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases.  *
10  * If you do not have access to either file, you may request a copy from     *
11  * help@hdfgroup.org.                                                        *
12  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
13 
14 /*
15  *  For details of the HDF libraries, see the HDF Documentation at:
16  *    http://hdfgroup.org/HDF5/doc/
17  *
18  */
19 
20 #ifdef __cplusplus
21 extern "C" {
22 #endif /* __cplusplus */
23 
24 #include <stdlib.h>
25 #include "hdf5.h"
26 #include "h5jni.h"
27 #include "h5pDCPLImp.h"
28 
29 /*
30  * Pointer to the JNI's Virtual Machine; used for callback functions.
31  */
32 /* extern JavaVM *jvm; */
33 
34 /*
35  * Class:     hdf_hdf5lib_H5
36  * Method:    H5Pset_layout
37  * Signature: (JI)I
38  */
39 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1layout(JNIEnv * env,jclass clss,jlong plist,jint layout)40 Java_hdf_hdf5lib_H5_H5Pset_1layout
41     (JNIEnv *env, jclass clss, jlong plist, jint layout)
42 {
43     herr_t retVal = FAIL;
44 
45     UNUSED(clss);
46 
47     if ((retVal = H5Pset_layout((hid_t)plist, (H5D_layout_t)layout)) < 0)
48         H5_LIBRARY_ERROR(ENVONLY);
49 
50 done:
51     return (jint)retVal;
52 } /* end Java_hdf_hdf5lib_H5_H5Pset_1layout */
53 
54 /*
55  * Class:     hdf_hdf5lib_H5
56  * Method:    H5Pget_layout
57  * Signature: (J)I
58  */
59 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1layout(JNIEnv * env,jclass clss,jlong plist)60 Java_hdf_hdf5lib_H5_H5Pget_1layout
61     (JNIEnv *env, jclass clss, jlong plist)
62 {
63     H5D_layout_t retVal = H5D_LAYOUT_ERROR;
64 
65     UNUSED(clss);
66 
67     if (H5D_LAYOUT_ERROR == (retVal = H5Pget_layout((hid_t)plist)))
68         H5_LIBRARY_ERROR(ENVONLY);
69 
70 done:
71     return (jint)retVal;
72 } /* end Java_hdf_hdf5lib_H5_H5Pget_1layout */
73 
74 /*
75  * Class:     hdf_hdf5lib_H5
76  * Method:    H5Pset_chunk
77  * Signature: (JI[B)I
78  */
79 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1chunk(JNIEnv * env,jclass clss,jlong plist,jint ndims,jbyteArray dim)80 Java_hdf_hdf5lib_H5_H5Pset_1chunk
81     (JNIEnv *env, jclass clss, jlong plist, jint ndims, jbyteArray dim)
82 {
83     jboolean  isCopy;
84     hsize_t  *da = NULL;
85     hsize_t  *lp = NULL;
86     size_t    i;
87     size_t    rank;
88     jsize     arrLen;
89     jbyte    *theArray = NULL;
90     jlong    *jlp = NULL;
91     herr_t    status = FAIL;
92 
93     UNUSED(clss);
94 
95     if (ndims < 0)
96         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_chunk: ndims < 0");
97     if (NULL == dim)
98         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_chunk: dim array is NULL");
99 
100     if ((arrLen = ENVPTR->GetArrayLength(ENVONLY, dim)) < 0) {
101         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
102         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_chunk: dim array length < 0");
103     }
104 
105     rank = (size_t) arrLen / sizeof(jlong);
106     if (rank < (size_t) ndims)
107         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_chunk: dims array rank < ndims");
108 
109     PIN_BYTE_ARRAY(ENVONLY, dim, theArray, &isCopy, "H5Pset_chunk: dim array not pinned");
110 
111     if (NULL == (da = lp = (hsize_t *) HDmalloc(rank * sizeof(hsize_t))))
112         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pset_chunk: memory allocation failed");
113 
114     jlp = (jlong *)theArray;
115     for (i = 0; i < rank; i++) {
116         *lp = (hsize_t)*jlp;
117         lp++;
118         jlp++;
119     } /* end if */
120 
121     if ((status = H5Pset_chunk((hid_t)plist, (int)ndims, da)) < 0)
122         H5_LIBRARY_ERROR(ENVONLY);
123 
124 done:
125     if (da)
126         HDfree(da);
127     if (theArray)
128         UNPIN_BYTE_ARRAY(ENVONLY, dim, theArray, JNI_ABORT);
129 
130     return (jint)status;
131 } /* end Java_hdf_hdf5lib_H5_H5Pset_1chunk */
132 
133 /*
134  * Class:     hdf_hdf5lib_H5
135  * Method:    H5Pget_chunk
136  * Signature: (JI[J)I
137  */
138 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1chunk(JNIEnv * env,jclass clss,jlong plist,jint max_ndims,jlongArray dims)139 Java_hdf_hdf5lib_H5_H5Pget_1chunk
140     (JNIEnv *env, jclass clss, jlong plist, jint max_ndims, jlongArray dims)
141 {
142     jboolean  isCopy;
143     hsize_t  *da = NULL;
144     jlong    *theArray = NULL;
145     jsize     arrLen;
146     int       i;
147     herr_t    status = FAIL;
148 
149     UNUSED(clss);
150 
151     if (NULL == dims)
152         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_chunk: dims is NULL");
153 
154     if ((arrLen = ENVPTR->GetArrayLength(ENVONLY, dims)) < 0) {
155         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
156         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_chunk: dims array length < 0");
157     }
158     if (arrLen < max_ndims)
159         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_chunk: dims array < max_ndims");
160 
161     PIN_LONG_ARRAY(ENVONLY, dims, theArray, &isCopy, "H5Pget_chunk: input dims not pinned");
162 
163     if (NULL == (da = (hsize_t *) HDmalloc((size_t)max_ndims * sizeof(hsize_t))))
164         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_chunk: memory allocation failed");
165 
166     if ((status = H5Pget_chunk((hid_t)plist, (int)max_ndims, da)) < 0)
167         H5_LIBRARY_ERROR(ENVONLY);
168 
169     for (i = 0; i < max_ndims; i++)
170         theArray[i] = (jlong)da[i];
171 
172 done:
173     if (da)
174         HDfree(da);
175     if (theArray)
176         UNPIN_LONG_ARRAY(ENVONLY, dims, theArray, (status < 0) ? JNI_ABORT : 0);
177 
178     return (jint)status;
179 } /* end Java_hdf_hdf5lib_H5_H5Pget_1chunk */
180 
181 /*
182  * Class:     hdf_hdf5lib_H5
183  * Method:    H5Pset_chunk_opts
184  * Signature: (JI)V
185  */
186 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1chunk_1opts(JNIEnv * env,jclass clss,jlong dcpl_id,jint opts)187 Java_hdf_hdf5lib_H5_H5Pset_1chunk_1opts
188     (JNIEnv *env, jclass clss, jlong dcpl_id, jint opts)
189 {
190     herr_t retVal = FAIL;
191 
192     UNUSED(clss);
193 
194     if ((retVal = H5Pset_chunk_opts((hid_t)dcpl_id, (unsigned)opts)) < 0)
195         H5_LIBRARY_ERROR(ENVONLY);
196 
197 done:
198     return;
199 } /* end Java_hdf_hdf5lib_H5_H5Pset_1chunk_1opts */
200 
201 /*
202  * Class:     hdf_hdf5lib_H5
203  * Method:    H5Pget_chunk_opts
204  * Signature: (J)I
205  */
206 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts(JNIEnv * env,jclass clss,jlong dcpl_id)207 Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts
208     (JNIEnv *env, jclass clss, jlong dcpl_id)
209 {
210     unsigned opts = 0;
211 
212     UNUSED(clss);
213 
214     if (H5Pget_chunk_opts((hid_t)dcpl_id, &opts) < 0)
215         H5_LIBRARY_ERROR(ENVONLY);
216 
217 done:
218     return (jint)opts;
219 } /* end Java_hdf_hdf5lib_H5_H5Pget_1chunk_1opts */
220 
221 /*
222  * Class:     hdf_hdf5lib_H5
223  * Method:    H5Pset_dset_no_attrs_hint
224  * Signature: (JZ)V
225  */
226 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1dset_1no_1attrs_1hint(JNIEnv * env,jclass clss,jlong dcpl_id,jboolean minimize)227 Java_hdf_hdf5lib_H5_H5Pset_1dset_1no_1attrs_1hint
228 (JNIEnv *env, jclass clss, jlong dcpl_id, jboolean minimize)
229 {
230     hbool_t minimize_val;
231     herr_t  retVal = FAIL;
232 
233     UNUSED(clss);
234 
235     minimize_val = (JNI_TRUE == minimize) ? TRUE : FALSE;
236 
237     if ((retVal = H5Pset_dset_no_attrs_hint((hid_t)dcpl_id, (hbool_t)minimize_val)) < 0)
238         H5_LIBRARY_ERROR(ENVONLY);
239 
240 done:
241     return;
242 } /* end Java_hdf_hdf5lib_H5_H5Pset_1dset_1no_1attrs_1hint */
243 
244 /*
245  * Class:     hdf_hdf5lib_H5
246  * Method:    H5Pget_dset_no_attrs_hint
247  * Signature: (J)Z
248  */
249 JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1dset_1no_1attrs_1hint(JNIEnv * env,jclass clss,jlong dcpl_id)250 Java_hdf_hdf5lib_H5_H5Pget_1dset_1no_1attrs_1hint
251 (JNIEnv *env, jclass clss, jlong dcpl_id)
252 {
253     hbool_t  minimize = FALSE;
254     jboolean bval = JNI_FALSE;
255 
256     UNUSED(clss);
257 
258     if (H5Pget_dset_no_attrs_hint((hid_t)dcpl_id, (hbool_t *)&minimize) < 0)
259         H5_LIBRARY_ERROR(ENVONLY);
260 
261     if (minimize == TRUE)
262         bval = JNI_TRUE;
263 
264 done:
265     return bval;
266 } /* end Java_hdf_hdf5lib_H5_H5Pget_1dset_1no_1attrs_1hint */
267 
268 /*
269  * Class:     hdf_hdf5lib_H5
270  * Method:    H5Pset_deflate
271  * Signature: (JI)I
272  */
273 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1deflate(JNIEnv * env,jclass clss,jlong plist,jint level)274 Java_hdf_hdf5lib_H5_H5Pset_1deflate
275     (JNIEnv *env, jclass clss, jlong plist, jint level)
276 {
277     herr_t retVal = FAIL;
278 
279     UNUSED(clss);
280 
281     if ((retVal = H5Pset_deflate((hid_t)plist, (unsigned)level)) < 0)
282         H5_LIBRARY_ERROR(ENVONLY);
283 
284 done:
285     return (jint)retVal;
286 } /* end Java_hdf_hdf5lib_H5_H5Pset_1deflate */
287 
288 /*
289  * Class:     hdf_hdf5lib_H5
290  * Method:    H5Pset_fill_value
291  * Signature: (JJ[B)I
292  */
293 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fill_1value(JNIEnv * env,jclass clss,jlong plist_id,jlong type_id,jbyteArray value)294 Java_hdf_hdf5lib_H5_H5Pset_1fill_1value
295     (JNIEnv *env, jclass clss, jlong plist_id, jlong type_id, jbyteArray value)
296 {
297     jboolean  isCopy;
298     jbyte    *byteP = NULL;
299     herr_t    status = FAIL;
300 
301     UNUSED(clss);
302 
303     if (NULL == value) {
304         if ((status = H5Pset_fill_value((hid_t)plist_id, (hid_t)type_id, byteP)) < 0)
305             H5_LIBRARY_ERROR(ENVONLY);
306     }
307     else {
308         PIN_BYTE_ARRAY(ENVONLY, value, byteP, &isCopy, "H5Pget_fill_value: value array not pinned");
309 
310         if ((status = H5Pset_fill_value((hid_t)plist_id, (hid_t)type_id, byteP)) < 0)
311             H5_LIBRARY_ERROR(ENVONLY);
312     }
313 
314 done:
315     if (byteP)
316         UNPIN_BYTE_ARRAY(ENVONLY, value, byteP, JNI_ABORT);
317 
318     return (jint)status;
319 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fill_1value */
320 
321 /*
322  * Class:     hdf_hdf5lib_H5
323  * Method:    H5Pget_fill_value
324  * Signature: (JJ[B)I
325  */
326 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fill_1value(JNIEnv * env,jclass clss,jlong plist_id,jlong type_id,jbyteArray value)327 Java_hdf_hdf5lib_H5_H5Pget_1fill_1value
328     (JNIEnv *env, jclass clss, jlong plist_id, jlong type_id, jbyteArray value)
329 {
330     jboolean  isCopy;
331     herr_t    status = FAIL;
332     jbyte    *byteP = NULL;
333 
334     UNUSED(clss);
335 
336     if (NULL == value)
337         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_fill_value: value is NULL");
338 
339     PIN_BYTE_ARRAY(ENVONLY, value, byteP, &isCopy, "H5Pget_fill_value: value array not pinned");
340 
341     if ((status = H5Pget_fill_value((hid_t)plist_id, (hid_t)type_id, byteP)) < 0)
342         H5_LIBRARY_ERROR(ENVONLY);
343 
344 done:
345     if (byteP)
346         UNPIN_BYTE_ARRAY(ENVONLY, value, byteP, (status < 0) ? JNI_ABORT : 0);
347 
348     return (jint)status;
349 } /* end Java_hdf_hdf5lib_H5_H5Pget_1fill_1value */
350 
351 /*
352  * Class:     hdf_hdf5lib_H5
353  * Method:    H5Pfill_value_defined
354  * Signature: (J[I)I
355  */
356 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pfill_1value_1defined(JNIEnv * env,jclass clss,jlong plist,jintArray status)357 Java_hdf_hdf5lib_H5_H5Pfill_1value_1defined
358     (JNIEnv *env, jclass clss, jlong plist, jintArray status)
359 {
360     H5D_fill_value_t  value = H5D_FILL_VALUE_ERROR;
361     jboolean          isCopy;
362     jint             *theArray = NULL;
363     herr_t            retVal = FAIL;
364 
365     UNUSED(clss);
366 
367     if (NULL == status)
368         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pfill_value_defined: status is NULL");
369 
370     PIN_INT_ARRAY(ENVONLY, status, theArray, &isCopy, "H5Pfill_value_defined: status not pinned");
371 
372     if ((retVal = H5Pfill_value_defined((hid_t)plist, &value)) < 0)
373         H5_LIBRARY_ERROR(ENVONLY);
374 
375     theArray[0] = (jint)value;
376 
377 done:
378     if (theArray)
379         UNPIN_INT_ARRAY(ENVONLY, status, theArray, (retVal < 0) ? JNI_ABORT : 0);
380 
381     return (jint)retVal;
382 } /* end Java_hdf_hdf5lib_H5_H5Pfill_1value_1defined */
383 
384 /*
385  * Class:     hdf_hdf5lib_H5
386  * Method:    H5Pset_fill_time
387  * Signature: (JI)I
388  */
389 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fill_1time(JNIEnv * env,jclass clss,jlong plist,jint fill_time)390 Java_hdf_hdf5lib_H5_H5Pset_1fill_1time
391     (JNIEnv *env, jclass clss, jlong plist, jint fill_time)
392 {
393     herr_t retVal = FAIL;
394 
395     UNUSED(clss);
396 
397     if ((retVal = H5Pset_fill_time((hid_t)plist, (H5D_fill_time_t)fill_time)) < 0)
398         H5_LIBRARY_ERROR(ENVONLY);
399 
400 done:
401     return (jint)retVal;
402 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fill_1time */
403 
404 /*
405  * Class:     hdf_hdf5lib_H5
406  * Method:    H5Pget_fill_time
407  * Signature: (J[I)I
408  */
409 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fill_1time(JNIEnv * env,jclass clss,jlong plist,jintArray fill_time)410 Java_hdf_hdf5lib_H5_H5Pget_1fill_1time
411     (JNIEnv *env, jclass clss, jlong plist, jintArray fill_time)
412 {
413     H5D_fill_time_t  time = H5D_FILL_TIME_ERROR;
414     jboolean         isCopy;
415     jint            *theArray = NULL;
416     herr_t           retVal = FAIL;
417 
418     UNUSED(clss);
419 
420     if (NULL == fill_time)
421         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_fill_time: fill_time is NULL");
422 
423     PIN_INT_ARRAY(ENVONLY, fill_time, theArray, &isCopy, "H5Pget_fill_time: fill_time not pinned");
424 
425     if ((retVal = H5Pget_fill_time((hid_t)plist, &time)) < 0)
426         H5_LIBRARY_ERROR(ENVONLY);
427 
428     theArray[0] = (jint)time;
429 
430 done:
431     if (theArray)
432         UNPIN_INT_ARRAY(ENVONLY, fill_time, theArray, (retVal < 0) ? JNI_ABORT : 0);
433 
434     return (jint)retVal;
435 } /* end Java_hdf_hdf5lib_H5_H5Pget_1fill_1time */
436 
437 /*
438  * Class:     hdf_hdf5lib_H5
439  * Method:    H5Pset_alloc_time
440  * Signature: (JI)I
441  */
442 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1alloc_1time(JNIEnv * env,jclass clss,jlong plist,jint alloc_time)443 Java_hdf_hdf5lib_H5_H5Pset_1alloc_1time
444     (JNIEnv *env, jclass clss, jlong plist, jint alloc_time)
445 {
446     herr_t retVal = FAIL;
447 
448     UNUSED(clss);
449 
450     if ((retVal = H5Pset_alloc_time((hid_t)plist, (H5D_alloc_time_t)alloc_time)) < 0)
451         H5_LIBRARY_ERROR(ENVONLY);
452 
453 done:
454     return (jint)retVal;
455 } /* end Java_hdf_hdf5lib_H5_H5Pset_1alloc_1time */
456 
457 /*
458  * Class:     hdf_hdf5lib_H5
459  * Method:    H5Pget_alloc_time
460  * Signature: (J[I)I
461  */
462 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1alloc_1time(JNIEnv * env,jclass clss,jlong plist,jintArray alloc_time)463 Java_hdf_hdf5lib_H5_H5Pget_1alloc_1time
464     (JNIEnv *env, jclass clss, jlong plist, jintArray alloc_time)
465 {
466     H5D_alloc_time_t  time = H5D_ALLOC_TIME_ERROR;
467     jboolean          isCopy;
468     jint             *theArray = NULL;
469     herr_t            retVal = FAIL;
470 
471     UNUSED(clss);
472 
473     if (NULL == alloc_time)
474         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_alloc_time: alloc_time is NULL");
475 
476     PIN_INT_ARRAY(ENVONLY, alloc_time, theArray, &isCopy, "H5Pget_alloc_time: alloc_time not pinned");
477 
478     if ((retVal =  H5Pget_alloc_time((hid_t)plist, &time)) < 0)
479         H5_LIBRARY_ERROR(ENVONLY);
480 
481     theArray[0] = time;
482 
483 done:
484     if (theArray)
485         UNPIN_INT_ARRAY(ENVONLY, alloc_time, theArray, (retVal < 0) ? JNI_ABORT : 0);
486 
487     return (jint)retVal;
488 } /* end Java_hdf_hdf5lib_H5_H5Pget_1alloc_1time */
489 
490 /*
491  * Class:     hdf_hdf5lib_H5
492  * Method:    H5Pset_filter
493  * Signature: (JIIJ[I)I
494  */
495 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)496 Java_hdf_hdf5lib_H5_H5Pset_1filter
497     (JNIEnv *env, jclass clss, jlong plist, jint filter, jint flags,
498   jlong cd_nelmts, jintArray cd_values)
499 {
500     jboolean  isCopy;
501     jint     *theArray = NULL;
502     herr_t    status = FAIL;
503 
504     UNUSED(clss);
505 
506     if (NULL == cd_values) {
507         if ((status = H5Pset_filter((hid_t)plist, (H5Z_filter_t)filter,
508                 (unsigned int)flags, (size_t)cd_nelmts, NULL)) < 0)
509             H5_LIBRARY_ERROR(ENVONLY);
510     }
511     else {
512         PIN_INT_ARRAY(ENVONLY, cd_values, theArray, &isCopy, "H5Pset_filter: input array not pinned");
513 
514         if ((status = H5Pset_filter((hid_t)plist, (H5Z_filter_t)filter,
515                 (unsigned int)flags, (size_t)cd_nelmts, (const unsigned int *)theArray)) < 0)
516             H5_LIBRARY_ERROR(ENVONLY);
517     }
518 
519 done:
520     if (theArray)
521         UNPIN_INT_ARRAY(ENVONLY, cd_values, theArray, JNI_ABORT);
522 
523     return (jint)status;
524 } /* end Java_hdf_hdf5lib_H5_H5Pset_1filter */
525 
526 /*
527  * Class:     hdf_hdf5lib_H5
528  * Method:    H5Pall_filters_avail
529  * Signature: (J)Z
530  */
531 JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pall_1filters_1avail(JNIEnv * env,jclass clss,jlong dcpl_id)532 Java_hdf_hdf5lib_H5_H5Pall_1filters_1avail
533     (JNIEnv *env, jclass clss, jlong dcpl_id)
534 {
535     htri_t bval = JNI_FALSE;
536 
537     UNUSED(clss);
538 
539     if ((bval = H5Pall_filters_avail((hid_t)dcpl_id)) < 0)
540         H5_LIBRARY_ERROR(ENVONLY);
541 
542     bval = (bval > 0) ? JNI_TRUE : JNI_FALSE;
543 
544 done:
545     return (jboolean)bval;
546 } /* end Java_hdf_hdf5lib_H5_H5Pall_1filters_1avail */
547 
548 /*
549  * Class:     hdf_hdf5lib_H5
550  * Method:    H5Pget_nfilters
551  * Signature: (J)I
552  */
553 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1nfilters(JNIEnv * env,jclass clss,jlong plist)554 Java_hdf_hdf5lib_H5_H5Pget_1nfilters
555     (JNIEnv *env, jclass clss, jlong plist)
556 {
557     int retVal = -1;
558 
559     UNUSED(clss);
560 
561     if ((retVal = H5Pget_nfilters((hid_t)plist)) < 0)
562         H5_LIBRARY_ERROR(ENVONLY);
563 
564 done:
565     return (jint)retVal;
566 } /* end Java_hdf_hdf5lib_H5_H5Pget_1nfilters */
567 
568 /*
569  * Class:     hdf_hdf5lib_H5
570  * Method:    H5Pget_filter
571  * Signature: (JI[I[J[IJ[Ljava/lang/String;)I
572  */
573 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)574 Java_hdf_hdf5lib_H5_H5Pget_1filter
575     (JNIEnv *env, jclass clss, jlong plist, jint filter_number, jintArray flags,
576         jlongArray cd_nelmts, jintArray cd_values, jlong namelen, jobjectArray name)
577 {
578     jboolean  isCopy;
579     jstring   str;
580     jint     *flagsArray = NULL;
581     jlong    *cd_nelmtsArray = NULL;
582     jint     *cd_valuesArray = NULL;
583     char     *filter = NULL;
584     herr_t    status = FAIL;
585 
586     UNUSED(clss);
587 
588     if (namelen <= 0)
589         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter: namelen <= 0");
590     if (NULL == flags)
591         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter: flags is NULL");
592     if (NULL == cd_nelmts)
593         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter: cd_nelmts is NULL");
594     if (NULL == cd_values)
595         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter: cd_values is NULL");
596 
597     if (NULL == (filter = (char *) HDmalloc(sizeof(char) * (size_t)namelen)))
598         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_filter: memory allocation failed");
599 
600     PIN_INT_ARRAY(ENVONLY, flags, flagsArray, &isCopy, "H5Pget_filter: flags array not pinned");
601     PIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, &isCopy, "H5Pget_filter: nelmts array not pinned");
602     PIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, &isCopy, "H5Pget_filter: elmts array not pinned");
603 
604 
605     /* direct cast (size_t *)variable fails on 32-bit environment */
606     {
607         unsigned int filter_config;
608         long long    cd_nelmts_temp = *cd_nelmtsArray;
609         size_t       cd_nelmts_t = (size_t) cd_nelmts_temp;
610 
611         if ((status = H5Pget_filter2((hid_t)plist, (unsigned)filter_number,
612                 (unsigned int *)flagsArray, &cd_nelmts_t, (unsigned int *)cd_valuesArray,
613                 (size_t)namelen, filter, &filter_config)) < 0)
614             H5_LIBRARY_ERROR(ENVONLY);
615 
616         filter[namelen - 1] = '\0';
617 
618         *cd_nelmtsArray = (jlong)cd_nelmts_t;
619     }
620 
621     if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, filter))) {
622         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
623         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_filter: out of memory - unable to construct string from UTF characters");
624     }
625 
626     ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, (jobject)str);
627     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
628 
629 done:
630     if (cd_valuesArray)
631         UNPIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, (status < 0) ? JNI_ABORT : 0);
632     if (cd_nelmtsArray)
633         UNPIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, (status < 0) ? JNI_ABORT : 0);
634     if (flagsArray)
635         UNPIN_INT_ARRAY(ENVONLY, flags, flagsArray, (status < 0) ? JNI_ABORT : 0)
636     if (filter)
637         HDfree(filter);
638 
639     return (jint)status;
640 } /* end Java_hdf_hdf5lib_H5_H5Pget_1filter */
641 
642 /*
643  * Class:     hdf_hdf5lib_H5
644  * Method:    H5Pget_filter2
645  * Signature: (JI[I[J[IJ[Ljava/lang/String;[I)I
646  */
647 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)648 Java_hdf_hdf5lib_H5_H5Pget_1filter2
649     (JNIEnv *env, jclass clss, jlong plist, jint filter_number,
650         jintArray flags, jlongArray cd_nelmts, jintArray cd_values, jlong namelen,
651         jobjectArray name, jintArray filter_config)
652 {
653     jboolean  isCopy;
654     jstring   str;
655     jint     *flagsArray = NULL;
656     jlong    *cd_nelmtsArray = NULL;
657     jint     *cd_valuesArray = NULL;
658     jint     *filter_configArray = NULL;
659     char     *filter = NULL;
660     herr_t    status = FAIL;
661 
662     UNUSED(clss);
663 
664     if (namelen <= 0)
665         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter2: namelen <= 0");
666     if (NULL == flags)
667         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter2: flags is NULL");
668     if (NULL == cd_nelmts)
669         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter2: cd_nelmts is NULL");
670     if (NULL == filter_config)
671         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter2: filter_config is NULL");
672 
673     if (NULL == (filter = (char *) HDmalloc(sizeof(char) * (size_t)namelen)))
674         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_filter2: memory allocation failed");
675 
676     PIN_INT_ARRAY(ENVONLY, flags, flagsArray, &isCopy, "H5Pget_filter2: flags array not pinned");
677     PIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, &isCopy, "H5Pget_filter2: nelmts array not pinned");
678     PIN_INT_ARRAY(ENVONLY, filter_config, filter_configArray, &isCopy, "H5Pget_filter2: filter_config array not pinned");
679 
680     if (NULL == cd_values && *cd_nelmtsArray == 0) {
681         /* direct cast (size_t *)variable fails on 32-bit environment */
682         long long cd_nelmts_temp = 0;
683         size_t cd_nelmts_t = (size_t) cd_nelmts_temp;
684 
685         if ((status = H5Pget_filter2((hid_t)plist, (unsigned)filter_number,
686                 (unsigned int *)flagsArray, &cd_nelmts_t, NULL,
687                 (size_t)namelen, filter, (unsigned int *)filter_configArray)) < 0)
688             H5_LIBRARY_ERROR(ENVONLY);
689 
690         filter[namelen - 1] = '\0';
691 
692         *cd_nelmtsArray = (jlong)cd_nelmts_t;
693     }
694     else {
695         if (NULL == cd_values)
696             H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter2: cd_values is NULL");
697 
698         PIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, &isCopy, "H5Pget_filter2: elmts array not pinned");
699 
700         {
701             /* direct cast (size_t *)variable fails on 32-bit environment */
702             long long cd_nelmts_temp = *cd_nelmtsArray;
703             size_t    cd_nelmts_t = (size_t) cd_nelmts_temp;
704 
705             if ((status = H5Pget_filter2((hid_t)plist, (unsigned)filter_number,
706                     (unsigned int *)flagsArray, &cd_nelmts_t, (unsigned int *)cd_valuesArray,
707                     (size_t)namelen, filter, (unsigned int *)filter_configArray)) < 0)
708                 H5_LIBRARY_ERROR(ENVONLY);
709 
710             filter[namelen - 1] = '\0';
711 
712             *cd_nelmtsArray = (jlong)cd_nelmts_t;
713         } /* end direct cast special */
714     }
715 
716     if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, filter))) {
717         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
718         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_filter2: out of memory - unable to construct string from UTF characters");
719     }
720 
721     ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, (jobject)str);
722     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
723 
724 done:
725     if (cd_valuesArray)
726         UNPIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, (status < 0) ? JNI_ABORT : 0);
727     if (filter_configArray)
728         UNPIN_INT_ARRAY(ENVONLY, filter_config, filter_configArray, (status < 0) ? JNI_ABORT : 0);
729     if (cd_nelmtsArray)
730         UNPIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, (status < 0) ? JNI_ABORT : 0);
731     if (flagsArray)
732         UNPIN_INT_ARRAY(ENVONLY, flags, flagsArray, (status < 0) ? JNI_ABORT : 0);
733     if (filter)
734         HDfree(filter);
735 
736     return (jint)status;
737 } /* end Java_hdf_hdf5lib_H5_H5Pget_1filter2 */
738 
739 /*
740  * Class:     hdf_hdf5lib_H5
741  * Method:    H5Pget_filter_by_id
742  * Signature: (JI[I[J[IJ[Ljava/lang/String;)I
743  */
744 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)745 Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id
746     (JNIEnv *env, jclass clss, jlong plist, jint filter,
747         jintArray flags, jlongArray cd_nelmts, jintArray cd_values, jlong namelen, jobjectArray name)
748 {
749     jboolean  isCopy;
750     jstring   str;
751     jlong    *cd_nelmtsArray = NULL;
752     jint     *cd_valuesArray = NULL;
753     jint     *flagsArray = NULL;
754     char     *aName = NULL;
755     long      bs;
756     int       rank;
757     herr_t    status = FAIL;
758 
759     UNUSED(clss);
760 
761     bs = (long)namelen;
762 
763     if (bs <= 0)
764         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: namelen <= 0");
765     if (NULL == flags)
766         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: flags is NULL");
767     if (NULL == cd_nelmts)
768         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: cd_nelmts is NULL");
769     if (NULL == cd_values)
770         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: cd_values is NULL");
771     if (NULL == name)
772         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: name is NULL");
773 
774     if (NULL == (aName = (char *) HDmalloc(sizeof(char) * (size_t)bs)))
775         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_filter_by_id: memory allocation failed");
776 
777     PIN_INT_ARRAY(ENVONLY, flags, flagsArray, &isCopy, "H5Pget_filter_by_id: flags not pinned");
778     PIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, &isCopy, "H5Pget_filter_by_id: cd_nelms not pinned");
779     PIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, &isCopy, "H5Pget_filter_by_id: cd_values array not pinned");
780 
781     if ((rank = ENVPTR->GetArrayLength(ENVONLY, cd_values)) < 0) {
782         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
783         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id: cd_values array length < 0");
784     }
785 
786     {
787         /* direct cast (size_t *)variable fails on 32-bit environment */
788         unsigned int filter_config;
789         long long    cd_nelmts_temp = *cd_nelmtsArray;
790         size_t       cd_nelmts_t = (size_t) cd_nelmts_temp;
791 
792         if ((status = H5Pget_filter_by_id2((hid_t)plist, (H5Z_filter_t)filter,
793                 (unsigned int *)flagsArray, &cd_nelmts_t, (unsigned int *)cd_valuesArray,
794                 (size_t)namelen, (char *)aName, &filter_config)) < 0)
795             H5_LIBRARY_ERROR(ENVONLY);
796 
797         aName[bs - 1] = '\0';
798 
799         *cd_nelmtsArray = (jlong)cd_nelmts_t;
800     } /* end direct cast special */
801 
802     if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, aName))) {
803         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
804         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_filter_by_id: out of memory - unable to construct string from UTF characters");
805     }
806 
807     ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, (jobject)str);
808     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
809 
810 done:
811     if (cd_valuesArray)
812         UNPIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, (status < 0) ? JNI_ABORT : 0);
813     if (cd_nelmtsArray)
814         UNPIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, (status < 0) ? JNI_ABORT : 0);
815     if (flagsArray)
816         UNPIN_INT_ARRAY(ENVONLY, flags, flagsArray, (status < 0) ? JNI_ABORT : 0);
817     if (aName)
818         HDfree(aName);
819 
820     return (jint)status;
821 } /* end Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id */
822 
823 /*
824  * Class:     hdf_hdf5lib_H5
825  * Method:    H5Pget_filter_by_id2
826  * Signature: (JI[I[J[IJ[Ljava/lang/String;[I)I
827  */
828 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)829 Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id2
830     (JNIEnv *env, jclass clss, jlong plist, jint filter,
831         jintArray flags, jlongArray cd_nelmts, jintArray cd_values, jlong namelen, jobjectArray name, jintArray filter_config)
832 {
833     jboolean  isCopy;
834     jstring   str;
835     jlong    *cd_nelmtsArray = NULL;
836     jint     *cd_valuesArray = NULL;
837     jint     *flagsArray = NULL;
838     jint     *filter_configArray = NULL;
839     long      bs;
840     char     *aName = NULL;
841     herr_t    status = FAIL;
842 
843     UNUSED(clss);
844 
845     bs = (long)namelen;
846 
847     if (bs <= 0)
848         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: namelen <= 0");
849     if (NULL == flags)
850         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: flags is NULL");
851     if (NULL == cd_nelmts)
852         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: cd_nelmts is NULL");
853     if (NULL == cd_values)
854         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: cd_values is NULL");
855     if (NULL == name)
856         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: name is NULL");
857     if (NULL == filter_config)
858         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_filter_by_id2: filter_config is NULL");
859 
860     if (NULL == (aName = (char *) HDmalloc(sizeof(char) * (size_t)bs)))
861         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_filter_by_id2: memory allocation failed");
862 
863     PIN_INT_ARRAY(ENVONLY, flags, flagsArray, &isCopy, "H5Pget_filter_by_id2: flags not pinned");
864     PIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, &isCopy, "H5Pget_filter_by_id2: cd_nelms not pinned");
865     PIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, &isCopy, "H5Pget_filter_by_id2: cd_values array not pinned");
866     PIN_INT_ARRAY(ENVONLY, filter_config, filter_configArray, &isCopy, "H5Pget_filter_by_id2: filter_config not pinned");
867 
868     {
869         /* direct cast (size_t *)variable fails on 32-bit environment */
870         long long cd_nelmts_temp = *cd_nelmtsArray;
871         size_t    cd_nelmts_t = (size_t) cd_nelmts_temp;
872 
873         if ((status = H5Pget_filter_by_id2((hid_t)plist, (H5Z_filter_t)filter,
874                 (unsigned int *)flagsArray, &cd_nelmts_t, (unsigned int *)cd_valuesArray,
875                 (size_t)namelen, (char *)aName, (unsigned int *)filter_configArray)) < 0)
876             H5_LIBRARY_ERROR(ENVONLY);
877 
878         aName[bs - 1] = '\0';
879 
880         *cd_nelmtsArray = (jlong)cd_nelmts_t;
881     } /* end direct cast special handling */
882 
883     if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, aName))) {
884         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
885         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_filter_by_id2: out of memory - unable to construct string from UTF characters");
886     }
887 
888     ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, (jobject)str);
889     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
890 
891 done:
892     if (filter_configArray)
893         UNPIN_INT_ARRAY(ENVONLY, filter_config, filter_configArray, (status < 0) ? JNI_ABORT : 0);
894     if (cd_valuesArray)
895         UNPIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesArray, (status < 0) ? JNI_ABORT : 0);
896     if (cd_nelmtsArray)
897         UNPIN_LONG_ARRAY(ENVONLY, cd_nelmts, cd_nelmtsArray, (status < 0) ? JNI_ABORT : 0);
898     if (flagsArray)
899         UNPIN_INT_ARRAY(ENVONLY, flags, flagsArray, (status < 0) ? JNI_ABORT : 0);
900     if (aName)
901         HDfree(aName);
902 
903     return (jint)status;
904 } /* end Java_hdf_hdf5lib_H5_H5Pget_1filter_1by_1id2 */
905 
906 /*
907  * Class:     hdf_hdf5lib_H5
908  * Method:    H5Pmodify_filter
909  * Signature: (JIIJ[I)I
910  */
911 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)912 Java_hdf_hdf5lib_H5_H5Pmodify_1filter
913     (JNIEnv *env, jclass clss, jlong plist, jint filter,
914         jint flags, jlong cd_nelmts, jintArray cd_values)
915 {
916     jboolean  isCopy;
917     jint     *cd_valuesP = NULL;
918     herr_t    status = FAIL;
919 
920     UNUSED(clss);
921 
922     if (NULL == cd_values)
923         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pmodify_filter: cd_values is NULL");
924 
925     PIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesP, &isCopy, "H5Pmodify_filter: cd_values not pinned");
926 
927     if ((status = H5Pmodify_filter((hid_t)plist, (H5Z_filter_t)filter, (const unsigned int)flags,
928             (size_t)cd_nelmts, (unsigned int *)cd_valuesP)) < 0)
929         H5_LIBRARY_ERROR(ENVONLY);
930 
931 done:
932     if (cd_valuesP)
933         UNPIN_INT_ARRAY(ENVONLY, cd_values, cd_valuesP, JNI_ABORT);
934 
935     return (jint)status;
936 } /* end Java_hdf_hdf5lib_H5_H5Pmodify_1filter */
937 
938 /*
939  * Class:     hdf_hdf5lib_H5
940  * Method:    H5Premove_filter
941  * Signature: (JI)I
942  */
943 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5P1remove_1filter(JNIEnv * env,jclass clss,jlong obj_id,jint filter)944 Java_hdf_hdf5lib_H5_H5P1remove_1filter
945     (JNIEnv *env, jclass clss, jlong obj_id, jint filter)
946 {
947     herr_t status = FAIL;
948 
949     UNUSED(clss);
950 
951     if ((status = H5Premove_filter((hid_t)obj_id, (H5Z_filter_t)filter)) < 0)
952         H5_LIBRARY_ERROR(ENVONLY);
953 
954 done:
955     return (jint)status;
956 } /* end Java_hdf_hdf5lib_H5_H5P1remove_1filter */
957 
958 /*
959  * Class:     hdf_hdf5lib_H5
960  * Method:    H5Pset_fletcher32
961  * Signature: (J)I
962  */
963 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fletcher32(JNIEnv * env,jclass clss,jlong plist)964 Java_hdf_hdf5lib_H5_H5Pset_1fletcher32
965     (JNIEnv *env, jclass clss, jlong plist)
966 {
967     herr_t retVal = FAIL;
968 
969     UNUSED(clss);
970 
971     if ((retVal = H5Pset_fletcher32((hid_t)plist)) < 0)
972         H5_LIBRARY_ERROR(ENVONLY);
973 
974 done:
975     return (jint)retVal;
976 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fletcher32 */
977 
978 /*
979  * Class:     hdf_hdf5lib_H5
980  * Method:    H5Pset_nbit
981  * Signature: (J)I
982  */
983 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1nbit(JNIEnv * env,jclass clss,jlong plist_id)984 Java_hdf_hdf5lib_H5_H5Pset_1nbit
985     (JNIEnv *env, jclass clss, jlong plist_id)
986 {
987     herr_t retVal = FAIL;
988 
989     UNUSED(clss);
990 
991     if ((retVal = H5Pset_nbit((hid_t)plist_id)) < 0)
992         H5_LIBRARY_ERROR(ENVONLY);
993 
994 done:
995     return (jint)retVal;
996 } /* end Java_hdf_hdf5lib_H5_H5Pset_1nbit */
997 
998 /*
999  * Class:     hdf_hdf5lib_H5
1000  * Method:    H5Pset_scaleoffset
1001  * Signature: (JII)I
1002  */
1003 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1scaleoffset(JNIEnv * env,jclass clss,jlong plist_id,jint scale_type,jint scale_factor)1004 Java_hdf_hdf5lib_H5_H5Pset_1scaleoffset
1005     (JNIEnv *env, jclass clss, jlong plist_id, jint scale_type, jint scale_factor)
1006 {
1007     herr_t retVal = FAIL;
1008 
1009     UNUSED(clss);
1010 
1011     if (scale_factor < 0)
1012         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_scaleoffset: scale factor must be >= 0");
1013     if (scale_type != H5Z_SO_FLOAT_DSCALE && scale_type != H5Z_SO_FLOAT_ESCALE && scale_type != H5Z_SO_INT)
1014         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_scaleoffset: invalid scale type");
1015 
1016     if ((retVal = H5Pset_scaleoffset((hid_t)plist_id, (H5Z_SO_scale_type_t)scale_type, scale_factor)) < 0)
1017         H5_LIBRARY_ERROR(ENVONLY);
1018 
1019 done:
1020     return (jint)retVal;
1021 } /* end Java_hdf_hdf5lib_H5_H5Pset_1scaleoffset */
1022 
1023 /*
1024  * Class:     hdf_hdf5lib_H5
1025  * Method:    H5Pset_shuffle
1026  * Signature: (J)I
1027  */
1028 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1shuffle(JNIEnv * env,jclass clss,jlong plist)1029 Java_hdf_hdf5lib_H5_H5Pset_1shuffle
1030     (JNIEnv *env, jclass clss, jlong plist)
1031 {
1032     herr_t retVal = FAIL;
1033 
1034     UNUSED(clss);
1035 
1036     if ((retVal = H5Pset_shuffle((hid_t)plist)) < 0)
1037         H5_LIBRARY_ERROR(ENVONLY);
1038 
1039 done:
1040     return (jint)retVal;
1041 } /* end Java_hdf_hdf5lib_H5_H5Pset_1shuffle */
1042 
1043 /*
1044  * Class:     hdf_hdf5lib_H5
1045  * Method:    H5Pset_szip
1046  * Signature: (JII)I
1047  */
1048 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1szip(JNIEnv * env,jclass clss,jlong plist,jint options_mask,jint pixels_per_block)1049 Java_hdf_hdf5lib_H5_H5Pset_1szip
1050     (JNIEnv *env, jclass clss, jlong plist, jint options_mask, jint pixels_per_block)
1051 {
1052     herr_t retVal = FAIL;
1053 
1054     UNUSED(clss);
1055 
1056     if ((retVal = H5Pset_szip((hid_t)plist, (unsigned int)options_mask, (unsigned int)pixels_per_block)) < 0)
1057         H5_LIBRARY_ERROR(ENVONLY);
1058 
1059 done:
1060     return (jint)retVal;
1061 } /* end Java_hdf_hdf5lib_H5_H5Pset_1szip */
1062 
1063 /*
1064  * Class:     hdf_hdf5lib_H5
1065  * Method:    H5Pset_external
1066  * Signature: (JLjava/lang/String;JJ)I
1067  */
1068 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1external(JNIEnv * env,jclass clss,jlong plist,jstring name,jlong offset,jlong size)1069 Java_hdf_hdf5lib_H5_H5Pset_1external
1070     (JNIEnv *env, jclass clss, jlong plist, jstring name, jlong offset, jlong size)
1071 {
1072     const char *fileName = NULL;
1073     herr_t      status = FAIL;
1074 
1075     UNUSED(clss);
1076 
1077     if (NULL == name)
1078         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_external: file name is NULL");
1079 
1080     PIN_JAVA_STRING(ENVONLY, name, fileName, NULL, "H5Pset_external: file name not pinned");
1081 
1082     if ((status = H5Pset_external((hid_t)plist, fileName, (off_t)offset, (hsize_t)size)) < 0)
1083         H5_LIBRARY_ERROR(ENVONLY);
1084 
1085 done:
1086     if (fileName)
1087         UNPIN_JAVA_STRING(ENVONLY, name, fileName);
1088 
1089     return (jint)status;
1090 } /* end Java_hdf_hdf5lib_H5_H5Pset_1external */
1091 
1092 /*
1093  * Class:     hdf_hdf5lib_H5
1094  * Method:    H5Pget_external
1095  * Signature: (JIJ[Ljava/lang/String;[J)I
1096  */
1097 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1external(JNIEnv * env,jclass clss,jlong plist,jint idx,jlong name_size,jobjectArray name,jlongArray size)1098 Java_hdf_hdf5lib_H5_H5Pget_1external
1099     (JNIEnv *env, jclass clss, jlong plist, jint idx, jlong name_size,
1100         jobjectArray name, jlongArray size)
1101 {
1102     jboolean  isCopy;
1103     jstring   str;
1104     hsize_t   s;
1105     off_t     o;
1106     jsize     arrLen;
1107     jlong    *theArray = NULL;
1108     char     *file = NULL;
1109     herr_t    status = FAIL;
1110 
1111     UNUSED(clss);
1112 
1113     if (name_size < 0)
1114         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_external: name_size < 0");
1115 
1116     if ((arrLen = ENVPTR->GetArrayLength(ENVONLY, size)) < 0) {
1117         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
1118         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_external: size array length < 0");
1119     }
1120     if ((size != NULL) && (arrLen < 2))
1121         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_external: size input array < 2");
1122 
1123     if (name_size > 0)
1124         if (NULL == (file = (char *) HDmalloc(sizeof(char) * (size_t)name_size)))
1125             H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_external: memory allocation failed");
1126 
1127     if ((status = H5Pget_external((hid_t) plist, (unsigned)idx, (size_t)name_size,
1128             file, (off_t *)&o, (hsize_t *)&s)) < 0)
1129         H5_LIBRARY_ERROR(ENVONLY);
1130 
1131     if (NULL != size) {
1132         PIN_LONG_ARRAY(ENVONLY, size, theArray, &isCopy, "H5Pget_external: size array not pinned");
1133 
1134         theArray[0] = o;
1135         theArray[1] = (jlong)s;
1136     }
1137 
1138     if (NULL != file) {
1139         file[name_size - 1] = '\0';
1140 
1141         if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, file))) {
1142             CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
1143             H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_external: out of memory - unable to construct string from UTF characters");
1144         }
1145 
1146         ENVPTR->SetObjectArrayElement(ENVONLY, name, 0, (jobject)str);
1147         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1148     }
1149 
1150 done:
1151     if (theArray)
1152         UNPIN_LONG_ARRAY(ENVONLY, size, theArray, (status < 0) ? JNI_ABORT : 0);
1153     if (file)
1154         HDfree(file);
1155 
1156     return (jint)status;
1157 } /* end Java_hdf_hdf5lib_H5_H5Pget_1external */
1158 
1159 /*
1160  * Class:     hdf_hdf5lib_H5
1161  * Method:    H5Pget_external_count
1162  * Signature: (J)I
1163  */
1164 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1external_1count(JNIEnv * env,jclass clss,jlong plist)1165 Java_hdf_hdf5lib_H5_H5Pget_1external_1count
1166     (JNIEnv *env, jclass clss, jlong plist)
1167 {
1168     int retVal = -1;
1169 
1170     UNUSED(clss);
1171 
1172     if ((retVal = H5Pget_external_count((hid_t)plist)) < 0)
1173         H5_LIBRARY_ERROR(ENVONLY);
1174 
1175 done:
1176     return (jint)retVal;
1177 } /* end Java_hdf_hdf5lib_H5_H5Pget_1external_1count */
1178 
1179 /*
1180  * Class:     hdf_hdf5lib_H5
1181  * Method:    H5Pset_virtual
1182  * Signature: (JJLjava/lang/String;Ljava/lang/String;J)V
1183  */
1184 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)1185 Java_hdf_hdf5lib_H5_H5Pset_1virtual
1186     (JNIEnv *env, jclass clss, jlong dcpl_id, jlong vspace_id,
1187         jstring src_file_name, jstring src_dset_name, jlong src_space_id)
1188 {
1189     const char *fstr = NULL;
1190     const char *dstr = NULL;
1191     herr_t      retVal = FAIL;
1192 
1193     UNUSED(clss);
1194 
1195     if (NULL == src_file_name)
1196         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_virtual: src_file_name is NULL");
1197     if (NULL == src_dset_name)
1198         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_virtual: src_dset_name is NULL");
1199 
1200     PIN_JAVA_STRING(ENVONLY, src_file_name, fstr, NULL, "H5Pset_virtual: src_file_name not pinned");
1201     PIN_JAVA_STRING(ENVONLY, src_dset_name, dstr, NULL, "H5Pset_virtual: src_dset_name not pinned");
1202 
1203     if ((retVal = H5Pset_virtual((hid_t)dcpl_id, (hid_t)vspace_id, fstr, dstr, (hid_t)src_space_id)) < 0)
1204         H5_LIBRARY_ERROR(ENVONLY);
1205 
1206 done:
1207     if (dstr)
1208         UNPIN_JAVA_STRING(ENVONLY, src_dset_name, dstr);
1209     if (fstr)
1210         UNPIN_JAVA_STRING(ENVONLY, src_file_name, fstr);
1211 } /* end Java_hdf_hdf5lib_H5_H5Pset_1virtual */
1212 
1213 /*
1214  * Class:     hdf_hdf5lib_H5
1215  * Method:    H5Pget_virtual_count
1216  * Signature: (J)J
1217  */
1218 JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1count(JNIEnv * env,jclass clss,jlong dcpl_id)1219 Java_hdf_hdf5lib_H5_H5Pget_1virtual_1count
1220     (JNIEnv *env, jclass clss, jlong dcpl_id)
1221 {
1222     size_t s = 0;
1223 
1224     UNUSED(clss);
1225 
1226     if (H5Pget_virtual_count((hid_t)dcpl_id, &s) < 0)
1227         H5_LIBRARY_ERROR(ENVONLY);
1228 
1229 done:
1230     return (jlong)s;
1231 } /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1count */
1232 
1233 /*
1234  * Class:     hdf_hdf5lib_H5
1235  * Method:    H5Pget_virtual_dsetname
1236  * Signature: (JJ)Ljava/lang/String;
1237  */
1238 JNIEXPORT jstring JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1dsetname(JNIEnv * env,jclass clss,jlong dcpl_id,jlong index)1239 Java_hdf_hdf5lib_H5_H5Pget_1virtual_1dsetname
1240     (JNIEnv *env, jclass clss, jlong dcpl_id, jlong index)
1241 {
1242     ssize_t  buf_size;
1243     char    *dname = NULL;
1244     jstring  str = NULL;
1245 
1246     UNUSED(clss);
1247 
1248     /* get the length of the filename */
1249     if ((buf_size = H5Pget_virtual_dsetname((hid_t)dcpl_id, (size_t)index, NULL, 0)) < 0)
1250         H5_LIBRARY_ERROR(ENVONLY);
1251 
1252     if (NULL == (dname = (char *) HDmalloc(sizeof(char) * (size_t)buf_size + 1)))
1253         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_virtual_dsetname: memory allocation failed");
1254 
1255     if (H5Pget_virtual_dsetname((hid_t)dcpl_id, (size_t)index, dname, (size_t)buf_size + 1) < 0)
1256         H5_LIBRARY_ERROR(ENVONLY);
1257     dname[buf_size] = '\0';
1258 
1259     if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, dname))) {
1260         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
1261         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_virtual_dsetname: out of memory - unable to construct string from UTF characters");
1262     }
1263 
1264 done:
1265     if (dname)
1266         HDfree(dname);
1267 
1268     return (jstring)str;
1269 } /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1dsetname */
1270 
1271 /*
1272  * Class:     hdf_hdf5lib_H5
1273  * Method:    H5Pget_virtual_filename
1274  * Signature: (JJ)Ljava/lang/String;
1275  */
1276 JNIEXPORT jstring JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1filename(JNIEnv * env,jclass clss,jlong dcpl_id,jlong index)1277 Java_hdf_hdf5lib_H5_H5Pget_1virtual_1filename
1278     (JNIEnv *env, jclass clss, jlong dcpl_id, jlong index)
1279 {
1280     ssize_t  buf_size;
1281     char    *fname = NULL;
1282     jstring  str = NULL;
1283 
1284     UNUSED(clss);
1285 
1286     /* get the length of the filename */
1287     if ((buf_size = H5Pget_virtual_filename((hid_t)dcpl_id, (size_t)index, NULL, 0)) < 0)
1288         H5_LIBRARY_ERROR(ENVONLY);
1289 
1290     if (NULL == (fname = (char *) HDmalloc(sizeof(char) * (size_t)buf_size + 1)))
1291         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_virtual_filename: memory allocation failed");
1292 
1293     if (H5Pget_virtual_filename((hid_t)dcpl_id, (size_t)index, fname, (size_t)buf_size + 1) < 0)
1294         H5_LIBRARY_ERROR(ENVONLY);
1295     fname[buf_size] = '\0';
1296 
1297     if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, fname))) {
1298         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
1299         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_virtual_filename: out of memory - unable to construct string from UTF characters");
1300     }
1301 
1302 done:
1303     if (fname)
1304         HDfree(fname);
1305 
1306     return (jstring)str;
1307 } /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1filename */
1308 
1309 /*
1310  * Class:     hdf_hdf5lib_H5
1311  * Method:    H5Pget_virtual_srcspace
1312  * Signature: (JJ)J
1313  */
1314 JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1srcspace(JNIEnv * env,jclass clss,jlong dcpl_id,jlong index)1315 Java_hdf_hdf5lib_H5_H5Pget_1virtual_1srcspace
1316     (JNIEnv *env, jclass clss, jlong dcpl_id, jlong index)
1317 {
1318     hid_t space_id = H5I_INVALID_HID;
1319 
1320     UNUSED(clss);
1321 
1322     if ((space_id = H5Pget_virtual_srcspace((hid_t)dcpl_id, (size_t)index)) < 0)
1323         H5_LIBRARY_ERROR(ENVONLY);
1324 
1325 done:
1326     return (jlong)space_id;
1327 } /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1srcspace */
1328 
1329 /*
1330  * Class:     hdf_hdf5lib_H5
1331  * Method:    H5Pget_virtual_vspace
1332  * Signature: (JJ)J
1333  */
1334 JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1vspace(JNIEnv * env,jclass clss,jlong dcpl_id,jlong index)1335 Java_hdf_hdf5lib_H5_H5Pget_1virtual_1vspace
1336     (JNIEnv *env, jclass clss, jlong dcpl_id, jlong index)
1337 {
1338     hid_t space_id = H5I_INVALID_HID;
1339 
1340     UNUSED(clss);
1341 
1342     if ((space_id = H5Pget_virtual_vspace((hid_t)dcpl_id, (size_t)index)) < 0)
1343         H5_LIBRARY_ERROR(ENVONLY);
1344 
1345 done:
1346     return (jlong)space_id;
1347 } /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1vspace */
1348 
1349 /*
1350  * Class:     hdf_hdf5lib_H5
1351  * Method:    H5Pset_virtual_prefix
1352  * Signature: (JLjava/lang/String;)V
1353  */
1354 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1virtual_1prefix(JNIEnv * env,jclass clss,jlong dapl_id,jstring prefix)1355 Java_hdf_hdf5lib_H5_H5Pset_1virtual_1prefix
1356     (JNIEnv *env, jclass clss, jlong dapl_id, jstring prefix)
1357 {
1358     const char *virtPrefix = NULL;
1359     herr_t      retVal = FAIL;
1360 
1361     UNUSED(clss);
1362 
1363     if (NULL == prefix)
1364         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_virtual_prefix: virtual prefix is NULL");
1365 
1366     PIN_JAVA_STRING(ENVONLY, prefix, virtPrefix, NULL, "H5Pset_virtual_prefix: virtual prefix not pinned");
1367 
1368     if ((retVal = H5Pset_virtual_prefix((hid_t)dapl_id, virtPrefix)) < 0)
1369         H5_LIBRARY_ERROR(ENVONLY);
1370 
1371 done:
1372     if (virtPrefix)
1373         UNPIN_JAVA_STRING(ENVONLY, prefix, virtPrefix);
1374 } /* end Java_hdf_hdf5lib_H5_H5Pset_1virtual_1prefix */
1375 
1376 /*
1377  * Class:     hdf_hdf5lib_H5
1378  * Method:    H5Pget_virtual_prefix
1379  * Signature: (J)Ljava/lang/String;
1380  */
1381 JNIEXPORT jstring JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1virtual_1prefix(JNIEnv * env,jclass clss,jlong dapl_id)1382 Java_hdf_hdf5lib_H5_H5Pget_1virtual_1prefix
1383     (JNIEnv *env, jclass clss, jlong dapl_id)
1384 {
1385     ssize_t  prefix_size = -1;
1386     char    *pre = NULL;
1387     jstring  str = NULL;
1388 
1389     UNUSED(clss);
1390 
1391     if ((prefix_size = H5Pget_virtual_prefix((hid_t)dapl_id, (char *)NULL, 0)) < 0)
1392         H5_LIBRARY_ERROR(ENVONLY);
1393 
1394     if (NULL == (pre = (char *) HDmalloc(sizeof(char) * (size_t) prefix_size + 1)))
1395         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_virtual_prefix: memory allocation failed");
1396 
1397     if (H5Pget_virtual_prefix((hid_t)dapl_id, (char *)pre, (size_t) prefix_size + 1) < 0)
1398         H5_LIBRARY_ERROR(ENVONLY);
1399     pre[prefix_size] = '\0';
1400 
1401     if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, pre))) {
1402         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
1403         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_virtual_prefix: out of memory - unable to construct string from UTF characters");
1404     }
1405 
1406 done:
1407     if (pre)
1408         HDfree(pre);
1409 
1410     return (jstring)str;
1411 } /* end Java_hdf_hdf5lib_H5_H5Pget_1virtual_1prefix */
1412 
1413 #ifdef __cplusplus
1414 } /* end extern "C" */
1415 #endif /* __cplusplus */
1416