Refactor and factorize mount entries

Signed-off-by: Nicolas Cornu <ncornu@aldebaran.com>
This commit is contained in:
Nicolas Cornu 2015-08-06 10:37:15 +02:00
parent f5b67b36e2
commit db4aba3874

View File

@ -1836,14 +1836,15 @@ static int mount_entry_create_dir_file(const struct mntent *mntent,
return ret; return ret;
} }
static inline int mount_entry_on_systemfs(struct mntent *mntent) static inline int mount_entry_on_generic(struct mntent *mntent,
const char* path)
{ {
unsigned long mntflags; unsigned long mntflags;
char *mntdata; char *mntdata;
int ret; int ret;
bool optional = hasmntopt(mntent, "optional") != NULL; bool optional = hasmntopt(mntent, "optional") != NULL;
ret = mount_entry_create_dir_file(mntent, mntent->mnt_dir); ret = mount_entry_create_dir_file(mntent, path);
cull_mntent_opt(mntent); cull_mntent_opt(mntent);
@ -1852,25 +1853,27 @@ static inline int mount_entry_on_systemfs(struct mntent *mntent)
return -1; return -1;
} }
ret = mount_entry(mntent->mnt_fsname, mntent->mnt_dir, ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type,
mntent->mnt_type, mntflags, mntdata, optional); mntflags, mntdata, optional);
free(mntdata); free(mntdata);
return ret; return ret;
} }
static inline int mount_entry_on_systemfs(struct mntent *mntent)
{
return mount_entry_on_generic(mntent, mntent->mnt_dir);
}
static int mount_entry_on_absolute_rootfs(struct mntent *mntent, static int mount_entry_on_absolute_rootfs(struct mntent *mntent,
const struct lxc_rootfs *rootfs, const struct lxc_rootfs *rootfs,
const char *lxc_name) const char *lxc_name)
{ {
char *aux; char *aux;
char path[MAXPATHLEN]; char path[MAXPATHLEN];
unsigned long mntflags;
char *mntdata;
int r, ret = 0, offset; int r, ret = 0, offset;
const char *lxcpath; const char *lxcpath;
bool optional = hasmntopt(mntent, "optional") != NULL;
lxcpath = lxc_global_config_value("lxc.lxcpath"); lxcpath = lxc_global_config_value("lxc.lxcpath");
if (!lxcpath) { if (!lxcpath) {
@ -1894,7 +1897,7 @@ skipvarlib:
aux = strstr(mntent->mnt_dir, rootfs->path); aux = strstr(mntent->mnt_dir, rootfs->path);
if (!aux) { if (!aux) {
WARN("ignoring mount point '%s'", mntent->mnt_dir); WARN("ignoring mount point '%s'", mntent->mnt_dir);
goto out; return ret;
} }
offset = strlen(rootfs->path); offset = strlen(rootfs->path);
@ -1904,36 +1907,17 @@ skipabs:
aux + offset); aux + offset);
if (r < 0 || r >= MAXPATHLEN) { if (r < 0 || r >= MAXPATHLEN) {
WARN("pathnme too long for '%s'", mntent->mnt_dir); WARN("pathnme too long for '%s'", mntent->mnt_dir);
ret = -1;
goto out;
}
ret = mount_entry_create_dir_file(mntent, path);
cull_mntent_opt(mntent);
if (parse_mntopts(mntent->mnt_opts, &mntflags, &mntdata) < 0) {
free(mntdata);
return -1; return -1;
} }
ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type, return mount_entry_on_generic(mntent, path);
mntflags, mntdata, optional);
free(mntdata);
out:
return ret;
} }
static int mount_entry_on_relative_rootfs(struct mntent *mntent, static int mount_entry_on_relative_rootfs(struct mntent *mntent,
const char *rootfs) const char *rootfs)
{ {
char path[MAXPATHLEN]; char path[MAXPATHLEN];
unsigned long mntflags;
char *mntdata;
int ret; int ret;
bool optional = hasmntopt(mntent, "optional") != NULL;
/* relative to root mount point */ /* relative to root mount point */
ret = snprintf(path, sizeof(path), "%s/%s", rootfs, mntent->mnt_dir); ret = snprintf(path, sizeof(path), "%s/%s", rootfs, mntent->mnt_dir);
@ -1942,21 +1926,7 @@ static int mount_entry_on_relative_rootfs(struct mntent *mntent,
return -1; return -1;
} }
ret = mount_entry_create_dir_file(mntent, path); return mount_entry_on_generic(mntent, path);
cull_mntent_opt(mntent);
if (parse_mntopts(mntent->mnt_opts, &mntflags, &mntdata) < 0) {
free(mntdata);
return -1;
}
ret = mount_entry(mntent->mnt_fsname, path, mntent->mnt_type,
mntflags, mntdata, optional);
free(mntdata);
return ret;
} }
static int mount_file_entries(const struct lxc_rootfs *rootfs, FILE *file, static int mount_file_entries(const struct lxc_rootfs *rootfs, FILE *file,