fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER START
fa9e4066f08beec538e775443c5be79dd423fcabahrens * The contents of this file are subject to the terms of the
66e2aacc02a4625d105fb249ad16c27e79604ff2gw * Common Development and Distribution License (the "License").
66e2aacc02a4625d105fb249ad16c27e79604ff2gw * You may not use this file except in compliance 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
27dd1e87cd3d939264769dd4af7e6a529cde001fMark Shellenbaum * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
9adfa60d484ce2435f5af77cc99dcd4e692b6660Matthew Ahrens * Copyright (c) 2015 by Delphix. All rights reserved.
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
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,
91ebeef555ce7f899b6270a3c2df47b51f7ad59aahrens sizeof (propbuf), &srctype, source, sizeof (source), 1);
91ebeef555ce7f899b6270a3c2df47b51f7ad59aahrens zhp, prop, &value, &srctype, source, sizeof (source));
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,
91ebeef555ce7f899b6270a3c2df47b51f7ad59aahrens sizeof (propbuf), &srctype, source, sizeof (source), 1);
91ebeef555ce7f899b6270a3c2df47b51f7ad59aahrens zhp, prop, &value, &srctype, source, sizeof (source));
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,
7f7322febbcfe774b7270abc3b191c094bfcc517eschrock char *propbuf = (char *)zfs_prop_default_string(prop);
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,
7f7322febbcfe774b7270abc3b191c094bfcc517eschrock char *propbuf = (char *)zfs_prop_default_string(prop);
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)
990b4856d0eaada6f8140335733a1b1771ed2746lling for (i = 0; props_custom[i].prop != ZPROP_INVAL; i++) {
990b4856d0eaada6f8140335733a1b1771ed2746lling prop = zprop_iter(zjni_get_property_from_name_cb, (void *)name,
990b4856d0eaada6f8140335733a1b1771ed2746llingzjni_int_to_Lineage(JNIEnv *env, zprop_source_t srctype)
990b4856d0eaada6f8140335733a1b1771ed2746lling /* zprop_source_t to Property$Lineage map */
990b4856d0eaada6f8140335733a1b1771ed2746lling { ZPROP_SRC_NONE, "ZFS_PROP_LINEAGE_NOTINHERITABLE" },
990b4856d0eaada6f8140335733a1b1771ed2746lling { ZPROP_SRC_TEMPORARY, "ZFS_PROP_LINEAGE_TEMPORARY" },
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_Dataset_properties(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Create an array list for the properties */
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 /* 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 "
990b4856d0eaada6f8140335733a1b1771ed2746lling for (i = 0; props_custom[i].prop != ZPROP_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 "