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 "hdf5.h"
25 #include <stdlib.h>
26 #include "h5jni.h"
27 #include "h5plImp.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:    H5PLset_loading_state
37  * Signature: (I)V
38  */
39 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLset_1loading_1state(JNIEnv * env,jclass clss,jint plugin_flags)40 Java_hdf_hdf5lib_H5_H5PLset_1loading_1state
41     (JNIEnv *env, jclass clss, jint plugin_flags)
42 {
43     UNUSED(clss);
44 
45     if (H5PLset_loading_state((unsigned int)plugin_flags) < 0)
46         H5_LIBRARY_ERROR(ENVONLY);
47 
48 done:
49     return;
50 } /* end Java_hdf_hdf5lib_H5_H5PLset_1loading_1state */
51 
52 /*
53  * Class:     hdf_hdf5lib_H5
54  * Method:    H5PLget_loading_state
55  * Signature: (V)I
56  */
57 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5PLget_1loading_1state(JNIEnv * env,jclass clss)58 Java_hdf_hdf5lib_H5_H5PLget_1loading_1state
59     (JNIEnv *env, jclass clss)
60 {
61     unsigned int plugin_type = 0;
62 
63     UNUSED(clss);
64 
65     if (H5PLget_loading_state(&plugin_type) < 0)
66         H5_LIBRARY_ERROR(ENVONLY);
67 
68 done:
69     return (jint)plugin_type;
70 } /* end Java_hdf_hdf5lib_H5_H5PLget_1loading_1state */
71 
72 /*
73  * Class:     hdf_hdf5lib_H5
74  * Method:    H5PLappend
75  * Signature: (Ljava/lang/String;)V
76  */
77 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLappend(JNIEnv * env,jclass clss,jobjectArray plugin_path)78 Java_hdf_hdf5lib_H5_H5PLappend
79   (JNIEnv *env, jclass clss, jobjectArray plugin_path)
80 {
81     const char *newPath = NULL;
82     herr_t      retVal = FAIL;
83 
84     UNUSED(clss);
85 
86     if (NULL == plugin_path)
87         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5PLappend: new path is NULL");
88 
89     PIN_JAVA_STRING(ENVONLY, plugin_path, newPath, NULL, "H5PLappend: new path not pinned");
90 
91     if ((retVal = H5PLappend(newPath)) < 0)
92         H5_LIBRARY_ERROR(ENVONLY);
93 
94 done:
95     if (newPath)
96         UNPIN_JAVA_STRING(ENVONLY, plugin_path, newPath);
97 } /* end Java_hdf_hdf5lib_H5_H5PLappend */
98 /*
99  * Class:     hdf_hdf5lib_H5
100  * Method:    H5PLprepend
101  * Signature: (Ljava/lang/String;)V
102  */
103 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLprepend(JNIEnv * env,jclass clss,jobjectArray plugin_path)104 Java_hdf_hdf5lib_H5_H5PLprepend
105   (JNIEnv *env, jclass clss, jobjectArray plugin_path)
106 {
107     const char *newPath = NULL;
108     herr_t      retVal = FAIL;
109 
110     UNUSED(clss);
111 
112     if (NULL == plugin_path)
113         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5PLprepend: new path is NULL");
114 
115     PIN_JAVA_STRING(ENVONLY, plugin_path, newPath, NULL, "H5PLprepend: new path not pinned");
116 
117     if ((retVal = H5PLprepend(newPath)) < 0)
118         H5_LIBRARY_ERROR(ENVONLY);
119 
120 done:
121     if (newPath)
122         UNPIN_JAVA_STRING(ENVONLY, plugin_path, newPath);
123 } /* end Java_hdf_hdf5lib_H5_H5PLprepend */
124 
125 /*
126  * Class:     hdf_hdf5lib_H5
127  * Method:    H5PLreplace
128  * Signature: (Ljava/lang/String;I)V
129  */
130 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLreplace(JNIEnv * env,jclass clss,jobjectArray plugin_path,jint index)131 Java_hdf_hdf5lib_H5_H5PLreplace
132   (JNIEnv *env, jclass clss, jobjectArray plugin_path, jint index)
133 {
134     const char *newPath = NULL;
135     herr_t      retVal = FAIL;
136 
137     UNUSED(clss);
138 
139     if (NULL == plugin_path)
140         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5PLreplace: new path is NULL");
141 
142     if (index < 0)
143         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5PLreplace: index < 0");
144 
145     PIN_JAVA_STRING(ENVONLY, plugin_path, newPath, NULL, "H5PLreplace: new path not pinned");
146 
147     if ((retVal = H5PLreplace(newPath, (unsigned) index)) < 0)
148         H5_LIBRARY_ERROR(ENVONLY);
149 
150 done:
151     if (newPath)
152         UNPIN_JAVA_STRING(ENVONLY, plugin_path, newPath);
153 } /* end Java_hdf_hdf5lib_H5_H5PLreplace */
154 
155 /*
156  * Class:     hdf_hdf5lib_H5
157  * Method:    H5PLinsert
158  * Signature: (Ljava/lang/String;I)V
159  */
160 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLinsert(JNIEnv * env,jclass clss,jobjectArray plugin_path,jint index)161 Java_hdf_hdf5lib_H5_H5PLinsert
162   (JNIEnv *env, jclass clss, jobjectArray plugin_path, jint index)
163 {
164     const char *newPath = NULL;
165     herr_t      retVal = FAIL;
166 
167     UNUSED(clss);
168 
169     if (NULL == plugin_path)
170         H5_NULL_ARGUMENT_ERROR(ENVONLY, "H5PLinsert: new path is NULL");
171 
172     if (index < 0)
173         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5PLinsert: index < 0");
174 
175     PIN_JAVA_STRING(ENVONLY, plugin_path, newPath, NULL, "H5PLinsert: new path not pinned");
176 
177     if ((retVal = H5PLinsert(newPath, (unsigned) index)) < 0)
178         H5_LIBRARY_ERROR(ENVONLY);
179 
180 done:
181     if (newPath)
182         UNPIN_JAVA_STRING(ENVONLY, plugin_path, newPath);
183 } /* end Java_hdf_hdf5lib_H5_H5PLinsert */
184 
185 /*
186  * Class:     hdf_hdf5lib_H5
187  * Method:    H5PLremove
188  * Signature: (I)V
189  */
190 JNIEXPORT void JNICALL
Java_hdf_hdf5lib_H5_H5PLremove(JNIEnv * env,jclass clss,jint index)191 Java_hdf_hdf5lib_H5_H5PLremove
192   (JNIEnv *env, jclass clss, jint index)
193 {
194     UNUSED(clss);
195 
196     if (index < 0)
197         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5PLremove: index < 0");
198 
199     if (H5PLremove((unsigned) index) < 0)
200         H5_LIBRARY_ERROR(ENVONLY);
201 
202 done:
203     return;
204 } /* end Java_hdf_hdf5lib_H5_H5PLremove */
205 
206 /*
207  * Class:     hdf_hdf5lib_H5
208  * Method:    H5PLget
209  * Signature: (I)Ljava/lang/String;
210  */
211 JNIEXPORT jstring JNICALL
Java_hdf_hdf5lib_H5_H5PLget(JNIEnv * env,jclass clss,jint index)212 Java_hdf_hdf5lib_H5_H5PLget
213   (JNIEnv *env, jclass clss, jint index)
214 {
215     jstring  str = NULL;
216     ssize_t  buf_size;
217     char    *aName = NULL;
218 
219     UNUSED(clss);
220 
221     if (index < 0)
222         H5_BAD_ARGUMENT_ERROR(ENVONLY, "H5PLget: index < 0");
223 
224     /* Get the length of the name */
225     if ((buf_size = H5PLget((unsigned) index, NULL, 0)) < 0)
226         H5_LIBRARY_ERROR(ENVONLY);
227 
228     if (NULL == (aName = (char *) HDmalloc(sizeof(char) * (size_t)buf_size + 1)))
229         H5_JNI_FATAL_ERROR(ENVONLY, "H5PLget: failed to allocate plugin name buffer");
230 
231     if ((H5PLget((unsigned) index, aName, (size_t)buf_size + 1)) < 0)
232         H5_LIBRARY_ERROR(ENVONLY);
233     aName[buf_size] = '\0';
234 
235     if (NULL == (str = ENVPTR->NewStringUTF(ENVONLY, aName)))
236         CHECK_JNI_EXCEPTION(ENVONLY, JNI_FALSE);
237 
238 done:
239     if (aName)
240         HDfree(aName);
241 
242     return str;
243 } /* end Java_hdf_hdf5lib_H5_H5PLget */
244 
245 /*
246  * Class:     hdf_hdf5lib_H5
247  * Method:    H5PLsize
248  * Signature: (V)I
249  */
250 JNIEXPORT jint JNICALL
Java_hdf_hdf5lib_H5_H5PLsize(JNIEnv * env,jclass clss)251 Java_hdf_hdf5lib_H5_H5PLsize
252   (JNIEnv *env, jclass clss)
253 {
254     unsigned int listsize = 0;
255 
256     UNUSED(clss);
257 
258     if (H5PLsize(&listsize) < 0)
259         H5_LIBRARY_ERROR(ENVONLY);
260 
261 done:
262     return (jint)listsize;
263 } /* end Java_hdf_hdf5lib_H5_H5PLsize */
264 
265 #ifdef __cplusplus
266 } /* end extern "C" */
267 #endif /* __cplusplus */
268