static int cmd_device_usage(int argc, char **argv) { unsigned unit_mode; int ret = 0; int i; unit_mode = get_unit_mode_from_arg(&argc, argv, 1); clean_args_no_options(argc, argv, cmd_device_usage_usage); if (check_argc_min(argc - optind, 1)) usage(cmd_device_usage_usage); for (i = optind; i < argc; i++) { int fd; DIR *dirstream = NULL; if (i > 1) printf("\n"); fd = btrfs_open_dir(argv[i], &dirstream, 1); if (fd < 0) { ret = 1; break; } ret = _cmd_device_usage(fd, argv[i], unit_mode); close_file_or_dir(fd, dirstream); if (ret) break; } return !!ret; }
int cmd_device_usage(int argc, char **argv) { unsigned unit_mode = UNITS_DEFAULT; int ret = 0; int i, more_than_one = 0; optind = 1; while (1) { int c; static const struct option long_options[] = { { "raw", no_argument, NULL, 'b'}, { "kbytes", no_argument, NULL, 'k'}, { "mbytes", no_argument, NULL, 'm'}, { "gbytes", no_argument, NULL, 'g'}, { "tbytes", no_argument, NULL, 't'}, { "si", no_argument, NULL, GETOPT_VAL_SI}, { "iec", no_argument, NULL, GETOPT_VAL_IEC}, { "human-readable", no_argument, NULL, GETOPT_VAL_HUMAN_READABLE}, { NULL, 0, NULL, 0 } }; c = getopt_long(argc, argv, "bhHkmgt", long_options, NULL); if (c < 0) break; switch (c) { case 'b': unit_mode = UNITS_RAW; break; case 'k': units_set_base(&unit_mode, UNITS_KBYTES); break; case 'm': units_set_base(&unit_mode, UNITS_MBYTES); break; case 'g': units_set_base(&unit_mode, UNITS_GBYTES); break; case 't': units_set_base(&unit_mode, UNITS_TBYTES); break; case GETOPT_VAL_HUMAN_READABLE: case 'h': unit_mode = UNITS_HUMAN_BINARY; break; case 'H': unit_mode = UNITS_HUMAN_DECIMAL; break; case GETOPT_VAL_SI: units_set_mode(&unit_mode, UNITS_DECIMAL); break; case GETOPT_VAL_IEC: units_set_mode(&unit_mode, UNITS_BINARY); break; default: usage(cmd_device_usage_usage); } } if (check_argc_min(argc - optind, 1)) usage(cmd_device_usage_usage); for (i = optind; i < argc ; i++) { int fd; DIR *dirstream = NULL; if (more_than_one) printf("\n"); fd = open_file_or_dir(argv[i], &dirstream); if (fd < 0) { fprintf(stderr, "ERROR: can't access '%s'\n", argv[1]); ret = 1; goto out; } ret = _cmd_device_usage(fd, argv[i], unit_mode); close_file_or_dir(fd, dirstream); if (ret) goto out; more_than_one = 1; } out: return !!ret; }