Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/openzfs/cmd/zfs_ids_to_path.c
48259 views
1
// SPDX-License-Identifier: CDDL-1.0
2
/*
3
* CDDL HEADER START
4
*
5
* The contents of this file are subject to the terms of the
6
* Common Development and Distribution License (the "License").
7
* You may not use this file except in compliance with the License.
8
*
9
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10
* or https://opensource.org/licenses/CDDL-1.0.
11
* See the License for the specific language governing permissions
12
* and limitations under the License.
13
*
14
* When distributing Covered Code, include this CDDL HEADER in each
15
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16
* If applicable, add the following below this CDDL HEADER, with the
17
* fields enclosed by brackets "[]" replaced with your own identifying
18
* information: Portions Copyright [yyyy] [name of copyright owner]
19
*
20
* CDDL HEADER END
21
*/
22
/*
23
* Copyright (c) 2019 by Delphix. All rights reserved.
24
*/
25
#include <libintl.h>
26
#include <unistd.h>
27
#include <sys/types.h>
28
#include <stdint.h>
29
#include <libzfs.h>
30
#include <stdio.h>
31
#include <stdlib.h>
32
#include <errno.h>
33
34
libzfs_handle_t *g_zfs;
35
36
static void
37
usage(int err)
38
{
39
fprintf(stderr, "Usage: zfs_ids_to_path [-v] <pool> <objset id> "
40
"<object id>\n");
41
exit(err);
42
}
43
44
int
45
main(int argc, char **argv)
46
{
47
boolean_t verbose = B_FALSE;
48
int c;
49
while ((c = getopt(argc, argv, "v")) != -1) {
50
switch (c) {
51
case 'v':
52
verbose = B_TRUE;
53
break;
54
}
55
}
56
argc -= optind;
57
argv += optind;
58
59
if (argc != 3) {
60
(void) fprintf(stderr, "Incorrect number of arguments: %d\n",
61
argc);
62
usage(1);
63
}
64
65
uint64_t objset, object;
66
if (sscanf(argv[1], "%llu", (u_longlong_t *)&objset) != 1) {
67
(void) fprintf(stderr, "Invalid objset id: %s\n", argv[1]);
68
usage(2);
69
}
70
if (sscanf(argv[2], "%llu", (u_longlong_t *)&object) != 1) {
71
(void) fprintf(stderr, "Invalid object id: %s\n", argv[2]);
72
usage(3);
73
}
74
if ((g_zfs = libzfs_init()) == NULL) {
75
(void) fprintf(stderr, "%s\n", libzfs_error_init(errno));
76
return (4);
77
}
78
zpool_handle_t *pool = zpool_open(g_zfs, argv[0]);
79
if (pool == NULL) {
80
fprintf(stderr, "Could not open pool %s\n", argv[0]);
81
libzfs_fini(g_zfs);
82
return (5);
83
}
84
85
char pathname[PATH_MAX * 2];
86
if (verbose) {
87
zpool_obj_to_path_ds(pool, objset, object, pathname,
88
sizeof (pathname));
89
} else {
90
zpool_obj_to_path(pool, objset, object, pathname,
91
sizeof (pathname));
92
}
93
printf("%s\n", pathname);
94
zpool_close(pool);
95
libzfs_fini(g_zfs);
96
return (0);
97
}
98
99