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