usr/src/lib/libzfs/common/libzfs_util.c
author eschrock
Tue, 12 Jun 2007 13:18:17 -0700
changeset 4451 24fbf2d7a5d7
parent 4276 c42d49ffb16f
child 4543 12bb2876a62e
permissions -rw-r--r--
PSARC 2007/197 ZFS hotplug PSARC 2007/283 FMA for ZFS Phase 2 6401126 ZFS DE should verify that diagnosis is still valid before solving cases 6500545 ZFS does not handle changes in devids 6508521 zpool online should warn when it is being used incorrectly 6509807 ZFS checksum ereports are not being posted 6514712 zfs_nicenum() doesn't work with perfectly-sized buffers 6520510 media state doesn't get updated properly on device removal 6520513 ZFS should have better support for device removal 6520514 vdev state should be controlled through a single ioctl() 6520519 ZFS should diagnose faulty devices 6520947 ZFS DE should close cases which no longer apply 6521393 ZFS case timeout should be FMD_TYPE_TIME 6521624 fmd_hash_walk() can dump core when given a bad address 6521946 ZFS DE needlessly subscribes to faults 6522085 ZFS dictionary files contain spelling errors 6523185 vdev_reopen() doesn't correctly propagate state 6523555 'zpool online' should be less chatty unless something goes wrong 6527379 zpool(1M) should not try to open faulted devices 6527700 ZFS should post a sysevent when topology changes 6528194 lofi should support force unmap and DKIO_DEV_GONE 6528732 ZFS should store physical device path in addition to /dev path 6532635 ZFS keeps devices open unnecessarily 6532979 bad argument to ZFS_IOC_VDEV_ATTACH can panic system 6567983 deadlock with spa_scrub_thread() and spa_namespace_lock
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
1544
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1162
diff changeset
     5
 * Common Development and Distribution License (the "License").
