From: Lennart Poettering Date: Wed, 13 Oct 2010 22:42:44 +0000 (+0200) Subject: umount: properly enumerate loopback devices X-Git-Tag: v12~238 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=b854a7e7289e0b136c6a4fa03ad76640c59bcfa0 umount: properly enumerate loopback devices --- diff --git a/src/umount.c b/src/umount.c index 79fbba732..bd4f01ff6 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; }