xref: /dragonfly/contrib/lvm2/dist/tools/vgdisplay.c (revision d4ef6694)
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 
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 
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