From: Lennart Poettering Date: Wed, 13 Oct 2010 22:41:57 +0000 (+0200) Subject: umount: unescape path from /proc/self/mountinfo first, then check against api mount... X-Git-Tag: v12~239 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=2054a5b8cb52a66462b7d967ed9a6c179777bc0f umount: unescape path from /proc/self/mountinfo first, then check against api mount list --- diff --git a/src/umount.c b/src/umount.c index 468eb715d..79fbba732 100644 --- a/src/umount.c +++ b/src/umount.c @@ -38,6 +38,7 @@ typedef struct MountPoint { LIST_FIELDS (struct MountPoint, mount_point); } MountPoint; +/* Takes over possession of path */ static MountPoint *mount_point_alloc(char *path) { MountPoint *mp; @@ -98,23 +99,26 @@ static int mount_points_list_get(MountPoint **mount_point_list_head) { continue; } - if (mount_point_is_api(path)) { - free(path); - continue; - } + p = cunescape(path); + free(path); - if (!(p = cunescape(path))) { + if (!p) { r = -ENOMEM; goto finish; } + if (mount_point_is_api(p)) { + free(p); + continue; + } + if (!(mp = mount_point_alloc(p))) { + free(p); r = -ENOMEM; goto finish; } - LIST_PREPEND(MountPoint, mount_point, *mount_point_list_head, mp); - free(path); + LIST_PREPEND(MountPoint, mount_point, *mount_point_list_head, mp); } r = 0; @@ -122,8 +126,6 @@ static int mount_points_list_get(MountPoint **mount_point_list_head) { finish: fclose(proc_self_mountinfo); - free(path); - return r; }