diff options
Diffstat (limited to 'usr/src/cmd/zfs')
-rw-r--r-- | usr/src/cmd/zfs/zfs_iter.c | 12 | ||||
-rw-r--r-- | usr/src/cmd/zfs/zfs_iter.h | 4 | ||||
-rw-r--r-- | usr/src/cmd/zfs/zfs_main.c | 8 |
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) = '='; |