libzfs_jni_property.c revision fa9e4066f08beec538e775443c5be79dd423fcab
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER START
fa9e4066f08beec538e775443c5be79dd423fcabahrens *
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 *
fa9e4066f08beec538e775443c5be79dd423fcabahrens * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
fa9e4066f08beec538e775443c5be79dd423fcabahrens * or http://www.opensolaris.org/os/licensing.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * See the License for the specific language governing permissions
fa9e4066f08beec538e775443c5be79dd423fcabahrens * and limitations under the License.
fa9e4066f08beec538e775443c5be79dd423fcabahrens *
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 *
fa9e4066f08beec538e775443c5be79dd423fcabahrens * CDDL HEADER END
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Use is subject to license terms.
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens#pragma ident "%Z%%M% %I% %E% SMI"
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens#include "libzfs_jni_property.h"
fa9e4066f08beec538e775443c5be79dd423fcabahrens#include "libzfs_jni_util.h"
fa9e4066f08beec538e775443c5be79dd423fcabahrens#include <strings.h>
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Function prototypes
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
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 str_to_checksum(JNIEnv *, char *);
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject str_to_compression(JNIEnv *, char *);
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
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Static data
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenszfs_prop_t props_boolean[] = {
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_ATIME,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_DEVICES,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_EXEC,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_MOUNTED,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_READONLY,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_SETUID,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_ZONED,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_INVAL
fa9e4066f08beec538e775443c5be79dd423fcabahrens};
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenszfs_prop_t props_long[] = {
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_AVAILABLE,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_QUOTA,
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* ZFS_PROP_RATIO, */
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_REFERENCED,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_RESERVATION,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_USED,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_VOLSIZE,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_INVAL
fa9e4066f08beec538e775443c5be79dd423fcabahrens};
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenszfs_prop_t props_string[] = {
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_ORIGIN,
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* ZFS_PROP_TYPE, */
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_INVAL
fa9e4066f08beec538e775443c5be79dd423fcabahrens};
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Static functions
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_BooleanProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens char source[ZFS_MAXNAMELEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens uint64_t value;
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_source_t srctype;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get_numeric(zhp, prop, &value,
fa9e4066f08beec538e775443c5be79dd423fcabahrens &srctype, source, sizeof (source));
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_BooleanProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "BooleanProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propName = (*env)->NewStringUTF(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, zfs_prop_to_name(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = zjni_int_to_boolean(env, value);
fa9e4066f08beec538e775443c5be79dd423fcabahrens jboolean readOnly = zfs_prop_readonly(prop) ?
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNI_TRUE : JNI_FALSE;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_BooleanProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (srctype == ZFS_SRC_INHERITED) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env, source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_BooleanProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_BooleanProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/Boolean;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "java/lang/String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_BooleanProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_BooleanProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, propSource);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env, srctype);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_BooleanProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_BooleanProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/Boolean;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_BooleanProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_BooleanProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_ChecksumProperty(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens char source[ZFS_MAXNAMELEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_source_t srctype;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, ZFS_PROP_CHECKSUM,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propbuf, sizeof (propbuf), &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = str_to_checksum(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (propValue != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_ChecksumProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "ChecksumProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_ChecksumProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (srctype == ZFS_SRC_INHERITED) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_ChecksumProperty =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_ChecksumProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(L" ZFSJNI_PACKAGE_DATA
fa9e4066f08beec538e775443c5be79dd423fcabahrens "ChecksumProperty$Checksum;Ljava/lang/"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_ChecksumProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_ChecksumProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, propSource);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage =
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_get_lineage(env, srctype);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_ChecksumProperty =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_ChecksumProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(L" ZFSJNI_PACKAGE_DATA
fa9e4066f08beec538e775443c5be79dd423fcabahrens "ChecksumProperty$Checksum;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA
fa9e4066f08beec538e775443c5be79dd423fcabahrens "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_ChecksumProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_ChecksumProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_CompressionProperty(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens char source[ZFS_MAXNAMELEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_source_t srctype;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, ZFS_PROP_COMPRESSION,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propbuf, sizeof (propbuf), &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = str_to_compression(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (propValue != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_CompressionProperty =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "CompressionProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_CompressionProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (srctype == ZFS_SRC_INHERITED) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_CompressionProperty =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_CompressionProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(L" ZFSJNI_PACKAGE_DATA
fa9e4066f08beec538e775443c5be79dd423fcabahrens "CompressionProperty$Compression;Ljava/"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "lang/String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_CompressionProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_CompressionProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, propSource);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens srctype);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_CompressionProperty =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_CompressionProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(L" ZFSJNI_PACKAGE_DATA
fa9e4066f08beec538e775443c5be79dd423fcabahrens "CompressionProperty$Compression;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA
fa9e4066f08beec538e775443c5be79dd423fcabahrens "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_CompressionProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_CompressionProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_DateProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens char source[ZFS_MAXNAMELEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_source_t srctype;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, prop, propbuf, sizeof (propbuf),
fa9e4066f08beec538e775443c5be79dd423fcabahrens &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = zjni_str_to_date(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (propValue != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_DateProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "DateProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propName = (*env)->NewStringUTF(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, zfs_prop_to_name(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens jboolean readOnly =
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_readonly(prop) ? JNI_TRUE : JNI_FALSE;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_DateProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (srctype == ZFS_SRC_INHERITED) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_DateProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_DateProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/util/Date;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "java/lang/String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_DateProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_DateProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, propSource);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens srctype);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_DateProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_DateProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/util/Date;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_DateProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_DateProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_LongProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens char source[ZFS_MAXNAMELEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_source_t srctype;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, prop, propbuf, sizeof (propbuf),
fa9e4066f08beec538e775443c5be79dd423fcabahrens &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = zjni_str_to_long(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (propValue != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_LongProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "LongProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propName = (*env)->NewStringUTF(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, zfs_prop_to_name(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens jboolean readOnly =
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_readonly(prop) ? JNI_TRUE : JNI_FALSE;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_LongProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (srctype == ZFS_SRC_INHERITED) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->NewStringUTF(env, source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_LongProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_LongProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/Long;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "java/lang/String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_LongProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_LongProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, propSource);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens srctype);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_LongProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_LongProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/Long;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_LongProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_LongProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_RecordSizeProperty(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens char source[ZFS_MAXNAMELEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_source_t srctype;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, ZFS_PROP_RECORDSIZE,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propbuf, sizeof (propbuf), &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = zjni_str_to_long(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (propValue != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_RecordSizeProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "RecordSizeProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_RecordSizeProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (srctype == ZFS_SRC_INHERITED) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->NewStringUTF(env, source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_RecordSizeProperty =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_RecordSizeProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/Long;Ljava/lang/"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_RecordSizeProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_RecordSizeProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, propSource);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage =
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_get_lineage(env, srctype);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_RecordSizeProperty =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_RecordSizeProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/Long;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA
fa9e4066f08beec538e775443c5be79dd423fcabahrens "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_RecordSizeProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_RecordSizeProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_StringProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens char source[ZFS_MAXNAMELEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_source_t srctype;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, prop, propbuf, sizeof (propbuf),
fa9e4066f08beec538e775443c5be79dd423fcabahrens &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_StringProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_StringProperty =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->FindClass(env, ZFSJNI_PACKAGE_DATA
fa9e4066f08beec538e775443c5be79dd423fcabahrens "StringProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propName =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->NewStringUTF(env, zfs_prop_to_name(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = (*env)->NewStringUTF(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens jboolean readOnly = zfs_prop_readonly(prop) ?
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNI_TRUE : JNI_FALSE;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (srctype == ZFS_SRC_INHERITED) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env, source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_StringProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_StringProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/String;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens "java/lang/String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_StringProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_StringProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, propSource);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env, srctype);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_StringProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_StringProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/String;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_StringProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_StringProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_MountPointProperty(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens char source[ZFS_MAXNAMELEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_source_t srctype;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, ZFS_PROP_MOUNTPOINT,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propbuf, sizeof (propbuf), &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_MountPointProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_MountPointProperty = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "MountPointProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = (*env)->NewStringUTF(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (srctype == ZFS_SRC_INHERITED) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env, source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_MountPointProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_MountPointProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_MountPointProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_MountPointProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, propSource);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env, srctype);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_MountPointProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_MountPointProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_MountPointProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_MountPointProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_ShareNFSProperty(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens char source[ZFS_MAXNAMELEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_source_t srctype;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens int result = zfs_prop_get(zhp, ZFS_PROP_SHARENFS,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propbuf, sizeof (propbuf), &srctype, source, sizeof (source), 1);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (result == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_ShareNFSProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_ShareNFSProperty = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "ShareNFSProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = (*env)->NewStringUTF(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (srctype == ZFS_SRC_INHERITED) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propSource = (*env)->NewStringUTF(env, source);
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_ShareNFSProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_ShareNFSProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/String;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_ShareNFSProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_ShareNFSProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, propSource);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env, srctype);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_ShareNFSProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_ShareNFSProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_ShareNFSProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_ShareNFSProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrensstr_to_checksum(JNIEnv *env, char *str)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_Checksum = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "ChecksumProperty$Checksum");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID method_valueOf = (*env)->GetStaticMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_Checksum, "valueOf",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;)L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "ChecksumProperty$Checksum;");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring utf = (*env)->NewStringUTF(env, str);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (*env)->CallStaticObjectMethod(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_Checksum, method_valueOf, utf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrensstr_to_compression(JNIEnv *env, char *str)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_Compression = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "CompressionProperty$Compression");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID method_valueOf = (*env)->GetStaticMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_Compression, "valueOf",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;)L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "CompressionProperty$Compression;");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring utf = (*env)->NewStringUTF(env, str);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (*env)->CallStaticObjectMethod(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_Compression, method_valueOf, utf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens/*
fa9e4066f08beec538e775443c5be79dd423fcabahrens * Package-private functions
fa9e4066f08beec538e775443c5be79dd423fcabahrens */
fa9e4066f08beec538e775443c5be79dd423fcabahrensjobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_default_property(JNIEnv *env, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens int i;
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; props_boolean[i] != ZFS_PROP_INVAL; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop == props_boolean[i]) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (create_default_BooleanProperty(env, prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; props_long[i] != ZFS_PROP_INVAL; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop == props_long[i]) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (create_default_LongProperty(env, prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; props_string[i] != ZFS_PROP_INVAL; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop == props_string[i]) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (create_default_StringProperty(env, prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop == ZFS_PROP_MOUNTPOINT) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (create_default_MountPointProperty(env));
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop == ZFS_PROP_SHARENFS) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (create_default_ShareNFSProperty(env));
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop == ZFS_PROP_CHECKSUM) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (create_default_ChecksumProperty(env));
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop == ZFS_PROP_COMPRESSION) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (create_default_CompressionProperty(env));
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop == ZFS_PROP_RECORDSIZE) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (create_default_RecordSizeProperty(env));
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrenszfs_prop_t
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_property_from_name(const char *name)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_t prop;
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (prop = 0; prop < ZFS_NPROP_VISIBLE; prop++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (strcasecmp(name, zfs_prop_to_name(prop)) == 0) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (prop);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (ZFS_PROP_INVAL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensjobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_lineage(JNIEnv *env, zfs_source_t srctype)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens char *field;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_Lineage;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jfieldID id;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens switch (srctype) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens case ZFS_SRC_NONE:
fa9e4066f08beec538e775443c5be79dd423fcabahrens field = "ZFS_PROP_LINEAGE_NOTINHERITABLE";
fa9e4066f08beec538e775443c5be79dd423fcabahrens break;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens case ZFS_SRC_DEFAULT:
fa9e4066f08beec538e775443c5be79dd423fcabahrens field = "ZFS_PROP_LINEAGE_DEFAULT";
fa9e4066f08beec538e775443c5be79dd423fcabahrens break;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens case ZFS_SRC_LOCAL:
fa9e4066f08beec538e775443c5be79dd423fcabahrens field = "ZFS_PROP_LINEAGE_LOCAL";
fa9e4066f08beec538e775443c5be79dd423fcabahrens break;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens case ZFS_SRC_TEMPORARY:
fa9e4066f08beec538e775443c5be79dd423fcabahrens field = "ZFS_PROP_LINEAGE_TEMPORARY";
fa9e4066f08beec538e775443c5be79dd423fcabahrens break;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens default:
fa9e4066f08beec538e775443c5be79dd423fcabahrens case ZFS_SRC_INHERITED:
fa9e4066f08beec538e775443c5be79dd423fcabahrens field = "ZFS_PROP_LINEAGE_INHERITED";
fa9e4066f08beec538e775443c5be79dd423fcabahrens break;
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_Lineage = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "Property$Lineage");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens id = (*env)->GetStaticFieldID(env, class_Lineage,
fa9e4066f08beec538e775443c5be79dd423fcabahrens field, "L" ZFSJNI_PACKAGE_DATA "Property$Lineage;");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (*env)->GetStaticObjectField(env, class_Lineage, id);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensjobjectArray
fa9e4066f08beec538e775443c5be79dd423fcabahrenszjni_get_Dataset_properties(JNIEnv *env, zfs_handle_t *zhp)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject prop;
fa9e4066f08beec538e775443c5be79dd423fcabahrens int i;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Create an array list for the properties */
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_ArrayList_t proplist_obj = {0};
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_ArrayList_t *proplist = &proplist_obj;
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_new_ArrayList(env, proplist);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
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
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallBooleanMethod(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ((zjni_Object_t *)proplist)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Collection_t *)proplist)->method_add, prop);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((*env)->ExceptionOccurred(env) != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef DEBUG
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens "for %s\n", zfs_prop_to_name(props_boolean[i]),
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens for (i = 0; props_long[i] != ZFS_PROP_INVAL; i++) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Create property and add to list */
fa9e4066f08beec538e775443c5be79dd423fcabahrens prop = create_LongProperty(env, zhp, props_long[i]);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallBooleanMethod(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ((zjni_Object_t *)proplist)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Collection_t *)proplist)->method_add, prop);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((*env)->ExceptionOccurred(env) != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef DEBUG
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens "for %s\n", zfs_prop_to_name(props_long[i]),
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
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
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallBooleanMethod(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ((zjni_Object_t *)proplist)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Collection_t *)proplist)->method_add, prop);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((*env)->ExceptionOccurred(env) != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef DEBUG
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens "for %s\n", zfs_prop_to_name(props_string[i]),
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens prop = create_MountPointProperty(env, zhp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallBooleanMethod(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Object_t *)proplist)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Collection_t *)proplist)->method_add, prop);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((*env)->ExceptionOccurred(env) != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef DEBUG
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens "for %s\n", zfs_prop_to_name(ZFS_PROP_MOUNTPOINT),
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens prop = create_ShareNFSProperty(env, zhp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallBooleanMethod(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Object_t *)proplist)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Collection_t *)proplist)->method_add, prop);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((*env)->ExceptionOccurred(env) != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef DEBUG
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens "for %s\n", zfs_prop_to_name(ZFS_PROP_SHARENFS),
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens prop = create_ChecksumProperty(env, zhp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallBooleanMethod(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Object_t *)proplist)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Collection_t *)proplist)->method_add, prop);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((*env)->ExceptionOccurred(env) != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef DEBUG
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens "for %s\n", zfs_prop_to_name(ZFS_PROP_CHECKSUM),
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens prop = create_CompressionProperty(env, zhp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallBooleanMethod(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Object_t *)proplist)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Collection_t *)proplist)->method_add, prop);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((*env)->ExceptionOccurred(env) != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef DEBUG
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens "for %s\n", zfs_prop_to_name(ZFS_PROP_COMPRESSION),
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens prop = create_RecordSizeProperty(env, zhp);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallBooleanMethod(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Object_t *)proplist)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Collection_t *)proplist)->method_add, prop);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((*env)->ExceptionOccurred(env) != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef DEBUG
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens "for %s\n", zfs_prop_to_name(ZFS_PROP_RECORDSIZE),
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens prop = create_DateProperty(env, zhp, ZFS_PROP_CREATION);
fa9e4066f08beec538e775443c5be79dd423fcabahrens /* Does this property apply to this object? */
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (prop != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->CallBooleanMethod(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Object_t *)proplist)->object,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ((zjni_Collection_t *)proplist)->method_add, prop);
fa9e4066f08beec538e775443c5be79dd423fcabahrens } else {
fa9e4066f08beec538e775443c5be79dd423fcabahrens if ((*env)->ExceptionOccurred(env) != NULL) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (NULL);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens#ifdef DEBUG
fa9e4066f08beec538e775443c5be79dd423fcabahrens (void) fprintf(stderr, "Property %s is not appropriate "
fa9e4066f08beec538e775443c5be79dd423fcabahrens "for %s\n", zfs_prop_to_name(ZFS_PROP_CREATION),
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_get_name(zhp));
fa9e4066f08beec538e775443c5be79dd423fcabahrens#endif
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (zjni_Collection_to_array(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, (zjni_Collection_t *)proplist,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property"));
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_BooleanProperty(JNIEnv *env, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (!zfs_prop_readonly(prop)) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_BooleanProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "BooleanProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_BooleanProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_BooleanProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/Boolean;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propName =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->NewStringUTF(env, zfs_prop_to_name(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue =
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_int_to_boolean(env, zfs_prop_default_numeric(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens jboolean readOnly = zfs_prop_readonly(prop) ?
fa9e4066f08beec538e775443c5be79dd423fcabahrens JNI_TRUE : JNI_FALSE;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_BooleanProperty, constructor_BooleanProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_LongProperty(JNIEnv *env, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (!zfs_prop_readonly(prop)) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_LongProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "LongProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_LongProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_LongProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/Long;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propName =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->NewStringUTF(env, zfs_prop_to_name(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue =
fa9e4066f08beec538e775443c5be79dd423fcabahrens zjni_long_to_Long(env, zfs_prop_default_numeric(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens jboolean readOnly = zfs_prop_readonly(prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens ? JNI_TRUE : JNI_FALSE;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_LongProperty, constructor_LongProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_StringProperty(JNIEnv *env, zfs_prop_t prop)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens if (zfs_prop_is_string(prop) && !zfs_prop_readonly(prop)) {
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_StringProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_StringProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jstring propName;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jboolean readOnly;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_default_string(prop, propbuf, sizeof (propbuf));
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_StringProperty =
fa9e4066f08beec538e775443c5be79dd423fcabahrens (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "StringProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_StringProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_StringProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;Ljava/lang/String;ZL"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName = (*env)->NewStringUTF(env, zfs_prop_to_name(prop));
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue = (*env)->NewStringUTF(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens readOnly = zfs_prop_readonly(prop) ? JNI_TRUE : JNI_FALSE;
fa9e4066f08beec538e775443c5be79dd423fcabahrens lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_StringProperty, constructor_StringProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propName, propValue, readOnly, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens }
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_MountPointProperty(JNIEnv *env)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_MountPointProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_MountPointProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_default_string(ZFS_PROP_MOUNTPOINT, propbuf, sizeof (propbuf));
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_MountPointProperty = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "MountPointProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue = (*env)->NewStringUTF(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_MountPointProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_MountPointProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_MountPointProperty, constructor_MountPointProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_ShareNFSProperty(JNIEnv *env)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_ShareNFSProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_ShareNFSProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_default_string(ZFS_PROP_SHARENFS, propbuf, sizeof (propbuf));
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_ShareNFSProperty = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "ShareNFSProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue = (*env)->NewStringUTF(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_ShareNFSProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_ShareNFSProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/String;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_ShareNFSProperty, constructor_ShareNFSProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_ChecksumProperty(JNIEnv *env)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_ChecksumProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_ChecksumProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_default_string(ZFS_PROP_CHECKSUM, propbuf, sizeof (propbuf));
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue = str_to_checksum(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_ChecksumProperty = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "ChecksumProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_ChecksumProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_ChecksumProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(L" ZFSJNI_PACKAGE_DATA "ChecksumProperty$Checksum;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_ChecksumProperty, constructor_ChecksumProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_CompressionProperty(JNIEnv *env)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = NULL;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens char propbuf[ZFS_MAXPROPLEN];
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_CompressionProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_CompressionProperty;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue;
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage;
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens zfs_prop_default_string(
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFS_PROP_COMPRESSION, propbuf, sizeof (propbuf));
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue = str_to_compression(env, propbuf);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_CompressionProperty = (*env)->FindClass(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, ZFSJNI_PACKAGE_DATA "CompressionProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens constructor_CompressionProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_CompressionProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(L" ZFSJNI_PACKAGE_DATA "CompressionProperty$Compression;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens propertyObject = (*env)->NewObject(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens class_CompressionProperty, constructor_CompressionProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrensstatic jobject
fa9e4066f08beec538e775443c5be79dd423fcabahrenscreate_default_RecordSizeProperty(JNIEnv *env)
fa9e4066f08beec538e775443c5be79dd423fcabahrens{
fa9e4066f08beec538e775443c5be79dd423fcabahrens jclass class_RecordSizeProperty = (*env)->FindClass(env,
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "RecordSizeProperty");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jmethodID constructor_RecordSizeProperty = (*env)->GetMethodID(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_RecordSizeProperty, "<init>",
fa9e4066f08beec538e775443c5be79dd423fcabahrens "(Ljava/lang/Long;L"
fa9e4066f08beec538e775443c5be79dd423fcabahrens ZFSJNI_PACKAGE_DATA "Property$Lineage;)V");
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propValue = zjni_long_to_Long(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, zfs_prop_default_numeric(ZFS_PROP_RECORDSIZE));
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject lineage = zjni_get_lineage(env, ZFS_SRC_DEFAULT);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens jobject propertyObject = (*env)->NewObject(
fa9e4066f08beec538e775443c5be79dd423fcabahrens env, class_RecordSizeProperty, constructor_RecordSizeProperty,
fa9e4066f08beec538e775443c5be79dd423fcabahrens propValue, lineage);
fa9e4066f08beec538e775443c5be79dd423fcabahrens
fa9e4066f08beec538e775443c5be79dd423fcabahrens return (propertyObject);
fa9e4066f08beec538e775443c5be79dd423fcabahrens}