diff options
author | Lennart Poettering <lennart@poettering.net> | 2010-10-14 00:42:44 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2010-10-14 00:42:44 +0200 |
commit | b854a7e7289e0b136c6a4fa03ad76640c59bcfa0 (patch) | |
tree | d30a3ac882f7ccea34515789f70ede92d3ad0f8a /src | |
parent | 2054a5b8cb52a66462b7d967ed9a6c179777bc0f (diff) |
umount: properly enumerate loopback devices
Diffstat (limited to 'src')
-rw-r--r-- | src/umount.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/umount.c b/src/umount.c index 79fbba7324..bd4f01ff64 100644 --- a/src/umount.c +++ b/src/umount.c @@ -227,16 +227,27 @@ static int loopback_list_get(MountPoint **loopback_list_head) { udev_list_entry_foreach(item, first) { MountPoint *lb; + struct udev_device *d; char *loop; + const char *dn; - loop = cunescape(udev_list_entry_get_name(item)); - if (!loop) { + if (!(d = udev_device_new_from_syspath(udev, udev_list_entry_get_name(item)))) { r = -ENOMEM; goto finish; } - lb = mount_point_alloc(loop); - if (!lb) { + if ((dn = udev_device_get_devnode(d))) { + loop = strdup(dn); + udev_device_unref(d); + + if (!loop) { + r = -ENOMEM; + goto finish; + } + } else + udev_device_unref(d); + + if (!(lb = mount_point_alloc(loop))) { free(loop); r = -ENOMEM; goto finish; @@ -251,7 +262,9 @@ finish: if (e) udev_enumerate_unref(e); - free(udev); + if (udev) + udev_unref(udev); + return r; } |