diff options
Diffstat (limited to 'tools/lvm.c')
-rw-r--r-- | tools/lvm.c | 45 |
1 files changed, 39 insertions, 6 deletions
diff --git a/tools/lvm.c b/tools/lvm.c index 3c42a793..dd4e4de5 100644 --- a/tools/lvm.c +++ b/tools/lvm.c @@ -70,6 +70,8 @@ struct config_info { int archive; /* should we archive ? */ int backup; /* should we backup ? */ + struct format_type *fmt; + mode_t umask; }; @@ -118,7 +120,6 @@ int main(int argc, char **argv) char *namebase, *base; int ret, alias = 0; - setlocale(LC_ALL, ""); if (!init()) return -1; @@ -188,6 +189,20 @@ int yes_no_arg(struct arg *a) return 1; } +int metadatatype_arg(struct arg *a) +{ + if (!strcasecmp(a->value, cmd->fmtt->name)) + a->ptr = cmd->fmtt; + + else if (!strcasecmp(a->value, cmd->fmt1->name)) + a->ptr = cmd->fmt1; + + else + return 0; + + return 1; +} + int _get_int_arg(struct arg *a, char **ptr) { char *val; @@ -574,11 +589,11 @@ int version(struct cmd_context *cmd, int argc, char **argv) { char version[80]; - log_error("LVM version: %s", LVM_VERSION); + log_print("LVM version: %s", LVM_VERSION); if (library_version(version, sizeof(version))) - log_error("Library version: %s", version); + log_print("Library version: %s", version); if (driver_version(version, sizeof(version))) - log_error("Driver version: %s", version); + log_print("Driver version: %s", version); return ECMD_PROCESSED; } @@ -669,6 +684,8 @@ static void _use_settings(struct config_info *settings) archive_enable(settings->archive); backup_enable(settings->backup); + + cmd->fmt = arg_ptr_value(cmd, metadatatype_ARG, settings->fmt); } static char *_copy_command_line(struct pool *mem, int argc, char **argv) @@ -1048,8 +1065,12 @@ static int init(void) { struct stat info; char config_file[PATH_MAX] = ""; + const char *format; mode_t old_umask; + if (!setlocale(LC_ALL, "")) + log_error("setlocale failed"); + if (!_get_env_vars()) return 0; @@ -1139,9 +1160,20 @@ static int init(void) return 0; } - if (!(cmd->fid = create_lvm1_format(cmd))) + /* FIXME Replace with list, dynamic libs etc. */ + if (!(cmd->fmt1 = create_lvm1_format(cmd))) return 0; + if (!(cmd->fmtt = create_text_format(cmd))) + return 0; + + format = find_config_str(cmd->cf->root, "global/format", '/', + DEFAULT_FORMAT); + if (!strcasecmp(format, "text")) + _default_settings.fmt = cmd->fmtt; + else /* "lvm1" */ + _default_settings.fmt = cmd->fmt1; + _use_settings(&_default_settings); return 1; } @@ -1161,7 +1193,8 @@ static void fin(void) if (_dump_filter) persistent_filter_dump(cmd->filter); - cmd->fid->ops->destroy(cmd->fid); + cmd->fmt1->ops->destroy(cmd->fmt1); + cmd->fmtt->ops->destroy(cmd->fmtt); cmd->filter->destroy(cmd->filter); pool_destroy(cmd->mem); vgcache_destroy(); |