938876158511 PSARC 2006/077 zpool clear
eschrock
parents: 1162
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
/*
3635
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
    22
 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    23
 * Use is subject to license terms.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    24
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    25
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    26
#pragma ident	"%Z%%M%	%I%	%E% SMI"
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    27
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    28
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    29
 * Internal utility routines for the ZFS library.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    30
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    31
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    32
#include <errno.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    33
#include <fcntl.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    34
#include <libintl.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    35
#include <stdarg.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    36
#include <stdio.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    37
#include <stdlib.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    38
#include <strings.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    39
#include <unistd.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    40
#include <sys/mnttab.h>
3635
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
    41
#include <sys/mntent.h>
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
    42
#include <sys/types.h>
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    43
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    44
#include <libzfs.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    45
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    46
#include "libzfs_impl.h"
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    47
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    48
int
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    49
libzfs_errno(libzfs_handle_t *hdl)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    50
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    51
	return (hdl->libzfs_error);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    52
}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    53
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    54
const char *
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    55
libzfs_error_action(libzfs_handle_t *hdl)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    56
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    57
	return (hdl->libzfs_action);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    58
}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    59
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    60
const char *
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    61
libzfs_error_description(libzfs_handle_t *hdl)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    62
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    63
	if (hdl->libzfs_desc[0] != '\0')
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    64
		return (hdl->libzfs_desc);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    65
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    66
	switch (hdl->libzfs_error) {
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    67
	case EZFS_NOMEM:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    68
		return (dgettext(TEXT_DOMAIN, "out of memory"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    69
	case EZFS_BADPROP:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    70
		return (dgettext(TEXT_DOMAIN, "invalid property value"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    71
	case EZFS_PROPREADONLY:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    72
		return (dgettext(TEXT_DOMAIN, "read only property"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    73
	case EZFS_PROPTYPE:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    74
		return (dgettext(TEXT_DOMAIN, "property doesn't apply to "
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    75
		    "datasets of this type"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    76
	case EZFS_PROPNONINHERIT:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    77
		return (dgettext(TEXT_DOMAIN, "property cannot be inherited"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    78
	case EZFS_PROPSPACE:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    79
		return (dgettext(TEXT_DOMAIN, "invalid quota or reservation"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    80
	case EZFS_BADTYPE:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    81
		return (dgettext(TEXT_DOMAIN, "operation not applicable to "
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    82
		    "datasets of this type"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    83
	case EZFS_BUSY:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    84
		return (dgettext(TEXT_DOMAIN, "pool or dataset is busy"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    85
	case EZFS_EXISTS:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    86
		return (dgettext(TEXT_DOMAIN, "pool or dataset exists"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    87
	case EZFS_NOENT:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    88
		return (dgettext(TEXT_DOMAIN, "no such pool or dataset"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    89
	case EZFS_BADSTREAM:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    90
		return (dgettext(TEXT_DOMAIN, "invalid backup stream"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    91
	case EZFS_DSREADONLY:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    92
		return (dgettext(TEXT_DOMAIN, "dataset is read only"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    93
	case EZFS_VOLTOOBIG:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    94
		return (dgettext(TEXT_DOMAIN, "volume size exceeds limit for "
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    95
		    "this system"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    96
	case EZFS_VOLHASDATA:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    97
		return (dgettext(TEXT_DOMAIN, "volume has data"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    98
	case EZFS_INVALIDNAME:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
    99
		return (dgettext(TEXT_DOMAIN, "invalid name"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   100
	case EZFS_BADRESTORE:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   101
		return (dgettext(TEXT_DOMAIN, "unable to restore to "
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   102
		    "destination"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   103
	case EZFS_BADBACKUP:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   104
		return (dgettext(TEXT_DOMAIN, "backup failed"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   105
	case EZFS_BADTARGET:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   106
		return (dgettext(TEXT_DOMAIN, "invalid target vdev"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   107
	case EZFS_NODEVICE:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   108
		return (dgettext(TEXT_DOMAIN, "no such device in pool"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   109
	case EZFS_BADDEV:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   110
		return (dgettext(TEXT_DOMAIN, "invalid device"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   111
	case EZFS_NOREPLICAS:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   112
		return (dgettext(TEXT_DOMAIN, "no valid replicas"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   113
	case EZFS_RESILVERING:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   114
		return (dgettext(TEXT_DOMAIN, "currently resilvering"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   115
	case EZFS_BADVERSION:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   116
		return (dgettext(TEXT_DOMAIN, "unsupported version"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   117
	case EZFS_POOLUNAVAIL:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   118
		return (dgettext(TEXT_DOMAIN, "pool is unavailable"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   119
	case EZFS_DEVOVERFLOW:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   120
		return (dgettext(TEXT_DOMAIN, "too many devices in one vdev"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   121
	case EZFS_BADPATH:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   122
		return (dgettext(TEXT_DOMAIN, "must be an absolute path"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   123
	case EZFS_CROSSTARGET:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   124
		return (dgettext(TEXT_DOMAIN, "operation crosses datasets or "
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   125
		    "pools"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   126
	case EZFS_ZONED:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   127
		return (dgettext(TEXT_DOMAIN, "dataset in use by local zone"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   128
	case EZFS_MOUNTFAILED:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   129
		return (dgettext(TEXT_DOMAIN, "mount failed"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   130
	case EZFS_UMOUNTFAILED:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   131
		return (dgettext(TEXT_DOMAIN, "umount failed"));
3126
4f4fb617fdd0 PSARC 2006/622 iSCSI/ZFS Integration
ahl
parents: 2926
diff changeset
   132
	case EZFS_UNSHARENFSFAILED:
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   133
		return (dgettext(TEXT_DOMAIN, "unshare(1M) failed"));
3126
4f4fb617fdd0 PSARC 2006/622 iSCSI/ZFS Integration
ahl
parents: 2926
diff changeset
   134
	case EZFS_SHARENFSFAILED:
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   135
		return (dgettext(TEXT_DOMAIN, "share(1M) failed"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   136
	case EZFS_DEVLINKS:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   137
		return (dgettext(TEXT_DOMAIN, "failed to create /dev links"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   138
	case EZFS_PERM:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   139
		return (dgettext(TEXT_DOMAIN, "permission denied"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   140
	case EZFS_NOSPC:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   141
		return (dgettext(TEXT_DOMAIN, "out of space"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   142
	case EZFS_IO:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   143
		return (dgettext(TEXT_DOMAIN, "I/O error"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   144
	case EZFS_INTR:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   145
		return (dgettext(TEXT_DOMAIN, "signal received"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   146
	case EZFS_ISSPARE:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   147
		return (dgettext(TEXT_DOMAIN, "device is reserved as a hot "
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   148
		    "spare"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   149
	case EZFS_INVALCONFIG:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   150
		return (dgettext(TEXT_DOMAIN, "invalid vdev configuration"));
2474
c001ad7e0c25 6368751 libzfs interface for mount/umounting all the file systems for a given pool
eschrock
parents: 2082
diff changeset
   151
	case EZFS_RECURSIVE:
c001ad7e0c25 6368751 libzfs interface for mount/umounting all the file systems for a given pool
eschrock
parents: 2082
diff changeset
   152
		return (dgettext(TEXT_DOMAIN, "recursive dataset dependency"));
2926
acfcfefbc60d PSARC 2006/288 zpool history
ek110237
parents: 2885
diff changeset
   153
	case EZFS_NOHISTORY:
acfcfefbc60d PSARC 2006/288 zpool history
ek110237
parents: 2885
diff changeset
   154
		return (dgettext(TEXT_DOMAIN, "no history available"));
3126
4f4fb617fdd0 PSARC 2006/622 iSCSI/ZFS Integration
ahl
parents: 2926
diff changeset
   155
	case EZFS_UNSHAREISCSIFAILED:
4f4fb617fdd0 PSARC 2006/622 iSCSI/ZFS Integration
ahl
parents: 2926
diff changeset
   156
		return (dgettext(TEXT_DOMAIN,
4f4fb617fdd0 PSARC 2006/622 iSCSI/ZFS Integration
ahl
parents: 2926
diff changeset
   157
		    "iscsitgtd failed request to unshare"));
4f4fb617fdd0 PSARC 2006/622 iSCSI/ZFS Integration
ahl
parents: 2926
diff changeset
   158
	case EZFS_SHAREISCSIFAILED:
4f4fb617fdd0 PSARC 2006/622 iSCSI/ZFS Integration
ahl
parents: 2926
diff changeset
   159
		return (dgettext(TEXT_DOMAIN,
4f4fb617fdd0 PSARC 2006/622 iSCSI/ZFS Integration
ahl
parents: 2926
diff changeset
   160
		    "iscsitgtd failed request to share"));
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   161
	case EZFS_POOLPROPS:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   162
		return (dgettext(TEXT_DOMAIN, "failed to retrieve "
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   163
		    "pool properties"));
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   164
	case EZFS_POOL_NOTSUP:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   165
		return (dgettext(TEXT_DOMAIN, "operation not supported "
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   166
		    "on this type of pool"));
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   167
	case EZFS_POOL_INVALARG:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   168
		return (dgettext(TEXT_DOMAIN, "invalid argument for "
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   169
		    "this pool operation"));
3978
2dd668007b7a 6533813 recursive snapshotting resulted in a bad stack overflow
mmusante
parents: 3912
diff changeset
   170
	case EZFS_NAMETOOLONG:
2dd668007b7a 6533813 recursive snapshotting resulted in a bad stack overflow
mmusante
parents: 3912
diff changeset
   171
		return (dgettext(TEXT_DOMAIN, "dataset name is too long"));
4276
c42d49ffb16f 6385547 zpool create of a mirror using a device and a slice of a device (of same size) reports an error
taylor
parents: 4180
diff changeset
   172
	case EZFS_OPENFAILED:
c42d49ffb16f 6385547 zpool create of a mirror using a device and a slice of a device (of same size) reports an error
taylor
parents: 4180
diff changeset
   173
		return (dgettext(TEXT_DOMAIN, "open failed"));
c42d49ffb16f 6385547 zpool create of a mirror using a device and a slice of a device (of same size) reports an error
taylor
parents: 4180
diff changeset
   174
	case EZFS_NOCAP:
c42d49ffb16f 6385547 zpool create of a mirror using a device and a slice of a device (of same size) reports an error
taylor
parents: 4180
diff changeset
   175
		return (dgettext(TEXT_DOMAIN,
c42d49ffb16f 6385547 zpool create of a mirror using a device and a slice of a device (of same size) reports an error
taylor
parents: 4180
diff changeset
   176
		    "disk capacity information could not be retrieved"));
c42d49ffb16f 6385547 zpool create of a mirror using a device and a slice of a device (of same size) reports an error
taylor
parents: 4180
diff changeset
   177
	case EZFS_LABELFAILED:
c42d49ffb16f 6385547 zpool create of a mirror using a device and a slice of a device (of same size) reports an error
taylor
parents: 4180
diff changeset
   178
		return (dgettext(TEXT_DOMAIN, "write of label failed"));
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   179
	case EZFS_UNKNOWN:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   180
		return (dgettext(TEXT_DOMAIN, "unknown error"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   181
	default:
2500
12e683f74751 6455228 zpool_mount_datasets() should take an additional flag
eschrock
parents: 2474
diff changeset
   182
		assert(hdl->libzfs_error == 0);
12e683f74751 6455228 zpool_mount_datasets() should take an additional flag
eschrock
parents: 2474
diff changeset
   183
		return (dgettext(TEXT_DOMAIN, "no error"));
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   184
	}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   185
}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   186
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   187
/*PRINTFLIKE2*/
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   188
void
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   189
zfs_error_aux(libzfs_handle_t *hdl, const char *fmt, ...)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   190
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   191
	va_list ap;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   192
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   193
	va_start(ap, fmt);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   194
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   195
	(void) vsnprintf(hdl->libzfs_desc, sizeof (hdl->libzfs_desc),
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   196
	    fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   197
	hdl->libzfs_desc_active = 1;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   198
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   199
	va_end(ap);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   200
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   201
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   202
static void
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   203
zfs_verror(libzfs_handle_t *hdl, int error, const char *fmt, va_list ap)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   204
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   205
	(void) vsnprintf(hdl->libzfs_action, sizeof (hdl->libzfs_action),
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   206
	    fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   207
	hdl->libzfs_error = error;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   208
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   209
	if (hdl->libzfs_desc_active)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   210
		hdl->libzfs_desc_active = 0;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   211
	else
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   212
		hdl->libzfs_desc[0] = '\0';
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   213
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   214
	if (hdl->libzfs_printerr) {
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   215
		if (error == EZFS_UNKNOWN) {
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   216
			(void) fprintf(stderr, dgettext(TEXT_DOMAIN, "internal "
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   217
			    "error: %s\n"), libzfs_error_description(hdl));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   218
			abort();
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   219
		}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   220
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   221
		(void) fprintf(stderr, "%s: %s\n", hdl->libzfs_action,
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   222
		    libzfs_error_description(hdl));
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   223
		if (error == EZFS_NOMEM)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   224
			exit(1);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   225
	}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   226
}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   227
3237
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   228
int
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   229
zfs_error(libzfs_handle_t *hdl, int error, const char *msg)
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   230
{
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   231
	return (zfs_error_fmt(hdl, error, "%s", msg));
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   232
}
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   233
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   234
/*PRINTFLIKE3*/
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   235
int
3237
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   236
zfs_error_fmt(libzfs_handle_t *hdl, int error, const char *fmt, ...)
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   237
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   238
	va_list ap;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   239
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   240
	va_start(ap, fmt);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   241
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   242
	zfs_verror(hdl, error, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   243
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   244
	va_end(ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   245
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   246
	return (-1);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   247
}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   248
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   249
static int
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   250
zfs_common_error(libzfs_handle_t *hdl, int error, const char *fmt,
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   251
    va_list ap)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   252
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   253
	switch (error) {
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   254
	case EPERM:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   255
	case EACCES:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   256
		zfs_verror(hdl, EZFS_PERM, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   257
		return (-1);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   258
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   259
	case EIO:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   260
		zfs_verror(hdl, EZFS_IO, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   261
		return (-1);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   262
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   263
	case EINTR:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   264
		zfs_verror(hdl, EZFS_INTR, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   265
		return (-1);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   266
	}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   267
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   268
	return (0);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   269
}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   270
3237
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   271
int
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   272
zfs_standard_error(libzfs_handle_t *hdl, int error, const char *msg)
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   273
{
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   274
	return (zfs_standard_error_fmt(hdl, error, "%s", msg));
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   275
}
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   276
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   277
/*PRINTFLIKE3*/
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   278
int
3237
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   279
zfs_standard_error_fmt(libzfs_handle_t *hdl, int error, const char *fmt, ...)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   280
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   281
	va_list ap;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   282
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   283
	va_start(ap, fmt);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   284
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   285
	if (zfs_common_error(hdl, error, fmt, ap) != 0) {
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   286
		va_end(ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   287
		return (-1);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   288
	}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   289
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   290
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   291
	switch (error) {
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   292
	case ENXIO:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   293
		zfs_verror(hdl, EZFS_IO, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   294
		break;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   295
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   296
	case ENOENT:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   297
		zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   298
		    "dataset does not exist"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   299
		zfs_verror(hdl, EZFS_NOENT, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   300
		break;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   301
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   302
	case ENOSPC:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   303
	case EDQUOT:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   304
		zfs_verror(hdl, EZFS_NOSPC, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   305
		return (-1);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   306
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   307
	case EEXIST:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   308
		zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   309
		    "dataset already exists"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   310
		zfs_verror(hdl, EZFS_EXISTS, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   311
		break;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   312
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   313
	case EBUSY:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   314
		zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   315
		    "dataset is busy"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   316
		zfs_verror(hdl, EZFS_BUSY, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   317
		break;
3978
2dd668007b7a 6533813 recursive snapshotting resulted in a bad stack overflow
mmusante
parents: 3912
diff changeset
   318
2dd668007b7a 6533813 recursive snapshotting resulted in a bad stack overflow
mmusante
parents: 3912
diff changeset
   319
	case ENAMETOOLONG:
2dd668007b7a 6533813 recursive snapshotting resulted in a bad stack overflow
mmusante
parents: 3912
diff changeset
   320
		zfs_verror(hdl, EZFS_NAMETOOLONG, fmt, ap);
2dd668007b7a 6533813 recursive snapshotting resulted in a bad stack overflow
mmusante
parents: 3912
diff changeset
   321
		break;
2dd668007b7a 6533813 recursive snapshotting resulted in a bad stack overflow
mmusante
parents: 3912
diff changeset
   322
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   323
	default:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   324
		zfs_error_aux(hdl, strerror(errno));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   325
		zfs_verror(hdl, EZFS_UNKNOWN, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   326
		break;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   327
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   328
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   329
	va_end(ap);
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   330
	return (-1);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   331
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   332
3237
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   333
int
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   334
zpool_standard_error(libzfs_handle_t *hdl, int error, const char *msg)
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   335
{
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   336
	return (zpool_standard_error_fmt(hdl, error, "%s", msg));
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   337
}
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   338
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   339
/*PRINTFLIKE3*/
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   340
int
3237
98d0c28f2f5e 6480245 renaming a dataset to something with '%s' will cause segfault
lling
parents: 3126
diff changeset
   341
zpool_standard_error_fmt(libzfs_handle_t *hdl, int error, const char *fmt, ...)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   342
{
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   343
	va_list ap;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   344
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   345
	va_start(ap, fmt);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   346
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   347
	if (zfs_common_error(hdl, error, fmt, ap) != 0) {
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   348
		va_end(ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   349
		return (-1);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   350
	}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   351
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   352
	switch (error) {
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   353
	case ENODEV:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   354
		zfs_verror(hdl, EZFS_NODEVICE, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   355
		break;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   356
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   357
	case ENOENT:
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   358
		zfs_error_aux(hdl,
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   359
		    dgettext(TEXT_DOMAIN, "no such pool or dataset"));
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   360
		zfs_verror(hdl, EZFS_NOENT, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   361
		break;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   362
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   363
	case EEXIST:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   364
		zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   365
		    "pool already exists"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   366
		zfs_verror(hdl, EZFS_EXISTS, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   367
		break;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   368
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   369
	case EBUSY:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   370
		zfs_error_aux(hdl, dgettext(TEXT_DOMAIN, "pool is busy"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   371
		zfs_verror(hdl, EZFS_EXISTS, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   372
		break;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   373
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   374
	case ENXIO:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   375
		zfs_error_aux(hdl, dgettext(TEXT_DOMAIN,
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   376
		    "one or more devices is currently unavailable"));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   377
		zfs_verror(hdl, EZFS_BADDEV, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   378
		break;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   379
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   380
	case ENAMETOOLONG:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   381
		zfs_verror(hdl, EZFS_DEVOVERFLOW, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   382
		break;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   383
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   384
	case ENOTSUP:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   385
		zfs_verror(hdl, EZFS_POOL_NOTSUP, fmt, ap);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   386
		break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   387
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   388
	case EINVAL:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   389
		zfs_verror(hdl, EZFS_POOL_INVALARG, fmt, ap);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   390
		break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   391
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   392
	default:
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   393
		zfs_error_aux(hdl, strerror(error));
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   394
		zfs_verror(hdl, EZFS_UNKNOWN, fmt, ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   395
	}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   396
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   397
	va_end(ap);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   398
	return (-1);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   399
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   400
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   401
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   402
 * Display an out of memory error message and abort the current program.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   403
 */
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   404
int
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   405
no_memory(libzfs_handle_t *hdl)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   406
{
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   407
	return (zfs_error(hdl, EZFS_NOMEM, "internal error"));
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   408
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   409
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   410
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   411
 * A safe form of malloc() which will die if the allocation fails.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   412
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   413
void *
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   414
zfs_alloc(libzfs_handle_t *hdl, size_t size)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   415
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   416
	void *data;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   417
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   418
	if ((data = calloc(1, size)) == NULL)
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   419
		(void) no_memory(hdl);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   420
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   421
	return (data);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   422
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   423
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   424
/*
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   425
 * A safe form of realloc(), which also zeroes newly allocated space.
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   426
 */
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   427
void *
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   428
zfs_realloc(libzfs_handle_t *hdl, void *ptr, size_t oldsize, size_t newsize)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   429
{
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   430
	void *ret;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   431
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   432
	if ((ret = realloc(ptr, newsize)) == NULL) {
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   433
		(void) no_memory(hdl);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   434
		free(ptr);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   435
		return (NULL);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   436
	}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   437
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   438
	bzero((char *)ret + oldsize, (newsize - oldsize));
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   439
	return (ret);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   440
}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   441
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   442
/*
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   443
 * A safe form of strdup() which will die if the allocation fails.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   444
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   445
char *
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   446
zfs_strdup(libzfs_handle_t *hdl, const char *str)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   447
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   448
	char *ret;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   449
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   450
	if ((ret = strdup(str)) == NULL)
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   451
		(void) no_memory(hdl);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   452
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   453
	return (ret);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   454
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   455
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   456
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   457
 * Convert a number to an appropriately human-readable output.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   458
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   459
void
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   460
zfs_nicenum(uint64_t num, char *buf, size_t buflen)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   461
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   462
	uint64_t n = num;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   463
	int index = 0;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   464
	char u;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   465
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   466
	while (n >= 1024) {
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   467
		n /= 1024;
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   468
		index++;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   469
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   470
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   471
	u = " KMGTPE"[index];
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   472
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   473
	if (index == 0) {
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   474
		(void) snprintf(buf, buflen, "%llu", n);
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   475
	} else if ((num & ((1ULL << 10 * index) - 1)) == 0) {
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   476
		/*
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   477
		 * If this is an even multiple of the base, always display
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   478
		 * without any decimal precision.
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   479
		 */
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   480
		(void) snprintf(buf, buflen, "%llu%c", n, u);
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   481
	} else {
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   482
		/*
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   483
		 * We want to choose a precision that reflects the best choice
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   484
		 * for fitting in 5 characters.  This can get rather tricky when
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   485
		 * we have numbers that are very close to an order of magnitude.
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   486
		 * For example, when displaying 10239 (which is really 9.999K),
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   487
		 * we want only a single place of precision for 10.0K.  We could
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   488
		 * develop some complex heuristics for this, but it's much
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   489
		 * easier just to try each combination in turn.
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   490
		 */
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   491
		int i;
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   492
		for (i = 2; i >= 0; i--) {
4451
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 4276
diff changeset
   493
			if (snprintf(buf, buflen, "%.*f%c", i,
24fbf2d7a5d7 PSARC 2007/197 ZFS hotplug
eschrock
parents: 4276
diff changeset
   494
			    (double)num / (1ULL << 10 * index), u) <= 5)
1162
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   495
				break;
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   496
		}
38b998160113 6353528 'Short' property name should be lowercase
eschrock
parents: 789
diff changeset
   497
	}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   498
}
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   499
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   500
void
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   501
libzfs_print_on_error(libzfs_handle_t *hdl, boolean_t printerr)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   502
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   503
	hdl->libzfs_printerr = printerr;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   504
}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   505
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   506
libzfs_handle_t *
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   507
libzfs_init(void)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   508
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   509
	libzfs_handle_t *hdl;
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   510
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   511
	if ((hdl = calloc(sizeof (libzfs_handle_t), 1)) == NULL) {
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   512
		return (NULL);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   513
	}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   514
2500
12e683f74751 6455228 zpool_mount_datasets() should take an additional flag
eschrock
parents: 2474
diff changeset
   515
	if ((hdl->libzfs_fd = open(ZFS_DEV, O_RDWR)) < 0) {
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   516
		free(hdl);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   517
		return (NULL);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   518
	}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   519
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   520
	if ((hdl->libzfs_mnttab = fopen(MNTTAB, "r")) == NULL) {
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   521
		(void) close(hdl->libzfs_fd);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   522
		free(hdl);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   523
		return (NULL);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   524
	}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   525
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   526
	hdl->libzfs_sharetab = fopen("/etc/dfs/sharetab", "r");
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   527
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   528
	return (hdl);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   529
}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   530
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   531
void
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   532
libzfs_fini(libzfs_handle_t *hdl)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   533
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   534
	(void) close(hdl->libzfs_fd);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   535
	if (hdl->libzfs_mnttab)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   536
		(void) fclose(hdl->libzfs_mnttab);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   537
	if (hdl->libzfs_sharetab)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   538
		(void) fclose(hdl->libzfs_sharetab);
4180
30b15f0bd3c9 6491973 sharemgr: zfs set sharenfs=on is slow with lots of zfs filesystems
dougm
parents: 3978
diff changeset
   539
	zfs_uninit_libshare(hdl);
2082
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   540
	namespace_clear(hdl);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   541
	free(hdl);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   542
}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   543
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   544
libzfs_handle_t *
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   545
zpool_get_handle(zpool_handle_t *zhp)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   546
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   547
	return (zhp->zpool_hdl);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   548
}
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   549
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   550
libzfs_handle_t *
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   551
zfs_get_handle(zfs_handle_t *zhp)
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   552
{
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   553
	return (zhp->zfs_hdl);
76b439ec3ac1 PSARC 2006/223 ZFS Hot Spares
eschrock
parents: 1544
diff changeset
   554
}
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   555
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   556
/*
3635
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   557
 * Given a name, determine whether or not it's a valid path
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   558
 * (starts with '/' or "./").  If so, walk the mnttab trying
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   559
 * to match the device number.  If not, treat the path as an
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   560
 * fs/vol/snap name.
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   561
 */
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   562
zfs_handle_t *
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   563
zfs_path_to_zhandle(libzfs_handle_t *hdl, char *path, zfs_type_t argtype)
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   564
{
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   565
	struct stat64 statbuf;
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   566
	struct extmnttab entry;
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   567
	int ret;
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   568
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   569
	if (path[0] != '/' && strncmp(path, "./", strlen("./")) != 0) {
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   570
		/*
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   571
		 * It's not a valid path, assume it's a name of type 'argtype'.
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   572
		 */
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   573
		return (zfs_open(hdl, path, argtype));
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   574
	}
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   575
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   576
	if (stat64(path, &statbuf) != 0) {
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   577
		(void) fprintf(stderr, "%s: %s\n", path, strerror(errno));
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   578
		return (NULL);
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   579
	}
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   580
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   581
	rewind(hdl->libzfs_mnttab);
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   582
	while ((ret = getextmntent(hdl->libzfs_mnttab, &entry, 0)) == 0) {
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   583
		if (makedevice(entry.mnt_major, entry.mnt_minor) ==
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   584
		    statbuf.st_dev) {
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   585
			break;
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   586
		}
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   587
	}
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   588
	if (ret != 0) {
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   589
		return (NULL);
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   590
	}
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   591
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   592
	if (strcmp(entry.mnt_fstype, MNTTYPE_ZFS) != 0) {
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   593
		(void) fprintf(stderr, gettext("'%s': not a ZFS filesystem\n"),
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   594
		    path);
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   595
		return (NULL);
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   596
	}
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   597
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   598
	return (zfs_open(hdl, entry.mnt_special, ZFS_TYPE_FILESYSTEM));
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   599
}
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   600
63e2169c1249 PSARC 2007/050 zfs list -d
ck153898
parents: 3237
diff changeset
   601
/*
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   602
 * Initialize the zc_nvlist_dst member to prepare for receiving an nvlist from
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   603
 * an ioctl().
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   604
 */
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   605
int
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   606
zcmd_alloc_dst_nvlist(libzfs_handle_t *hdl, zfs_cmd_t *zc, size_t len)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   607
{
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   608
	if (len == 0)
2885
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2676
diff changeset
   609
		len = 2048;
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   610
	zc->zc_nvlist_dst_size = len;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   611
	if ((zc->zc_nvlist_dst = (uint64_t)(uintptr_t)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   612
	    zfs_alloc(hdl, zc->zc_nvlist_dst_size)) == NULL)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   613
		return (-1);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   614
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   615
	return (0);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   616
}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   617
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   618
/*
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   619
 * Called when an ioctl() which returns an nvlist fails with ENOMEM.  This will
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   620
 * expand the nvlist to the size specified in 'zc_nvlist_dst_size', which was
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   621
 * filled in by the kernel to indicate the actual required size.
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   622
 */
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   623
int
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   624
zcmd_expand_dst_nvlist(libzfs_handle_t *hdl, zfs_cmd_t *zc)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   625
{
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   626
	free((void *)(uintptr_t)zc->zc_nvlist_dst);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   627
	if ((zc->zc_nvlist_dst = (uint64_t)(uintptr_t)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   628
	    zfs_alloc(hdl, zc->zc_nvlist_dst_size))
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   629
	    == NULL)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   630
		return (-1);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   631
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   632
	return (0);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   633
}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   634
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   635
/*
2885
c0259887ebbc 6460059 zfs destroy <snapshot> leaves behind kruft
ahrens
parents: 2676
diff changeset
   636
 * Called to free the src and dst nvlists stored in the command structure.
2676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   637
 */
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   638
void
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   639
zcmd_free_nvlists(zfs_cmd_t *zc)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   640
{
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   641
	free((void *)(uintptr_t)zc->zc_nvlist_src);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   642
	free((void *)(uintptr_t)zc->zc_nvlist_dst);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   643
}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   644
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   645
int
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   646
zcmd_write_src_nvlist(libzfs_handle_t *hdl, zfs_cmd_t *zc, nvlist_t *nvl,
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   647
    size_t *size)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   648
{
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   649
	char *packed;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   650
	size_t len;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   651
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   652
	verify(nvlist_size(nvl, &len, NV_ENCODE_NATIVE) == 0);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   653
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   654
	if ((packed = zfs_alloc(hdl, len)) == NULL)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   655
		return (-1);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   656
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   657
	verify(nvlist_pack(nvl, &packed, &len, NV_ENCODE_NATIVE, 0) == 0);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   658
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   659
	zc->zc_nvlist_src = (uint64_t)(uintptr_t)packed;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   660
	zc->zc_nvlist_src_size = len;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   661
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   662
	if (size)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   663
		*size = len;
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   664
	return (0);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   665
}
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   666
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   667
/*
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   668
 * Unpacks an nvlist from the ZFS ioctl command structure.
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   669
 */
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   670
int
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   671
zcmd_read_dst_nvlist(libzfs_handle_t *hdl, zfs_cmd_t *zc, nvlist_t **nvlp)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   672
{
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   673
	if (nvlist_unpack((void *)(uintptr_t)zc->zc_nvlist_dst,
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   674
	    zc->zc_nvlist_dst_size, nvlp, 0) != 0)
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   675
		return (no_memory(hdl));
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   676
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   677
	return (0);
5cee47eddab6 PSARC 2006/486 ZFS canmount property
eschrock
parents: 2500
diff changeset
   678
}
3912
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   679
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   680
static void
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   681
zfs_print_prop_headers(libzfs_get_cbdata_t *cbp)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   682
{
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   683
	zfs_proplist_t *pl = cbp->cb_proplist;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   684
	int i;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   685
	char *title;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   686
	size_t len;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   687
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   688
	cbp->cb_first = B_FALSE;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   689
	if (cbp->cb_scripted)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   690
		return;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   691
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   692
	/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   693
	 * Start with the length of the column headers.
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   694
	 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   695
	cbp->cb_colwidths[GET_COL_NAME] = strlen(dgettext(TEXT_DOMAIN, "NAME"));
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   696
	cbp->cb_colwidths[GET_COL_PROPERTY] = strlen(dgettext(TEXT_DOMAIN,
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   697
	    "PROPERTY"));
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   698
	cbp->cb_colwidths[GET_COL_VALUE] = strlen(dgettext(TEXT_DOMAIN,
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   699
	    "VALUE"));
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   700
	cbp->cb_colwidths[GET_COL_SOURCE] = strlen(dgettext(TEXT_DOMAIN,
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   701
	    "SOURCE"));
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   702
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   703
	/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   704
	 * Go through and calculate the widths for each column.  For the
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   705
	 * 'source' column, we kludge it up by taking the worst-case scenario of
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   706
	 * inheriting from the longest name.  This is acceptable because in the
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   707
	 * majority of cases 'SOURCE' is the last column displayed, and we don't
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   708
	 * use the width anyway.  Note that the 'VALUE' column can be oversized,
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   709
	 * if the name of the property is much longer the any values we find.
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   710
	 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   711
	for (pl = cbp->cb_proplist; pl != NULL; pl = pl->pl_next) {
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   712
		/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   713
		 * 'PROPERTY' column
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   714
		 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   715
		if (pl->pl_prop != ZFS_PROP_INVAL) {
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   716
			len = strlen(zfs_prop_to_name(pl->pl_prop));
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   717
			if (len > cbp->cb_colwidths[GET_COL_PROPERTY])
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   718
				cbp->cb_colwidths[GET_COL_PROPERTY] = len;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   719
		} else {
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   720
			len = strlen(pl->pl_user_prop);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   721
			if (len > cbp->cb_colwidths[GET_COL_PROPERTY])
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   722
				cbp->cb_colwidths[GET_COL_PROPERTY] = len;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   723
		}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   724
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   725
		/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   726
		 * 'VALUE' column
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   727
		 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   728
		if ((pl->pl_prop != ZFS_PROP_NAME || !pl->pl_all) &&
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   729
		    pl->pl_width > cbp->cb_colwidths[GET_COL_VALUE])
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   730
			cbp->cb_colwidths[GET_COL_VALUE] = pl->pl_width;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   731
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   732
		/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   733
		 * 'NAME' and 'SOURCE' columns
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   734
		 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   735
		if (pl->pl_prop == ZFS_PROP_NAME &&
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   736
		    pl->pl_width > cbp->cb_colwidths[GET_COL_NAME]) {
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   737
			cbp->cb_colwidths[GET_COL_NAME] = pl->pl_width;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   738
			cbp->cb_colwidths[GET_COL_SOURCE] = pl->pl_width +
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   739
			    strlen(dgettext(TEXT_DOMAIN, "inherited from"));
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   740
		}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   741
	}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   742
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   743
	/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   744
	 * Now go through and print the headers.
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   745
	 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   746
	for (i = 0; i < 4; i++) {
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   747
		switch (cbp->cb_columns[i]) {
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   748
		case GET_COL_NAME:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   749
			title = dgettext(TEXT_DOMAIN, "NAME");
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   750
			break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   751
		case GET_COL_PROPERTY:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   752
			title = dgettext(TEXT_DOMAIN, "PROPERTY");
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   753
			break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   754
		case GET_COL_VALUE:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   755
			title = dgettext(TEXT_DOMAIN, "VALUE");
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   756
			break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   757
		case GET_COL_SOURCE:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   758
			title = dgettext(TEXT_DOMAIN, "SOURCE");
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   759
			break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   760
		default:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   761
			title = NULL;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   762
		}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   763
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   764
		if (title != NULL) {
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   765
			if (i == 3 || cbp->cb_columns[i + 1] == 0)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   766
				(void) printf("%s", title);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   767
			else
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   768
				(void) printf("%-*s  ",
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   769
				    cbp->cb_colwidths[cbp->cb_columns[i]],
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   770
				    title);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   771
		}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   772
	}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   773
	(void) printf("\n");
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   774
}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   775
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   776
/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   777
 * Display a single line of output, according to the settings in the callback
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   778
 * structure.
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   779
 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   780
void
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   781
libzfs_print_one_property(const char *name, libzfs_get_cbdata_t *cbp,
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   782
    const char *propname, const char *value, zfs_source_t sourcetype,
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   783
    const char *source)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   784
{
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   785
	int i;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   786
	const char *str;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   787
	char buf[128];
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   788
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   789
	/*
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   790
	 * Ignore those source types that the user has chosen to ignore.
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   791
	 */
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   792
	if ((sourcetype & cbp->cb_sources) == 0)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   793
		return;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   794
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   795
	if (cbp->cb_first)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   796
		zfs_print_prop_headers(cbp);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   797
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   798
	for (i = 0; i < 4; i++) {
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   799
		switch (cbp->cb_columns[i]) {
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   800
		case GET_COL_NAME:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   801
			str = name;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   802
			break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   803
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   804
		case GET_COL_PROPERTY:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   805
			str = propname;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   806
			break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   807
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   808
		case GET_COL_VALUE:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   809
			str = value;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   810
			break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   811
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   812
		case GET_COL_SOURCE:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   813
			switch (sourcetype) {
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   814
			case ZFS_SRC_NONE:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   815
				str = "-";
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   816
				break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   817
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   818
			case ZFS_SRC_DEFAULT:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   819
				str = "default";
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   820
				break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   821
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   822
			case ZFS_SRC_LOCAL:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   823
				str = "local";
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   824
				break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   825
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   826
			case ZFS_SRC_TEMPORARY:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   827
				str = "temporary";
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   828
				break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   829
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   830
			case ZFS_SRC_INHERITED:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   831
				(void) snprintf(buf, sizeof (buf),
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   832
				    "inherited from %s", source);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   833
				str = buf;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   834
				break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   835
			}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   836
			break;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   837
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   838
		default:
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   839
			continue;
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   840
		}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   841
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   842
		if (cbp->cb_columns[i + 1] == 0)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   843
			(void) printf("%s", str);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   844
		else if (cbp->cb_scripted)
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   845
			(void) printf("%s\t", str);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   846
		else
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   847
			(void) printf("%-*s  ",
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   848
			    cbp->cb_colwidths[cbp->cb_columns[i]],
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   849
			    str);
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   850
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   851
	}
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   852
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   853
	(void) printf("\n");
f6891a60bd72 PSARC 2007/083 ZFS bootable datasets
lling
parents: 3635
diff changeset
   854
}