char *str;
char path[PATH_MAX];
- if (!(cn = find_config_node(cmd->cf->root, "activation/volume_list",
- '/'))) {
+ if (!(cn = find_config_node(cmd->cft->root, "activation/volume_list"))) {
/* If no hosts tags defined, activate */
if (list_empty(&cmd->tags))
return 1;
if (!activation())
return 0;
- if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cf))) {
+ if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cft))) {
stack;
return 0;
}
if (!activation())
return 0;
- if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cf))) {
+ if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cft))) {
stack;
return 0;
}
if (!activation())
return 0;
- if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cf))) {
+ if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cft))) {
stack;
return 0;
}
int r;
struct dev_manager *dm;
- if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cf))) {
+ if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cft))) {
stack;
return 0;
}
int r;
struct dev_manager *dm;
- if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cf))) {
+ if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cft))) {
stack;
return 0;
}
int r;
struct dev_manager *dm;
- if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cf))) {
+ if (!(dm = dev_manager_create(lv->vg->name, lv->vg->cmd->cft))) {
stack;
return 0;
}
struct dev_manager {
struct pool *mem;
- struct config_tree *cf;
+ struct config_tree *cft;
const char *stripe_filler;
uint32_t mirror_region_size;
uint32_t pvmove_mirror_count;
* dev_manager implementation.
*/
struct dev_manager *dev_manager_create(const char *vg_name,
- struct config_tree *cf)
+ struct config_tree *cft)
{
struct pool *mem;
struct dev_manager *dm;
}
dm->mem = mem;
- dm->cf = cf;
+ dm->cft = cft;
if (!stripe_filler) {
- stripe_filler = find_config_str(cf->root,
+ stripe_filler = find_config_str(cft->root,
"activation/missing_stripe_filler",
- '/', DEFAULT_STRIPE_FILLER);
+ DEFAULT_STRIPE_FILLER);
}
dm->stripe_filler = stripe_filler;
if (!mirror_region_size) {
- mirror_region_size = 2 * find_config_int(cf->root,
+ mirror_region_size = 2 * find_config_int(cft->root,
"activation/mirror_region_size",
- '/',
DEFAULT_MIRROR_REGION_SIZE);
}
dm->mirror_region_size = mirror_region_size;
/* Syslog */
cmd->default_settings.syslog =
- find_config_int(cmd->cf->root, "log/syslog", '/', DEFAULT_SYSLOG);
+ find_config_int(cmd->cft->root, "log/syslog", DEFAULT_SYSLOG);
if (cmd->default_settings.syslog != 1)
fin_syslog();
/* Debug level for log file output */
cmd->default_settings.debug =
- find_config_int(cmd->cf->root, "log/level", '/', DEFAULT_LOGLEVEL);
+ find_config_int(cmd->cft->root, "log/level", DEFAULT_LOGLEVEL);
init_debug(cmd->default_settings.debug);
/* Verbose level for tty output */
cmd->default_settings.verbose =
- find_config_int(cmd->cf->root, "log/verbose", '/', DEFAULT_VERBOSE);
+ find_config_int(cmd->cft->root, "log/verbose", DEFAULT_VERBOSE);
init_verbose(cmd->default_settings.verbose);
/* Log message formatting */
- init_indent(find_config_int(cmd->cf->root, "log/indent", '/',
+ init_indent(find_config_int(cmd->cft->root, "log/indent",
DEFAULT_INDENT));
- cmd->default_settings.msg_prefix = find_config_str(cmd->cf->root,
- "log/prefix", '/',
+ cmd->default_settings.msg_prefix = find_config_str(cmd->cft->root,
+ "log/prefix",
DEFAULT_MSG_PREFIX);
init_msg_prefix(cmd->default_settings.msg_prefix);
- cmd->default_settings.cmd_name = find_config_int(cmd->cf->root,
+ cmd->default_settings.cmd_name = find_config_int(cmd->cft->root,
"log/command_names",
- '/', DEFAULT_CMD_NAME);
+ DEFAULT_CMD_NAME);
init_cmd_name(cmd->default_settings.cmd_name);
/* Test mode */
cmd->default_settings.test =
- find_config_int(cmd->cf->root, "global/test", '/', 0);
+ find_config_int(cmd->cft->root, "global/test", 0);
/* Settings for logging to file */
- if (find_config_int(cmd->cf->root, "log/overwrite", '/',
+ if (find_config_int(cmd->cft->root, "log/overwrite",
DEFAULT_OVERWRITE))
append = 0;
- log_file = find_config_str(cmd->cf->root, "log/file", '/', 0);
+ log_file = find_config_str(cmd->cft->root, "log/file", 0);
if (log_file) {
release_log_memory();
init_log_file(log_file, append);
}
- log_file = find_config_str(cmd->cf->root, "log/activate_file", '/', 0);
+ log_file = find_config_str(cmd->cft->root, "log/activate_file", 0);
if (log_file)
init_log_direct(log_file, append);
- init_log_while_suspended(find_config_int(cmd->cf->root,
- "log/activation", '/', 0));
+ init_log_while_suspended(find_config_int(cmd->cft->root,
+ "log/activation", 0));
t = time(NULL);
log_verbose("Logging initialised at %s", ctime(&t));
mode_t old_umask;
/* umask */
- cmd->default_settings.umask = find_config_int(cmd->cf->root,
- "global/umask", '/',
+ cmd->default_settings.umask = find_config_int(cmd->cft->root,
+ "global/umask",
DEFAULT_UMASK);
if ((old_umask = umask((mode_t) cmd->default_settings.umask)) !=
/* dev dir */
if (lvm_snprintf(cmd->dev_dir, sizeof(cmd->dev_dir), "%s/",
- find_config_str(cmd->cf->root, "devices/dir",
- '/', DEFAULT_DEV_DIR)) < 0) {
+ find_config_str(cmd->cft->root, "devices/dir",
+ DEFAULT_DEV_DIR)) < 0) {
log_error("Device directory given in config file too long");
return 0;
}
/* proc dir */
if (lvm_snprintf(cmd->proc_dir, sizeof(cmd->proc_dir), "%s",
- find_config_str(cmd->cf->root, "global/proc",
- '/', DEFAULT_PROC_DIR)) < 0) {
+ find_config_str(cmd->cft->root, "global/proc",
+ DEFAULT_PROC_DIR)) < 0) {
log_error("Device directory given in config file too long");
return 0;
}
/* activation? */
- cmd->default_settings.activation = find_config_int(cmd->cf->root,
+ cmd->default_settings.activation = find_config_int(cmd->cft->root,
"global/activation",
- '/',
DEFAULT_ACTIVATION);
set_activation(cmd->default_settings.activation);
- cmd->default_settings.suffix = find_config_int(cmd->cf->root,
+ cmd->default_settings.suffix = find_config_int(cmd->cft->root,
"global/suffix",
- '/', DEFAULT_SUFFIX);
+ DEFAULT_SUFFIX);
if (!(cmd->default_settings.unit_factor =
- units_to_bytes(find_config_str(cmd->cf->root,
+ units_to_bytes(find_config_str(cmd->cft->root,
"global/units",
- '/',
DEFAULT_UNITS),
&cmd->default_settings.unit_type))) {
log_error("Invalid units specification");
struct stat info;
char config_file[PATH_MAX] = "";
- if (!(cmd->cf = create_config_tree())) {
+ if (!(cmd->cft = create_config_tree())) {
stack;
return 0;
}
if (lvm_snprintf(config_file, sizeof(config_file),
"%s/lvm.conf", cmd->sys_dir) < 0) {
log_error("LVM_SYSTEM_DIR was too long");
- destroy_config_tree(cmd->cf);
+ destroy_config_tree(cmd->cft);
return 0;
}
if (errno == ENOENT)
return 1;
log_sys_error("stat", config_file);
- destroy_config_tree(cmd->cf);
+ destroy_config_tree(cmd->cft);
return 0;
}
- if (!read_config_file(cmd->cf, config_file)) {
+ if (!read_config_file(cmd->cft, config_file)) {
log_error("Failed to load config file %s", config_file);
- destroy_config_tree(cmd->cf);
+ destroy_config_tree(cmd->cft);
return 0;
}
return 0;
}
- if (!(cn = find_config_node(cmd->cf->root, "devices/scan", '/'))) {
+ if (!(cn = find_config_node(cmd->cft->root, "devices/scan"))) {
if (!dev_cache_add_dir("/dev")) {
log_error("Failed to add /dev to internal "
"device cache");
memset(filters, 0, sizeof(filters));
/* sysfs filter */
- if (find_config_bool(cmd->cf->root, "devices/sysfs_scan", '/',
+ if (find_config_bool(cmd->cft->root, "devices/sysfs_scan",
DEFAULT_SYSFS_SCAN)) {
if ((filters[nr_filt] = sysfs_filter_create(cmd->proc_dir)))
nr_filt++;
}
/* regex filter */
- if (!(cn = find_config_node(cmd->cf->root, "devices/filter", '/')))
+ if (!(cn = find_config_node(cmd->cft->root, "devices/filter")))
log_debug("devices/filter not found in config file: no regex "
"filter installed");
}
/* device type filter */
- cn = find_config_node(cmd->cf->root, "devices/types", '/');
+ cn = find_config_node(cmd->cft->root, "devices/types");
if (!(filters[nr_filt++] = lvm_type_filter_create(cmd->proc_dir, cn))) {
log_error("Failed to create lvm type filter");
return NULL;
}
dev_cache =
- find_config_str(cmd->cf->root, "devices/cache", '/', cache_file);
+ find_config_str(cmd->cft->root, "devices/cache", cache_file);
if (!(f4 = persistent_filter_create(f3, dev_cache))) {
log_error("Failed to create persistent device filter");
return 0;
}
/* Should we ever dump persistent filter state? */
- if (find_config_int(cmd->cf->root, "devices/write_cache_state", '/', 1))
+ if (find_config_int(cmd->cft->root, "devices/write_cache_state", 1))
cmd->dump_filter = 1;
if (!*cmd->sys_dir)
cmd->dump_filter = 0;
if (!stat(dev_cache, &st) &&
- (st.st_mtime > config_file_timestamp(cmd->cf)) &&
+ (st.st_mtime > config_file_timestamp(cmd->cft)) &&
!persistent_filter_load(f4))
log_verbose("Failed to load existing device cache from %s",
dev_cache);
#ifdef HAVE_LIBDL
/* Load any formats in shared libs */
- if ((cn = find_config_node(cmd->cf->root, "global/format_libraries",
- '/'))) {
+ if ((cn = find_config_node(cmd->cft->root, "global/format_libraries"))) {
struct config_value *cv;
struct format_type *(*init_format_fn) (struct cmd_context *);
"global/format_libraries");
return 0;
}
- if (!(lib = load_shared_library(cmd->cf, cv->v.str,
+ if (!(lib = load_shared_library(cmd->cft, cv->v.str,
"format"))) {
stack;
return 0;
cmd->fmt_backup = fmt;
- format = find_config_str(cmd->cf->root, "global/format", '/',
+ format = find_config_str(cmd->cft->root, "global/format",
DEFAULT_FORMAT);
list_iterate(fmth, &cmd->formats) {
list_init(&cmd->tags);
- if (!(tn = find_config_node(cmd->cf->root, "tags", '/')) ||
+ if (!(tn = find_config_node(cmd->cft->root, "tags")) ||
!tn->child) {
log_very_verbose("No tags defined in config file");
return 1;
}
- if (find_config_int(cmd->cf->root, "tags/hosttags", '/',
+ if (find_config_int(cmd->cft->root, "tags/hosttags",
DEFAULT_HOSTTAGS)) {
/* FIXME Strip out invalid chars: only A-Za-z0-9_+.- */
if (!_set_tag(cmd, cmd->hostname)) {
cmd->filter->destroy(cmd->filter);
pool_destroy(cmd->mem);
dev_cache_exit();
- destroy_config_tree(cmd->cf);
+ destroy_config_tree(cmd->cft);
pool_destroy(cmd->libmem);
dbg_free(cmd);
struct dev_filter *filter;
int dump_filter; /* Dump filter when exiting? */
- struct config_tree *cf;
+ struct config_tree *cft;
struct config_info default_settings;
struct config_info current_settings;
};
struct cs {
- struct config_tree cf;
+ struct config_tree cft;
struct pool *mem;
time_t timestamp;
char *filename;
static struct config_node *_create_node(struct parser *p);
static char *_dup_tok(struct parser *p);
+static const int sep = '/';
+
#define MAX_INDENT 32
#define match(t) do {\
}
c->mem = mem;
- c->cf.root = (struct config_node *) NULL;
+ c->cft.root = (struct config_node *) NULL;
c->timestamp = 0;
c->filename = NULL;
- return &c->cf;
+ return &c->cft;
}
-void destroy_config_tree(struct config_tree *cf)
+void destroy_config_tree(struct config_tree *cft)
{
- pool_destroy(((struct cs *) cf)->mem);
+ pool_destroy(((struct cs *) cft)->mem);
}
-int read_config_fd(struct config_tree *cf, struct device *dev,
+int read_config_fd(struct config_tree *cft, struct device *dev,
off_t offset, size_t size, off_t offset2, size_t size2,
checksum_fn_t checksum_fn, uint32_t checksum)
{
- struct cs *c = (struct cs *) cf;
+ struct cs *c = (struct cs *) cft;
struct parser *p;
int r = 0;
int use_mmap = 1;
p->tb = p->te = p->fb;
p->line = 1;
_get_token(p, TOK_SECTION_E);
- if (!(cf->root = _file(p))) {
+ if (!(cft->root = _file(p))) {
stack;
goto out;
}
return r;
}
-int read_config_file(struct config_tree *cf, const char *file)
+int read_config_file(struct config_tree *cft, const char *file)
{
- struct cs *c = (struct cs *) cf;
+ struct cs *c = (struct cs *) cft;
struct stat info;
struct device *dev;
int r = 1;
return 0;
}
- r = read_config_fd(cf, dev, 0, (size_t) info.st_size, 0, 0,
+ r = read_config_fd(cft, dev, 0, (size_t) info.st_size, 0, 0,
(checksum_fn_t) NULL, 0);
dev_close(dev);
return r;
}
-time_t config_file_timestamp(struct config_tree *cf)
+time_t config_file_timestamp(struct config_tree *cft)
{
- struct cs *c = (struct cs *) cf;
+ struct cs *c = (struct cs *) cft;
return c->timestamp;
}
/*
* Returns 1 if config file reloaded
*/
-int reload_config_file(struct config_tree **cf)
+int reload_config_file(struct config_tree **cft)
{
- struct config_tree *new_cf;
- struct cs *c = (struct cs *) *cf;
+ struct config_tree *new_cft;
+ struct cs *c = (struct cs *) *cft;
struct cs *new_cs;
struct stat info;
struct device *dev;
return 0;
}
- if (!(new_cf = create_config_tree())) {
+ if (!(new_cft = create_config_tree())) {
log_error("Allocation of new config_tree failed");
return 0;
}
return 0;
}
- r = read_config_fd(new_cf, dev, 0, (size_t) info.st_size,
+ r = read_config_fd(new_cft, dev, 0, (size_t) info.st_size,
0, 0, (checksum_fn_t) NULL, 0);
dev_close(dev);
if (r) {
- new_cs = (struct cs *) new_cf;
+ new_cs = (struct cs *) new_cft;
new_cs->filename = pool_strdup(new_cs->mem, c->filename);
new_cs->timestamp = info.st_mtime;
- destroy_config_tree(*cf);
- *cf = new_cf;
+ destroy_config_tree(*cft);
+ *cft = new_cft;
}
return r;
return 1;
}
-int write_config_file(struct config_tree *cf, const char *file)
+int write_config_file(struct config_tree *cft, const char *file)
{
int r = 1;
FILE *fp;
}
log_verbose("Dumping configuration to %s", file);
- if (!_write_config(cf->root, fp, 0)) {
+ if (!_write_config(cft->root, fp, 0)) {
log_error("Failure while writing configuration");
r = 0;
}
/*
* utility functions
*/
-struct config_node *find_config_node(struct config_node *cn,
- const char *path, const int sep)
+struct config_node *find_config_node(struct config_node *cn, const char *path)
{
const char *e;
}
const char *find_config_str(struct config_node *cn,
- const char *path, const int sep, const char *fail)
+ const char *path, const char *fail)
{
- struct config_node *n = find_config_node(cn, path, sep);
+ struct config_node *n = find_config_node(cn, path);
if (n && n->v->type == CFG_STRING) {
if (*n->v->v.str)
return fail;
}
-int find_config_int(struct config_node *cn, const char *path,
- const int sep, int fail)
+int find_config_int(struct config_node *cn, const char *path, int fail)
{
- struct config_node *n = find_config_node(cn, path, sep);
+ struct config_node *n = find_config_node(cn, path);
if (n && n->v->type == CFG_INT) {
log_very_verbose("Setting %s to %d", path, n->v->v.i);
return fail;
}
-float find_config_float(struct config_node *cn, const char *path,
- const int sep, float fail)
+float find_config_float(struct config_node *cn, const char *path, float fail)
{
- struct config_node *n = find_config_node(cn, path, sep);
+ struct config_node *n = find_config_node(cn, path);
if (n && n->v->type == CFG_FLOAT) {
log_very_verbose("Setting %s to %f", path, n->v->v.r);
return fail;
}
-int find_config_bool(struct config_node *cn, const char *path,
- const int sep, int fail)
+int find_config_bool(struct config_node *cn, const char *path, int fail)
{
- struct config_node *n = find_config_node(cn, path, sep);
+ struct config_node *n = find_config_node(cn, path);
struct config_value *v;
if (!n)
}
int get_config_uint32(struct config_node *cn, const char *path,
- const int sep, uint32_t *result)
+ uint32_t *result)
{
struct config_node *n;
- n = find_config_node(cn, path, sep);
+ n = find_config_node(cn, path);
if (!n || !n->v || n->v->type != CFG_INT)
return 0;
}
int get_config_uint64(struct config_node *cn, const char *path,
- const int sep, uint64_t *result)
+ uint64_t *result)
{
struct config_node *n;
- n = find_config_node(cn, path, sep);
+ n = find_config_node(cn, path);
if (!n || !n->v || n->v->type != CFG_INT)
return 0;
return 1;
}
-int get_config_str(struct config_node *cn, const char *path,
- const int sep, char **result)
+int get_config_str(struct config_node *cn, const char *path, char **result)
{
struct config_node *n;
- n = find_config_node(cn, path, sep);
+ n = find_config_node(cn, path);
if (!n || !n->v || n->v->type != CFG_STRING)
return 0;
time_t config_file_timestamp(struct config_tree *cf);
struct config_node *find_config_node(struct config_node *cn,
- const char *path, const int separator);
+ const char *path);
-const char *find_config_str(struct config_node *cn,
- const char *path, const int sep, const char *fail);
+const char *find_config_str(struct config_node *cn, const char *path,
+ const char *fail);
-int find_config_int(struct config_node *cn, const char *path,
- const int sep, int fail);
+int find_config_int(struct config_node *cn, const char *path, int fail);
-float find_config_float(struct config_node *cn, const char *path,
- const int sep, float fail);
+float find_config_float(struct config_node *cn, const char *path, float fail);
/*
* Understands (0, ~0), (y, n), (yes, no), (on,
* off), (true, false).
*/
-int find_config_bool(struct config_node *cn, const char *path,
- const int sep, int fail);
+int find_config_bool(struct config_node *cn, const char *path, int fail);
int get_config_uint32(struct config_node *cn, const char *path,
- const int sep, uint32_t *result);
+ uint32_t *result);
int get_config_uint64(struct config_node *cn, const char *path,
- const int sep, uint64_t *result);
+ uint64_t *result);
-int get_config_str(struct config_node *cn, const char *path,
- const int sep, char **result);
+int get_config_str(struct config_node *cn, const char *path, char **result);
#endif
return 1;
}
-static int _read_array(struct pfilter *pf, struct config_tree *cf,
+static int _read_array(struct pfilter *pf, struct config_tree *cft,
const char *path, void *data)
{
struct config_node *cn;
struct config_value *cv;
- if (!(cn = find_config_node(cf->root, path, '/'))) {
+ if (!(cn = find_config_node(cft->root, path))) {
log_very_verbose("Couldn't find %s array in '%s'",
path, pf->file);
return 0;
struct pfilter *pf = (struct pfilter *) f->private;
int r = 0;
- struct config_tree *cf;
+ struct config_tree *cft;
- if (!(cf = create_config_tree())) {
+ if (!(cft = create_config_tree())) {
stack;
return 0;
}
- if (!read_config_file(cf, pf->file)) {
+ if (!read_config_file(cft, pf->file)) {
stack;
goto out;
}
- _read_array(pf, cf, "persistent_filter_cache/valid_devices",
+ _read_array(pf, cft, "persistent_filter_cache/valid_devices",
PF_GOOD_DEVICE);
/* We don't gain anything by holding invalid devices */
- /* _read_array(pf, cf, "persistent_filter_cache/invalid_devices",
+ /* _read_array(pf, cft, "persistent_filter_cache/invalid_devices",
PF_BAD_DEVICE); */
/* Did we find anything? */
log_very_verbose("Loaded persistent filter cache from %s", pf->file);
out:
- destroy_config_tree(cf);
+ destroy_config_tree(cft);
return r;
}
return 0;
}
- if (!get_config_uint64(cn, "start_sector", '/', &dev_area.start)) {
+ if (!get_config_uint64(cn, "start_sector", &dev_area.start)) {
log_error("Missing start_sector in metadata disk_area section "
"of config file");
return 0;
}
dev_area.start <<= SECTOR_SHIFT;
- if (!get_config_uint64(cn, "size", '/', &dev_area.size)) {
+ if (!get_config_uint64(cn, "size", &dev_area.size)) {
log_error("Missing size in metadata disk_area section "
"of config file");
return 0;
}
dev_area.size <<= SECTOR_SHIFT;
- if (!get_config_str(cn, "id", '/', &id_str)) {
+ if (!get_config_str(cn, "id", &id_str)) {
log_error("Missing uuid in metadata disk_area section "
"of config file");
return 0;
return NULL;
}
- if ((cn = find_config_node(cmd->cf->root, "metadata/dirs", '/'))) {
+ if ((cn = find_config_node(cmd->cft->root, "metadata/dirs"))) {
for (cv = cn->v; cv; cv = cv->next) {
if (cv->type != CFG_STRING) {
log_error("Invalid string in config file: "
}
}
- if (!(cn = find_config_node(cmd->cf->root, "metadata/disk_areas", '/')))
+ if (!(cn = find_config_node(cmd->cft->root, "metadata/disk_areas")))
return fmt;
for (cn = cn->child; cn; cn = cn->sib) {
time_t *when, char **desc)
{
struct volume_group *vg = NULL;
- struct config_tree *cf;
+ struct config_tree *cft;
struct text_vg_version_ops **vsn;
static int _initialised = 0;
*desc = NULL;
*when = 0;
- if (!(cf = create_config_tree())) {
+ if (!(cft = create_config_tree())) {
stack;
goto out;
}
- if ((!dev && !read_config_file(cf, file)) ||
- (dev && !read_config_fd(cf, dev, offset, size,
+ if ((!dev && !read_config_file(cft, file)) ||
+ (dev && !read_config_fd(cft, dev, offset, size,
offset2, size2, checksum_fn, checksum))) {
log_error("Couldn't read volume group metadata.");
goto out;
* Find a set of version functions that can read this file
*/
for (vsn = &_text_vsn_list[0]; *vsn; vsn++) {
- if (!(*vsn)->check_version(cf))
+ if (!(*vsn)->check_version(cft))
continue;
- if (!(vg = (*vsn)->read_vg(fid, cf))) {
+ if (!(vg = (*vsn)->read_vg(fid, cft))) {
stack;
goto out;
}
- (*vsn)->read_desc(fid->fmt->cmd->mem, cf, when, desc);
+ (*vsn)->read_desc(fid->fmt->cmd->mem, cft, when, desc);
break;
}
out:
- destroy_config_tree(cf);
+ destroy_config_tree(cft);
return vg;
}
struct hash_table * pv_hash);
#define _read_int32(root, path, result) \
- get_config_uint32(root, path, '/', result)
+ get_config_uint32(root, path, result)
#define _read_uint32(root, path, result) \
- get_config_uint32(root, path, '/', result)
+ get_config_uint32(root, path, result)
#define _read_int64(root, path, result) \
- get_config_uint64(root, path, '/', result)
+ get_config_uint64(root, path, result)
/*
* Logs an attempt to read an invalid format file.
* Checks that the config file contains vg metadata, and that it
* we recognise the version number,
*/
-static int _check_version(struct config_tree *cf)
+static int _check_version(struct config_tree *cft)
{
struct config_node *cn;
struct config_value *cv;
/*
* Check the contents field.
*/
- if (!(cn = find_config_node(cf->root, CONTENTS_FIELD, '/'))) {
+ if (!(cn = find_config_node(cft->root, CONTENTS_FIELD))) {
_invalid_format("missing contents field");
return 0;
}
/*
* Check the version number.
*/
- if (!(cn = find_config_node(cf->root, FORMAT_VERSION_FIELD, '/'))) {
+ if (!(cn = find_config_node(cft->root, FORMAT_VERSION_FIELD))) {
_invalid_format("missing version number");
return 0;
}
{
struct config_value *cv;
- if (!(cn = find_config_node(cn, path, '/'))) {
+ if (!(cn = find_config_node(cn, path))) {
log_error("Couldn't find uuid.");
return 0;
}
return 0;
}
- if (!(cn = find_config_node(pvn, "status", '/'))) {
+ if (!(cn = find_config_node(pvn, "status"))) {
log_error("Couldn't find status flags for physical volume.");
return 0;
}
list_init(&pv->tags);
/* Optional tags */
- if ((cn = find_config_node(pvn, "tags", '/')) &&
+ if ((cn = find_config_node(pvn, "tags")) &&
!(read_tags(mem, &pv->tags, cn->v))) {
log_error("Couldn't read tags for physical volume %s in %s.",
dev_name(pv->dev), vg->name);
}
segtype = SEG_STRIPED; /* Default */
- if ((cn = find_config_node(sn, "type", '/'))) {
+ if ((cn = find_config_node(sn, "type"))) {
cv = cn->v;
if (!cv || !cv->v.str) {
log_error("Segment type must be a string.");
return 0;
}
- if (find_config_node(sn, "extents_moved", '/')) {
+ if (find_config_node(sn, "extents_moved")) {
if (_read_uint32(sn, "extents_moved", &extents_moved))
seg_status |= PVMOVE;
else {
seg->extents_moved = extents_moved;
/* Optional tags */
- if ((cn = find_config_node(sn, "tags", '/')) &&
+ if ((cn = find_config_node(sn, "tags")) &&
!(read_tags(mem, &seg->tags, cn->v))) {
log_error("Couldn't read tags for a segment of %s/%s.",
vg->name, lv->name);
log_suppress(1);
- if (!(cow_name = find_config_str(sn, "cow_store", '/', NULL))) {
+ if (!(cow_name = find_config_str(sn, "cow_store", NULL))) {
log_suppress(0);
log_error("Snapshot cow storage not specified.");
return 0;
}
- if (!(org_name = find_config_str(sn, "origin", '/', NULL))) {
+ if (!(org_name = find_config_str(sn, "origin", NULL))) {
log_suppress(0);
log_error("Snapshot origin not specified.");
return 0;
return 0;
}
- if (!(cn = find_config_node(sn, "stripes", '/'))) {
+ if (!(cn = find_config_node(sn, "stripes"))) {
log_error("Couldn't find stripes array for segment "
"'%s'.", sn->key);
return 0;
}
if ((seg->type == SEG_MIRRORED) &&
- !(cn = find_config_node(sn, "mirrors", '/'))) {
+ !(cn = find_config_node(sn, "mirrors"))) {
log_error("Couldn't find mirrors array for segment "
"'%s'.", sn->key);
return 0;
return 0;
}
- if (!(cn = find_config_node(lvn, "status", '/'))) {
+ if (!(cn = find_config_node(lvn, "status"))) {
log_error("Couldn't find status flags for logical volume.");
return 0;
}
}
lv->alloc = ALLOC_DEFAULT;
- if ((cn = find_config_node(lvn, "allocation_policy", '/'))) {
+ if ((cn = find_config_node(lvn, "allocation_policy"))) {
struct config_value *cv = cn->v;
if (!cv || !cv->v.str) {
log_error("allocation_policy must be a string.");
list_init(&lv->tags);
/* Optional tags */
- if ((cn = find_config_node(lvn, "tags", '/')) &&
+ if ((cn = find_config_node(lvn, "tags")) &&
!(read_tags(mem, &lv->tags, cn->v))) {
log_error("Couldn't read tags for logical volume %s/%s.",
vg->name, lv->name);
{
struct config_node *n;
- if (!(n = find_config_node(vgn, section, '/'))) {
+ if (!(n = find_config_node(vgn, section))) {
if (!optional) {
log_error("Couldn't find section '%s'.", section);
return 0;
}
static struct volume_group *_read_vg(struct format_instance *fid,
- struct config_tree *cf)
+ struct config_tree *cft)
{
struct config_node *vgn, *cn;
struct volume_group *vg;
struct pool *mem = fid->fmt->cmd->mem;
/* skip any top-level values */
- for (vgn = cf->root; (vgn && vgn->v); vgn = vgn->sib) ;
+ for (vgn = cft->root; (vgn && vgn->v); vgn = vgn->sib) ;
if (!vgn) {
log_error("Couldn't find volume group in file.");
vgn = vgn->child;
- if ((cn = find_config_node(vgn, "system_id", '/')) && cn->v) {
+ if ((cn = find_config_node(vgn, "system_id")) && cn->v) {
if (!cn->v->v.str) {
log_error("system_id must be a string");
goto bad;
goto bad;
}
- if (!(cn = find_config_node(vgn, "status", '/'))) {
+ if (!(cn = find_config_node(vgn, "status"))) {
log_error("Couldn't find status flags for volume group %s.",
vg->name);
goto bad;
list_init(&vg->tags);
/* Optional tags */
- if ((cn = find_config_node(vgn, "tags", '/')) &&
+ if ((cn = find_config_node(vgn, "tags")) &&
!(read_tags(mem, &vg->tags, cn->v))) {
log_error("Couldn't read tags for volume group %s.", vg->name);
goto bad;
}
static void _read_desc(struct pool *mem,
- struct config_tree *cf, time_t *when, char **desc)
+ struct config_tree *cft, time_t *when, char **desc)
{
const char *d;
unsigned int u = 0u;
log_suppress(1);
- d = find_config_str(cf->root, "description", '/', "");
+ d = find_config_str(cft->root, "description", "");
log_suppress(0);
*desc = pool_strdup(mem, d);
- get_config_uint32(cf->root, "creation_time", '/', &u);
+ get_config_uint32(cft->root, "creation_time", &u);
*when = u;
}
static void (*_end_fn) (void) = NULL;
static int (*_lock_fn) (struct cmd_context * cmd, const char *resource,
int flags) = NULL;
-static int (*_init_fn) (int type, struct config_tree * cf) = NULL;
+static int (*_init_fn) (int type, struct config_tree * cft) = NULL;
static int _lock_resource(struct cmd_context *cmd, const char *resource,
int flags)
_lock_fn = NULL;
}
-int init_external_locking(struct locking_type *locking, struct config_tree *cf)
+int init_external_locking(struct locking_type *locking, struct config_tree *cft)
{
const char *libname;
locking->lock_resource = _lock_resource;
locking->fin_locking = _fin_external_locking;
- libname = find_config_str(cf->root, "global/locking_library", '/',
+ libname = find_config_str(cft->root, "global/locking_library",
DEFAULT_LOCKING_LIB);
- if (!(_locking_lib = load_shared_library(cf, libname, "locking"))) {
+ if (!(_locking_lib = load_shared_library(cft, libname, "locking"))) {
stack;
return 0;
}
}
log_verbose("Loaded external locking library %s", libname);
- return _init_fn(2, cf);
+ return _init_fn(2, cft);
}
return 1;
}
-int init_file_locking(struct locking_type *locking, struct config_tree *cf)
+int init_file_locking(struct locking_type *locking, struct config_tree *cft)
{
locking->lock_resource = _file_lock_resource;
locking->reset_locking = _reset_file_locking;
locking->fin_locking = _fin_file_locking;
/* Get lockfile directory from config file */
- strncpy(_lock_dir, find_config_str(cf->root, "global/locking_dir",
- '/', DEFAULT_LOCK_DIR),
+ strncpy(_lock_dir, find_config_str(cft->root, "global/locking_dir",
+ DEFAULT_LOCK_DIR),
sizeof(_lock_dir));
if (!create_dir(_lock_dir))
/*
* Select a locking type
*/
-int init_locking(int type, struct config_tree *cf)
+int init_locking(int type, struct config_tree *cft)
{
switch (type) {
case 0:
- init_no_locking(&_locking, cf);
+ init_no_locking(&_locking, cft);
log_print("WARNING: Locking disabled. Be careful! "
"This could corrupt your metadata.");
return 1;
case 1:
- if (!init_file_locking(&_locking, cf))
+ if (!init_file_locking(&_locking, cft))
break;
log_very_verbose("File-based locking enabled.");
return 1;
#ifdef HAVE_LIBDL
case 2:
- if (!init_external_locking(&_locking, cf))
+ if (!init_external_locking(&_locking, cft))
break;
log_very_verbose("External locking enabled.");
return 1;
/* FIXME Ensure only read ops are permitted */
log_verbose("Locking disabled - only read operations permitted.");
- init_no_locking(&_locking, cf);
+ init_no_locking(&_locking, cft);
return 1;
}
return 1;
}
-int init_no_locking(struct locking_type *locking, struct config_tree *cf)
+int init_no_locking(struct locking_type *locking, struct config_tree *cft)
{
locking->lock_resource = _no_lock_resource;
locking->reset_locking = _no_reset_locking;
#include <sys/stat.h>
#include <dlfcn.h>
-void *load_shared_library(struct config_tree *cf, const char *libname,
+void *load_shared_library(struct config_tree *cft, const char *libname,
const char *desc)
{
char path[PATH_MAX];
/* If libname doesn't begin with '/' then use lib_dir/libname,
* if present */
if (libname[0] == '/' ||
- !(lib_dir = find_config_str(cf->root, "global/library_dir",
- '/', 0)) ||
+ !(lib_dir = find_config_str(cft->root, "global/library_dir", 0)) ||
(lvm_snprintf(path, sizeof(path), "%s/%s", lib_dir,
libname) == -1) || stat(path, &info) == -1)
strncpy(path, libname, sizeof(path));
void memlock_init(struct cmd_context *cmd)
{
- _size_stack = find_config_int(cmd->cf->root,
+ _size_stack = find_config_int(cmd->cft->root,
"activation/reserved_stack",
- '/', DEFAULT_RESERVED_STACK) * 1024;
- _size_malloc_tmp = find_config_int(cmd->cf->root,
+ DEFAULT_RESERVED_STACK) * 1024;
+ _size_malloc_tmp = find_config_int(cmd->cft->root,
"activation/reserved_memory",
- '/', DEFAULT_RESERVED_MEMORY) * 1024;
- _default_priority = find_config_int(cmd->cf->root,
+ DEFAULT_RESERVED_MEMORY) * 1024;
+ _default_priority = find_config_int(cmd->cft->root,
"activation/process_priority",
- '/', DEFAULT_PROCESS_PRIORITY);
+ DEFAULT_PROCESS_PRIORITY);
}
#endif
int main(int argc, char **argv)
{
- struct config_file *cf;
+ struct config_file *cft;
struct config_node *cn;
struct dev_filter *rfilter, *pfilter;
struct dev_iter *iter;
exit(1);
}
- if (!(cf = create_config_file())) {
+ if (!(cft = create_config_file())) {
fprintf(stderr, "couldn't create config file\n");
exit(1);
}
- if (!read_config(cf, argv[1])) {
+ if (!read_config(cft, argv[1])) {
fprintf(stderr, "couldn't read config file\n");
exit(1);
}
- if (!(cn = find_config_node(cf->root, "/devices/filter", '/'))) {
+ if (!(cn = find_config_node(cft->root, "/devices/filter", '/'))) {
fprintf(stderr, "couldn't find filter section\n");
exit(1);
}
dev_iter_destroy(iter);
pfilter->destroy(pfilter);
dev_cache_exit();
- destroy_config_file(cf);
+ destroy_config_file(cft);
dump_memory();
fin_log();
int main(int argc, char **argv)
{
- struct config_file *cf;
+ struct config_file *cft;
struct config_node *cn;
struct dev_filter *filter;
struct dev_iter *iter;
init_log(stderr);
init_debug(_LOG_DEBUG);
- if (!(cf = create_config_file())) {
+ if (!(cft = create_config_file())) {
fprintf(stderr, "couldn't create config file\n");
exit(1);
}
- if (!read_config(cf, argv[1])) {
+ if (!read_config(cft, argv[1])) {
fprintf(stderr, "couldn't read config file\n");
exit(1);
}
- if (!(cn = find_config_node(cf->root, "/devices/filter", '/'))) {
+ if (!(cn = find_config_node(cft->root, "/devices/filter", '/'))) {
fprintf(stderr, "couldn't find filter section\n");
exit(1);
}
dev_iter_destroy(iter);
filter->destroy(filter);
dev_cache_exit();
- destroy_config_file(cf);
+ destroy_config_file(cft);
dump_memory();
fin_log();
return EINVALID_CMD_LINE;
}
- if (!write_config_file(cmd->cf, file))
+ if (!write_config_file(cmd->cft, file))
return ECMD_FAILED;
return ECMD_PROCESSED;
}
if (lp->stripes > 1 && !lp->stripe_size) {
- lp->stripe_size = find_config_int(cmd->cf->root,
- "metadata/stripesize", '/',
+ lp->stripe_size = find_config_int(cmd->cft->root,
+ "metadata/stripesize",
DEFAULT_STRIPESIZE) * 2;
log_print("Using default stripesize %dKB", lp->stripe_size / 2);
}
set_cmd_name(cmd->command->name);
- if (reload_config_file(&cmd->cf)) {
+ if (reload_config_file(&cmd->cft)) {
/* Reinitialise various settings inc. logging, filters */
if (!refresh_toolcontext(cmd)) {
log_error("Updated config file invalid. Aborting.");
if ((ret = _process_common_commands(cmd)))
goto out;
- locking_type = find_config_int(cmd->cf->root, "global/locking_type",
- '/', 1);
- if (!init_locking(locking_type, cmd->cf)) {
+ locking_type = find_config_int(cmd->cft->root, "global/locking_type",
+ 1);
+ if (!init_locking(locking_type, cmd->cft)) {
log_error("Locking type %d initialisation failed.",
locking_type);
ret = ECMD_FAILED;
srand((unsigned int) time(NULL) + (unsigned int) getpid());
}
-static int _init_backup(struct cmd_context *cmd, struct config_tree *cf)
+static int _init_backup(struct cmd_context *cmd, struct config_tree *cft)
{
uint32_t days, min;
char default_dir[PATH_MAX];
/* set up archiving */
cmd->default_settings.archive =
- find_config_bool(cmd->cf->root, "backup/archive", '/',
+ find_config_bool(cmd->cft->root, "backup/archive",
DEFAULT_ARCHIVE_ENABLED);
- days = (uint32_t) find_config_int(cmd->cf->root, "backup/retain_days",
- '/', DEFAULT_ARCHIVE_DAYS);
+ days = (uint32_t) find_config_int(cmd->cft->root, "backup/retain_days",
+ DEFAULT_ARCHIVE_DAYS);
- min = (uint32_t) find_config_int(cmd->cf->root, "backup/retain_min",
- '/', DEFAULT_ARCHIVE_NUMBER);
+ min = (uint32_t) find_config_int(cmd->cft->root, "backup/retain_min",
+ DEFAULT_ARCHIVE_NUMBER);
if (lvm_snprintf
(default_dir, sizeof(default_dir), "%s/%s", cmd->sys_dir,
return 0;
}
- dir = find_config_str(cmd->cf->root, "backup/archive_dir", '/',
+ dir = find_config_str(cmd->cft->root, "backup/archive_dir",
default_dir);
if (!archive_init(dir, days, min)) {
/* set up the backup */
cmd->default_settings.backup =
- find_config_bool(cmd->cf->root, "backup/backup", '/',
+ find_config_bool(cmd->cft->root, "backup/backup",
DEFAULT_BACKUP_ENABLED);
if (lvm_snprintf
return 0;
}
- dir = find_config_str(cmd->cf->root, "backup/backup_dir", '/',
+ dir = find_config_str(cmd->cft->root, "backup/backup_dir",
default_dir);
if (!backup_init(dir)) {
_init_rand();
- if (!_init_backup(cmd, cmd->cf))
+ if (!_init_backup(cmd, cmd->cft))
return NULL;
_apply_settings(cmd);
if (read_history(hist_file))
log_very_verbose("Couldn't read history from %s.", hist_file);
- stifle_history(find_config_int(cmd->cf->root, "shell/history_size",
- '/', DEFAULT_MAX_HISTORY));
+ stifle_history(find_config_int(cmd->cft->root, "shell/history_size",
+ DEFAULT_MAX_HISTORY));
}
"%dKB", seg_stripesize / 2);
ssize = seg_stripesize;
} else {
- ssize = find_config_int(cmd->cf->root,
+ ssize = find_config_int(cmd->cft->root,
"metadata/stripesize",
- '/',
DEFAULT_STRIPESIZE) * 2;
log_print("Using default stripesize %dKB",
ssize / 2);
pvmetadatasize = arg_uint64_value(cmd, metadatasize_ARG, UINT64_C(0))
* 2;
if (!pvmetadatasize)
- pvmetadatasize = find_config_int(cmd->cf->root,
+ pvmetadatasize = find_config_int(cmd->cft->root,
"metadata/pvmetadatasize",
- '/', DEFAULT_PVMETADATASIZE);
+ DEFAULT_PVMETADATASIZE);
pvmetadatacopies = arg_int_value(cmd, metadatacopies_ARG, -1);
if (pvmetadatacopies < 0)
- pvmetadatacopies = find_config_int(cmd->cf->root,
+ pvmetadatacopies = find_config_int(cmd->cft->root,
"metadata/pvmetadatacopies",
- '/',
DEFAULT_PVMETADATACOPIES);
if (!(dev = dev_cache_get(pv_name, cmd->filter))) {
int aligned, buffered, headings;
- aligned = find_config_int(cmd->cf->root, "report/aligned", '/',
+ aligned = find_config_int(cmd->cft->root, "report/aligned",
DEFAULT_REP_ALIGNED);
- buffered = find_config_int(cmd->cf->root, "report/buffered", '/',
+ buffered = find_config_int(cmd->cft->root, "report/buffered",
DEFAULT_REP_BUFFERED);
- headings = find_config_int(cmd->cf->root, "report/headings", '/',
+ headings = find_config_int(cmd->cft->root, "report/headings",
DEFAULT_REP_HEADINGS);
- separator = find_config_str(cmd->cf->root, "report/separator", '/',
+ separator = find_config_str(cmd->cft->root, "report/separator",
DEFAULT_REP_SEPARATOR);
switch (report_type) {
case LVS:
- keys = find_config_str(cmd->cf->root, "report/lvs_sort", '/',
+ keys = find_config_str(cmd->cft->root, "report/lvs_sort",
DEFAULT_LVS_SORT);
if (!arg_count(cmd, verbose_ARG))
- options = find_config_str(cmd->cf->root,
- "report/lvs_cols", '/',
+ options = find_config_str(cmd->cft->root,
+ "report/lvs_cols",
DEFAULT_LVS_COLS);
else
- options = find_config_str(cmd->cf->root,
+ options = find_config_str(cmd->cft->root,
"report/lvs_cols_verbose",
- '/', DEFAULT_LVS_COLS_VERB);
+ DEFAULT_LVS_COLS_VERB);
break;
case VGS:
- keys = find_config_str(cmd->cf->root, "report/vgs_sort", '/',
+ keys = find_config_str(cmd->cft->root, "report/vgs_sort",
DEFAULT_VGS_SORT);
if (!arg_count(cmd, verbose_ARG))
- options = find_config_str(cmd->cf->root,
- "report/vgs_cols", '/',
+ options = find_config_str(cmd->cft->root,
+ "report/vgs_cols",
DEFAULT_VGS_COLS);
else
- options = find_config_str(cmd->cf->root,
+ options = find_config_str(cmd->cft->root,
"report/vgs_cols_verbose",
- '/', DEFAULT_VGS_COLS_VERB);
+ DEFAULT_VGS_COLS_VERB);
break;
case PVS:
- keys = find_config_str(cmd->cf->root, "report/pvs_sort", '/',
+ keys = find_config_str(cmd->cft->root, "report/pvs_sort",
DEFAULT_PVS_SORT);
if (!arg_count(cmd, verbose_ARG))
- options = find_config_str(cmd->cf->root,
- "report/pvs_cols", '/',
+ options = find_config_str(cmd->cft->root,
+ "report/pvs_cols",
DEFAULT_PVS_COLS);
else
- options = find_config_str(cmd->cf->root,
+ options = find_config_str(cmd->cft->root,
"report/pvs_cols_verbose",
- '/', DEFAULT_PVS_COLS_VERB);
+ DEFAULT_PVS_COLS_VERB);
break;
case SEGS:
- keys = find_config_str(cmd->cf->root, "report/segs_sort", '/',
+ keys = find_config_str(cmd->cft->root, "report/segs_sort",
DEFAULT_SEGS_SORT);
if (!arg_count(cmd, verbose_ARG))
- options = find_config_str(cmd->cf->root,
- "report/segs_cols", '/',
+ options = find_config_str(cmd->cft->root,
+ "report/segs_cols",
DEFAULT_SEGS_COLS);
else
- options = find_config_str(cmd->cf->root,
+ options = find_config_str(cmd->cft->root,
"report/segs_cols_verbose",
- '/', DEFAULT_SEGS_COLS_VERB);
+ DEFAULT_SEGS_COLS_VERB);
break;
}
UINT64_C(0)) * 2;
if (!pvmetadatasize)
pvmetadatasize =
- find_config_int(cmd->cf->root,
+ find_config_int(cmd->cft->root,
"metadata/pvmetadatasize",
- '/', DEFAULT_PVMETADATASIZE);
+ DEFAULT_PVMETADATASIZE);
pvmetadatacopies = arg_int_value(cmd, metadatacopies_ARG, -1);
if (pvmetadatacopies < 0)
pvmetadatacopies =
- find_config_int(cmd->cf->root,
+ find_config_int(cmd->cft->root,
"metadata/pvmetadatacopies",
- '/', DEFAULT_PVMETADATACOPIES);
+ DEFAULT_PVMETADATACOPIES);
}
if (!archive(vg)) {