usr/src/lib/libzfs_jni/common/libzfs_jni_property.c
author Albert Lee <trisk@nexenta.com>
Sat, 14 May 2011 00:29:13 -0400
changeset 13370 8c04143bd318
parent 12164 0eb8d6741e37
permissions -rw-r--r--
742 Resurrect the ZFS "aclmode" property 664 Umask masking "deny" ACL entries. 279 Bug in the new ACL (post-PSARC/2010/029) semantics Reviewed by: Aram Hăvărneanu <[email protected]> Reviewed by: Gordon Ross <[email protected]> Reviewed by: Robert Gordon <[email protected]> Reviewed by: [email protected] Approved by: Garrett D'Amore <[email protected]>
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     1
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     2
 * CDDL HEADER START
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     3
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
3654
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 1356
diff changeset
     5
 * Common Development and Distribution License (the "License").
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 1356
diff changeset
     6
 * You may not use this file except in compliance with the License.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     7
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    11
 * and limitations under the License.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    12
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    18
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    19
 * CDDL HEADER END
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    20
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    21
/*
12164
0eb8d6741e37 PSARC/2010/029 Improved ACL interoperability
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 10242
diff changeset
    22
 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    23
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    24
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    25
#include "libzfs_jni_property.h"
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    26
#include "libzfs_jni_util.h"
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    27
#include <strings.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    28
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    29
/*
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    30
 * Types
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    31
 */
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    32
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    33
/* Signature for function to convert string to a specific Java object */
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    34
typedef jobject (*str_to_obj_f)(JNIEnv *, char *);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    35
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    36
/* Signature for function to convert uint64_t to a specific Java object */
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    37
typedef jobject (*uint64_to_obj_f)(JNIEnv *, uint64_t);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    38
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    39
/*
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    40
 * Describes a property and the parameters needed to create a Java
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    41
 * Property object for it
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    42
 */
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    43
typedef struct custom_prop_desct {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    44
	zfs_prop_t prop;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    45
	str_to_obj_f convert_str;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    46
	uint64_to_obj_f convert_uint64;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    47
	char *propClass;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    48
	char *valueClass;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    49
} custom_prop_desct_t;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    50
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    51
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    52
 * Function prototypes
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    53
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    54
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    55
static jobject create_BasicProperty(JNIEnv *, zfs_handle_t *,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    56
    zfs_prop_t, str_to_obj_f, uint64_to_obj_f, char *, char *);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    57
static jobject create_BooleanProperty(JNIEnv *, zfs_handle_t *, zfs_prop_t);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    58
static jobject create_LongProperty(JNIEnv *, zfs_handle_t *, zfs_prop_t);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    59
static jobject create_StringProperty(JNIEnv *, zfs_handle_t *, zfs_prop_t);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    60
static jobject create_ObjectProperty(JNIEnv *, zfs_handle_t *,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    61
    zfs_prop_t, str_to_obj_f, uint64_to_obj_f, char *, char *);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    62
static jobject create_default_BasicProperty(JNIEnv *, zfs_prop_t,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    63
    str_to_obj_f, uint64_to_obj_f, char *, char *);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    64
static jobject create_default_BooleanProperty(JNIEnv *, zfs_prop_t);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    65
static jobject create_default_LongProperty(JNIEnv *, zfs_prop_t);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    66
static jobject create_default_StringProperty(JNIEnv *, zfs_prop_t);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    67
static jobject create_default_ObjectProperty(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    68
    JNIEnv *, zfs_prop_t, str_to_obj_f, uint64_to_obj_f, char *, char *);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    69
static jobject str_to_enum_element(JNIEnv *, char *, char *);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    70
static jobject str_to_aclinherit(JNIEnv *, char *);
13370
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
    71
