1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

Const fixing

Fixing some const warnings - with API change in:

int vg_extend(struct volume_group *vg, int pv_count, const char *const *pv_names,

Change is needed - as lvm2api expects const behaviour here.
So vg_extend() is doing local strdup for unescaping.

skip_dev_dir return const char* from const char* vg_name.

Rest of the patch is cleanup of related warnings.

Also using dm_report_filed_string() API change to simplify
casting in _string_disp and _lvname_disp.
This commit is contained in:
Zdenek Kabelac 2011-02-18 14:47:28 +00:00
parent 2f321615f2
commit aec2115410
26 changed files with 67 additions and 63 deletions

View File

@ -1,5 +1,6 @@
Version 2.02.85 - Version 2.02.85 -
=================================== ===================================
Fixing some const cast gcc warnings in the code.
Use char* arithmetic in _text_write(), _text_read() & send_message(). Use char* arithmetic in _text_write(), _text_read() & send_message().
Fix compilation when devmapper is dissabled. Fix compilation when devmapper is dissabled.
Remove fs_unlock() from lv_suspend error path. Remove fs_unlock() from lv_suspend error path.

View File

@ -2091,7 +2091,7 @@ error:
return -1; return -1;
} }
void process_message(struct local_client *client, const char *buf, int len, void process_message(struct local_client *client, char *buf, int len,
const char *csid) const char *csid)
{ {
struct clvm_header *inheader; struct clvm_header *inheader;

View File

@ -112,7 +112,7 @@ extern void cmd_client_cleanup(struct local_client *client);
extern int add_client(struct local_client *new_client); extern int add_client(struct local_client *new_client);
extern void clvmd_cluster_init_completed(void); extern void clvmd_cluster_init_completed(void);
extern void process_message(struct local_client *client, const char *buf, extern void process_message(struct local_client *client, char *buf,
int len, const char *csid); int len, const char *csid);
extern void debuglog(const char *fmt, ... ) extern void debuglog(const char *fmt, ... )
__attribute__ ((format(printf, 1, 2))); __attribute__ ((format(printf, 1, 2)));

View File

@ -162,7 +162,7 @@ int lv_snapshot_percent(const struct logical_volume *lv, percent_t *percent)
{ {
return 0; return 0;
} }
int lv_mirror_percent(struct cmd_context *cmd, struct logical_volume *lv, int lv_mirror_percent(struct cmd_context *cmd, const struct logical_volume *lv,
int wait, percent_t *percent, uint32_t *event_nr) int wait, percent_t *percent, uint32_t *event_nr)
{ {
return 0; return 0;
@ -568,7 +568,7 @@ int lv_snapshot_percent(const struct logical_volume *lv, percent_t *percent)
} }
/* FIXME Merge with snapshot_percent */ /* FIXME Merge with snapshot_percent */
int lv_mirror_percent(struct cmd_context *cmd, struct logical_volume *lv, int lv_mirror_percent(struct cmd_context *cmd, const struct logical_volume *lv,
int wait, percent_t *percent, uint32_t *event_nr) int wait, percent_t *percent, uint32_t *event_nr)
{ {
int r; int r;

View File

@ -85,7 +85,7 @@ int lv_check_transient(struct logical_volume *lv);
* Returns 1 if percent has been set, else 0. * Returns 1 if percent has been set, else 0.
*/ */
int lv_snapshot_percent(const struct logical_volume *lv, percent_t *percent); int lv_snapshot_percent(const struct logical_volume *lv, percent_t *percent);
int lv_mirror_percent(struct cmd_context *cmd, struct logical_volume *lv, int lv_mirror_percent(struct cmd_context *cmd, const struct logical_volume *lv,
int wait, percent_t *percent, uint32_t *event_nr); int wait, percent_t *percent, uint32_t *event_nr);
/* /*

View File

@ -135,7 +135,7 @@ static int _build_matcher(struct rfilter *rf, const struct config_value *val)
/* /*
* build the matcher. * build the matcher.
*/ */
if (!(rf->engine = dm_regex_create(rf->mem, (const char **) regex, if (!(rf->engine = dm_regex_create(rf->mem, (const char * const*) regex,
count))) count)))
goto_out; goto_out;
r = 1; r = 1;

View File

@ -23,7 +23,7 @@ struct replicator_device;
struct logical_volume { struct logical_volume {
union lvid lvid; union lvid lvid;
char *name; const char *name;
struct volume_group *vg; struct volume_group *vg;

View File

@ -1897,7 +1897,8 @@ static int _rename_sub_lv(struct cmd_context *cmd,
struct logical_volume *lv, struct logical_volume *lv,
const char *lv_name_old, const char *lv_name_new) const char *lv_name_old, const char *lv_name_new)
{ {
char *suffix, *new_name; const char *suffix;
char *new_name;
size_t len; size_t len;
/* /*

View File

@ -410,9 +410,9 @@ void vg_remove_pvs(struct volume_group *vg);
int vg_remove(struct volume_group *vg); int vg_remove(struct volume_group *vg);
int vg_rename(struct cmd_context *cmd, struct volume_group *vg, int vg_rename(struct cmd_context *cmd, struct volume_group *vg,
const char *new_name); const char *new_name);
int vg_extend(struct volume_group *vg, int pv_count, char **pv_names, int vg_extend(struct volume_group *vg, int pv_count, const char *const *pv_names,
struct pvcreate_params *pp); struct pvcreate_params *pp);
int vg_reduce(struct volume_group *vg, char *pv_name); int vg_reduce(struct volume_group *vg, const char *pv_name);
int vg_change_tag(struct volume_group *vg, const char *tag, int add_tag); int vg_change_tag(struct volume_group *vg, const char *tag, int add_tag);
int vg_split_mdas(struct cmd_context *cmd, struct volume_group *vg_from, int vg_split_mdas(struct cmd_context *cmd, struct volume_group *vg_from,
struct volume_group *vg_to); struct volume_group *vg_to);
@ -698,7 +698,7 @@ struct logical_volume *find_pvmove_lv_from_pvname(struct cmd_context *cmd,
uint32_t lv_type); uint32_t lv_type);
const char *get_pvmove_pvname_from_lv(struct logical_volume *lv); const char *get_pvmove_pvname_from_lv(struct logical_volume *lv);
const char *get_pvmove_pvname_from_lv_mirr(struct logical_volume *lv_mirr); const char *get_pvmove_pvname_from_lv_mirr(struct logical_volume *lv_mirr);
percent_t copy_percent(struct logical_volume *lv_mirr); percent_t copy_percent(const struct logical_volume *lv_mirr);
struct dm_list *lvs_using_lv(struct cmd_context *cmd, struct volume_group *vg, struct dm_list *lvs_using_lv(struct cmd_context *cmd, struct volume_group *vg,
struct logical_volume *lv); struct logical_volume *lv);
@ -721,7 +721,7 @@ int lv_has_unknown_segments(const struct logical_volume *lv);
int vg_has_unknown_segments(const struct volume_group *vg); int vg_has_unknown_segments(const struct volume_group *vg);
struct vgcreate_params { struct vgcreate_params {
char *vg_name; const char *vg_name;
uint32_t extent_size; uint32_t extent_size;
size_t max_pv; size_t max_pv;
size_t max_lv; size_t max_lv;

View File

@ -662,33 +662,38 @@ static int vg_extend_single_pv(struct volume_group *vg, char *pv_name,
* - pp: parameters to pass to implicit pvcreate; if NULL, do not pvcreate * - pp: parameters to pass to implicit pvcreate; if NULL, do not pvcreate
* *
*/ */
int vg_extend(struct volume_group *vg, int pv_count, char **pv_names, int vg_extend(struct volume_group *vg, int pv_count, const char *const *pv_names,
struct pvcreate_params *pp) struct pvcreate_params *pp)
{ {
int i; int i;
char *pv_name;
if (_vg_bad_status_bits(vg, RESIZEABLE_VG)) if (_vg_bad_status_bits(vg, RESIZEABLE_VG))
return 0; return 0;
/* attach each pv */ /* attach each pv */
for (i = 0; i < pv_count; i++) { for (i = 0; i < pv_count; i++) {
unescape_colons_and_at_signs(pv_names[i], NULL, NULL); if (!(pv_name = dm_strdup(pv_names[i]))) {
if (!vg_extend_single_pv(vg, pv_names[i], pp)) log_error("Failed to duplicate pv name %s.", pv_names[i]);
goto bad; return 0;
}
unescape_colons_and_at_signs(pv_name, NULL, NULL);
if (!vg_extend_single_pv(vg, pv_name, pp)) {
log_error("Unable to add physical volume '%s' to "
"volume group '%s'.", pv_name, vg->name);
dm_free(pv_name);
return 0;
}
dm_free(pv_name);
} }
/* FIXME Decide whether to initialise and add new mdahs to format instance */ /* FIXME Decide whether to initialise and add new mdahs to format instance */
return 1; return 1;
bad:
log_error("Unable to add physical volume '%s' to "
"volume group '%s'.", pv_names[i], vg->name);
return 0;
} }
/* FIXME: use this inside vgreduce_single? */ /* FIXME: use this inside vgreduce_single? */
int vg_reduce(struct volume_group *vg, char *pv_name) int vg_reduce(struct volume_group *vg, const char *pv_name)
{ {
struct physical_volume *pv; struct physical_volume *pv;
struct pv_list *pvl; struct pv_list *pvl;
@ -1875,7 +1880,7 @@ int vgs_are_compatible(struct cmd_context *cmd __attribute__((unused)),
{ {
struct lv_list *lvl1, *lvl2; struct lv_list *lvl1, *lvl2;
struct pv_list *pvl; struct pv_list *pvl;
char *name1, *name2; const char *name1, *name2;
if (lvs_in_vg_activated(vg_from)) { if (lvs_in_vg_activated(vg_from)) {
log_error("Logical volumes in \"%s\" must be inactive", log_error("Logical volumes in \"%s\" must be inactive",

View File

@ -1514,7 +1514,7 @@ struct dm_list *lvs_using_lv(struct cmd_context *cmd, struct volume_group *vg,
return lvs; return lvs;
} }
percent_t copy_percent(struct logical_volume *lv_mirr) percent_t copy_percent(const struct logical_volume *lv_mirr)
{ {
uint32_t numerator = 0u, denominator = 0u; uint32_t numerator = 0u, denominator = 0u;
struct lv_segment *seg; struct lv_segment *seg;
@ -1727,8 +1727,8 @@ static struct logical_volume *_set_up_mirror_log(struct cmd_context *cmd,
int in_sync) int in_sync)
{ {
struct logical_volume *log_lv; struct logical_volume *log_lv;
const char *suffix, *c; const char *suffix, *lv_name;
char *lv_name; char *tmp_name;
size_t len; size_t len;
struct lv_segment *seg; struct lv_segment *seg;
@ -1747,21 +1747,21 @@ static struct logical_volume *_set_up_mirror_log(struct cmd_context *cmd,
strstr(seg_lv(seg, 0)->name, MIRROR_SYNC_LAYER)) { strstr(seg_lv(seg, 0)->name, MIRROR_SYNC_LAYER)) {
lv_name = lv->name; lv_name = lv->name;
suffix = "_mlogtmp_%d"; suffix = "_mlogtmp_%d";
} else if ((c = strstr(lv->name, MIRROR_SYNC_LAYER))) { } else if ((lv_name = strstr(lv->name, MIRROR_SYNC_LAYER))) {
len = c - lv->name + 1; len = lv_name - lv->name + 1;
if (!(lv_name = alloca(len)) || if (!(tmp_name = alloca(len)) ||
!dm_snprintf(lv_name, len, "%s", lv->name)) { !dm_snprintf(tmp_name, len, "%s", lv->name)) {
log_error("mirror log name allocation failed"); log_error("mirror log name allocation failed");
return 0; return 0;
} }
lv_name = tmp_name;
suffix = "_mlog"; suffix = "_mlog";
} else { } else {
lv_name = lv->name; lv_name = lv->name;
suffix = "_mlog"; suffix = "_mlog";
} }
if (!(log_lv = _create_mirror_log(lv, ah, alloc, if (!(log_lv = _create_mirror_log(lv, ah, alloc, lv_name, suffix))) {
(const char *) lv_name, suffix))) {
log_error("Failed to create mirror log."); log_error("Failed to create mirror log.");
return NULL; return NULL;
} }

View File

@ -88,8 +88,7 @@ static int _not_implemented_set(void *obj, struct lvm_property_type *prop)
static percent_t _copy_percent(const struct logical_volume *lv) { static percent_t _copy_percent(const struct logical_volume *lv) {
percent_t perc; percent_t perc;
if (!lv_mirror_percent(lv->vg->cmd, (struct logical_volume *) lv, if (!lv_mirror_percent(lv->vg->cmd, lv, 0, &perc, NULL))
0, &perc, NULL))
perc = PERCENT_INVALID; perc = PERCENT_INVALID;
return perc; return perc;
} }

View File

@ -44,7 +44,7 @@ static int _string_disp(struct dm_report *rh, struct dm_pool *mem __attribute__(
struct dm_report_field *field, struct dm_report_field *field,
const void *data, void *private __attribute__((unused))) const void *data, void *private __attribute__((unused)))
{ {
return dm_report_field_string(rh, field, (const char **) data); return dm_report_field_string(rh, field, (const char * const *) data);
} }
static int _dev_name_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)), static int _dev_name_disp(struct dm_report *rh, struct dm_pool *mem __attribute__((unused)),
@ -307,10 +307,8 @@ static int _lvname_disp(struct dm_report *rh, struct dm_pool *mem,
char *repstr, *lvname; char *repstr, *lvname;
size_t len; size_t len;
if (lv_is_visible(lv)) { if (lv_is_visible(lv))
repstr = lv->name; return dm_report_field_string(rh, field, &lv->name);
return dm_report_field_string(rh, field, (const char **) &repstr);
}
len = strlen(lv->name) + 3; len = strlen(lv->name) + 3;
if (!(repstr = dm_pool_zalloc(mem, len))) { if (!(repstr = dm_pool_zalloc(mem, len))) {
@ -615,7 +613,7 @@ static int _uuid_disp(struct dm_report *rh __attribute__((unused)), struct dm_po
{ {
char *repstr = NULL; char *repstr = NULL;
if (!(repstr = id_format_and_copy(mem, (struct id *)data))) if (!(repstr = id_format_and_copy(mem, data)))
return_0; return_0;
dm_report_field_set_value(field, repstr, NULL); dm_report_field_set_value(field, repstr, NULL);
@ -853,7 +851,7 @@ static int _copypercent_disp(struct dm_report *rh __attribute__((unused)),
struct dm_report_field *field, struct dm_report_field *field,
const void *data, void *private __attribute__((unused))) const void *data, void *private __attribute__((unused)))
{ {
struct logical_volume *lv = (struct logical_volume *) data; const struct logical_volume *lv = (const struct logical_volume *) data;
percent_t percent; percent_t percent;
uint64_t *sortval; uint64_t *sortval;
char *repstr; char *repstr;
@ -899,7 +897,7 @@ static struct format_instance _dummy_fid = {
static struct volume_group _dummy_vg = { static struct volume_group _dummy_vg = {
.fid = &_dummy_fid, .fid = &_dummy_fid,
.name = (char *) "", .name = "",
.system_id = (char *) "", .system_id = (char *) "",
.pvs = { &(_dummy_vg.pvs), &(_dummy_vg.pvs) }, .pvs = { &(_dummy_vg.pvs), &(_dummy_vg.pvs) },
.lvs = { &(_dummy_vg.lvs), &(_dummy_vg.lvs) }, .lvs = { &(_dummy_vg.lvs), &(_dummy_vg.lvs) },

View File

@ -158,7 +158,7 @@ int id_write_format(const struct id *id, char *buffer, size_t size)
{ {
int i, tot; int i, tot;
static unsigned group_size[] = { 6, 4, 4, 4, 4, 4, 6 }; static const unsigned group_size[] = { 6, 4, 4, 4, 4, 4, 6 };
assert(ID_LEN == 32); assert(ID_LEN == 32);

View File

@ -79,7 +79,7 @@ int lvm_vg_extend(vg_t vg, const char *device)
} }
pvcreate_params_set_defaults(&pp); pvcreate_params_set_defaults(&pp);
if (!vg_extend(vg, 1, (char **) &device, &pp)) { if (!vg_extend(vg, 1, &device, &pp)) {
unlock_vg(vg->cmd, VG_ORPHANS); unlock_vg(vg->cmd, VG_ORPHANS);
return -1; return -1;
} }
@ -98,7 +98,7 @@ int lvm_vg_reduce(vg_t vg, const char *device)
if (!vg_check_write_mode(vg)) if (!vg_check_write_mode(vg))
return -1; return -1;
if (!vg_reduce(vg, (char *)device)) if (!vg_reduce(vg, device))
return -1; return -1;
return 0; return 0;
} }

View File

@ -31,7 +31,7 @@ static int _lvcreate_name_params(struct lvcreate_params *lp,
{ {
int argc = *pargc; int argc = *pargc;
char **argv = *pargv, *ptr; char **argv = *pargv, *ptr;
char *vg_name; const char *vg_name;
lp->lv_name = arg_str_value(cmd, name_ARG, NULL); lp->lv_name = arg_str_value(cmd, name_ARG, NULL);

View File

@ -61,7 +61,7 @@ static int _pvsegs_sub_single(struct cmd_context *cmd,
struct volume_group _free_vg = { struct volume_group _free_vg = {
.cmd = cmd, .cmd = cmd,
.name = (char *)"", .name = "",
}; };
if (!(_free_vg.vgmem = dm_pool_create("_free_vg", 10240))) if (!(_free_vg.vgmem = dm_pool_create("_free_vg", 10240)))
@ -69,7 +69,7 @@ static int _pvsegs_sub_single(struct cmd_context *cmd,
struct logical_volume _free_logical_volume = { struct logical_volume _free_logical_volume = {
.vg = vg ?: &_free_vg, .vg = vg ?: &_free_vg,
.name = (char *) "", .name = "",
.snapshot = NULL, .snapshot = NULL,
.status = VISIBLE_LV, .status = VISIBLE_LV,
.major = -1, .major = -1,

View File

@ -28,7 +28,7 @@ const char *command_name(struct cmd_context *cmd)
/* /*
* Strip dev_dir if present * Strip dev_dir if present
*/ */
char *skip_dev_dir(struct cmd_context *cmd, const char *vg_name, const char *skip_dev_dir(struct cmd_context *cmd, const char *vg_name,
unsigned *dev_dir_found) unsigned *dev_dir_found)
{ {
const char *dmdir = dm_dir(); const char *dmdir = dm_dir();
@ -54,7 +54,7 @@ char *skip_dev_dir(struct cmd_context *cmd, const char *vg_name,
*layer) { *layer) {
log_error("skip_dev_dir: Couldn't split up device name %s", log_error("skip_dev_dir: Couldn't split up device name %s",
vg_name); vg_name);
return (char *) vg_name; return vg_name;
} }
vglv_sz = strlen(vgname) + strlen(lvname) + 2; vglv_sz = strlen(vgname) + strlen(lvname) + 2;
if (!(vglv = dm_pool_alloc(cmd->mem, vglv_sz)) || if (!(vglv = dm_pool_alloc(cmd->mem, vglv_sz)) ||
@ -62,7 +62,7 @@ char *skip_dev_dir(struct cmd_context *cmd, const char *vg_name,
*lvname ? "/" : "", *lvname ? "/" : "",
lvname) < 0) { lvname) < 0) {
log_error("vg/lv string alloc failed"); log_error("vg/lv string alloc failed");
return (char *) vg_name; return vg_name;
} }
return vglv; return vglv;
} }
@ -76,7 +76,7 @@ char *skip_dev_dir(struct cmd_context *cmd, const char *vg_name,
} else if (dev_dir_found) } else if (dev_dir_found)
*dev_dir_found = 0; *dev_dir_found = 0;
return (char *) vg_name; return vg_name;
} }
/* /*
@ -898,7 +898,7 @@ const char *extract_vgname(struct cmd_context *cmd, const char *lv_name)
*/ */
char *default_vgname(struct cmd_context *cmd) char *default_vgname(struct cmd_context *cmd)
{ {
char *vg_path; const char *vg_path;
/* Take default VG from environment? */ /* Take default VG from environment? */
vg_path = getenv("LVM_VG_NAME"); vg_path = getenv("LVM_VG_NAME");

View File

@ -84,8 +84,8 @@ int process_each_lv_in_vg(struct cmd_context *cmd,
char *default_vgname(struct cmd_context *cmd); char *default_vgname(struct cmd_context *cmd);
const char *extract_vgname(struct cmd_context *cmd, const char *lv_name); const char *extract_vgname(struct cmd_context *cmd, const char *lv_name);
char *skip_dev_dir(struct cmd_context *cmd, const char *vg_name, const char *skip_dev_dir(struct cmd_context *cmd, const char *vg_name,
unsigned *dev_dir_found); unsigned *dev_dir_found);
/* /*
* Builds a list of pv's from the names in argv. Used in * Builds a list of pv's from the names in argv. Used in

View File

@ -17,7 +17,7 @@
int vgcfgrestore(struct cmd_context *cmd, int argc, char **argv) int vgcfgrestore(struct cmd_context *cmd, int argc, char **argv)
{ {
char *vg_name = NULL; const char *vg_name = NULL;
if (argc == 1) { if (argc == 1) {
vg_name = skip_dev_dir(cmd, argv[0], NULL); vg_name = skip_dev_dir(cmd, argv[0], NULL);

View File

@ -74,7 +74,7 @@ int vgcreate(struct cmd_context *cmd, int argc, char **argv)
} }
/* attach the pv's */ /* attach the pv's */
if (!vg_extend(vg, argc, argv, &pp)) if (!vg_extend(vg, argc, (const char* const*)argv, &pp))
goto_bad; goto_bad;
if (vp_new.max_lv != vg->max_lv) if (vp_new.max_lv != vg->max_lv)

View File

@ -40,7 +40,7 @@ static int _restore_pv(struct volume_group *vg, char *pv_name)
int vgextend(struct cmd_context *cmd, int argc, char **argv) int vgextend(struct cmd_context *cmd, int argc, char **argv)
{ {
char *vg_name; const char *vg_name;
struct volume_group *vg = NULL; struct volume_group *vg = NULL;
int r = ECMD_FAILED; int r = ECMD_FAILED;
struct pvcreate_params pp; struct pvcreate_params pp;
@ -107,7 +107,7 @@ int vgextend(struct cmd_context *cmd, int argc, char **argv)
} }
/* extend vg */ /* extend vg */
if (!vg_extend(vg, argc, argv, &pp)) if (!vg_extend(vg, argc, (const char* const*)argv, &pp))
goto_bad; goto_bad;
if (arg_count(cmd, metadataignore_ARG) && if (arg_count(cmd, metadataignore_ARG) &&

View File

@ -163,7 +163,7 @@ bad:
int vgmerge(struct cmd_context *cmd, int argc, char **argv) int vgmerge(struct cmd_context *cmd, int argc, char **argv)
{ {
char *vg_name_to, *vg_name_from; const char *vg_name_to, *vg_name_from;
int opt = 0; int opt = 0;
int ret = 0, ret_max = 0; int ret = 0, ret_max = 0;

View File

@ -457,7 +457,7 @@ bad:
int vgreduce(struct cmd_context *cmd, int argc, char **argv) int vgreduce(struct cmd_context *cmd, int argc, char **argv)
{ {
struct volume_group *vg; struct volume_group *vg;
char *vg_name; const char *vg_name;
int ret = ECMD_FAILED; int ret = ECMD_FAILED;
int fixed = 1; int fixed = 1;
int repairing = arg_count(cmd, removemissing_ARG); int repairing = arg_count(cmd, removemissing_ARG);

View File

@ -63,7 +63,7 @@ static int vg_rename_path(struct cmd_context *cmd, const char *old_vg_path,
int found_id = 0; int found_id = 0;
struct dm_list *vgids; struct dm_list *vgids;
struct str_list *sl; struct str_list *sl;
char *vg_name_new; const char *vg_name_new;
const char *vgid = NULL, *vg_name, *vg_name_old; const char *vgid = NULL, *vg_name, *vg_name_old;
char old_path[NAME_LEN], new_path[NAME_LEN]; char old_path[NAME_LEN], new_path[NAME_LEN];
struct volume_group *vg = NULL; struct volume_group *vg = NULL;

View File

@ -281,7 +281,7 @@ int vgsplit(struct cmd_context *cmd, int argc, char **argv)
{ {
struct vgcreate_params vp_new; struct vgcreate_params vp_new;
struct vgcreate_params vp_def; struct vgcreate_params vp_def;
char *vg_name_from, *vg_name_to; const char *vg_name_from, *vg_name_to;
struct volume_group *vg_to = NULL, *vg_from = NULL; struct volume_group *vg_to = NULL, *vg_from = NULL;
int opt; int opt;
int existing_vg = 0; int existing_vg = 0;