1fa9e4066Sahrens /*
2fa9e4066Sahrens  * CDDL HEADER START
3fa9e4066Sahrens  *
4fa9e4066Sahrens  * The contents of this file are subject to the terms of the
5bfe5f5a4Stalley  * Common Development and Distribution License (the "License").
6bfe5f5a4Stalley  * You may not use this file except in compliance with the License.
7fa9e4066Sahrens  *
8fa9e4066Sahrens  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9fa9e4066Sahrens  * or http://www.opensolaris.org/os/licensing.
10fa9e4066Sahrens  * See the License for the specific language governing permissions
11fa9e4066Sahrens  * and limitations under the License.
12fa9e4066Sahrens  *
13fa9e4066Sahrens  * When distributing Covered Code, include this CDDL HEADER in each
14fa9e4066Sahrens  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15fa9e4066Sahrens  * If applicable, add the following below this CDDL HEADER, with the
16fa9e4066Sahrens  * fields enclosed by brackets "[]" replaced with your own identifying
17fa9e4066Sahrens  * information: Portions Copyright [yyyy] [name of copyright owner]
18fa9e4066Sahrens  *
19fa9e4066Sahrens  * CDDL HEADER END
20fa9e4066Sahrens  */
21bfe5f5a4Stalley 
22fa9e4066Sahrens /*
23fbfd10ffStalley  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
24fa9e4066Sahrens  * Use is subject to license terms.
25fa9e4066Sahrens  */
26fa9e4066Sahrens 
27fa9e4066Sahrens #ifndef _LIBZFS_JNI_UTIL_H
28fa9e4066Sahrens #define	_LIBZFS_JNI_UTIL_H
29fa9e4066Sahrens 
30fa9e4066Sahrens #include <jni.h>
31fa9e4066Sahrens #include <regex.h>
32fa9e4066Sahrens #include <libnvpair.h>
33*99653d4eSeschrock #include <libzfs.h>
34fa9e4066Sahrens 
35bfe5f5a4Stalley #ifdef __cplusplus
36bfe5f5a4Stalley extern "C" {
37bfe5f5a4Stalley #endif
38bfe5f5a4Stalley 
39fa9e4066Sahrens /*
40fa9e4066Sahrens  * Constants
41fa9e4066Sahrens  */
42fa9e4066Sahrens 
43fa9e4066Sahrens #define	ZFSJNI_PACKAGE_DATA	"com/sun/zfs/common/model/"
44fa9e4066Sahrens 
45fa9e4066Sahrens /*
46fa9e4066Sahrens  * Types
47fa9e4066Sahrens  */
48fa9e4066Sahrens 
49fa9e4066Sahrens typedef struct zjni_Object {
50fa9e4066Sahrens 	jclass class;
51fa9e4066Sahrens 	jobject object;
52fa9e4066Sahrens 	jmethodID constructor;
53fa9e4066Sahrens } zjni_Object_t;
54fa9e4066Sahrens 
55fa9e4066Sahrens typedef struct zjni_Collection {
56fa9e4066Sahrens 	zjni_Object_t super;
57fa9e4066Sahrens 
58fa9e4066Sahrens 	jmethodID method_add;
59fa9e4066Sahrens 	jmethodID method_size;
60fa9e4066Sahrens 	jmethodID method_toArray;
61fa9e4066Sahrens } zjni_Collection_t;
62fa9e4066Sahrens 
63fa9e4066Sahrens typedef struct zjni_ArrayList {
64fa9e4066Sahrens 	zjni_Collection_t super;
65fa9e4066Sahrens } zjni_ArrayList_t;
66fa9e4066Sahrens 
67fa9e4066Sahrens typedef struct zjni_DatasetSet {
68fa9e4066Sahrens 	zjni_Collection_t super;
69fa9e4066Sahrens } zjni_DatasetSet_t;
70fa9e4066Sahrens 
71fa9e4066Sahrens typedef struct zjni_ArrayCallbackData {
72fa9e4066Sahrens 	JNIEnv *env;
73fa9e4066Sahrens 	zjni_Collection_t *list;
74fa9e4066Sahrens } zjni_ArrayCallbackData_t;
75fa9e4066Sahrens 
76fbfd10ffStalley typedef struct zjni_field_mapping {
77fbfd10ffStalley 	int value;
78fbfd10ffStalley 	char *name;
79fbfd10ffStalley } zjni_field_mapping_t;
80fbfd10ffStalley 
81c8e9ed14Stalley /* Signature for function to free data */
82c8e9ed14Stalley typedef void (*zjni_free_f)(void *);
83c8e9ed14Stalley 
84fa9e4066Sahrens /*
85fa9e4066Sahrens  * Function prototypes
86fa9e4066Sahrens  */
87fa9e4066Sahrens 
88c8e9ed14Stalley void zjni_free_array(void **array, zjni_free_f);
89fa9e4066Sahrens void zjni_throw_exception(JNIEnv *, const char *, ...);
90fa9e4066Sahrens jstring zjni_get_matched_string(JNIEnv *, char *, regmatch_t *);
91fa9e4066Sahrens void zjni_get_dataset_from_snapshot(const char *, char *, size_t);
92fa9e4066Sahrens jobjectArray zjni_Collection_to_array(JNIEnv *, zjni_Collection_t *, char *);
93fa9e4066Sahrens void zjni_new_ArrayList(JNIEnv *, zjni_ArrayList_t *);
94fa9e4066Sahrens void zjni_new_DatasetSet(JNIEnv *, zjni_DatasetSet_t *);
95fa9e4066Sahrens jobject zjni_int_to_boolean(JNIEnv *, uint64_t);
96fbfd10ffStalley jobject zjni_int_to_enum(
97fbfd10ffStalley     JNIEnv *, int, char *, char *, zjni_field_mapping_t *);
98fa9e4066Sahrens jobject zjni_str_to_long(JNIEnv *, char *);
99fa9e4066Sahrens jobject zjni_long_to_Long(JNIEnv *, uint64_t);
100fa9e4066Sahrens jobject zjni_str_to_date(JNIEnv *, char *);
101c8e9ed14Stalley jobjectArray zjni_c_string_array_to_java(JNIEnv *, char **, int);
102c8e9ed14Stalley char **zjni_java_string_array_to_c(JNIEnv *, jobjectArray);
103fa9e4066Sahrens int zjni_count_elements(void **);
104fa9e4066Sahrens nvpair_t *zjni_nvlist_walk_nvpair(
105fa9e4066Sahrens 	nvlist_t *, const char *, data_type_t, nvpair_t *);
106fa9e4066Sahrens 
107*99653d4eSeschrock extern libzfs_handle_t *g_zfs;
108*99653d4eSeschrock 
109fa9e4066Sahrens #ifdef __cplusplus
110fa9e4066Sahrens }
111fa9e4066Sahrens #endif
112fa9e4066Sahrens 
113fa9e4066Sahrens #endif /* _LIBZFS_JNI_UTIL_H */
114