libzfs_jni_property.c revision fbfd10ff571cfd0139aa5127460f1b8a53dac971
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER START
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The contents of this file are subject to the terms of the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Common Development and Distribution License, Version 1.0 only
fa9e4066f08beec538e775443c5be79dd423fcabahrens * (the "License"). You may not use this file except in compliance
fa9e4066f08beec538e775443c5be79dd423fcabahrens * with the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fa9e4066f08beec538e775443c5be79dd423fcabahrens * See the License for the specific language governing permissions
fa9e4066f08beec538e775443c5be79dd423fcabahrens * and limitations under the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * When distributing Covered Code, include this CDDL HEADER in each
fa9e4066f08beec538e775443c5be79dd423fcabahrens * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * If applicable, add the following below this CDDL HEADER, with the
fa9e4066f08beec538e775443c5be79dd423fcabahrens * fields enclosed by brackets "[]" replaced with your own identifying
fa9e4066f08beec538e775443c5be79dd423fcabahrens * information: Portions Copyright [yyyy] [name of copyright owner]
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER END
fbfd10ff571cfd0139aa5127460f1b8a53dac971talley * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Use is subject to license terms.
fa9e4066f08beec538e775443c5be79dd423fcabahrens#pragma ident "%Z%%M% %I% %E% SMI"
dc307942eac821bc70a7a69cbb1ddec4184607c1talley/* Signature for function to convert string to a specific Java object */
dc307942eac821bc70a7a69cbb1ddec4184607c1talley/* Signature for function to convert uint64_t to a specific Java object */
dc307942eac821bc70a7a69cbb1ddec4184607c1talleytypedef jobject (*uint64_to_obj_f)(JNIEnv *, uint64_t);
dc307942eac821bc70a7a69cbb1ddec4184607c1talley * Describes a property and the parameters needed to create a Java
dc307942eac821bc70a7a69cbb1ddec4184607c1talley * Property object for it
dc307942eac821bc70a7a69cbb1ddec4184607c1talleytypedef struct custom_prop_desct {
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Function prototypes
dc307942eac821bc70a7a69cbb1ddec4184607c1talleystatic jobject create_BasicProperty(JNIEnv *, zfs_handle_t *,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley zfs_prop_t, str_to_obj_f, uint64_to_obj_f, char *, char *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_BooleanProperty(JNIEnv *, zfs_handle_t *, zfs_prop_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_LongProperty(JNIEnv *, zfs_handle_t *, zfs_prop_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_StringProperty(JNIEnv *, zfs_handle_t *, zfs_prop_t);
dc307942eac821bc70a7a69cbb1ddec4184607c1talleystatic jobject create_ObjectProperty(JNIEnv *, zfs_handle_t *,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley zfs_prop_t, str_to_obj_f, uint64_to_obj_f, char *, char *);
dc307942eac821bc70a7a69cbb1ddec4184607c1talleystatic jobject create_default_BasicProperty(JNIEnv *, zfs_prop_t,
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_default_BooleanProperty(JNIEnv *, zfs_prop_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_default_LongProperty(JNIEnv *, zfs_prop_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_default_StringProperty(JNIEnv *, zfs_prop_t);
dc307942eac821bc70a7a69cbb1ddec4184607c1talley JNIEnv *, zfs_prop_t, str_to_obj_f, uint64_to_obj_f, char *, char *);
dc307942eac821bc70a7a69cbb1ddec4184607c1talleystatic jobject str_to_enum_element(JNIEnv *, char *, char *);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Static data
dc307942eac821bc70a7a69cbb1ddec4184607c1talley /* ZFS_PROP_TYPE, */
dc307942eac821bc70a7a69cbb1ddec4184607c1talley ZFSJNI_PACKAGE_DATA "AclInheritProperty$AclInherit" },
dc307942eac821bc70a7a69cbb1ddec4184607c1talley ZFSJNI_PACKAGE_DATA "CompressionProperty$Compression" },
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Static functions
dc307942eac821bc70a7a69cbb1ddec4184607c1talleycreate_BasicProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley str_to_obj_f convert_str, uint64_to_obj_f convert_uint64,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley sizeof (propbuf), &srctype, source, sizeof (source), 1);
dc307942eac821bc70a7a69cbb1ddec4184607c1talley if (result == 0) {
dc307942eac821bc70a7a69cbb1ddec4184607c1talley zhp, prop, &value, &srctype, source, sizeof (source));
dc307942eac821bc70a7a69cbb1ddec4184607c1talley if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env, source);
dc307942eac821bc70a7a69cbb1ddec4184607c1talleycreate_BooleanProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
dc307942eac821bc70a7a69cbb1ddec4184607c1talley return (create_BasicProperty(env, zhp, prop, NULL, zjni_int_to_boolean,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley ZFSJNI_PACKAGE_DATA "BooleanProperty", "java/lang/Boolean"));
dc307942eac821bc70a7a69cbb1ddec4184607c1talleycreate_LongProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
dc307942eac821bc70a7a69cbb1ddec4184607c1talley return (create_BasicProperty(env, zhp, prop, NULL, zjni_long_to_Long,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley ZFSJNI_PACKAGE_DATA "LongProperty", "java/lang/Long"));
dc307942eac821bc70a7a69cbb1ddec4184607c1talleycreate_StringProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
dc307942eac821bc70a7a69cbb1ddec4184607c1talley return (create_BasicProperty(env, zhp, prop, str_to_string, NULL,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley ZFSJNI_PACKAGE_DATA "StringProperty", "java/lang/String"));
dc307942eac821bc70a7a69cbb1ddec4184607c1talleycreate_ObjectProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley str_to_obj_f convert_str, uint64_to_obj_f convert_uint64,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley sizeof (propbuf), &srctype, source, sizeof (source), 1);
dc307942eac821bc70a7a69cbb1ddec4184607c1talley if (result == 0) {
dc307942eac821bc70a7a69cbb1ddec4184607c1talley zhp, prop, &value, &srctype, source, sizeof (source));
dc307942eac821bc70a7a69cbb1ddec4184607c1talley if (result == 0) {
dc307942eac821bc70a7a69cbb1ddec4184607c1talley jstring propSource = (*env)->NewStringUTF(env, source);
dc307942eac821bc70a7a69cbb1ddec4184607c1talleycreate_default_BasicProperty(JNIEnv *env, zfs_prop_t prop,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley str_to_obj_f convert_str, uint64_to_obj_f convert_uint64,
dc307942eac821bc70a7a69cbb1ddec4184607c1talleycreate_default_BooleanProperty(JNIEnv *env, zfs_prop_t prop)
dc307942eac821bc70a7a69cbb1ddec4184607c1talley return (create_default_BasicProperty(env, prop, NULL,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley zjni_int_to_boolean, ZFSJNI_PACKAGE_DATA "BooleanProperty",
dc307942eac821bc70a7a69cbb1ddec4184607c1talleycreate_default_LongProperty(JNIEnv *env, zfs_prop_t prop)
dc307942eac821bc70a7a69cbb1ddec4184607c1talley return (create_default_BasicProperty(env, prop, NULL,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley zjni_long_to_Long, ZFSJNI_PACKAGE_DATA "LongProperty",
dc307942eac821bc70a7a69cbb1ddec4184607c1talleycreate_default_StringProperty(JNIEnv *env, zfs_prop_t prop)
dc307942eac821bc70a7a69cbb1ddec4184607c1talley return (create_default_BasicProperty(env, prop, str_to_string, NULL,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley ZFSJNI_PACKAGE_DATA "StringProperty", "java/lang/String"));
dc307942eac821bc70a7a69cbb1ddec4184607c1talleycreate_default_ObjectProperty(JNIEnv *env, zfs_prop_t prop,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley str_to_obj_f convert_str, uint64_to_obj_f convert_uint64,
dc307942eac821bc70a7a69cbb1ddec4184607c1talleystr_to_enum_element(JNIEnv *env, char *str, char *valueClass)
dc307942eac821bc70a7a69cbb1ddec4184607c1talley return (*env)->CallStaticObjectMethod(env, class, method_valueOf, utf);
dc307942eac821bc70a7a69cbb1ddec4184607c1talley ZFSJNI_PACKAGE_DATA "AclInheritProperty$AclInherit"));
dc307942eac821bc70a7a69cbb1ddec4184607c1talley ZFSJNI_PACKAGE_DATA "CompressionProperty$Compression"));
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Package-private functions
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_default_property(JNIEnv *env, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; props_boolean[i] != ZFS_PROP_INVAL; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; props_string[i] != ZFS_PROP_INVAL; i++) {
dc307942eac821bc70a7a69cbb1ddec4184607c1talley for (i = 0; props_custom[i].prop != ZFS_PROP_INVAL; i++) {
dc307942eac821bc70a7a69cbb1ddec4184607c1talley props_custom[i].propClass, props_custom[i].valueClass);
fbfd10ff571cfd0139aa5127460f1b8a53dac971talleyzjni_int_to_Lineage(JNIEnv *env, zfs_source_t srctype)
fbfd10ff571cfd0139aa5127460f1b8a53dac971talley /* zfs_source_t to Property$Lineage map */
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_Dataset_properties(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Create an array list for the properties */
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; props_boolean[i] != ZFS_PROP_INVAL; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Create property and add to list */
fa9e4066f08beec538e775443c5be79dd423fcabahrens prop = create_BooleanProperty(env, zhp, props_boolean[i]);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Create property and add to list */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; props_string[i] != ZFS_PROP_INVAL; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Create property and add to list */
fa9e4066f08beec538e775443c5be79dd423fcabahrens prop = create_StringProperty(env, zhp, props_string[i]);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
dc307942eac821bc70a7a69cbb1ddec4184607c1talley for (i = 0; props_custom[i].prop != ZFS_PROP_INVAL; i++) {
dc307942eac821bc70a7a69cbb1ddec4184607c1talley /* Create property and add to list */
dc307942eac821bc70a7a69cbb1ddec4184607c1talley prop = create_ObjectProperty(env, zhp, props_custom[i].prop,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley props_custom[i].convert_str, props_custom[i].convert_uint64,
dc307942eac821bc70a7a69cbb1ddec4184607c1talley props_custom[i].propClass, props_custom[i].valueClass);
dc307942eac821bc70a7a69cbb1ddec4184607c1talley /* Does this property apply to this object? */
dc307942eac821bc70a7a69cbb1ddec4184607c1talley (void) fprintf(stderr, "Property %s is not appropriate "