summaryrefslogtreecommitdiff
path: root/usr/src/cmd/zfs
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/zfs')
-rw-r--r--usr/src/cmd/zfs/zfs_iter.c12
-rw-r--r--usr/src/cmd/zfs/zfs_iter.h4
-rw-r--r--usr/src/cmd/zfs/zfs_main.c8
3 files changed, 15 insertions, 9 deletions
diff --git a/usr/src/cmd/zfs/zfs_iter.c b/usr/src/cmd/zfs/zfs_iter.c
index c2d4260d8f..eb6b8b14dc 100644
--- a/usr/src/cmd/zfs/zfs_iter.c
+++ b/usr/src/cmd/zfs/zfs_iter.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -311,7 +311,7 @@ zfs_sort(const void *larg, const void *rarg, void *data)
int
zfs_for_each(int argc, char **argv, boolean_t recurse, zfs_type_t types,
zfs_sort_column_t *sortcol, zfs_proplist_t **proplist, zfs_iter_f callback,
- void *data)
+ void *data, boolean_t args_can_be_paths)
{
callback_data_t cb;
int ret = 0;
@@ -361,7 +361,13 @@ zfs_for_each(int argc, char **argv, boolean_t recurse, zfs_type_t types,
}
for (i = 0; i < argc; i++) {
- if ((zhp = zfs_open(g_zfs, argv[i], argtype)) != NULL)
+ if (args_can_be_paths) {
+ zhp = zfs_path_to_zhandle(g_zfs, argv[i],
+ argtype);
+ } else {
+ zhp = zfs_open(g_zfs, argv[i], argtype);
+ }
+ if (zhp != NULL)
ret |= zfs_callback(zhp, &cb);
else
ret = 1;
diff --git a/usr/src/cmd/zfs/zfs_iter.h b/usr/src/cmd/zfs/zfs_iter.h
index d5c735d604..1f0ce8eb6f 100644
--- a/usr/src/cmd/zfs/zfs_iter.h
+++ b/usr/src/cmd/zfs/zfs_iter.h
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -41,7 +41,7 @@ typedef struct zfs_sort_column {
} zfs_sort_column_t;
int zfs_for_each(int, char **, boolean_t, zfs_type_t, zfs_sort_column_t *,
- zfs_proplist_t **, zfs_iter_f, void *);
+ zfs_proplist_t **, zfs_iter_f, void *, boolean_t);
int zfs_add_sort_column(zfs_sort_column_t **, const char *, boolean_t);
void zfs_free_sort_columns(zfs_sort_column_t *);
diff --git a/usr/src/cmd/zfs/zfs_main.c b/usr/src/cmd/zfs/zfs_main.c
index 1e728a1eda..6abfb3097e 100644
--- a/usr/src/cmd/zfs/zfs_main.c
+++ b/usr/src/cmd/zfs/zfs_main.c
@@ -1273,7 +1273,7 @@ zfs_do_get(int argc, char **argv)
/* run for each object */
ret = zfs_for_each(argc, argv, recurse, ZFS_TYPE_ANY, NULL,
- &cb.cb_proplist, get_callback, &cb);
+ &cb.cb_proplist, get_callback, &cb, B_FALSE);
if (cb.cb_proplist == &fake_name)
zfs_free_proplist(fake_name.pl_next);
@@ -1378,7 +1378,7 @@ zfs_do_inherit(int argc, char **argv)
ret = zfs_for_each(argc, argv, recurse,
ZFS_TYPE_FILESYSTEM | ZFS_TYPE_VOLUME, NULL, NULL,
- inherit_callback, &cb);
+ inherit_callback, &cb, B_FALSE);
if (cb.cb_any_successful) {
zpool_log_history(g_zfs, argc + optind + 1, argv - optind - 1,
@@ -1628,7 +1628,7 @@ zfs_do_list(int argc, char **argv)
cb.cb_first = B_TRUE;
ret = zfs_for_each(argc, argv, recurse, types, sortcol, &cb.cb_proplist,
- list_callback, &cb);
+ list_callback, &cb, B_TRUE);
zfs_free_proplist(cb.cb_proplist);
zfs_free_sort_columns(sortcol);
@@ -1983,7 +1983,7 @@ zfs_do_set(int argc, char **argv)
}
ret = zfs_for_each(argc - 2, argv + 2, B_FALSE,
- ZFS_TYPE_ANY, NULL, NULL, set_callback, &cb);
+ ZFS_TYPE_ANY, NULL, NULL, set_callback, &cb, B_FALSE);
if (cb.cb_any_successful) {
*(cb.cb_value - 1) = '=';