summaryrefslogtreecommitdiffstats
path: root/lib/sysfs.c
diff options
context:
space:
mode:
authorKarel Zak2015-05-28 12:09:41 +0200
committerKarel Zak2015-05-28 12:09:41 +0200
commit6c62abc42bb1c2aad60d0da1ce3f7498ac48cd1b (patch)
tree54c6cbf4b0a972c7bf63ae2da33077ad7d9f307e /lib/sysfs.c
parentlib/sysfs: Fix /dev to /sys node name translation (diff)
downloadkernel-qcow2-util-linux-6c62abc42bb1c2aad60d0da1ce3f7498ac48cd1b.tar.gz
kernel-qcow2-util-linux-6c62abc42bb1c2aad60d0da1ce3f7498ac48cd1b.tar.xz
kernel-qcow2-util-linux-6c62abc42bb1c2aad60d0da1ce3f7498ac48cd1b.zip
lib/sysfs: rename devname functions, cleanup
Well, I don't have mental power to use function names like sysfs_devname_to_dev_name() so this patch renames to sysfs_devname_sys_to_dev() sysfs_devname_dev_to_sys() It also cleanups usage of the functions. We have to be sure that sysfs.c code returns regular devnames. The existence of the sysfs devnames (with '!') should be completely hidden in sysfs specific code. Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'lib/sysfs.c')
-rw-r--r--lib/sysfs.c34
1 files changed, 25 insertions, 9 deletions
diff --git a/lib/sysfs.c b/lib/sysfs.c
index 34a520758..1ea2e779a 100644
--- a/lib/sysfs.c
+++ b/lib/sysfs.c
@@ -66,8 +66,19 @@ dev_t sysfs_devname_to_devno(const char *name, const char *parent)
/*
* Create path to /sys/block/<parent>/<name>/dev
*/
- int len = snprintf(buf, sizeof(buf),
- _PATH_SYS_BLOCK "/%s/%s/dev", parent, name);
+ char *_name = strdup(name), *_parent = strdup(parent);
+ int len;
+
+ if (!_name || !_parent)
+ return 0;
+
+ sysfs_devname_dev_to_sys(_name);
+ sysfs_devname_dev_to_sys(_parent);
+
+ len = snprintf(buf, sizeof(buf),
+ _PATH_SYS_BLOCK "/%s/%s/dev", _parent, _name);
+ free(_name);
+ free(_parent);
if (len < 0 || (size_t) len + 1 > sizeof(buf))
return 0;
path = buf;
@@ -76,12 +87,16 @@ dev_t sysfs_devname_to_devno(const char *name, const char *parent)
/*
* Create path to /sys/block/<sysname>/dev
*/
- char sysname[PATH_MAX];
+ char *_name = strdup(name);
+ int len;
- strncpy(sysname, name, sizeof(sysname));
- sysfs_dev_name_to_devname(sysname);
- int len = snprintf(buf, sizeof(buf),
- _PATH_SYS_BLOCK "/%s/dev", sysname);
+ if (!_name)
+ return 0;
+
+ sysfs_devname_dev_to_sys(_name);
+ len = snprintf(buf, sizeof(buf),
+ _PATH_SYS_BLOCK "/%s/dev", _name);
+ free(_name);
if (len < 0 || (size_t) len + 1 > sizeof(buf))
return 0;
path = buf;
@@ -135,7 +150,6 @@ char *sysfs_devno_to_devpath(dev_t devno, char *buf, size_t bufsiz)
return NULL;
/* create the final "/dev/<name>" string */
- sysfs_devname_to_dev_name(name);
memmove(buf + 5, name, sz + 1);
memcpy(buf, "/dev/", 5);
@@ -550,6 +564,8 @@ char *sysfs_get_devname(struct sysfs_cxt *cxt, char *buf, size_t bufsiz)
sz = strlen(name);
memmove(buf, name, sz + 1);
+ sysfs_devname_sys_to_dev(buf);
+
return buf;
}
@@ -794,7 +810,7 @@ int sysfs_devno_to_wholedisk(dev_t dev, char *diskname,
if (!name)
goto err;
- sysfs_devname_to_dev_name(name);
+ sysfs_devname_sys_to_dev(name);
if (diskname && len) {
strncpy(diskname, name, len);
diskname[len - 1] = '\0';