static jobject str_to_aclmode(JNIEnv *, char *);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    72
static jobject str_to_checksum(JNIEnv *, char *);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    73
static jobject str_to_compression(JNIEnv *, char *);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    74
static jobject str_to_snapdir(JNIEnv *, char *);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    75
static jobject str_to_string(JNIEnv *, char *);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    76
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    77
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    78
 * Static data
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    79
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    80
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    81
zfs_prop_t props_boolean[] = {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    82
	ZFS_PROP_ATIME,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    83
	ZFS_PROP_DEVICES,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    84
	ZFS_PROP_EXEC,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    85
	ZFS_PROP_MOUNTED,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    86
	ZFS_PROP_READONLY,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    87
	ZFS_PROP_SETUID,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    88
	ZFS_PROP_ZONED,
10242
c40d075fbca6 PSARC/2009/297 zfs snapshot holds
Chris Kirby <chris.kirby@sun.com>
parents: 5378
diff changeset
    89
	ZFS_PROP_DEFER_DESTROY,
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
    90
	ZPROP_INVAL
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    91
};
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    92
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    93
zfs_prop_t props_long[] = {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    94
	ZFS_PROP_AVAILABLE,
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
    95
	ZFS_PROP_CREATETXG,
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    96
	ZFS_PROP_QUOTA,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    97
	ZFS_PROP_REFERENCED,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    98
	ZFS_PROP_RESERVATION,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    99
	ZFS_PROP_USED,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   100
	ZFS_PROP_VOLSIZE,
5378
111aa1baa84a PSARC 2007/555 zfs fs-only quotas and reservations
ck153898
parents: 5094
diff changeset
   101
	ZFS_PROP_REFQUOTA,
111aa1baa84a PSARC 2007/555 zfs fs-only quotas and reservations
ck153898
parents: 5094
diff changeset
   102
	ZFS_PROP_REFRESERVATION,
10242
c40d075fbca6 PSARC/2009/297 zfs snapshot holds
Chris Kirby <chris.kirby@sun.com>
parents: 5378
diff changeset
   103
	ZFS_PROP_USERREFS,
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   104
	ZPROP_INVAL
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   105
};
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   106
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   107
zfs_prop_t props_string[] = {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   108
	ZFS_PROP_ORIGIN,
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   109
	/* ZFS_PROP_TYPE, */
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   110
	ZPROP_INVAL
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   111
};
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   112
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   113
custom_prop_desct_t props_custom[] = {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   114
	{ ZFS_PROP_ACLINHERIT, str_to_aclinherit, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   115
	    ZFSJNI_PACKAGE_DATA "AclInheritProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   116
	    ZFSJNI_PACKAGE_DATA "AclInheritProperty$AclInherit" },
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   117
13370
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   118
	{ ZFS_PROP_ACLMODE, str_to_aclmode, NULL,
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   119
	    ZFSJNI_PACKAGE_DATA "AclModeProperty",
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   120
	    ZFSJNI_PACKAGE_DATA "AclModeProperty$AclMode" },
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   121
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   122
	{ ZFS_PROP_CHECKSUM, str_to_checksum, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   123
	    ZFSJNI_PACKAGE_DATA "ChecksumProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   124
	    ZFSJNI_PACKAGE_DATA "ChecksumProperty$Checksum" },
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   125
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   126
	{ ZFS_PROP_COMPRESSION, str_to_compression, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   127
	    ZFSJNI_PACKAGE_DATA "CompressionProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   128
	    ZFSJNI_PACKAGE_DATA "CompressionProperty$Compression" },
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   129
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   130
	{ ZFS_PROP_COMPRESSRATIO, NULL, zjni_long_to_Long,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   131
	    ZFSJNI_PACKAGE_DATA "CompressRatioProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   132
	    "java/lang/Long" },
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   133
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   134
	{ ZFS_PROP_CREATION, zjni_str_to_date, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   135
	    ZFSJNI_PACKAGE_DATA "CreationProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   136
	    "java/util/Date" },
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   137
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   138
	{ ZFS_PROP_MOUNTPOINT, str_to_string, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   139
	    ZFSJNI_PACKAGE_DATA "MountPointProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   140
	    "java/lang/String" },
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   141
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   142
	{ ZFS_PROP_RECORDSIZE, NULL, zjni_long_to_Long,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   143
	    ZFSJNI_PACKAGE_DATA "RecordSizeProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   144
	    "java/lang/Long" },
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   145
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   146
	{ ZFS_PROP_SHARENFS, str_to_string, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   147
	    ZFSJNI_PACKAGE_DATA "ShareNFSProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   148
	    "java/lang/String" },
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   149
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   150
	{ ZFS_PROP_SNAPDIR, str_to_snapdir, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   151
	    ZFSJNI_PACKAGE_DATA "SnapDirProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   152
	    ZFSJNI_PACKAGE_DATA "SnapDirProperty$SnapDir" },
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   153
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   154
	{ ZFS_PROP_VOLBLOCKSIZE, NULL, zjni_long_to_Long,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   155
	    ZFSJNI_PACKAGE_DATA "VolBlockSizeProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   156
	    "java/lang/Long" },
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   157
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   158
	{ ZPROP_INVAL, NULL, NULL, NULL, NULL },
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   159
};
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   160
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   161
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   162
 * Static functions
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   163
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   164
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   165
static jobject
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   166
create_BasicProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   167
    str_to_obj_f convert_str, uint64_to_obj_f convert_uint64,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   168
    char *propClass, char *valueClass)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   169
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   170
	jobject propertyObject = NULL;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   171
	char source[ZFS_MAXNAMELEN];
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   172
	zprop_source_t srctype;
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   173
	jobject propValue = NULL;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   174
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   175
	if (convert_str != NULL) {
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   176
		char propbuf[ZFS_MAXPROPLEN];
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   177
		int result = zfs_prop_get(zhp, prop, propbuf,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   178
		    sizeof (propbuf), &srctype, source, sizeof (source), 1);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   179
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   180
		if (result == 0)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   181
			propValue = convert_str(env, propbuf);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   182
	} else {
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   183
		uint64_t value;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   184
		int result = zfs_prop_get_numeric(
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   185
		    zhp, prop, &value, &srctype, source, sizeof (source));
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   186
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   187
		if (result == 0)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   188
			propValue = convert_uint64(env, value);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   189
	}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   190
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   191
	if (propValue != NULL) {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   192
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   193
		jmethodID constructor;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   194
		char signature[1024];
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   195
		jclass class = (*env)->FindClass(env, propClass);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   196
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   197
		jstring propName = (*env)->NewStringUTF(
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   198
		    env, zfs_prop_to_name(prop));
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   199
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   200
		jboolean readOnly = zfs_prop_readonly(prop) ?
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   201
		    JNI_TRUE : JNI_FALSE;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   202
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   203
		if (srctype == ZPROP_SRC_INHERITED) {
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   204
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   205
			jstring propSource = (*env)->NewStringUTF(env, source);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   206
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   207
			(void) snprintf(signature, sizeof (signature),
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   208
			    "(Ljava/lang/String;L%s;ZLjava/lang/String;)V",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   209
			    valueClass);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   210
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   211
			constructor = (*env)->GetMethodID(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   212
			    env, class, "<init>", signature);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   213
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   214
			propertyObject = (*env)->NewObject(
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   215
			    env, class, constructor, propName, propValue,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   216
			    readOnly, propSource);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   217
		} else {
1206
84469f0f684d 6362897 JNI throws an UnsupportedOperationException on invalid dataset path
talley
parents: 1066
diff changeset
   218
			jobject lineage = zjni_int_to_Lineage(env, srctype);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   219
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   220
			(void) snprintf(signature, sizeof (signature),
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   221
			    "(Ljava/lang/String;L%s;ZL"
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   222
			    ZFSJNI_PACKAGE_DATA "Property$Lineage;)V",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   223
			    valueClass);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   224
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   225
			constructor = (*env)->GetMethodID(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   226
			    env, class, "<init>", signature);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   227
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   228
			propertyObject = (*env)->NewObject(
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   229
			    env, class, constructor, propName, propValue,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   230
			    readOnly, lineage);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   231
		}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   232
	}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   233
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   234
	return (propertyObject);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   235
}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   236
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   237
static jobject
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   238
create_BooleanProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   239
{
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   240
	return (create_BasicProperty(env, zhp, prop, NULL, zjni_int_to_boolean,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   241
	    ZFSJNI_PACKAGE_DATA "BooleanProperty", "java/lang/Boolean"));
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   242
}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   243
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   244
static jobject
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   245
create_LongProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   246
{
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   247
	return (create_BasicProperty(env, zhp, prop, NULL, zjni_long_to_Long,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   248
	    ZFSJNI_PACKAGE_DATA "LongProperty", "java/lang/Long"));
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   249
}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   250
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   251
static jobject
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   252
create_StringProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop)
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   253
{
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   254
	return (create_BasicProperty(env, zhp, prop, str_to_string, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   255
	    ZFSJNI_PACKAGE_DATA "StringProperty", "java/lang/String"));
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   256
}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   257
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   258
static jobject
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   259
create_ObjectProperty(JNIEnv *env, zfs_handle_t *zhp, zfs_prop_t prop,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   260
    str_to_obj_f convert_str, uint64_to_obj_f convert_uint64,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   261
    char *propClass, char *valueClass)
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   262
{
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   263
	jobject propertyObject = NULL;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   264
	char source[ZFS_MAXNAMELEN];
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   265
	zprop_source_t srctype;
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   266
	jobject propValue = NULL;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   267
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   268
	if (convert_str != NULL) {
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   269
		char propbuf[ZFS_MAXPROPLEN];
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   270
		int result = zfs_prop_get(zhp, prop, propbuf,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   271
		    sizeof (propbuf), &srctype, source, sizeof (source), 1);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   272
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   273
		if (result == 0)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   274
			propValue = convert_str(env, propbuf);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   275
	} else {
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   276
		uint64_t value;
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   277
		int result = zfs_prop_get_numeric(
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   278
		    zhp, prop, &value, &srctype, source, sizeof (source));
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   279
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   280
		if (result == 0)
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   281
			propValue = convert_uint64(env, value);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   282
	}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   283
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   284
	if (propValue != NULL) {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   285
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   286
		jmethodID constructor;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   287
		char signature[1024];
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   288
		jclass class = (*env)->FindClass(env, propClass);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   289
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   290
		if (srctype == ZPROP_SRC_INHERITED) {
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   291
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   292
			jstring propSource = (*env)->NewStringUTF(env, source);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   293
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   294
			(void) snprintf(signature, sizeof (signature),
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   295
			    "(L%s;Ljava/lang/String;)V", valueClass);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   296
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   297
			constructor = (*env)->GetMethodID(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   298
			    env, class, "<init>", signature);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   299
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   300
			propertyObject = (*env)->NewObject(env,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   301
			    class, constructor, propValue, propSource);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   302
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   303
		} else {
1206
84469f0f684d 6362897 JNI throws an UnsupportedOperationException on invalid dataset path
talley
parents: 1066
diff changeset
   304
			jobject lineage = zjni_int_to_Lineage(env, srctype);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   305
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   306
			(void) snprintf(signature, sizeof (signature),
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   307
			    "(L%s;L" ZFSJNI_PACKAGE_DATA "Property$Lineage;)V",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   308
			    valueClass);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   309
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   310
			constructor = (*env)->GetMethodID(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   311
			    env, class, "<init>", signature);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   312
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   313
			propertyObject = (*env)->NewObject(env,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   314
			    class, constructor, propValue, lineage);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   315
		}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   316
	}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   317
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   318
	return (propertyObject);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   319
}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   320
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   321
static jobject
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   322
create_default_BasicProperty(JNIEnv *env, zfs_prop_t prop,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   323
    str_to_obj_f convert_str, uint64_to_obj_f convert_uint64,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   324
    char *propClass, char *valueClass)
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   325
{
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   326
	jobject propertyObject = NULL;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   327
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   328
	if (!zfs_prop_readonly(prop)) {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   329
		jobject propValue;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   330
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   331
		if (convert_str != NULL) {
1356
e021b5e4aa0e 6377671 zfs mount -a shouldn't bother checking snapshots
eschrock
parents: 1206
diff changeset
   332
			char *propbuf = (char *)zfs_prop_default_string(prop);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   333
			propValue = convert_str(env, propbuf);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   334
		} else {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   335
			uint64_t value = zfs_prop_default_numeric(prop);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   336
			propValue = convert_uint64(env, value);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   337
		}
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   338
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   339
		if (propValue != NULL) {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   340
			char signature[1024];
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   341
			jmethodID constructor;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   342
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   343
			jstring propName =
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   344
			    (*env)->NewStringUTF(env, zfs_prop_to_name(prop));
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   345
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   346
			jboolean readOnly = zfs_prop_readonly(prop) ?
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   347
			    JNI_TRUE : JNI_FALSE;
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   348
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   349
			jclass class = (*env)->FindClass(env, propClass);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   350
			jobject lineage =
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   351
			    zjni_int_to_Lineage(env, ZPROP_SRC_DEFAULT);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   352
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   353
			(void) snprintf(signature, sizeof (signature),
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   354
			    "(Ljava/lang/String;L%s;ZL" ZFSJNI_PACKAGE_DATA
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   355
			    "Property$Lineage;)V", valueClass);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   356
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   357
			constructor = (*env)->GetMethodID(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   358
			    env, class, "<init>", signature);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   359
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   360
			propertyObject = (*env)->NewObject(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   361
			    env, class, constructor,
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   362
			    propName, propValue, readOnly, lineage);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   363
		}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   364
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   365
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   366
	return (propertyObject);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   367
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   368
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   369
static jobject
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   370
create_default_BooleanProperty(JNIEnv *env, zfs_prop_t prop)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   371
{
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   372
	return (create_default_BasicProperty(env, prop, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   373
	    zjni_int_to_boolean, ZFSJNI_PACKAGE_DATA "BooleanProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   374
	    "java/lang/Boolean"));
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   375
}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   376
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   377
static jobject
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   378
create_default_LongProperty(JNIEnv *env, zfs_prop_t prop)
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   379
{
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   380
	return (create_default_BasicProperty(env, prop, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   381
	    zjni_long_to_Long, ZFSJNI_PACKAGE_DATA "LongProperty",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   382
	    "java/lang/Long"));
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   383
}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   384
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   385
static jobject
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   386
create_default_StringProperty(JNIEnv *env, zfs_prop_t prop)
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   387
{
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   388
	return (create_default_BasicProperty(env, prop, str_to_string, NULL,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   389
	    ZFSJNI_PACKAGE_DATA "StringProperty", "java/lang/String"));
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   390
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   391
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   392
static jobject
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   393
create_default_ObjectProperty(JNIEnv *env, zfs_prop_t prop,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   394
    str_to_obj_f convert_str, uint64_to_obj_f convert_uint64,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   395
    char *propClass, char *valueClass)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   396
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   397
	jobject propertyObject = NULL;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   398
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   399
	if (!zfs_prop_readonly(prop)) {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   400
		jobject propValue;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   401
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   402
		if (convert_str != NULL) {
1356
e021b5e4aa0e 6377671 zfs mount -a shouldn't bother checking snapshots
eschrock
parents: 1206
diff changeset
   403
			char *propbuf = (char *)zfs_prop_default_string(prop);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   404
			propValue = convert_str(env, propbuf);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   405
		} else {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   406
			uint64_t value = zfs_prop_default_numeric(prop);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   407
			propValue = convert_uint64(env, value);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   408
		}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   409
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   410
		if (propValue != NULL) {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   411
			char signature[1024];
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   412
			jmethodID constructor;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   413
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   414
			jclass class = (*env)->FindClass(env, propClass);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   415
			jobject lineage =
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   416
			    zjni_int_to_Lineage(env, ZPROP_SRC_DEFAULT);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   417
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   418
			(void) snprintf(signature, sizeof (signature),
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   419
			    "(L%s;L" ZFSJNI_PACKAGE_DATA "Property$Lineage;)V",
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   420
			    valueClass);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   421
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   422
			constructor = (*env)->GetMethodID(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   423
			    env, class, "<init>", signature);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   424
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   425
			propertyObject = (*env)->NewObject(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   426
			    env, class, constructor, propValue, lineage);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   427
		}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   428
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   429
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   430
	return (propertyObject);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   431
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   432
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   433
static jobject
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   434
str_to_enum_element(JNIEnv *env, char *str, char *valueClass)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   435
{
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   436
	char signature[1024];
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   437
	jmethodID method_valueOf;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   438
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   439
	jstring utf = (*env)->NewStringUTF(env, str);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   440
	jclass class = (*env)->FindClass(env, valueClass);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   441
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   442
	(void) snprintf(signature, sizeof (signature),
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   443
	    "(Ljava/lang/String;)L%s;", valueClass);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   444
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   445
	method_valueOf = (*env)->GetStaticMethodID(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   446
	    env, class, "valueOf", signature);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   447
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   448
	return (*env)->CallStaticObjectMethod(env, class, method_valueOf, utf);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   449
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   450
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   451
static jobject
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   452
str_to_aclinherit(JNIEnv *env, char *str)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   453
{
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   454
	return (str_to_enum_element(env, str,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   455
	    ZFSJNI_PACKAGE_DATA "AclInheritProperty$AclInherit"));
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   456
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   457
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   458
static jobject
13370
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   459
str_to_aclmode(JNIEnv *env, char *str)
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   460
{
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   461
	return (str_to_enum_element(env, str,
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   462
	    ZFSJNI_PACKAGE_DATA "AclModeProperty$AclMode"));
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   463
}
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   464
8c04143bd318 742 Resurrect the ZFS "aclmode" property
Albert Lee <trisk@nexenta.com>
parents: 12164
diff changeset
   465
static jobject
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   466
str_to_checksum(JNIEnv *env, char *str)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   467
{
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   468
	return (str_to_enum_element(env, str,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   469
	    ZFSJNI_PACKAGE_DATA "ChecksumProperty$Checksum"));
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   470
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   471
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   472
static jobject
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   473
str_to_compression(JNIEnv *env, char *str)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   474
{
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   475
	return (str_to_enum_element(env, str,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   476
	    ZFSJNI_PACKAGE_DATA "CompressionProperty$Compression"));
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   477
}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   478
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   479
static jobject
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   480
str_to_snapdir(JNIEnv *env, char *str)
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   481
{
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   482
	return (str_to_enum_element(env, str,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   483
	    ZFSJNI_PACKAGE_DATA "SnapDirProperty$SnapDir"));
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   484
}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   485
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   486
static jobject
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   487
str_to_string(JNIEnv *env, char *str)
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   488
{
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   489
	return (*env)->NewStringUTF(env, str);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   490
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   491
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   492
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   493
 * Package-private functions
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   494
 */
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   495
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   496
jobject
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   497
zjni_get_default_property(JNIEnv *env, zfs_prop_t prop)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   498
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   499
	int i;
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   500
	for (i = 0; props_boolean[i] != ZPROP_INVAL; i++) {
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   501
		if (prop == props_boolean[i]) {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   502
			return (create_default_BooleanProperty(env, prop));
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   503
		}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   504
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   505
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   506
	for (i = 0; props_long[i] != ZPROP_INVAL; i++) {
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   507
		if (prop == props_long[i]) {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   508
			return (create_default_LongProperty(env, prop));
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   509
		}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   510
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   511
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   512
	for (i = 0; props_string[i] != ZPROP_INVAL; i++) {
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   513
		if (prop == props_string[i]) {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   514
			return (create_default_StringProperty(env, prop));
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   515
		}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   516
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   517
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   518
	for (i = 0; props_custom[i].prop != ZPROP_INVAL; i++) {
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   519
		if (prop == props_custom[i].prop) {
4787
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   520
			return create_default_ObjectProperty(env,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   521
			    props_custom[i].prop,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   522
			    props_custom[i].convert_str,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   523
			    props_custom[i].convert_uint64,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   524
			    props_custom[i].propClass,
602d3f97842c 6393351 unique_* could be improved
ahrens
parents: 3654
diff changeset
   525
			    props_custom[i].valueClass);
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   526
		}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   527
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   528
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   529
	return (NULL);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   530
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   531
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   532
static int
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   533
zjni_get_property_from_name_cb(int prop, void *cb)
3654
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 1356
diff changeset
   534
{
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 1356
diff changeset
   535
	const char *name = cb;
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 1356
diff changeset
   536
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 1356
diff changeset
   537
	if (strcasecmp(name, zfs_prop_to_name(prop)) == 0)
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 1356
diff changeset
   538
		return (prop);
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 1356
diff changeset
   539
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   540
	return (ZPROP_CONT);
3654
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 1356
diff changeset
   541
}
9c6042b08979 6483718 need a stable interface to get all native properties
gw25295
parents: 1356
diff changeset
   542
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   543
zfs_prop_t
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   544
zjni_get_property_from_name(const char *name)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   545
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   546
	zfs_prop_t prop;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   547
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   548
	prop = zprop_iter(zjni_get_property_from_name_cb, (void *)name,
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   549
	    B_FALSE, B_FALSE, ZFS_TYPE_DATASET);
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   550
	return (prop == ZPROP_CONT ? ZPROP_INVAL : prop);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   551
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   552
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   553
jobject
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   554
zjni_int_to_Lineage(JNIEnv *env, zprop_source_t srctype)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   555
{
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   556
	/* zprop_source_t to Property$Lineage map */
1206
84469f0f684d 6362897 JNI throws an UnsupportedOperationException on invalid dataset path
talley
parents: 1066
diff changeset
   557
	static zjni_field_mapping_t lineage_map[] = {
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   558
		{ ZPROP_SRC_NONE, "ZFS_PROP_LINEAGE_NOTINHERITABLE" },
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   559
		{ ZPROP_SRC_DEFAULT, "ZFS_PROP_LINEAGE_DEFAULT" },
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   560
		{ ZPROP_SRC_LOCAL, "ZFS_PROP_LINEAGE_LOCAL" },
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   561
		{ ZPROP_SRC_TEMPORARY, "ZFS_PROP_LINEAGE_TEMPORARY" },
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   562
		{ ZPROP_SRC_INHERITED, "ZFS_PROP_LINEAGE_INHERITED" }
1206
84469f0f684d 6362897 JNI throws an UnsupportedOperationException on invalid dataset path
talley
parents: 1066
diff changeset
   563
	};
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   564
1206
84469f0f684d 6362897 JNI throws an UnsupportedOperationException on invalid dataset path
talley
parents: 1066
diff changeset
   565
	return (zjni_int_to_enum(env, srctype,
84469f0f684d 6362897 JNI throws an UnsupportedOperationException on invalid dataset path
talley
parents: 1066
diff changeset
   566
	    ZFSJNI_PACKAGE_DATA "Property$Lineage",
84469f0f684d 6362897 JNI throws an UnsupportedOperationException on invalid dataset path
talley
parents: 1066
diff changeset
   567
	    "ZFS_PROP_LINEAGE_INHERITED", lineage_map));
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   568
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   569
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   570
jobjectArray
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   571
zjni_get_Dataset_properties(JNIEnv *env, zfs_handle_t *zhp)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   572
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   573
	jobject prop;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   574
	int i;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   575
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   576
	/* Create an array list for the properties */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   577
	zjni_ArrayList_t proplist_obj = {0};
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   578
	zjni_ArrayList_t *proplist = &proplist_obj;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   579
	zjni_new_ArrayList(env, proplist);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   580
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   581
	for (i = 0; props_boolean[i] != ZPROP_INVAL; i++) {
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   582
		/* Create property and add to list */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   583
		prop = create_BooleanProperty(env, zhp, props_boolean[i]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   584
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   585
		/* Does this property apply to this object? */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   586
		if (prop != NULL) {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   587
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   588
			(*env)->CallBooleanMethod(
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   589
			    env, ((zjni_Object_t *)proplist)->object,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   590
			    ((zjni_Collection_t *)proplist)->method_add, prop);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   591
		} else {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   592
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   593
			if ((*env)->ExceptionOccurred(env) != NULL) {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   594
				return (NULL);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   595
			}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   596
#ifdef	DEBUG
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   597
			(void) fprintf(stderr, "Property %s is not appropriate "
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   598
			    "for %s\n", zfs_prop_to_name(props_boolean[i]),
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   599
			    zfs_get_name(zhp));
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   600
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   601
		}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   602
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   603
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   604
	for (i = 0; props_long[i] != ZPROP_INVAL; i++) {
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   605
		/* Create property and add to list */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   606
		prop = create_LongProperty(env, zhp, props_long[i]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   607
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   608
		/* Does this property apply to this object? */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   609
		if (prop != NULL) {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   610
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   611
			(*env)->CallBooleanMethod(
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   612
			    env, ((zjni_Object_t *)proplist)->object,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   613
			    ((zjni_Collection_t *)proplist)->method_add, prop);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   614
		} else {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   615
			if ((*env)->ExceptionOccurred(env) != NULL) {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   616
				return (NULL);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   617
			}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   618
#ifdef	DEBUG
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   619
			(void) fprintf(stderr, "Property %s is not appropriate "
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   620
			    "for %s\n", zfs_prop_to_name(props_long[i]),
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   621
			    zfs_get_name(zhp));
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   622
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   623
		}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   624
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   625
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   626
	for (i = 0; props_string[i] != ZPROP_INVAL; i++) {
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   627
		/* Create property and add to list */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   628
		prop = create_StringProperty(env, zhp, props_string[i]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   629
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   630
		/* Does this property apply to this object? */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   631
		if (prop != NULL) {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   632
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   633
			(*env)->CallBooleanMethod(
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   634
			    env, ((zjni_Object_t *)proplist)->object,
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   635
			    ((zjni_Collection_t *)proplist)->method_add, prop);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   636
		} else {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   637
			if ((*env)->ExceptionOccurred(env) != NULL) {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   638
				return (NULL);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   639
			}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   640
#ifdef	DEBUG
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   641
			(void) fprintf(stderr, "Property %s is not appropriate "
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   642
			    "for %s\n", zfs_prop_to_name(props_string[i]),
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   643
			    zfs_get_name(zhp));
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   644
#endif
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   645
		}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   646
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   647
5094
71a3e95fb9e2 PSARC 2007/342 Enhanced ZFS Pool Properties
lling
parents: 4787
diff changeset
   648
	for (i = 0; props_custom[i].prop != ZPROP_INVAL; i++) {
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   649
		/* Create property and add to list */
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   650
		prop = create_ObjectProperty(env, zhp, props_custom[i].prop,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   651
		    props_custom[i].convert_str, props_custom[i].convert_uint64,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   652
		    props_custom[i].propClass, props_custom[i].valueClass);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   653
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   654
		/* Does this property apply to this object? */
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   655
		if (prop != NULL) {
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   656
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   657
			(*env)->CallBooleanMethod(
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   658
			    env, ((zjni_Object_t *)proplist)->object,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   659
			    ((zjni_Collection_t *)proplist)->method_add, prop);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   660
		} else {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   661
			if ((*env)->ExceptionOccurred(env) != NULL) {
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   662
				return (NULL);
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   663
			}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   664
#ifdef	DEBUG
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   665
			(void) fprintf(stderr, "Property %s is not appropriate "
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   666
			    "for %s\n", zfs_prop_to_name(props_custom[i].prop),
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   667
			    zfs_get_name(zhp));
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   668
#endif
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   669
		}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   670
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   671
1066
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   672
	return (zjni_Collection_to_array(env,
7ebdc59e2074 6350179 Update JNI to support new properties
talley
parents: 789
diff changeset
   673
	    (zjni_Collection_t *)proplist, ZFSJNI_PACKAGE_DATA "Property"));
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   674
}