diff options
author | Karel Zak | 2015-05-28 12:09:41 +0200 |
---|---|---|
committer | Karel Zak | 2015-05-28 12:09:41 +0200 |
commit | 6c62abc42bb1c2aad60d0da1ce3f7498ac48cd1b (patch) | |
tree | 54c6cbf4b0a972c7bf63ae2da33077ad7d9f307e /lib/sysfs.c | |
parent | lib/sysfs: Fix /dev to /sys node name translation (diff) | |
download | kernel-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.c | 34 |
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'; |