1 /* $NetBSD: vgdisplay.c,v 1.1.1.2 2009/12/02 00:25:57 haad Exp $ */
2
3 /*
4 * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
5 * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved.
6 *
7 * This file is part of LVM2.
8 *
9 * This copyrighted material is made available to anyone wishing to use,
10 * modify, copy, or redistribute it subject to the terms and conditions
11 * of the GNU Lesser General Public License v.2.1.
12 *
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software Foundation,
15 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 */
17
18 #include "tools.h"
19
vgdisplay_single(struct cmd_context * cmd,const char * vg_name,struct volume_group * vg,void * handle __attribute ((unused)))20 static int vgdisplay_single(struct cmd_context *cmd, const char *vg_name,
21 struct volume_group *vg,
22 void *handle __attribute((unused)))
23 {
24 /* FIXME Do the active check here if activevolumegroups_ARG ? */
25 vg_check_status(vg, EXPORTED_VG);
26
27 if (arg_count(cmd, colon_ARG)) {
28 vgdisplay_colons(vg);
29 return ECMD_PROCESSED;
30 }
31
32 if (arg_count(cmd, short_ARG)) {
33 vgdisplay_short(vg);
34 return ECMD_PROCESSED;
35 }
36
37 vgdisplay_full(vg); /* was vg_show */
38
39 if (arg_count(cmd, verbose_ARG)) {
40 vgdisplay_extents(vg);
41
42 process_each_lv_in_vg(cmd, vg, NULL, NULL, NULL,
43 (process_single_lv_fn_t)lvdisplay_full);
44
45 log_print("--- Physical volumes ---");
46 process_each_pv_in_vg(cmd, vg, NULL, NULL,
47 (process_single_pv_fn_t)pvdisplay_short);
48 }
49
50 check_current_backup(vg);
51
52 return ECMD_PROCESSED;
53 }
54
vgdisplay(struct cmd_context * cmd,int argc,char ** argv)55 int vgdisplay(struct cmd_context *cmd, int argc, char **argv)
56 {
57 if (arg_count(cmd, columns_ARG)) {
58 if (arg_count(cmd, colon_ARG) ||
59 arg_count(cmd, activevolumegroups_ARG) ||
60 arg_count(cmd, short_ARG)) {
61 log_error("Incompatible options selected");
62 return EINVALID_CMD_LINE;
63 }
64 return vgs(cmd, argc, argv);
65 } else if (arg_count(cmd, aligned_ARG) ||
66 arg_count(cmd, noheadings_ARG) ||
67 arg_count(cmd, options_ARG) ||
68 arg_count(cmd, separator_ARG) ||
69 arg_count(cmd, sort_ARG) || arg_count(cmd, unbuffered_ARG)) {
70 log_error("Incompatible options selected");
71 return EINVALID_CMD_LINE;
72 }
73
74 if (arg_count(cmd, colon_ARG) && arg_count(cmd, short_ARG)) {
75 log_error("Option -c is not allowed with option -s");
76 return EINVALID_CMD_LINE;
77 }
78
79 if (argc && arg_count(cmd, activevolumegroups_ARG)) {
80 log_error("Option -A is not allowed with volume group names");
81 return EINVALID_CMD_LINE;
82 }
83
84 /********* FIXME: Do without this - or else 2(+) passes!
85 Figure out longest volume group name
86 for (c = opt; opt < argc; opt++) {
87 len = strlen(argv[opt]);
88 if (len > max_len)
89 max_len = len;
90 }
91 **********/
92
93 return process_each_vg(cmd, argc, argv, 0, NULL,
94 vgdisplay_single);
95
96 /******** FIXME Need to count number processed
97 Add this to process_each_vg if arg_count(cmd,activevolumegroups_ARG) ?
98
99 if (opt == argc) {
100 log_print("no ");
101 if (arg_count(cmd,activevolumegroups_ARG))
102 printf("active ");
103 printf("volume groups found\n\n");
104 return LVM_E_NO_VG;
105 }
106 ************/
107 }
108