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 "h5util.h"
28 #include "h5pFAPLImp.h"
29 
30 /*
31  * Pointer to the JNI's Virtual Machine; used for callback functions.
32  */
33 /* extern JavaVM *jvm; */
34 
35 /*
36  * TODO: H5Pset_driver
37  */
38 
39 /*
40  * Class:     hdf_hdf5lib_H5
41  * Method:    H5Pget_driver
42  * Signature: (J)J
43  */
44 JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1driver(JNIEnv * env,jclass clss,jlong plist)45 Java_hdf_hdf5lib_H5_H5Pget_1driver
46     (JNIEnv *env, jclass clss, jlong plist)
47 {
48     hid_t retVal = H5I_INVALID_HID;
49 
50     UNUSED(clss);
51 
52     if ((retVal = H5Pget_driver((hid_t) plist)) < 0)
53         H5_LIBRARY_ERROR(ENVONLY);
54 
55 done:
56     return (jlong)retVal;
57 } /* end Java_hdf_hdf5lib_H5_H5Pget_1driver */
58 
59 /*
60  * TODO: H5Pget_driver_info
61  */
62 
63 /*
64  * Class:     hdf_hdf5lib_H5
65  * Method:    H5Pset_fclose_degree
66  * Signature: (JI)I
67  */
68 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fclose_1degree(JNIEnv * env,jclass clss,jlong plist,jint fc_degree)69 Java_hdf_hdf5lib_H5_H5Pset_1fclose_1degree
70     (JNIEnv *env, jclass clss, jlong plist, jint fc_degree)
71 {
72     herr_t retVal = FAIL;
73 
74     UNUSED(clss);
75 
76     if ((retVal = H5Pset_fclose_degree((hid_t)plist, (H5F_close_degree_t)fc_degree)) < 0)
77         H5_LIBRARY_ERROR(ENVONLY);
78 
79 done:
80     return (jint)retVal;
81 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fclose_1degree */
82 
83 /*
84  * Class:     hdf_hdf5lib_H5
85  * Method:    H5Pget_fclose_degree
86  * Signature: (J)I
87  */
88 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fclose_1degree(JNIEnv * env,jclass clss,jlong plist)89 Java_hdf_hdf5lib_H5_H5Pget_1fclose_1degree
90     (JNIEnv *env, jclass clss, jlong plist)
91 {
92     H5F_close_degree_t degree = H5F_CLOSE_DEFAULT;
93 
94     UNUSED(clss);
95 
96     if (H5Pget_fclose_degree((hid_t)plist, &degree) < 0)
97         H5_LIBRARY_ERROR(ENVONLY);
98 
99 done:
100     return (jint)degree;
101 } /* end Java_hdf_hdf5lib_H5_H5Pget_1fclose_1degree */
102 
103 /*
104  * Class:     hdf_hdf5lib_H5
105  * Method:    H5Pset_fapl_core
106  * Signature: (JJZ)I
107  */
108 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1core(JNIEnv * env,jclass clss,jlong fapl_id,jlong increment,jboolean backing_store)109 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1core
110     (JNIEnv *env, jclass clss, jlong fapl_id, jlong increment, jboolean backing_store)
111 {
112     herr_t retVal = FAIL;
113 
114     UNUSED(clss);
115 
116     if ((retVal = H5Pset_fapl_core((hid_t)fapl_id, (size_t)increment, (hbool_t)backing_store)) < 0)
117         H5_LIBRARY_ERROR(ENVONLY);
118 
119 done:
120     return (jint)retVal;
121 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1core */
122 
123 /*
124  * Class:     hdf_hdf5lib_H5
125  * Method:    H5Pget_fapl_core
126  * Signature: (J[J[Z)I
127  */
128 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fapl_1core(JNIEnv * env,jclass clss,jlong fapl_id,jlongArray increment,jbooleanArray backing_store)129 Java_hdf_hdf5lib_H5_H5Pget_1fapl_1core
130     (JNIEnv *env, jclass clss, jlong fapl_id, jlongArray increment, jbooleanArray backing_store)
131 {
132     jboolean  isCopy;
133     jboolean *backArray = NULL;
134     jlong    *incArray = NULL;
135     herr_t    status = FAIL;
136 
137     UNUSED(clss);
138 
139     if (NULL == increment)
140         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_fapl_core: increment is NULL");
141     if (NULL == backing_store)
142         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_fapl_core: backing_store is NULL");
143 
144     PIN_LONG_ARRAY(ENVONLY, increment, incArray, &isCopy, "H5Pget_fapl_core: incArray not pinned");
145     PIN_BOOL_ARRAY(ENVONLY, backing_store, backArray, &isCopy, "H5Pget_fapl_core: backArray not pinned");
146 
147     {
148         /* Direct cast (size_t *)variable fails on 32-bit environment */
149         long long inc_temp = *incArray;
150         size_t    inc_t = (size_t) inc_temp;
151 
152         if ((status = H5Pget_fapl_core((hid_t)fapl_id, &inc_t, (hbool_t *)backArray)) < 0)
153             H5_LIBRARY_ERROR(ENVONLY);
154 
155         *incArray = (jlong)inc_t;
156     }
157 
158 done:
159     if (backArray)
160         UNPIN_BOOL_ARRAY(ENVONLY, backing_store, backArray, (status < 0) ? JNI_ABORT : 0);
161     if (incArray)
162         UNPIN_LONG_ARRAY(ENVONLY, increment, incArray, (status < 0) ? JNI_ABORT : 0);
163 
164     return (jint)status;
165 } /* end Java_hdf_hdf5lib_H5_H5Pget_1fapl_1core */
166 
167 /*
168  * TODO: H5Pset_core_write_tracking
169  */
170 
171 /*
172  * TODO: H5Pget_core_write_tracking
173  */
174 
175 /*
176  * Class:     hdf_hdf5lib_H5
177  * Method:    H5Pset_fapl_direct
178  * Signature: (JJJJ)I
179  */
180 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1direct(JNIEnv * env,jclass clss,jlong fapl_id,jlong alignment,jlong block_size,jlong cbuf_size)181 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1direct
182     (JNIEnv *env, jclass clss, jlong fapl_id, jlong alignment,
183         jlong block_size, jlong cbuf_size)
184 {
185     herr_t retVal = FAIL;
186 
187     UNUSED(clss);
188 
189 #ifdef H5_HAVE_DIRECT
190     if ((retVal = H5Pset_fapl_direct((hid_t)fapl_id, (size_t)alignment, (size_t)block_size, (size_t)cbuf_size)) < 0)
191         H5_LIBRARY_ERROR(ENVONLY);
192 
193 done:
194 #else
195     UNUSED(env);
196     UNUSED(fapl_id);
197     UNUSED(alignment);
198     UNUSED(block_size);
199     UNUSED(cbuf_size);
200 #endif
201 
202     return (jint)retVal;
203 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1direct */
204 
205 /*
206  * Class:     hdf_hdf5lib_H5
207  * Method:    H5Pget_fapl_direct
208  * Signature: (J[J)I
209  */
210 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fapl_1direct(JNIEnv * env,jclass clss,jlong fapl_id,jlongArray info)211 Java_hdf_hdf5lib_H5_H5Pget_1fapl_1direct
212     (JNIEnv *env, jclass clss, jlong fapl_id, jlongArray info)
213 {
214 #ifdef H5_HAVE_DIRECT
215     jboolean  isCopy;
216     jlong    *theArray = NULL;
217     size_t    alignment = 0;
218     size_t    block_size = 0;
219     size_t    cbuf_size = 0;
220     jsize     arrLen;
221 #endif
222     herr_t    retVal = FAIL;
223 
224     UNUSED(clss);
225 
226 #ifdef H5_HAVE_DIRECT
227     if (NULL == info)
228         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_fapl_direct: info input array is NULL");
229 
230     if ((arrLen = ENVPTR->GetArrayLength(ENVONLY, info)) < 0) {
231         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
232         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_fapl_direct: info array length < 0");
233     }
234     if (arrLen < 3)
235         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_fapl_direct: info input array < 3");
236 
237     PIN_LONG_ARRAY(ENVONLY, info, theArray, &isCopy, "H5Pget_fapl_direct: info not pinned");
238 
239     if ((retVal = H5Pget_fapl_direct((hid_t)fapl_id, &alignment, &block_size, &cbuf_size)) < 0)
240         H5_LIBRARY_ERROR(ENVONLY);
241 
242     theArray[0] = (jlong)alignment;
243     theArray[1] = (jlong)block_size;
244     theArray[2] = (jlong)cbuf_size;
245 
246 done:
247     if (theArray)
248         UNPIN_LONG_ARRAY(ENVONLY, info, theArray, (retVal < 0) ? JNI_ABORT : 0);
249 #else
250     UNUSED(env);
251     UNUSED(fapl_id);
252     UNUSED(info);
253 #endif
254 
255     return (jint)retVal;
256 } /* end Java_hdf_hdf5lib_H5_H5Pget_1fapl_1direct */
257 
258 /*
259  * Class:     hdf_hdf5lib_H5
260  * Method:    H5Pset_fapl_family
261  * Signature: (JJJ)I
262  */
263 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1family(JNIEnv * env,jclass clss,jlong plist,jlong memb_size,jlong memb_plist)264 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1family
265     (JNIEnv *env, jclass clss, jlong plist, jlong memb_size, jlong memb_plist)
266 {
267     long   ms = (long)memb_size;
268     herr_t retVal = FAIL;
269 
270     UNUSED(clss);
271 
272     if ((retVal = H5Pset_fapl_family((hid_t)plist, (hsize_t)ms, (hid_t)memb_plist)) < 0)
273         H5_LIBRARY_ERROR(ENVONLY);
274 
275 done:
276     return (jint)retVal;
277 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1family */
278 
279 /*
280  * Class:     hdf_hdf5lib_H5
281  * Method:    H5Pget_fapl_family
282  * Signature: (J[J[J)I
283  */
284 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fapl_1family(JNIEnv * env,jclass clss,jlong tid,jlongArray memb_size,jlongArray memb_plist)285 Java_hdf_hdf5lib_H5_H5Pget_1fapl_1family
286     (JNIEnv *env, jclass clss, jlong tid, jlongArray memb_size, jlongArray memb_plist)
287 {
288     jboolean  isCopy;
289     hsize_t  *sa = NULL;
290     size_t    i;
291     jlong    *sizeArray = NULL;
292     jlong    *plistArray = NULL;
293     jsize     rank;
294     herr_t    status = FAIL;
295 
296     UNUSED(clss);
297 
298     if (NULL == memb_size)
299         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_family: memb_size is NULL");
300     if (NULL == memb_plist)
301         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_family: memb_plist is NULL");
302 
303     PIN_LONG_ARRAY(ENVONLY, memb_size, sizeArray, &isCopy, "H5Pget_family: sizeArray not pinned");
304 
305     if ((rank = ENVPTR->GetArrayLength(ENVONLY, memb_size)) < 0) {
306         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
307         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_family: memb_size array length < 0");
308     }
309 
310     if (NULL == (sa = (hsize_t *) HDmalloc((size_t) rank * sizeof(hsize_t))))
311         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_family: memory allocation failed");
312 
313     PIN_LONG_ARRAY(ENVONLY, memb_plist, plistArray, &isCopy, "H5Pget_family: plistArray not pinned");
314 
315     if ((status = H5Pget_fapl_family((hid_t)tid, sa, (hid_t *)plistArray)) < 0)
316         H5_LIBRARY_ERROR(ENVONLY);
317 
318     for (i = 0; i < (size_t) rank; i++)
319         sizeArray[i] = (jlong)sa[i];
320 
321 done:
322     if (plistArray)
323         UNPIN_LONG_ARRAY(ENVONLY, memb_plist, plistArray, (status < 0) ? JNI_ABORT : 0);
324     if (sa)
325         HDfree(sa);
326     if (sizeArray)
327         UNPIN_LONG_ARRAY(ENVONLY, memb_size, sizeArray, (status < 0) ? JNI_ABORT : 0);
328 
329     return (jint)status;
330 } /* end Java_hdf_hdf5lib_H5_H5Pget_1fapl_1family */
331 
332 /*
333  * Class:     hdf_hdf5lib_H5
334  * Method:    H5Pset_family_offset
335  * Signature: (JJ)I
336  */
337 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1family_1offset(JNIEnv * env,jclass clss,jlong fapl_id,jlong offset)338 Java_hdf_hdf5lib_H5_H5Pset_1family_1offset
339     (JNIEnv *env, jclass clss, jlong fapl_id, jlong offset)
340 {
341     herr_t retVal = FAIL;
342 
343     UNUSED(clss);
344 
345     if ((retVal = H5Pset_family_offset((hid_t)fapl_id, (hsize_t)offset)) < 0)
346         H5_LIBRARY_ERROR(ENVONLY);
347 
348 done:
349     return (jint)retVal;
350 } /* end Java_hdf_hdf5lib_H5_H5Pset_1family_1offset */
351 
352 /*
353  * Class:     hdf_hdf5lib_H5
354  * Method:    H5Pget_family_offset
355  * Signature: (J)J
356  */
357 JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1family_1offset(JNIEnv * env,jclass clss,jlong fapl_id)358 Java_hdf_hdf5lib_H5_H5Pget_1family_1offset
359     (JNIEnv *env, jclass clss, jlong fapl_id)
360 {
361     hsize_t offset = 0;
362     herr_t  retVal = FAIL;
363 
364     UNUSED(clss);
365 
366     if ((retVal = H5Pget_family_offset((hid_t)fapl_id, &offset)) < 0)
367         H5_LIBRARY_ERROR(ENVONLY);
368 
369 done:
370     return (jlong)offset;
371 } /* end Java_hdf_hdf5lib_H5_H5Pget_1family_1offset */
372 
373 /* Class:     hdf_hdf5lib_H5
374  * Method:    H5Pset_fapl_hdfs
375  * Signature: (J)Lhdf/hdf5lib/structs/H5FD_hdfs_fapl_t;
376  */
377 JNIEXPORT jobject JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fapl_1hdfs(JNIEnv * env,jclass clss,jlong fapl_id)378 Java_hdf_hdf5lib_H5_H5Pget_1fapl_1hdfs
379     (JNIEnv *env, jclass clss, jlong fapl_id)
380 {
381 #ifdef H5_HAVE_LIBHDFS
382     H5FD_hdfs_fapl_t fa;
383     jvalue           args[5];
384     jint             j_namenode_port      = 0;
385     jstring          j_namenode_name      = NULL;
386     jstring          j_user_name          = NULL;
387     jstring          j_kerb_cache_path    = NULL;
388     jint             j_stream_buffer_size = 0;
389 #endif /* H5_HAVE_LIBHDFS */
390     jobject          ret_obj              = NULL;
391 
392     UNUSED(clss);
393 
394 #ifdef H5_HAVE_LIBHDFS
395     if (H5Pget_fapl_hdfs((hid_t)fapl_id, &fa) < 0)
396         H5_LIBRARY_ERROR(ENVONLY);
397 
398     if (NULL != fa.namenode_name) {
399         if (NULL == (j_namenode_name = ENVPTR->NewStringUTF(ENVONLY, fa.namenode_name))) {
400             CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
401             H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_fapl_hdfs: out of memory - can't create namenode_name string");
402         }
403     }
404     args[0].l = j_namenode_name;
405 
406     args[1].i = (jint)fa.namenode_port;
407 
408     if (NULL != fa.user_name) {
409         if (NULL == (j_user_name = ENVPTR->NewStringUTF(ENVONLY, fa.user_name))) {
410             CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
411             H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_fapl_hdfs: out of memory - can't create user_name string");
412         }
413     }
414     args[2].l = j_user_name;
415 
416     if (NULL != fa.kerberos_ticket_cache) {
417         if (NULL == (j_kerb_cache_path = ENVPTR->NewStringUTF(ENVONLY, fa.kerberos_ticket_cache))) {
418             CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
419             H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_fapl_hdfs: out of memory - can't create kerberos_ticket_cache string");
420         }
421     }
422     args[3].l = j_kerb_cache_path;
423 
424     args[4].i = (jint)fa.stream_buffer_size;
425 
426     CALL_CONSTRUCTOR(ENVONLY, "hdf/hdf5lib/structs/H5FD_hdfs_fapl_t", "(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V", args, ret_obj);
427 #else
428     H5_UNIMPLEMENTED(ENVONLY, "H5Pget_fapl_hdfs: not implemented");
429 #endif /* H5_HAVE_LIBHDFS */
430 
431 done:
432     return ret_obj;
433 } /* end Java_hdf_hdf5lib_H5_H5Pget_1fapl_1hdfs */
434 
435 /*
436  * Class:     hdf_hdf5lib_H5
437  * Method:    H5Pset_fapl_hdfs
438  * Signature: (JLhdf/hdf5lib/structs/H5FD_hdfs_fapl_t;)V
439  */
440 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1hdfs(JNIEnv * env,jclass clss,jlong fapl_id,jobject fapl_config)441 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1hdfs
442     (JNIEnv *env, jclass clss, jlong fapl_id, jobject fapl_config)
443 {
444 #ifdef H5_HAVE_LIBHDFS
445     H5FD_hdfs_fapl_t  instance;
446     const char       *str = NULL;
447     jfieldID          fid;
448     jstring           j_str;
449     jclass            cls;
450 #endif /* H5_HAVE_LIBHDFS */
451 
452     UNUSED(clss);
453 
454 #ifdef H5_HAVE_LIBHDFS
455     HDmemset(&instance, 0, sizeof(H5FD_hdfs_fapl_t));
456 
457     if (NULL == (cls = ENVPTR->GetObjectClass(ENVONLY, fapl_config)))
458         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
459 
460     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "version", "I")))
461         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
462 
463     instance.version = ENVPTR->GetIntField(ENVONLY, fapl_config, fid);
464     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
465 
466     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "namenode_name", "Ljava/lang/String;")))
467         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
468 
469     if (NULL == (j_str = (jstring)ENVPTR->GetObjectField(ENVONLY, fapl_config, fid)))
470         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
471 
472     if (j_str) {
473         PIN_JAVA_STRING(ENVONLY, j_str, str, NULL, "H5FDset_fapl_hdfs: fapl_config namenode_name not pinned");
474 
475         HDstrncpy(instance.namenode_name, str, H5FD__HDFS_NODE_NAME_SPACE + 1);
476         instance.namenode_name[H5FD__HDFS_NODE_NAME_SPACE] = '\0';
477 
478         UNPIN_JAVA_STRING(ENVONLY, j_str, str);
479         str = NULL;
480     }
481     else
482         HDmemset(instance.namenode_name, 0, H5FD__HDFS_NODE_NAME_SPACE + 1);
483 
484     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "namenode_port", "I")))
485         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
486 
487     instance.namenode_port = ENVPTR->GetIntField(ENVONLY, fapl_config, fid);
488     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
489 
490     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "user_name", "Ljava/lang/String;")))
491         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
492 
493     if (NULL == (j_str = (jstring)ENVPTR->GetObjectField(ENVONLY, fapl_config, fid)))
494         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
495 
496     if (j_str) {
497         PIN_JAVA_STRING(ENVONLY, j_str, str, NULL, "H5FDset_fapl_hdfs: fapl_config user_name not pinned");
498 
499         HDstrncpy(instance.user_name, str, H5FD__HDFS_USER_NAME_SPACE + 1);
500         instance.user_name[H5FD__HDFS_USER_NAME_SPACE] = '\0';
501 
502         UNPIN_JAVA_STRING(ENVONLY, j_str, str);
503         str = NULL;
504     }
505     else
506         HDmemset(instance.user_name, 0, H5FD__HDFS_USER_NAME_SPACE + 1);
507 
508     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "kerberos_ticket_cache", "Ljava/lang/String;")))
509         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
510 
511     if (NULL == (j_str = (jstring)ENVPTR->GetObjectField(ENVONLY, fapl_config, fid)))
512         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
513 
514     if (j_str) {
515         PIN_JAVA_STRING(ENVONLY, j_str, str, NULL, "H5FDset_fapl_hdfs: fapl_config kerberos_ticket_cache not pinned");
516 
517         HDstrncpy(instance.kerberos_ticket_cache, str, H5FD__HDFS_KERB_CACHE_PATH_SPACE + 1);
518         instance.kerberos_ticket_cache[H5FD__HDFS_KERB_CACHE_PATH_SPACE] = '\0';
519 
520         UNPIN_JAVA_STRING(ENVONLY, j_str, str);
521         str = NULL;
522     }
523     else
524         HDmemset(instance.kerberos_ticket_cache, 0, H5FD__HDFS_KERB_CACHE_PATH_SPACE + 1);
525 
526     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "stream_buffer_size", "I")))
527         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
528 
529     instance.stream_buffer_size = ENVPTR->GetIntField(ENVONLY, fapl_config, fid);
530     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
531 
532     if (H5Pset_fapl_hdfs((hid_t)fapl_id, &instance) < 0)
533             H5_LIBRARY_ERROR(ENVONLY);
534 #else
535     H5_UNIMPLEMENTED(ENVONLY, "H5Pset_fapl_hdfs: not implemented");
536 #endif /* H5_HAVE_LIBHDFS */
537 
538 done:
539     /* NOP */;
540 #ifdef H5_HAVE_LIBHDFS
541     if (str)
542         UNPIN_JAVA_STRING(ENVONLY, j_str, str);
543 #endif /* H5_HAVE_LIBHDFS */
544 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1hdfs */
545 
546 /*
547  * Class:     hdf_hdf5lib_H5
548  * Method:    H5Pset_fapl_log
549  * Signature: (JLjava/lang/String;JJ)V
550  */
551 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1log(JNIEnv * env,jclass clss,jlong fapl_id,jstring logfile,jlong flags,jlong buf_size)552 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1log
553     (JNIEnv *env, jclass clss, jlong fapl_id, jstring logfile, jlong flags, jlong buf_size)
554 {
555     const char *pLogfile = NULL;
556     herr_t      retVal = FAIL;
557 
558     UNUSED(clss);
559 
560     if (NULL == logfile)
561         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_fapl_log: log file name is NULL");
562 
563     PIN_JAVA_STRING(ENVONLY, logfile, pLogfile, NULL, "H5Pset_fapl_log: log file name not pinned");
564 
565     if ((retVal = H5Pset_fapl_log((hid_t)fapl_id, pLogfile, (unsigned long long)flags, (size_t)buf_size)) < 0)
566         H5_LIBRARY_ERROR(ENVONLY);
567 
568 done:
569     if (pLogfile)
570         UNPIN_JAVA_STRING(ENVONLY, logfile, pLogfile);
571 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1log */
572 
573 /*
574  * TODO: H5Pset_fapl_mpio
575  */
576 
577 /*
578  * TODO: H5Pget_fapl_mpio
579  */
580 
581 /*
582  * TODO: H5Pset_fapl_mpiposix
583  */
584 
585 /*
586  * TODO: H5Pget_fapl_mpiposix
587  */
588 
589 /*
590  * Class:     hdf_hdf5lib_H5
591  * Method:    H5Pset_fapl_multi
592  * Signature: (J[I[J[Ljava/lang/String;[JZ)V
593  */
594 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1multi(JNIEnv * env,jclass clss,jlong tid,jintArray memb_map,jlongArray memb_fapl,jobjectArray memb_name,jlongArray memb_addr,jboolean relax)595 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1multi
596     (JNIEnv *env, jclass clss, jlong tid, jintArray memb_map,
597         jlongArray memb_fapl, jobjectArray memb_name, jlongArray memb_addr, jboolean relax)
598 {
599     const char * const *mName = NULL;
600     const char         *utf8 = NULL;
601     jboolean            isCopy;
602     jboolean            bb;
603     jobject             o;
604     jstring             rstring;
605     jstring             obj;
606     jclass              Sjc;
607     size_t              i;
608     jlong              *thefaplArray = NULL;
609     jlong              *theaddrArray = NULL;
610     jint               *themapArray = NULL;
611     char               *member_name[H5FD_MEM_NTYPES];
612     herr_t              status = FAIL;
613 
614     UNUSED(clss);
615 
616     HDmemset(member_name, 0, H5FD_MEM_NTYPES * sizeof(char *));
617 
618     if (memb_map)
619         PIN_INT_ARRAY(ENVONLY, memb_map, themapArray, &isCopy, "H5Pset_fapl_multi: memb_map not pinned");
620     if (memb_fapl)
621         PIN_LONG_ARRAY(ENVONLY, memb_fapl, thefaplArray, &isCopy, "H5Pset_fapl_multi: memb_fapl not pinned");
622     if (memb_addr)
623         PIN_LONG_ARRAY(ENVONLY, memb_addr, theaddrArray, &isCopy, "H5Pset_fapl_multi: memb_addr not pinned");
624 
625     if (memb_name) {
626         for (i = 0; i < H5FD_MEM_NTYPES; i++) {
627             size_t str_len;
628 
629             if (NULL == (obj = (jstring) ENVPTR->GetObjectArrayElement(ENVONLY, (jobjectArray) memb_name, (jsize) i))) {
630                 CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
631 
632                 /*
633                  * If the string object was NULL, skip it.
634                  */
635                 member_name[i] = NULL;
636                 continue;
637             }
638 
639             /*
640              * length = ENVPTR->GetStringUTFLength(ENVONLY, obj);
641              * CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
642              */
643 
644             PIN_JAVA_STRING(ENVONLY, obj, utf8, NULL, "H5Pset_fapl_multi: string not pinned");
645 
646             str_len = HDstrlen(utf8);
647 
648             if (NULL == (member_name[i] = (char *) HDmalloc(str_len + 1)))
649                 H5_JNI_FATAL_ERROR(ENVONLY, "H5Pset_fapl_multi: memory allocation failed");
650 
651             HDstrncpy(member_name[i], utf8, str_len + 1);
652             (member_name[i])[str_len] = '\0';
653 
654             UNPIN_JAVA_STRING(ENVONLY, obj, utf8);
655             utf8 = NULL;
656 
657             ENVPTR->DeleteLocalRef(ENVONLY, obj);
658         }
659 
660         mName = (const char * const *)member_name;
661     }
662 
663     if ((status = H5Pset_fapl_multi((hid_t)tid, (const H5FD_mem_t *)themapArray, (const hid_t *)thefaplArray,
664             mName, (const haddr_t *)theaddrArray, (hbool_t)relax)) < 0)
665         H5_LIBRARY_ERROR(ENVONLY);
666 
667     if (memb_name && mName) {
668         if (NULL == (Sjc = ENVPTR->FindClass(ENVONLY, "java/lang/String")))
669             CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
670 
671         for (i = 0; i < H5FD_MEM_NTYPES; i++) {
672             if (!member_name[i]) continue;
673 
674             if (NULL == (rstring = ENVPTR->NewStringUTF(ENVONLY, member_name[i]))) {
675                 CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
676                 H5_JNI_FATAL_ERROR(ENVONLY, "H5Pset_fapl_multi: out of memory - unable to construct string from UTF characters");
677             }
678 
679             if (NULL == (o = ENVPTR->GetObjectArrayElement(ENVONLY, memb_name, (jsize) i))) {
680                 CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
681 
682                 /*
683                  * If the string object was NULL, skip it.
684                  */
685                 ENVPTR->DeleteLocalRef(ENVONLY, rstring);
686                 continue;
687             }
688 
689             if (JNI_TRUE == (bb = ENVPTR->IsInstanceOf(ENVONLY, o, Sjc))) {
690                 ENVPTR->SetObjectArrayElement(ENVONLY, memb_name, (jsize) i, (jobject)rstring);
691                 CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
692             }
693 
694             ENVPTR->DeleteLocalRef(ENVONLY, o);
695             ENVPTR->DeleteLocalRef(ENVONLY, rstring);
696 
697             HDfree(member_name[i]);
698             member_name[i] = NULL;
699         }
700     }
701 
702 done:
703     for (i = 0; i < H5FD_MEM_NTYPES; i++) {
704         if (member_name[i])
705             HDfree(member_name[i]);
706     }
707     if (utf8)
708         UNPIN_JAVA_STRING(ENVONLY, obj, utf8);
709     if (theaddrArray)
710         UNPIN_LONG_ARRAY(ENVONLY, memb_addr, theaddrArray, (status < 0) ? JNI_ABORT : 0);
711     if (thefaplArray)
712         UNPIN_LONG_ARRAY(ENVONLY, memb_fapl, thefaplArray, (status < 0) ? JNI_ABORT : 0);
713     if (themapArray)
714         UNPIN_INT_ARRAY(ENVONLY, memb_map, themapArray, (status < 0) ? JNI_ABORT : 0);
715 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1multi */
716 
717 /*
718  * Class:     hdf_hdf5lib_H5
719  * Method:    H5Pget_fapl_multi
720  * Signature: (J[I[J[Ljava/lang/String;[J)Z
721  */
722 JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fapl_1multi(JNIEnv * env,jclass clss,jlong tid,jintArray memb_map,jlongArray memb_fapl,jobjectArray memb_name,jlongArray memb_addr)723 Java_hdf_hdf5lib_H5_H5Pget_1fapl_1multi
724     (JNIEnv *env, jclass clss, jlong tid, jintArray memb_map,
725         jlongArray memb_fapl, jobjectArray memb_name, jlongArray memb_addr)
726 {
727     jboolean   isCopy;
728     jstring    str;
729     herr_t     status = FAIL;
730     size_t     i;
731     jlong     *thefaplArray = NULL;
732     jlong     *theaddrArray = NULL;
733     jint      *themapArray = NULL;
734     char     **mName = NULL;
735     int        relax = 0;
736     int        retVal = 0;
737 
738     UNUSED(clss);
739 
740     if (memb_map)
741         PIN_INT_ARRAY(ENVONLY, memb_map, themapArray, &isCopy, "H5Pget_fapl_multi: memb_map not pinned");
742     if (memb_fapl)
743         PIN_LONG_ARRAY(ENVONLY, memb_fapl, thefaplArray, &isCopy, "H5Pget_fapl_multi: memb_fapl not pinned");
744     if (memb_addr)
745         PIN_LONG_ARRAY(ENVONLY, memb_addr, theaddrArray, &isCopy, "H5Pget_fapl_multi: memb_addr not pinned");
746     if (memb_name)
747         if (NULL == (mName = (char **) HDcalloc(H5FD_MEM_NTYPES, sizeof(*mName))))
748             H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_fapl_multi: memory allocation failed");
749 
750     if ((status = H5Pget_fapl_multi((hid_t)tid, (H5FD_mem_t *)themapArray, (hid_t *)thefaplArray,
751             mName, (haddr_t *)theaddrArray, (hbool_t *)&relax)) < 0)
752         H5_LIBRARY_ERROR(ENVONLY);
753 
754     if (memb_name && mName) {
755         for (i = 0; i < H5FD_MEM_NTYPES; i++) {
756             if (mName[i]) {
757                 if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, mName[i]))) {
758                     CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
759                     H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_fapl_multi: out of memory - unable to construct string from UTF characters");
760                 }
761 
762                 ENVPTR->SetObjectArrayElement(ENVONLY, memb_name, (jsize) i, (jobject)str);
763                 CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
764 
765                 ENVPTR->DeleteLocalRef(ENVONLY, str);
766             }
767         }
768     }
769 
770     retVal = (relax != 0);
771 
772 done:
773     h5str_array_free(mName, H5FD_MEM_NTYPES);
774     if (theaddrArray)
775         UNPIN_LONG_ARRAY(ENVONLY, memb_addr, theaddrArray, (status < 0) ? JNI_ABORT : 0);
776     if (thefaplArray)
777         UNPIN_LONG_ARRAY(ENVONLY, memb_fapl, thefaplArray, (status < 0) ? JNI_ABORT : 0);
778     if (themapArray)
779         UNPIN_INT_ARRAY(ENVONLY, memb_map, themapArray, (status < 0) ? JNI_ABORT : 0);
780 
781     return (jboolean)retVal;
782 } /* end Java_hdf_hdf5lib_H5_H5Pget_1fapl_1multi */
783 
784 /*
785  * TODO: H5Pset_multi_type
786  */
787 
788 /*
789  * TODO: H5Pget_multi_type
790  */
791 
792 /*
793  * Class:     hdf5_hdf5lib_H5
794  * Method:    H5Pget_fapl_ros3
795  * Signature: (J)Lhdf/hdf5lib/structs/H5FD_ros3_fapl_t;
796  */
797 JNIEXPORT jobject JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1fapl_1ros3(JNIEnv * env,jclass clss,jlong fapl_id)798 Java_hdf_hdf5lib_H5_H5Pget_1fapl_1ros3
799     (JNIEnv *env, jclass clss, jlong fapl_id)
800 {
801 #ifdef H5_HAVE_ROS3_VFD
802     H5FD_ros3_fapl_t fa;
803     jvalue           args[3];
804     jstring          j_aws   = NULL;
805     jstring          j_id    = NULL;
806     jstring          j_key   = NULL;
807 #endif /* H5_HAVE_ROS3_VFD */
808     jobject          ret_obj = NULL;
809 
810     UNUSED(clss);
811 
812 #ifdef H5_HAVE_ROS3_VFD
813     /* pass fapl and fapl_t instance into library get_fapl */
814     /* store fapl details in ros3_fapl_t instance `fa`          */
815     if (H5Pget_fapl_ros3((hid_t)fapl_id, &fa) < 0)
816         H5_LIBRARY_ERROR(ENVONLY);
817 
818     if (NULL != fa.aws_region) {
819         if (NULL == (j_aws = ENVPTR->NewStringUTF(ENVONLY, fa.aws_region))) {
820             CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
821             H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_fapl_ros3: out of memory - can't create aws_region string");
822         }
823     }
824     args[0].l = j_aws;
825 
826     if (NULL != fa.secret_id) {
827         if (NULL == (j_id = ENVPTR->NewStringUTF(ENVONLY, fa.secret_id))) {
828             CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
829             H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_fapl_ros3: out of memory - can't create secret_id string");
830         }
831     }
832     args[1].l = j_id;
833 
834     if (NULL != fa.secret_key) {
835         if (NULL == (j_key = ENVPTR->NewStringUTF(ENVONLY, fa.secret_key))) {
836             CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
837             H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_fapl_ros3: out of memory - can't create secret_key string");
838         }
839     }
840     args[2].l = j_key;
841 
842     CALL_CONSTRUCTOR(ENVONLY, "hdf/hdf5lib/structs/H5FD_ros3_fapl_t", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", args, ret_obj);
843 #else
844     H5_UNIMPLEMENTED(ENVONLY, "H5Pget_fapl_ros3: not implemented");
845 #endif /* H5_HAVE_ROS3_VFD */
846 
847 done:
848     return ret_obj;
849 } /* end Java_hdf_hdf5lib_H5_H5Pget_1fapl_1ros3 */
850 
851 /*
852  * Class:     hdf_hdf5lib_H5
853  * Method:    H5Pset_fapl_ros3
854  * Signature: (JLhdf/hdf5lib/structs/H5FD_ros3_fapl_t;)V
855  */
856 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1ros3(JNIEnv * env,jclass clss,jlong fapl_id,jobject fapl_config)857 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1ros3
858     (JNIEnv *env, jclass clss, jlong fapl_id, jobject fapl_config)
859 {
860 #ifdef H5_HAVE_ROS3_VFD
861     H5FD_ros3_fapl_t  instance;
862     const char       *str = NULL;
863     jfieldID          fid;
864     jstring           j_str;
865     jclass            cls;
866 #endif /* H5_HAVE_ROS3_VFD */
867 
868     UNUSED(clss);
869 
870 #ifdef H5_HAVE_ROS3_VFD
871     HDmemset(&instance, 0, sizeof(H5FD_ros3_fapl_t));
872 
873     if (NULL == (cls = ENVPTR->GetObjectClass(ENVONLY, fapl_config)))
874         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
875 
876     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "version", "I")))
877         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
878 
879     instance.version = ENVPTR->GetIntField(ENVONLY, fapl_config, fid);
880     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
881 
882     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "aws_region", "Ljava/lang/String;")))
883         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
884 
885     if (NULL == (j_str = (jstring)ENVPTR->GetObjectField(ENVONLY, fapl_config, fid)))
886         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
887 
888     if (j_str) {
889         PIN_JAVA_STRING(ENVONLY, j_str, str, NULL, "H5Pset_fapl_ros3: fapl_config aws_region not pinned");
890 
891         HDstrncpy(instance.aws_region, str, H5FD_ROS3_MAX_REGION_LEN + 1);
892         instance.aws_region[H5FD_ROS3_MAX_REGION_LEN] = '\0';
893 
894         UNPIN_JAVA_STRING(ENVONLY, j_str, str);
895         str = NULL;
896     }
897     else
898         HDmemset(instance.aws_region, 0, H5FD_ROS3_MAX_REGION_LEN + 1);
899 
900     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "secret_id", "Ljava/lang/String;")))
901         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
902 
903     if (NULL == (j_str = (jstring)ENVPTR->GetObjectField(ENVONLY, fapl_config, fid)))
904         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
905 
906     if (j_str) {
907         PIN_JAVA_STRING(ENVONLY, j_str, str, NULL, "H5Pset_fapl_ros3: fapl_config secret_id not pinned");
908 
909         HDstrncpy(instance.secret_id, str, H5FD_ROS3_MAX_SECRET_ID_LEN + 1);
910         instance.secret_id[H5FD_ROS3_MAX_SECRET_ID_LEN] = '\0';
911 
912         UNPIN_JAVA_STRING(ENVONLY, j_str, str);
913         str = NULL;
914     }
915     else
916         HDmemset(instance.secret_id, 0, H5FD_ROS3_MAX_SECRET_ID_LEN + 1);
917 
918     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "secret_key", "Ljava/lang/String;")))
919         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
920 
921     if (NULL == (j_str = (jstring)ENVPTR->GetObjectField(ENVONLY, fapl_config, fid)))
922         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
923 
924     if (j_str) {
925         PIN_JAVA_STRING(ENVONLY, j_str, str, NULL, "H5Pset_fapl_ros3: fapl_config secret_key not pinned");
926 
927         HDstrncpy(instance.secret_key, str, H5FD_ROS3_MAX_SECRET_KEY_LEN + 1);
928         instance.secret_key[H5FD_ROS3_MAX_SECRET_KEY_LEN] = '\0';
929 
930         UNPIN_JAVA_STRING(ENVONLY, j_str, str);
931         str = NULL;
932     }
933     else
934         HDmemset(instance.secret_key, 0, H5FD_ROS3_MAX_SECRET_KEY_LEN + 1);
935 
936     if (instance.aws_region[0] != '\0' && instance.secret_id[0] !='\0' && instance.secret_key[0] !='\0')
937         instance.authenticate = TRUE;
938 
939     if (H5Pset_fapl_ros3((hid_t)fapl_id, &instance) < 0)
940         H5_LIBRARY_ERROR(ENVONLY);
941 #else
942     H5_UNIMPLEMENTED(ENVONLY, "H5Pset_fapl_ros3: not implemented");
943 #endif /* H5_HAVE_ROS3_VFD */
944 
945 done:
946     /* NOP */;
947 #ifdef H5_HAVE_ROS3_VFD
948     if (str)
949         UNPIN_JAVA_STRING(ENVONLY, j_str, str);
950 #endif /* H5_HAVE_LIBHDFS */
951 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1ros3 */
952 
953 /*
954  * Class:     hdf_hdf5lib_H5
955  * Method:    H5Pset_fapl_split
956  * Signature: (JLjava/lang/String;JLjava/lang/String;J)V
957  */
958 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1split(JNIEnv * env,jclass clss,jlong fapl_id,jstring metaext,jlong meta_pl_id,jstring rawext,jlong raw_pl_id)959 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1split
960     (JNIEnv *env, jclass clss, jlong fapl_id, jstring metaext, jlong meta_pl_id, jstring rawext, jlong raw_pl_id)
961 {
962     const char *mstr = NULL;
963     const char *rstr = NULL;
964     herr_t      retVal = FAIL;
965 
966     UNUSED(clss);
967 
968     if (NULL == metaext)
969         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_fapl_split: metaext is NULL");
970     if (NULL == rawext)
971         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_fapl_split: rawext is NULL");
972 
973     PIN_JAVA_STRING(ENVONLY, metaext, mstr, NULL, "H5Pset_fapl_split: metaext not pinned");
974     PIN_JAVA_STRING(ENVONLY, rawext, rstr, NULL, "H5Pset_fapl_split: rawext not pinned");
975 
976     if ((retVal = H5Pset_fapl_split((hid_t)fapl_id, mstr, (hid_t)meta_pl_id, rstr, (hid_t)raw_pl_id)) < 0)
977         H5_LIBRARY_ERROR(ENVONLY);
978 
979 done:
980     if (rstr)
981         UNPIN_JAVA_STRING(ENVONLY, rawext, rstr);
982     if (mstr)
983         UNPIN_JAVA_STRING(ENVONLY, metaext, mstr);
984 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1split */
985 
986 /*
987  * Class:     hdf_hdf5lib_H5
988  * Method:    H5Pset_fapl_sec2
989  * Signature: (J)I
990  */
991 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1sec2(JNIEnv * env,jclass clss,jlong fapl_id)992 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1sec2
993     (JNIEnv *env, jclass clss, jlong fapl_id)
994 {
995     herr_t retVal = FAIL;
996 
997     UNUSED(clss);
998 
999     if ((retVal = H5Pset_fapl_sec2((hid_t) fapl_id)) < 0)
1000         H5_LIBRARY_ERROR(ENVONLY);
1001 
1002 done:
1003     return (jint)retVal;
1004 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1sec2 */
1005 
1006 /*
1007  * Class:     hdf_hdf5lib_H5
1008  * Method:    H5Pset_fapl_stdio
1009  * Signature: (J)I
1010  */
1011 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1stdio(JNIEnv * env,jclass clss,jlong fapl_id)1012 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1stdio
1013     (JNIEnv *env, jclass clss, jlong fapl_id)
1014 {
1015     herr_t retVal = FAIL;
1016 
1017     UNUSED(clss);
1018 
1019     if ((retVal = H5Pset_fapl_stdio((hid_t) fapl_id)) < 0)
1020         H5_LIBRARY_ERROR(ENVONLY);
1021 
1022 done:
1023     return (jint)retVal;
1024 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1stdio */
1025 
1026 /*
1027  * Class:     hdf_hdf5lib_H5
1028  * Method:    H5Pset_fapl_windows
1029  * Signature: (J)I
1030  */
1031 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1fapl_1windows(JNIEnv * env,jclass clss,jlong fapl_id)1032 Java_hdf_hdf5lib_H5_H5Pset_1fapl_1windows
1033     (JNIEnv *env, jclass clss, jlong fapl_id)
1034 {
1035     herr_t retVal = FAIL;
1036 
1037     UNUSED(clss);
1038 
1039 #ifdef H5_HAVE_WINDOWS
1040     if ((retVal = H5Pset_fapl_windows((hid_t) fapl_id)) < 0)
1041         H5_LIBRARY_ERROR(ENVONLY);
1042 
1043 done:
1044 #else
1045     UNUSED(env);
1046     UNUSED(fapl_id);
1047 #endif
1048     return (jint)retVal;
1049 } /* end Java_hdf_hdf5lib_H5_H5Pset_1fapl_1windows */
1050 
1051 /*
1052  * TODO: H5Pset_file_image
1053  */
1054 
1055 /*
1056  * TODO: H5Pget_file_image
1057  */
1058 
1059 /*
1060  * TODO: H5Pset_file_image_callbacks
1061  */
1062 
1063 /*
1064  * TODO: H5Pget_file_image_callbacks
1065  */
1066 
1067 /*
1068  * Class:     hdf_hdf5lib_H5
1069  * Method:    H5Pset_meta_block_size
1070  * Signature: (JJ)V
1071  */
1072 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1meta_1block_1size(JNIEnv * env,jclass clss,jlong plist,jlong size)1073 Java_hdf_hdf5lib_H5_H5Pset_1meta_1block_1size
1074     (JNIEnv *env, jclass clss, jlong plist, jlong size)
1075 {
1076     long sz = (long)size;
1077 
1078     UNUSED(clss);
1079 
1080     if (H5Pset_meta_block_size((hid_t)plist, (hsize_t)sz) < 0)
1081         H5_LIBRARY_ERROR(ENVONLY);
1082 
1083 done:
1084     return;
1085 } /* end Java_hdf_hdf5lib_H5_H5Pset_1meta_1block_1size */
1086 
1087 /*
1088  * Class:     hdf_hdf5lib_H5
1089  * Method:    H5Pget_meta_block_size
1090  * Signature: (J)J
1091  */
1092 JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1meta_1block_1size(JNIEnv * env,jclass clss,jlong plist)1093 Java_hdf_hdf5lib_H5_H5Pget_1meta_1block_1size
1094     (JNIEnv *env, jclass clss, jlong plist)
1095 {
1096     hsize_t s = 0;
1097 
1098     UNUSED(clss);
1099 
1100     if (H5Pget_meta_block_size((hid_t)plist, &s) < 0)
1101         H5_LIBRARY_ERROR(ENVONLY);
1102 
1103 done:
1104     return (jlong)s;
1105 } /* end Java_hdf_hdf5lib_H5_H5Pget_1meta_1block_1size */
1106 
1107 /*
1108  * TODO: H5Pset_page_buffer_size
1109  */
1110 
1111 /*
1112  * TODO: H5Pget_page_buffer_size
1113  */
1114 
1115 /*
1116  * Class:     hdf_hdf5lib_H5
1117  * Method:    H5Pset_sieve_buf_size
1118  * Signature: (JJ)V
1119  */
1120 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1sieve_1buf_1size(JNIEnv * env,jclass clss,jlong plist,jlong size)1121 Java_hdf_hdf5lib_H5_H5Pset_1sieve_1buf_1size
1122     (JNIEnv *env, jclass clss, jlong plist, jlong size)
1123 {
1124     size_t sz = (size_t)size;
1125 
1126     UNUSED(clss);
1127 
1128     if (H5Pset_sieve_buf_size((hid_t)plist, (size_t)sz) < 0)
1129         H5_LIBRARY_ERROR(ENVONLY);
1130 
1131 done:
1132     return;
1133 } /* end Java_hdf_hdf5lib_H5_H5Pset_1sieve_1buf_1size */
1134 
1135 /*
1136  * Class:     hdf_hdf5lib_H5
1137  * Method:    H5Pget_sieve_buf_size
1138  * Signature: (J)J
1139  */
1140 JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1sieve_1buf_1size(JNIEnv * env,jclass clss,jlong plist)1141 Java_hdf_hdf5lib_H5_H5Pget_1sieve_1buf_1size
1142     (JNIEnv *env, jclass clss, jlong plist)
1143 {
1144     size_t s = 0;
1145 
1146     UNUSED(clss);
1147 
1148     if (H5Pget_sieve_buf_size((hid_t)plist, &s) < 0)
1149         H5_LIBRARY_ERROR(ENVONLY);
1150 
1151 done:
1152     return (jlong)s;
1153 } /* end Java_hdf_hdf5lib_H5_H5Pget_1sieve_1buf_1size */
1154 
1155 /*
1156  * Class:     hdf_hdf5lib_H5
1157  * Method:    H5Pset_alignment
1158  * Signature: (JJJ)I
1159  */
1160 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1alignment(JNIEnv * env,jclass clss,jlong plist,jlong threshold,jlong alignment)1161 Java_hdf_hdf5lib_H5_H5Pset_1alignment
1162     (JNIEnv *env, jclass clss, jlong plist, jlong threshold, jlong alignment)
1163 {
1164     long   thr = (long)threshold;
1165     long   align = (long)alignment;
1166     herr_t retVal = FAIL;
1167 
1168     UNUSED(clss);
1169 
1170     if ((retVal = H5Pset_alignment((hid_t)plist, (hsize_t)thr, (hsize_t)align)) < 0)
1171         H5_LIBRARY_ERROR(ENVONLY);
1172 
1173 done:
1174     return (jint)retVal;
1175 } /* end Java_hdf_hdf5lib_H5_H5Pset_1alignment */
1176 
1177 /*
1178  * Class:     hdf_hdf5lib_H5
1179  * Method:    H5Pget_alignment
1180  * Signature: (J[J)I
1181  */
1182 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1alignment(JNIEnv * env,jclass clss,jlong plist,jlongArray alignment)1183 Java_hdf_hdf5lib_H5_H5Pget_1alignment
1184     (JNIEnv *env, jclass clss, jlong plist, jlongArray alignment)
1185 {
1186     jboolean  isCopy;
1187     hsize_t   t = 0;
1188     hsize_t   a = 0;
1189     jsize     arrLen;
1190     jlong    *theArray = NULL;
1191     herr_t    status = FAIL;
1192 
1193     UNUSED(clss);
1194 
1195     if (NULL == alignment)
1196         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_alignment: input alignment is NULL");
1197 
1198     if ((arrLen = ENVPTR->GetArrayLength(ENVONLY, alignment)) < 0) {
1199         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
1200         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_alignment: alignment array length < 0");
1201     }
1202     if (arrLen < 2)
1203         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_alignment: alignment input array < 2");
1204 
1205     PIN_LONG_ARRAY(ENVONLY, alignment, theArray, &isCopy, "H5Pget_alignment: input array not pinned");
1206 
1207     if ((status = H5Pget_alignment((hid_t)plist, &t, &a)) < 0)
1208         H5_LIBRARY_ERROR(ENVONLY);
1209 
1210     theArray[0] = (jlong)t;
1211     theArray[1] = (jlong)a;
1212 
1213 done:
1214     if (theArray)
1215         UNPIN_LONG_ARRAY(ENVONLY, alignment, theArray, (status < 0) ? JNI_ABORT : 0);
1216 
1217     return (jint)status;
1218 } /* end Java_hdf_hdf5lib_H5_H5Pget_1alignment */
1219 
1220 /*
1221  * Class:     hdf_hdf5lib_H5
1222  * Method:    H5Pset_cache
1223  * Signature: (JIJJD)I
1224  */
1225 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1cache(JNIEnv * env,jclass clss,jlong plist,jint mdc_nelmts,jlong rdcc_nelmts,jlong rdcc_nbytes,jdouble rdcc_w0)1226 Java_hdf_hdf5lib_H5_H5Pset_1cache
1227     (JNIEnv *env, jclass clss, jlong plist, jint mdc_nelmts, jlong rdcc_nelmts,
1228   jlong rdcc_nbytes, jdouble rdcc_w0)
1229 {
1230     herr_t retVal = FAIL;
1231 
1232     UNUSED(clss);
1233 
1234     if ((retVal = H5Pset_cache((hid_t)plist, (int)mdc_nelmts, (size_t)rdcc_nelmts,
1235             (size_t)rdcc_nbytes, (double) rdcc_w0)) < 0)
1236         H5_LIBRARY_ERROR(ENVONLY);
1237 
1238 done:
1239     return (jint)retVal;
1240 } /* end Java_hdf_hdf5lib_H5_H5Pset_1cache */
1241 
1242 /*
1243  * Class:     hdf_hdf5lib_H5
1244  * Method:    H5Pget_cache
1245  * Signature: (J[I[J[J[D)I
1246  */
1247 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1cache(JNIEnv * env,jclass clss,jlong plist,jintArray mdc_nelmts,jlongArray rdcc_nelmts,jlongArray rdcc_nbytes,jdoubleArray rdcc_w0)1248 Java_hdf_hdf5lib_H5_H5Pget_1cache
1249     (JNIEnv *env, jclass clss, jlong plist, jintArray mdc_nelmts,
1250         jlongArray rdcc_nelmts, jlongArray rdcc_nbytes, jdoubleArray rdcc_w0)
1251 {
1252     jboolean  isCopy;
1253     jdouble  *w0Array = NULL;
1254     jlong    *rdcc_nelmtsArray = NULL;
1255     jlong    *nbytesArray = NULL;
1256     herr_t    status = FAIL;
1257 
1258     UNUSED(clss);
1259     UNUSED(mdc_nelmts);
1260 
1261     if (NULL != rdcc_w0)
1262         PIN_DOUBLE_ARRAY(ENVONLY, rdcc_w0, w0Array, &isCopy, "H5Pget_cache: rdcc_w0 array not pinned");
1263     if (NULL != rdcc_nelmts)
1264         PIN_LONG_ARRAY(ENVONLY, rdcc_nelmts, rdcc_nelmtsArray, &isCopy, "H5Pget_cache: rdcc_nelmts array not pinned");
1265     if (NULL != rdcc_nbytes)
1266         PIN_LONG_ARRAY(ENVONLY, rdcc_nbytes, nbytesArray, &isCopy, "H5Pget_cache: nbytesArray array not pinned");
1267 
1268     {
1269         /* direct cast (size_t *)variable fails on 32-bit environment */
1270         long long rdcc_nelmts_temp = *rdcc_nelmtsArray;
1271         long long nbytes_temp = *nbytesArray;
1272         size_t    rdcc_nelmts_t = (size_t) rdcc_nelmts_temp;
1273         size_t    nbytes_t = (size_t) nbytes_temp;
1274 
1275         if ((status = H5Pget_cache((hid_t)plist, (int *)NULL, &rdcc_nelmts_t,
1276                 &nbytes_t, (double *)w0Array)) < 0)
1277             H5_LIBRARY_ERROR(ENVONLY);
1278 
1279         *rdcc_nelmtsArray = (jlong)rdcc_nelmts_t;
1280         *nbytesArray = (jlong)nbytes_t;
1281     } /* end direct cast special */
1282 
1283 done:
1284     if (nbytesArray)
1285         UNPIN_LONG_ARRAY(ENVONLY, rdcc_nbytes, nbytesArray, (status < 0) ? JNI_ABORT : 0);
1286     if (rdcc_nelmtsArray)
1287         UNPIN_LONG_ARRAY(ENVONLY, rdcc_nelmts, rdcc_nelmtsArray, (status < 0) ? JNI_ABORT : 0);
1288     if (w0Array)
1289         UNPIN_DOUBLE_ARRAY(ENVONLY, rdcc_w0, w0Array, (status < 0) ? JNI_ABORT : 0);
1290 
1291     return (jint)status;
1292 } /* end Java_hdf_hdf5lib_H5_H5Pget_1cache */
1293 
1294 /*
1295  * Class:     hdf_hdf5lib_H5
1296  * Method:    H5Pset_elink_file_cache_size
1297  * Signature: (JI)V
1298  */
1299 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1elink_1file_1cache_1size(JNIEnv * env,jclass clss,jlong plist,jint size)1300 Java_hdf_hdf5lib_H5_H5Pset_1elink_1file_1cache_1size
1301     (JNIEnv *env, jclass clss, jlong plist, jint size)
1302 {
1303     unsigned sz = (unsigned)size;
1304 
1305     UNUSED(clss);
1306 
1307     if (H5Pset_elink_file_cache_size((hid_t)plist, (unsigned)sz) < 0)
1308         H5_LIBRARY_ERROR(ENVONLY);
1309 
1310 done:
1311     return;
1312 } /* end Java_hdf_hdf5lib_H5_H5Pset_1elink_1file_1cache_1size */
1313 
1314 /*
1315  * Class:     hdf_hdf5lib_H5
1316  * Method:    H5Pget_elink_file_cache_size
1317  * Signature: (J)I
1318  */
1319 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1elink_1file_1cache_1size(JNIEnv * env,jclass clss,jlong plist)1320 Java_hdf_hdf5lib_H5_H5Pget_1elink_1file_1cache_1size
1321     (JNIEnv *env, jclass clss, jlong plist)
1322 {
1323     unsigned s = 0;
1324 
1325     UNUSED(clss);
1326 
1327     if (H5Pget_elink_file_cache_size((hid_t)plist, &s) < 0)
1328         H5_LIBRARY_ERROR(ENVONLY);
1329 
1330 done:
1331     return (jint)s;
1332 } /* end Java_hdf_hdf5lib_H5_H5Pget_1elink_1file_1cache_1size */
1333 
1334 /*
1335  * Class:     hdf_hdf5lib_H5
1336  * Method:    H5Pset_evict_on_close
1337  * Signature: (JZ)V
1338  */
1339 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1evict_1on_1close(JNIEnv * env,jclass clss,jlong fapl_id,jboolean evict_on_close)1340 Java_hdf_hdf5lib_H5_H5Pset_1evict_1on_1close
1341     (JNIEnv *env, jclass clss, jlong fapl_id, jboolean evict_on_close)
1342 {
1343     hbool_t evict_on_close_val = FALSE;
1344     herr_t  retVal = FAIL;
1345 
1346     UNUSED(clss);
1347 
1348     evict_on_close_val = (evict_on_close == JNI_TRUE) ? TRUE : FALSE;
1349 
1350     if ((retVal = H5Pset_evict_on_close((hid_t)fapl_id, (hbool_t)evict_on_close_val)) < 0)
1351         H5_LIBRARY_ERROR(ENVONLY);
1352 
1353 done:
1354     return;
1355 } /* end Java_hdf_hdf5lib_H5_H5Pset_1evict_1on_1close */
1356 
1357 /*
1358  * Class:     hdf_hdf5lib_H5
1359  * Method:    H5Pget_evict_on_close
1360  * Signature: (J)Z
1361  */
1362 JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1evict_1on_1close(JNIEnv * env,jclass clss,jlong fapl_id)1363 Java_hdf_hdf5lib_H5_H5Pget_1evict_1on_1close
1364     (JNIEnv *env, jclass clss, jlong fapl_id)
1365 {
1366     hbool_t  evict_on_close_val = FALSE;
1367     jboolean bval = JNI_FALSE;
1368 
1369     UNUSED(clss);
1370 
1371     if (H5Pget_evict_on_close((hid_t)fapl_id, (hbool_t *)&evict_on_close_val) < 0)
1372         H5_LIBRARY_ERROR(ENVONLY);
1373 
1374     bval = (evict_on_close_val == TRUE) ? JNI_TRUE : JNI_FALSE;
1375 
1376 done:
1377     return bval;
1378 } /* end Java_hdf_hdf5lib_H5_H5Pget_1evict_1on_1close */
1379 
1380 /*
1381  * Class:     hdf_hdf5lib_H5
1382  * Method:    H5Pset_metadata_read_attempts
1383  * Signature: (JJ)V
1384  */
1385 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1metadata_1read_1attempts(JNIEnv * env,jclass clss,jlong plist_id,jlong attempts)1386 Java_hdf_hdf5lib_H5_H5Pset_1metadata_1read_1attempts
1387     (JNIEnv *env, jclass clss, jlong plist_id, jlong attempts)
1388 {
1389     UNUSED(clss);
1390 
1391     if (attempts <= 0)
1392         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pset_metadata_read_attempts: attempts <= 0");
1393 
1394     if (H5Pset_metadata_read_attempts((hid_t)plist_id, (unsigned)attempts) < 0)
1395         H5_LIBRARY_ERROR(ENVONLY);
1396 
1397 done:
1398     return;
1399 } /* end Java_hdf_hdf5lib_H5_H5Pset_1metadata_1read_1attempts */
1400 
1401 /*
1402  * Class:     hdf_hdf5lib_H5
1403  * Method:    H5Pget_metadata_read_attempts
1404  * Signature: (J)J
1405  */
1406 JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1metadata_1read_1attempts(JNIEnv * env,jclass clss,jlong plist_id)1407 Java_hdf_hdf5lib_H5_H5Pget_1metadata_1read_1attempts
1408     (JNIEnv *env, jclass clss, jlong plist_id)
1409 {
1410     unsigned attempts = 0;
1411 
1412     UNUSED(clss);
1413 
1414     if (H5Pget_metadata_read_attempts((hid_t)plist_id, &attempts) < 0)
1415         H5_LIBRARY_ERROR(ENVONLY);
1416 
1417 done:
1418     return (jlong) attempts;
1419 } /* end Java_hdf_hdf5lib_H5_H5Pget_1metadata_1read_1attempts */
1420 
1421 /*
1422  * Class:     hdf_hdf5lib_H5
1423  * Method:    H5Pset_mdc_config
1424  * Signature: (JLhdf/hdf5lib/structs/H5AC_cache_config_t;)V
1425  */
1426 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1mdc_1config(JNIEnv * env,jclass clss,jlong plist,jobject cache_config)1427 Java_hdf_hdf5lib_H5_H5Pset_1mdc_1config
1428     (JNIEnv *env, jclass clss, jlong plist, jobject cache_config)
1429 {
1430     H5AC_cache_config_t  cacheinfo;
1431     const char          *str = NULL;
1432     jfieldID             fid;
1433     jstring              j_str;
1434     jclass               cls;
1435     jint                 flash_incr_mode;
1436     jint                 incr_mode;
1437     jint                 decr_mode;
1438     herr_t               status = FAIL;
1439 
1440     UNUSED(clss);
1441 
1442     HDmemset(&cacheinfo, 0, sizeof(H5AC_cache_config_t));
1443 
1444     if (NULL == (cls = ENVPTR->GetObjectClass(ENVONLY, cache_config)))
1445         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1446 
1447     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "version", "I")))
1448         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1449 
1450     cacheinfo.version = ENVPTR->GetIntField(ENVONLY, cache_config, fid);
1451     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1452 
1453     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "rpt_fcn_enabled", "Z")))
1454         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1455 
1456     cacheinfo.rpt_fcn_enabled = ENVPTR->GetBooleanField(ENVONLY, cache_config, fid);
1457     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1458 
1459     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "open_trace_file", "Z")))
1460         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1461 
1462     cacheinfo.open_trace_file = ENVPTR->GetBooleanField(ENVONLY, cache_config, fid);
1463     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1464 
1465     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "close_trace_file", "Z")))
1466         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1467 
1468     cacheinfo.close_trace_file = ENVPTR->GetBooleanField(ENVONLY, cache_config, fid);
1469     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1470 
1471     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "trace_file_name", "Ljava/lang/String;")))
1472         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1473 
1474     if (NULL == (j_str = (jstring)ENVPTR->GetObjectField(ENVONLY, cache_config, fid)))
1475         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1476 
1477     if (j_str) {
1478         PIN_JAVA_STRING(ENVONLY, j_str, str, NULL, "H5Pset_mdc_config: cache_config not pinned");
1479 
1480         HDstrncpy(cacheinfo.trace_file_name, str, H5AC__MAX_TRACE_FILE_NAME_LEN + 1);
1481         cacheinfo.trace_file_name[H5AC__MAX_TRACE_FILE_NAME_LEN] = '\0';
1482 
1483         UNPIN_JAVA_STRING(ENVONLY, j_str, str);
1484         str = NULL;
1485     }
1486     else
1487         HDmemset(cacheinfo.trace_file_name, 0, H5AC__MAX_TRACE_FILE_NAME_LEN + 1);
1488 
1489     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "evictions_enabled", "Z")))
1490         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1491 
1492     cacheinfo.evictions_enabled = ENVPTR->GetBooleanField(ENVONLY, cache_config, fid);
1493     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1494 
1495     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "set_initial_size", "Z")))
1496         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1497 
1498     cacheinfo.set_initial_size = ENVPTR->GetBooleanField(ENVONLY, cache_config, fid);
1499     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1500 
1501     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "initial_size", "J")))
1502         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1503 
1504     cacheinfo.initial_size = (size_t)ENVPTR->GetLongField(ENVONLY, cache_config, fid);
1505     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1506 
1507     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "min_clean_fraction", "D")))
1508         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1509 
1510     cacheinfo.min_clean_fraction = ENVPTR->GetDoubleField(ENVONLY, cache_config, fid);
1511     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1512 
1513     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "max_size", "J")))
1514         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1515 
1516     cacheinfo.max_size = (size_t)ENVPTR->GetLongField(ENVONLY, cache_config, fid);
1517     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1518 
1519     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "min_size", "J")))
1520         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1521 
1522     cacheinfo.min_size = (size_t)ENVPTR->GetLongField(ENVONLY, cache_config, fid);
1523     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1524 
1525     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "epoch_length", "J")))
1526         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1527 
1528     cacheinfo.epoch_length = (long int)ENVPTR->GetLongField(ENVONLY, cache_config, fid);
1529     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1530 
1531     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "incr_mode", "I")))
1532         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1533 
1534     incr_mode = ENVPTR->GetIntField(ENVONLY, cache_config, fid); /*(enum H5C_cache_incr_mode) */
1535     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1536     cacheinfo.incr_mode = (enum H5C_cache_incr_mode) incr_mode;
1537 
1538     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "lower_hr_threshold", "D")))
1539         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1540 
1541     cacheinfo.lower_hr_threshold = ENVPTR->GetDoubleField(ENVONLY, cache_config, fid);
1542     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1543 
1544     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "increment", "D")))
1545         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1546 
1547     cacheinfo.increment = ENVPTR->GetDoubleField(ENVONLY, cache_config, fid);
1548     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1549 
1550     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "apply_max_increment", "Z")))
1551         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1552 
1553     cacheinfo.apply_max_increment = ENVPTR->GetBooleanField(ENVONLY, cache_config, fid);
1554     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1555 
1556     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "max_increment", "J")))
1557         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1558 
1559     cacheinfo.max_increment = (size_t)ENVPTR->GetLongField(ENVONLY, cache_config, fid);
1560     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1561 
1562     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "flash_incr_mode", "I")))
1563         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1564 
1565     flash_incr_mode = ENVPTR->GetIntField(ENVONLY, cache_config, fid); /*(enum H5C_cache_flash_incr_mode) */
1566     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1567     cacheinfo.flash_incr_mode = (enum H5C_cache_flash_incr_mode) flash_incr_mode;
1568 
1569     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "flash_multiple", "D")))
1570         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1571 
1572     cacheinfo.flash_multiple = ENVPTR->GetDoubleField(ENVONLY, cache_config, fid);
1573     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1574 
1575     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "flash_threshold", "D")))
1576         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1577 
1578     cacheinfo.flash_threshold = ENVPTR->GetDoubleField(ENVONLY, cache_config, fid);
1579     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1580 
1581     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "decr_mode", "I")))
1582         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1583 
1584     decr_mode = ENVPTR->GetIntField(ENVONLY, cache_config, fid); /*(enum H5C_cache_decr_mode) */
1585     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1586     cacheinfo.decr_mode = (enum H5C_cache_decr_mode) decr_mode;
1587 
1588     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "upper_hr_threshold", "D")))
1589         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1590 
1591     cacheinfo.upper_hr_threshold = ENVPTR->GetDoubleField(ENVONLY, cache_config, fid);
1592     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1593 
1594     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "decrement", "D")))
1595         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1596 
1597     cacheinfo.decrement = ENVPTR->GetDoubleField(ENVONLY, cache_config, fid);
1598     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1599 
1600     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "apply_max_decrement", "Z")))
1601         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1602 
1603     cacheinfo.apply_max_decrement = ENVPTR->GetBooleanField(ENVONLY, cache_config, fid);
1604     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1605 
1606     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "max_decrement", "J")))
1607         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1608 
1609     cacheinfo.max_decrement = (size_t)ENVPTR->GetLongField(ENVONLY, cache_config, fid);
1610     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1611 
1612     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "epochs_before_eviction", "I")))
1613         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1614 
1615     cacheinfo.epochs_before_eviction = ENVPTR->GetIntField(ENVONLY, cache_config, fid);
1616     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1617 
1618     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "apply_empty_reserve", "Z")))
1619         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1620 
1621     cacheinfo.apply_empty_reserve = ENVPTR->GetBooleanField(ENVONLY, cache_config, fid);
1622     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1623 
1624     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "empty_reserve", "D")))
1625         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1626 
1627     cacheinfo.empty_reserve = ENVPTR->GetDoubleField(ENVONLY, cache_config, fid);
1628     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1629 
1630     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "dirty_bytes_threshold", "J")))
1631         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1632 
1633     cacheinfo.dirty_bytes_threshold = (size_t)ENVPTR->GetLongField(ENVONLY, cache_config, fid);
1634     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1635 
1636     if (NULL == (fid = ENVPTR->GetFieldID(ENVONLY, cls, "metadata_write_strategy", "I")))
1637         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1638 
1639     cacheinfo.metadata_write_strategy = ENVPTR->GetIntField(ENVONLY, cache_config, fid);
1640     CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
1641 
1642     if ((status = H5Pset_mdc_config((hid_t)plist, &cacheinfo)) < 0)
1643         H5_LIBRARY_ERROR(ENVONLY);
1644 
1645 done:
1646     if (str)
1647         UNPIN_JAVA_STRING(ENVONLY, j_str, str);
1648 } /* end Java_hdf_hdf5lib_H5_H5Pset_1mdc_1config */
1649 
1650 /*
1651  * Class:     hdf_hdf5lib_H5
1652  * Method:    H5Pget_mdc_config
1653  * Signature: (J)Lhdf/hdf5lib/structs/H5AC_cache_config_t;
1654  */
1655 JNIEXPORT jobject JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1mdc_1config(JNIEnv * env,jclass clss,jlong plist)1656 Java_hdf_hdf5lib_H5_H5Pget_1mdc_1config
1657     (JNIEnv *env, jclass clss, jlong plist)
1658 {
1659     H5AC_cache_config_t cacheinfo;
1660     jstring             j_str = NULL;
1661     jvalue              args[30];
1662     herr_t              status = FAIL;
1663     jobject             ret_obj = NULL;
1664 
1665     UNUSED(clss);
1666 
1667     HDmemset(&cacheinfo, 0, sizeof(H5AC_cache_config_t));
1668     cacheinfo.version = H5AC__CURR_CACHE_CONFIG_VERSION;
1669 
1670     if ((status = H5Pget_mdc_config((hid_t)plist, &cacheinfo)) < 0)
1671         H5_LIBRARY_ERROR(ENVONLY);
1672 
1673     args[0].i = cacheinfo.version;
1674     args[1].z = cacheinfo.rpt_fcn_enabled;
1675     args[2].z = cacheinfo.open_trace_file;
1676     args[3].z = cacheinfo.close_trace_file;
1677 
1678     if (NULL != cacheinfo.trace_file_name) {
1679         if (NULL == (j_str = ENVPTR->NewStringUTF(ENVONLY, cacheinfo.trace_file_name))) {
1680             CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
1681             H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_mdc_config: out of memory - unable to construct string from UTF characters");
1682         }
1683     }
1684 
1685     args[4].l = j_str;
1686     args[5].z = cacheinfo.evictions_enabled;
1687     args[6].z = cacheinfo.set_initial_size;
1688     args[7].j = (jlong)cacheinfo.initial_size;
1689     args[8].d = cacheinfo.min_clean_fraction;
1690     args[9].j = (jlong)cacheinfo.max_size;
1691     args[10].j = (jlong)cacheinfo.min_size;
1692     args[11].j = cacheinfo.epoch_length;
1693     args[12].i = cacheinfo.incr_mode;
1694     args[13].d = cacheinfo.lower_hr_threshold;
1695     args[14].d = cacheinfo.increment;
1696     args[15].z = cacheinfo.apply_max_increment;
1697     args[16].j = (jlong)cacheinfo.max_increment;
1698     args[17].i = cacheinfo.flash_incr_mode;
1699     args[18].d = cacheinfo.flash_multiple;
1700     args[19].d = cacheinfo.flash_threshold;
1701     args[20].i = cacheinfo.decr_mode;
1702     args[21].d = cacheinfo.upper_hr_threshold;
1703     args[22].d = cacheinfo.decrement;
1704     args[23].z = cacheinfo.apply_max_decrement;
1705     args[24].j = (jlong)cacheinfo.max_decrement;
1706     args[25].i = cacheinfo.epochs_before_eviction;
1707     args[26].z = cacheinfo.apply_empty_reserve;
1708     args[27].d = cacheinfo.empty_reserve;
1709     args[28].j = (jlong)cacheinfo.dirty_bytes_threshold;
1710     args[29].i = cacheinfo.metadata_write_strategy;
1711 
1712     CALL_CONSTRUCTOR(ENVONLY, "hdf/hdf5lib/structs/H5AC_cache_config_t", "(IZZZLjava/lang/String;ZZJDJJJIDDZJIDDIDDZJIZDJI)V", args, ret_obj);
1713 
1714 done:
1715     return ret_obj;
1716 } /* end Java_hdf_hdf5lib_H5_H5Pget_1mdc_1config */
1717 
1718 /*
1719  * TODO: H5Pset_mdc_image_config
1720  */
1721 
1722 /*
1723  * TODO: H5Pget_mdc_image_config
1724  */
1725 
1726 /*
1727  * Class:     hdf_hdf5lib_H5
1728  * Method:    H5Pset_mdc_log_options
1729  * Signature: (JZLjava/lang/String;Z)V
1730  */
1731 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1mdc_1log_1options(JNIEnv * env,jclass clss,jlong fapl_id,jboolean is_enabled,jstring location,jboolean start_on_access)1732 Java_hdf_hdf5lib_H5_H5Pset_1mdc_1log_1options
1733     (JNIEnv *env, jclass clss, jlong fapl_id, jboolean is_enabled, jstring location, jboolean start_on_access)
1734 {
1735     const char *locStr = NULL;
1736     herr_t      retVal = FAIL;
1737 
1738     UNUSED(clss);
1739 
1740     if (NULL == location)
1741         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pset_mdc_log_options: location string is NULL");
1742 
1743     PIN_JAVA_STRING(ENVONLY, location, locStr, NULL, "H5Pset_mdc_log_options: location string not pinned");
1744 
1745     if ((retVal = H5Pset_mdc_log_options((hid_t)fapl_id, (hbool_t)is_enabled, locStr, (hbool_t)start_on_access)) < 0)
1746         H5_LIBRARY_ERROR(ENVONLY);
1747 
1748 done:
1749     if (locStr)
1750         UNPIN_JAVA_STRING(ENVONLY, location, locStr);
1751 } /* end Java_hdf_hdf5lib_H5_H5Pset_1mdc_1log_1options */
1752 
1753 /*
1754  * Class:     hdf_hdf5lib_H5
1755  * Method:    H5Pget_mdc_log_options
1756  * Signature: (J[Z)Ljava/lang/String;
1757  */
1758 JNIEXPORT jstring JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1mdc_1log_1options(JNIEnv * env,jclass clss,jlong fapl_id,jbooleanArray mdc_log_options)1759 Java_hdf_hdf5lib_H5_H5Pget_1mdc_1log_1options
1760     (JNIEnv *env, jclass clss, jlong fapl_id, jbooleanArray mdc_log_options)
1761 {
1762     jboolean   isCopy;
1763     jboolean  *mdc_log_options_ptr = NULL;
1764     hbool_t    is_enabled;
1765     hbool_t    start_on_access;
1766     ssize_t    status = -1;
1767     size_t     location_size;
1768     jsize      arrLen;
1769     char      *lname = NULL;
1770     jstring    str = NULL;
1771 
1772     UNUSED(clss);
1773 
1774     if (NULL == mdc_log_options)
1775         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_mdc_log_options: mdc_log_options is NULL");
1776 
1777     if ((arrLen = ENVPTR->GetArrayLength(ENVONLY, mdc_log_options)) < 0) {
1778         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
1779         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_mdc_log_options: mdc_log_options array length < 0");
1780     }
1781     if (arrLen < 2)
1782         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_mdc_log_options: length of mdc_log_options < 2");
1783 
1784     PIN_BOOL_ARRAY(ENVONLY, mdc_log_options, mdc_log_options_ptr, &isCopy, "H5Pget_mdc_log_options: mdc_log_options array not pinned");
1785 
1786     /* get the length of the filename */
1787     if (H5Pget_mdc_log_options((hid_t)fapl_id, &is_enabled, NULL, &location_size, &start_on_access) < 0)
1788         H5_LIBRARY_ERROR(ENVONLY);
1789 
1790     if (!location_size)
1791         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5Pget_mdc_log_options: location_size is 0");
1792 
1793     location_size++; /* add extra space for the null terminator */
1794     if (NULL == (lname = (char *) HDmalloc(sizeof(char) * location_size)))
1795         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_mdc_log_options: memory allocation failed");
1796 
1797     if ((status = H5Pget_mdc_log_options((hid_t)fapl_id, &is_enabled, lname, &location_size, &start_on_access)) < 0)
1798         H5_LIBRARY_ERROR(ENVONLY);
1799     lname[location_size - 1] = '\0';
1800 
1801     if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, lname))) {
1802         CHECK_JNI_EXCEPTION(ENVONLY, JNI_TRUE);
1803         H5_JNI_FATAL_ERROR(ENVONLY, "H5Pget_mdc_log_options: out of memory - unable to construct string from UTF characters");
1804     }
1805 
1806     mdc_log_options_ptr[0] = (jboolean)is_enabled;
1807     mdc_log_options_ptr[1] = (jboolean)start_on_access;
1808 
1809 done:
1810     if (lname)
1811         HDfree(lname);
1812     if (mdc_log_options_ptr)
1813         UNPIN_BOOL_ARRAY(ENVONLY, mdc_log_options, mdc_log_options_ptr, (status < 0) ? JNI_ABORT : 0);
1814 
1815     return (jstring)str;
1816 } /* end Java_hdf_hdf5lib_H5_H5Pget_1mdc_1log_1options */
1817 
1818 /*
1819  * TODO: H5Pset_all_coll_metadata_ops
1820  */
1821 
1822 /*
1823  * TODO: H5Pget_all_coll_metadata_ops
1824  */
1825 
1826 /*
1827  * TODO: H5Pset_coll_metadata_write
1828  */
1829 
1830 /*
1831  * TODO: H5Pget_coll_metadata_write
1832  */
1833 
1834 /*
1835  * Class:     hdf_hdf5lib_H5
1836  * Method:    H5Pset_gc_references
1837  * Signature: (JZ)I
1838  */
1839 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1gc_1references(JNIEnv * env,jclass clss,jlong fapl_id,jboolean gc_ref)1840 Java_hdf_hdf5lib_H5_H5Pset_1gc_1references
1841     (JNIEnv *env, jclass clss, jlong fapl_id, jboolean gc_ref)
1842 {
1843     unsigned gc_ref_val = 0;
1844     herr_t   retVal = FAIL;
1845 
1846     UNUSED(clss);
1847 
1848     gc_ref_val = (gc_ref == JNI_TRUE) ? 1 : 0;
1849 
1850     if ((retVal = H5Pset_gc_references((hid_t)fapl_id, gc_ref_val)) < 0)
1851         H5_LIBRARY_ERROR(ENVONLY);
1852 
1853 done:
1854     return (jint)retVal;
1855 } /* end Java_hdf_hdf5lib_H5_H5Pset_1gc_1references */
1856 
1857 /*
1858  * Class:     hdf_hdf5lib_H5
1859  * Method:    H5Pget_gc_references
1860  * Signature: (J)Z
1861  */
1862 JNIEXPORT jboolean JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1gc_1references(JNIEnv * env,jclass clss,jlong fapl_id)1863 Java_hdf_hdf5lib_H5_H5Pget_1gc_1references
1864     (JNIEnv *env, jclass clss, jlong fapl_id)
1865 {
1866     unsigned gc_ref_val = 0;
1867     jboolean bval = JNI_FALSE;
1868 
1869     UNUSED(clss);
1870 
1871     if (H5Pget_gc_references((hid_t)fapl_id, (unsigned *)&gc_ref_val) < 0)
1872         H5_LIBRARY_ERROR(ENVONLY);
1873 
1874     bval = (gc_ref_val == 1) ? JNI_TRUE : JNI_FALSE;
1875 
1876 done:
1877     return bval;
1878 } /* end Java_hdf_hdf5lib_H5_H5Pget_1gc_1references */
1879 
1880 /*
1881  * Class:     hdf_hdf5lib_H5
1882  * Method:    H5Pset_small_data_block_size
1883  * Signature: (JJ)I
1884  */
1885 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1small_1data_1block_1size(JNIEnv * env,jclass clss,jlong plist,jlong size)1886 Java_hdf_hdf5lib_H5_H5Pset_1small_1data_1block_1size
1887     (JNIEnv *env, jclass clss, jlong plist, jlong size)
1888 {
1889     long   sz = (long)size;
1890     herr_t retVal = FAIL;
1891 
1892     UNUSED(clss);
1893 
1894     if ((retVal = H5Pset_small_data_block_size((hid_t)plist, (hsize_t)sz)) < 0)
1895         H5_LIBRARY_ERROR(ENVONLY);
1896 
1897 done:
1898     return (jint)retVal;
1899 } /* end Java_hdf_hdf5lib_H5_H5Pset_1small_1data_1block_1size */
1900 
1901 /*
1902  * Class:     hdf_hdf5lib_H5
1903  * Method:    H5Pget_small_data_block_size
1904  * Signature: (J)J
1905  */
1906 JNIEXPORT jlong JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1small_1data_1block_1size(JNIEnv * env,jclass clss,jlong plist)1907 Java_hdf_hdf5lib_H5_H5Pget_1small_1data_1block_1size
1908     (JNIEnv *env, jclass clss, jlong plist)
1909 {
1910     hsize_t s = 0;
1911 
1912     UNUSED(clss);
1913 
1914     if (H5Pget_small_data_block_size((hid_t)plist, &s) < 0)
1915         H5_LIBRARY_ERROR(ENVONLY);
1916 
1917 done:
1918     return (jlong)s;
1919 } /* end Java_hdf_hdf5lib_H5_H5Pget_1small_1data_1block_1size */
1920 
1921 /*
1922  * Class:     hdf_hdf5lib_H5
1923  * Method:    H5Pset_libver_bounds
1924  * Signature: (JII)I
1925  */
1926 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pset_1libver_1bounds(JNIEnv * env,jclass clss,jlong fapl_id,jint low,jint high)1927 Java_hdf_hdf5lib_H5_H5Pset_1libver_1bounds
1928     (JNIEnv *env, jclass clss, jlong fapl_id, jint low, jint high)
1929 {
1930     herr_t retVal = FAIL;
1931 
1932     UNUSED(clss);
1933 
1934     if ((retVal = H5Pset_libver_bounds((hid_t)fapl_id, (H5F_libver_t)low, (H5F_libver_t)high)) < 0)
1935         H5_LIBRARY_ERROR(ENVONLY);
1936 
1937 done:
1938     return (jint)retVal;
1939 } /* end Java_hdf_hdf5lib_H5_H5Pset_1libver_1bounds */
1940 
1941 /*
1942  * Class:     hdf_hdf5lib_H5
1943  * Method:    H5Pget_libver_bounds
1944  * Signature: (J[I)I
1945  */
1946 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5Pget_1libver_1bounds(JNIEnv * env,jclass clss,jlong fapl_id,jintArray libver)1947 Java_hdf_hdf5lib_H5_H5Pget_1libver_1bounds
1948     (JNIEnv *env, jclass clss, jlong fapl_id, jintArray libver)
1949 {
1950     jboolean  isCopy;
1951     jint     *theArray = NULL;
1952     herr_t    retVal = FAIL;
1953 
1954     UNUSED(clss);
1955 
1956     if (NULL == libver)
1957         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5Pget_libver_bounds: libversion bounds is NULL");
1958 
1959     PIN_INT_ARRAY(ENVONLY, libver, theArray, &isCopy, "H5Pget_libver_bounds: input not pinned");
1960 
1961     if ((retVal = H5Pget_libver_bounds((hid_t)fapl_id, (H5F_libver_t *)&(theArray[0]), (H5F_libver_t *)&(theArray[1]))) < 0)
1962         H5_LIBRARY_ERROR(ENVONLY);
1963 
1964 done:
1965     if (theArray)
1966         UNPIN_INT_ARRAY(ENVONLY, libver, theArray, (retVal < 0) ? JNI_ABORT : 0);
1967 
1968     return (jint)retVal;
1969 } /* end Java_hdf_hdf5lib_H5_H5Pget_1libver_1bounds */
1970 
1971 /*
1972  * TODO: H5Pset_object_flush_cb
1973  */
1974 
1975 /*
1976  * TODO: H5Pget_object_flush_cb
1977  */
1978 
1979 #ifdef __cplusplus
1980 } /* end extern "C" */
1981 #endif /* __cplusplus */
1982