From 5f6301d1b05bb51a7604a350dea52fb6580fdfaa Mon Sep 17 00:00:00 2001 From: Curtis Gedak Date: Tue, 13 Oct 2009 17:45:04 -0600 Subject: [PATCH] Rework logic to resolve real path for symbolic link devices (#582687) --- src/GParted_Core.cc | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/GParted_Core.cc b/src/GParted_Core.cc index e07fa749..a47f7ccc 100644 --- a/src/GParted_Core.cc +++ b/src/GParted_Core.cc @@ -660,19 +660,21 @@ void GParted_Core::read_mountpoints_from_file( mountpoint = Utils::regexp_label( line, "^/[^ \t]+[ \t]+([^ \t]+)" ) ; if ( mountpoint .length() > 0 && node .length() > 0 ) { - //If node is a symbolic link (e.g., /dev/root), then find real path - if ( file_test( node, Glib::FILE_TEST_IS_SYMLINK ) ) - { - char c_str[4096+1] ; - Glib::ustring tmp_node = node ; - //FIXME: it seems realpath is very unsafe to use (manpage)... - realpath( tmp_node .c_str(), c_str ) ; - if ( tmp_node .length() > 0 ) - node = tmp_node ; - } - //only add this path if it exists + //Only add node path(s) if mount point exists if ( file_test( mountpoint, Glib::FILE_TEST_EXISTS ) ) + { map[ node ] .push_back( mountpoint ) ; + + //If node is a symbolic link (e.g., /dev/root) + // then find real path and add entry + if ( file_test( node, Glib::FILE_TEST_IS_SYMLINK ) ) + { + char c_str[4096+1] ; + //FIXME: it seems realpath is very unsafe to use (manpage)... + if ( realpath( node .c_str(), c_str ) != NULL ) + map[ c_str ] .push_back( mountpoint ) ; + } + } } }