summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2014-09-28 12:54:20 +0200
committerZdenek Kabelac <zkabelac@redhat.com>2014-09-28 13:49:01 +0200
commitb0dde9e8f026ddd6799d6ca534ff9523d633c735 (patch)
treeef7dc5788d83aec4106170497a90b5c5bb28cd95
parentf120c954fc065d67c1aacd5cfba58843eb552b0f (diff)
downloadlvm2-b0dde9e8f026ddd6799d6ca534ff9523d633c735.tar.gz
toollib: refactor skip_dev_dir
Detect dev dir just once.
-rw-r--r--tools/toollib.c62
1 files changed, 31 insertions, 31 deletions
diff --git a/tools/toollib.c b/tools/toollib.c
index 7be5b5aee..3a0e05373 100644
--- a/tools/toollib.c
+++ b/tools/toollib.c
@@ -108,51 +108,51 @@ int become_daemon(struct cmd_context *cmd, int skip_lvm)
const char *skip_dev_dir(struct cmd_context *cmd, const char *vg_name,
unsigned *dev_dir_found)
{
- const char *dmdir = dm_dir();
+ size_t devdir_len = strlen(cmd->dev_dir);
+ const char *dmdir = dm_dir() + devdir_len;
size_t dmdir_len = strlen(dmdir), vglv_sz;
char *vgname, *lvname, *layer, *vglv;
/* FIXME Do this properly */
- if (*vg_name == '/') {
- while (*vg_name == '/')
+ if (*vg_name == '/')
+ while (vg_name[1] == '/')
vg_name++;
- vg_name--;
- }
- /* Reformat string if /dev/mapper found */
- if (!strncmp(vg_name, dmdir, dmdir_len) && vg_name[dmdir_len] == '/') {
+ if (strncmp(vg_name, cmd->dev_dir, devdir_len)) {
+ if (dev_dir_found)
+ *dev_dir_found = 0;
+ } else {
if (dev_dir_found)
*dev_dir_found = 1;
- vg_name += dmdir_len;
+
+ vg_name += devdir_len;
while (*vg_name == '/')
vg_name++;
- if (!dm_split_lvm_name(cmd->mem, vg_name, &vgname, &lvname, &layer) ||
- *layer) {
- log_error("skip_dev_dir: Couldn't split up device name %s",
- vg_name);
- return vg_name;
- }
- vglv_sz = strlen(vgname) + strlen(lvname) + 2;
- if (!(vglv = dm_pool_alloc(cmd->mem, vglv_sz)) ||
- dm_snprintf(vglv, vglv_sz, "%s%s%s", vgname,
- *lvname ? "/" : "",
- lvname) < 0) {
- log_error("vg/lv string alloc failed");
- return vg_name;
+ /* Reformat string if /dev/mapper found */
+ if (!strncmp(vg_name, dmdir, dmdir_len) && vg_name[dmdir_len + 1] == '/') {
+ vg_name += devdir_len + 1;
+ while (*vg_name == '/')
+ vg_name++;
+
+ if (!dm_split_lvm_name(cmd->mem, vg_name, &vgname, &lvname, &layer) ||
+ *layer) {
+ log_error("skip_dev_dir: Couldn't split up device name %s",
+ vg_name);
+ return vg_name;
+ }
+ vglv_sz = strlen(vgname) + strlen(lvname) + 2;
+ if (!(vglv = dm_pool_alloc(cmd->mem, vglv_sz)) ||
+ dm_snprintf(vglv, vglv_sz, "%s%s%s", vgname,
+ *lvname ? "/" : "",
+ lvname) < 0) {
+ log_error("vg/lv string alloc failed");
+ return vg_name;
+ }
+ return vglv;
}
- return vglv;
}
- if (!strncmp(vg_name, cmd->dev_dir, strlen(cmd->dev_dir))) {
- if (dev_dir_found)
- *dev_dir_found = 1;
- vg_name += strlen(cmd->dev_dir);
- while (*vg_name == '/')
- vg_name++;
- } else if (dev_dir_found)
- *dev_dir_found = 0;
-
return vg_name;
}