libzfs_jni_property.c revision fa9e4066f08beec538e775443c5be79dd423fcab
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
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Use is subject to license terms.
fa9e4066f08beec538e775443c5be79dd423fcabahrens#pragma ident "%Z%%M% %I% %E% SMI"
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Function prototypes
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_BooleanProperty(JNIEnv *, zfs_handle_t *, zfs_prop_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_ChecksumProperty(JNIEnv *, zfs_handle_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_CompressionProperty(JNIEnv *, zfs_handle_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_DateProperty(JNIEnv *, zfs_handle_t *, zfs_prop_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_LongProperty(JNIEnv *, zfs_handle_t *, zfs_prop_t);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_RecordSizeProperty(JNIEnv *, zfs_handle_t *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_StringProperty(JNIEnv *, zfs_handle_t *, 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);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_default_MountPointProperty(JNIEnv *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_default_ShareNFSProperty(JNIEnv *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_default_ChecksumProperty(JNIEnv *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_default_CompressionProperty(JNIEnv *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject create_default_RecordSizeProperty(JNIEnv *);
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Static data
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* ZFS_PROP_RATIO, */
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* ZFS_PROP_TYPE, */
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Static functions
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_BooleanProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_BooleanProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env, source);
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_ChecksumProperty(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens propbuf, sizeof (propbuf), &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_ChecksumProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens "ChecksumProperty$Checksum;Ljava/lang/"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens "ChecksumProperty$Checksum;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_CompressionProperty(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens propbuf, sizeof (propbuf), &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = str_to_compression(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens "CompressionProperty$Compression;Ljava/"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "CompressionProperty$Compression;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_DateProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, prop, propbuf, sizeof (propbuf),
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_LongProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, prop, propbuf, sizeof (propbuf),
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_RecordSizeProperty(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens propbuf, sizeof (propbuf), &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_RecordSizeProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens "String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_StringProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, prop, propbuf, sizeof (propbuf),
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens "StringProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = (*env)->NewStringUTF(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env, source);
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_MountPointProperty(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens propbuf, sizeof (propbuf), &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = (*env)->NewStringUTF(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env, source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_MountPointProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_MountPointProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_ShareNFSProperty(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens propbuf, sizeof (propbuf), &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = (*env)->NewStringUTF(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env, source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "ChecksumProperty$Checksum");
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID method_valueOf = (*env)->GetStaticMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "CompressionProperty$Compression");
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID method_valueOf = (*env)->GetStaticMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens 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++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (*env)->GetStaticObjectField(env, class_Lineage, id);
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 "
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens prop = create_DateProperty(env, zhp, ZFS_PROP_CREATION);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_BooleanProperty(JNIEnv *env, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_BooleanProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_BooleanProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_int_to_boolean(env, zfs_prop_default_numeric(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_BooleanProperty, constructor_BooleanProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_LongProperty(JNIEnv *env, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_LongProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_long_to_Long(env, zfs_prop_default_numeric(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_StringProperty(JNIEnv *env, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (zfs_prop_is_string(prop) && !zfs_prop_readonly(prop)) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_default_string(prop, propbuf, sizeof (propbuf));
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName = (*env)->NewStringUTF(env, zfs_prop_to_name(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens readOnly = zfs_prop_readonly(prop) ? JNI_TRUE : JNI_FALSE;
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_StringProperty, constructor_StringProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_default_string(ZFS_PROP_MOUNTPOINT, propbuf, sizeof (propbuf));
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_MountPointProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_MountPointProperty, constructor_MountPointProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_default_string(ZFS_PROP_SHARENFS, propbuf, sizeof (propbuf));
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_ShareNFSProperty, constructor_ShareNFSProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_default_string(ZFS_PROP_CHECKSUM, propbuf, sizeof (propbuf));
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(L" ZFSJNI_PACKAGE_DATA "ChecksumProperty$Checksum;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_ChecksumProperty, constructor_ChecksumProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_CompressionProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(L" ZFSJNI_PACKAGE_DATA "CompressionProperty$Compression;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_CompressionProperty, constructor_CompressionProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_RecordSizeProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_RecordSizeProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);