[lvm-devel] [PATCH 3/7][retry remove] Add new "dm_set_sysfs_dir" fn to libdm to set the sysfs directory used in the system
Peter Rajnoha
prajnoha at redhat.com
Tue Sep 20 12:56:42 UTC 2011
libdm/libdevmapper.h | 6 ++++++
libdm/libdm-common.c | 33 +++++++++++++++++++++++++--------
2 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/libdm/libdevmapper.h b/libdm/libdevmapper.h
index 628d7da..ae39262 100644
--- a/libdm/libdevmapper.h
+++ b/libdm/libdevmapper.h
@@ -256,6 +256,12 @@ int dm_set_dev_dir(const char *dir);
const char *dm_dir(void);
/*
+ * Configure sysfs directory
+ */
+int dm_set_sysfs_dir(const char *dir);
+const char *dm_sysfs_dir(void);
+
+/*
* Determine whether a major number belongs to device-mapper or not.
*/
int dm_is_dm_major(uint32_t major);
diff --git a/libdm/libdm-common.c b/libdm/libdm-common.c
index 0aacd1f..7517fb1 100644
--- a/libdm/libdm-common.c
+++ b/libdm/libdm-common.c
@@ -58,6 +58,7 @@ union semun
#endif
static char _dm_dir[PATH_MAX] = DEV_DIR DM_DIR;
+static char _sysfs_dir[PATH_MAX] = "";
static int _verbose = 0;
static int _suspended_dev_counter = 0;
@@ -1008,32 +1009,48 @@ void update_devs(void)
_pop_node_ops();
}
-int dm_set_dev_dir(const char *dev_dir)
+static int _canonicalize_and_set_dir(const char *src, const char *suffix, size_t max_len, char *dir)
{
size_t len;
const char *slash;
- if (*dev_dir != '/') {
- log_debug("Invalid dev_dir value, %s: "
- "not an absolute name.", dev_dir);
+
+ if (*src != '/') {
+ log_debug("Invalid directory value, %s: "
+ "not an absolute name.", src);
return 0;
}
- len = strlen(dev_dir);
- slash = dev_dir[len-1] == '/' ? "" : "/";
+ len = strlen(src);
+ slash = src[len-1] == '/' ? "" : "/";
- if (dm_snprintf(_dm_dir, sizeof _dm_dir, "%s%s%s", dev_dir, slash, DM_DIR) < 0) {
- log_debug("Invalid dev_dir value, %s: name too long.", dev_dir);
+ if (dm_snprintf(dir, max_len, "%s%s%s", src, slash, suffix ? suffix : "") < 0) {
+ log_debug("Invalid directory value, %s: name too long.", src);
return 0;
}
return 1;
}
+int dm_set_dev_dir(const char *dev_dir)
+{
+ return _canonicalize_and_set_dir(dev_dir, DM_DIR, sizeof _dm_dir, _dm_dir);
+}
+
const char *dm_dir(void)
{
return _dm_dir;
}
+int dm_set_sysfs_dir(const char *sysfs_dir)
+{
+ return _canonicalize_and_set_dir(sysfs_dir, NULL, sizeof _sysfs_dir, _sysfs_dir);
+}
+
+const char *dm_sysfs_dir(void)
+{
+ return _sysfs_dir;
+}
+
int dm_mknodes(const char *name)
{
struct dm_task *dmt;
More information about the lvm-devel
mailing list