#include "props.h"
#include "ctree.h"
#include "utils.h"
+#include "help.h"
static const char * const property_cmd_group_usage[] = {
"btrfs property get/set/list [-t <type>] <object> [<name>] [value]",
return -1;
}
-static int get_fsid(const char *path, u8 *fsid, int silent)
-{
- int ret;
- int fd;
- struct btrfs_ioctl_fs_info_args args;
-
- fd = open(path, O_RDONLY);
- if (fd < 0) {
- ret = -errno;
- if (!silent)
- error("failed to open %s: %s", path,
- strerror(-ret));
- goto out;
- }
-
- ret = ioctl(fd, BTRFS_IOC_FS_INFO, &args);
- if (ret < 0) {
- ret = -errno;
- goto out;
- }
-
- memcpy(fsid, args.fsid, BTRFS_FSID_SIZE);
- ret = 0;
-
-out:
- if (fd != -1)
- close(fd);
- return ret;
-}
-
static int check_btrfs_object(const char *object)
{
int ret;
return ret;
}
-static int print_prop_help(const struct prop_handler *prop)
-{
- fprintf(stdout, "%-20s%s\n", prop->name, prop->desc);
- return 0;
-}
-
static int dump_prop(const struct prop_handler *prop,
const char *object,
int types,
if (!name_and_help)
ret = prop->handler(type, object, prop->name, NULL);
else
- ret = print_prop_help(prop);
+ printf("%-20s%s\n", prop->name, prop->desc);
}
return ret;
}
static void parse_args(int argc, char **argv,
const char * const *usage_str,
int *types, char **object,
- char **name, char **value)
+ char **name, char **value, int min_nonopt_args)
{
int ret;
char *type_str = NULL;
+ int max_nonopt_args = 1;
optind = 1;
while (1) {
}
}
+ if (name)
+ max_nonopt_args++;
+ if (value)
+ max_nonopt_args++;
+
+ if (check_argc_min(argc - optind, min_nonopt_args) ||
+ check_argc_max(argc - optind, max_nonopt_args))
+ usage(usage_str);
+
*types = 0;
if (type_str) {
if (!strcmp(type_str, "s") || !strcmp(type_str, "subvol")) {
}
}
- if (object && optind < argc)
- *object = argv[optind++];
- if (name && optind < argc)
+ *object = argv[optind++];
+ if (optind < argc)
*name = argv[optind++];
- if (value && optind < argc)
+ if (optind < argc)
*value = argv[optind++];
- if (optind != argc) {
- error("unexpected agruments found");
- usage(usage_str);
- }
-
- if (!*types && object && *object) {
+ if (!*types) {
ret = autodetect_object_types(*object, types);
if (ret < 0) {
error("failed to detect object type: %s",
char *name = NULL;
int types = 0;
- clean_args_no_options(argc, argv, cmd_property_get_usage);
-
- if (check_argc_min(argc, 2) || check_argc_max(argc, 5))
- usage(cmd_property_get_usage);
-
parse_args(argc, argv, cmd_property_get_usage, &types, &object, &name,
- NULL);
- if (!object) {
- error("invalid arguments");
- usage(cmd_property_get_usage);
- }
+ NULL, 1);
if (name)
ret = setget_prop(types, object, name, NULL);
char *value = NULL;
int types = 0;
- clean_args_no_options(argc, argv, cmd_property_set_usage);
-
- if (check_argc_min(argc, 4) || check_argc_max(argc, 6))
- usage(cmd_property_set_usage);
-
parse_args(argc, argv, cmd_property_set_usage, &types,
- &object, &name, &value);
- if (!object || !name || !value) {
- error("invalid arguments");
- usage(cmd_property_set_usage);
- }
+ &object, &name, &value, 3);
ret = setget_prop(types, object, name, value);
char *object = NULL;
int types = 0;
- clean_args_no_options(argc, argv, cmd_property_list_usage);
-
- if (check_argc_min(argc, 2) || check_argc_max(argc, 4))
- usage(cmd_property_list_usage);
-
parse_args(argc, argv, cmd_property_list_usage,
- &types, &object, NULL, NULL);
- if (!object) {
- error("invalid arguments");
- usage(cmd_property_list_usage);
- }
+ &types, &object, NULL, NULL, 1);
ret = dump_props(types, object, 1);