| /* |
| * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. |
| * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. |
| * |
| * This file is part of LVM2. |
| * |
| * This copyrighted material is made available to anyone wishing to use, |
| * modify, copy, or redistribute it subject to the terms and conditions |
| * of the GNU Lesser General Public License v.2.1. |
| * |
| * You should have received a copy of the GNU Lesser General Public License |
| * along with this program; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| #include "tools.h" |
| |
| static int vgdisplay_single(struct cmd_context *cmd, const char *vg_name, |
| struct volume_group *vg, |
| struct processing_handle *handle __attribute__((unused))) |
| { |
| if (arg_is_set(cmd, activevolumegroups_ARG) && !lvs_in_vg_activated(vg)) |
| return ECMD_PROCESSED; |
| |
| if (arg_is_set(cmd, colon_ARG)) { |
| vgdisplay_colons(vg); |
| return ECMD_PROCESSED; |
| } |
| |
| if (arg_is_set(cmd, short_ARG)) { |
| vgdisplay_short(vg); |
| return ECMD_PROCESSED; |
| } |
| |
| vgdisplay_full(vg); /* was vg_show */ |
| |
| if (arg_is_set(cmd, verbose_ARG)) { |
| vgdisplay_extents(vg); |
| |
| process_each_lv_in_vg(cmd, vg, NULL, NULL, 0, NULL, |
| (process_single_lv_fn_t)lvdisplay_full); |
| |
| log_print("--- Physical volumes ---"); |
| process_each_pv_in_vg(cmd, vg, NULL, |
| (process_single_pv_fn_t)pvdisplay_short); |
| } |
| |
| check_current_backup(vg); |
| |
| return ECMD_PROCESSED; |
| } |
| |
| int vgdisplay(struct cmd_context *cmd, int argc, char **argv) |
| { |
| if (arg_is_set(cmd, columns_ARG)) { |
| if (arg_is_set(cmd, colon_ARG) || |
| arg_is_set(cmd, activevolumegroups_ARG) || |
| arg_is_set(cmd, short_ARG)) { |
| log_error("Incompatible options selected"); |
| return EINVALID_CMD_LINE; |
| } |
| return vgs(cmd, argc, argv); |
| } else if (arg_is_set(cmd, aligned_ARG) || |
| arg_is_set(cmd, binary_ARG) || |
| arg_is_set(cmd, noheadings_ARG) || |
| arg_is_set(cmd, options_ARG) || |
| arg_is_set(cmd, separator_ARG) || |
| arg_is_set(cmd, sort_ARG) || arg_is_set(cmd, unbuffered_ARG)) { |
| log_error("Incompatible options selected"); |
| return EINVALID_CMD_LINE; |
| } |
| |
| if (arg_is_set(cmd, colon_ARG) && arg_is_set(cmd, short_ARG)) { |
| log_error("Option -c is not allowed with option -s"); |
| return EINVALID_CMD_LINE; |
| } |
| |
| if (argc && arg_is_set(cmd, activevolumegroups_ARG)) { |
| log_error("Option -A is not allowed with volume group names"); |
| return EINVALID_CMD_LINE; |
| } |
| |
| /********* FIXME: Do without this - or else 2(+) passes! |
| Figure out longest volume group name |
| for (c = opt; opt < argc; opt++) { |
| len = strlen(argv[opt]); |
| if (len > max_len) |
| max_len = len; |
| } |
| **********/ |
| |
| return process_each_vg(cmd, argc, argv, NULL, NULL, 0, 0, NULL, |
| vgdisplay_single); |
| |
| /******** FIXME Need to count number processed |
| Add this to process_each_vg if arg_is_set(cmd,activevolumegroups_ARG) ? |
| |
| if (opt == argc) { |
| log_print("no "); |
| if (arg_is_set(cmd,activevolumegroups_ARG)) |
| printf("active "); |
| printf("volume groups found\n\n"); |
| return LVM_E_NO_VG; |
| } |
| ************/ |
| } |