Resolve real path for symbolic link devices in mount files (#582687)

In order to find a match between the device paths in mount files and
partitions as found by libparted, the mount device must be a real path
and not a symbolic link.

Closes GParted bug #582687
This commit is contained in:
Curtis Gedak 2009-08-09 14:26:07 -06:00
parent a505363f08
commit 6d90d0fbcd
1 changed files with 11 additions and 6 deletions

View File

@ -644,16 +644,21 @@ void GParted_Core::read_mountpoints_from_file(
{
node = Utils::regexp_label( line, "^(/[^ \t]+)[ \t]+[^ \t]+" ) ;
mountpoint = Utils::regexp_label( line, "^/[^ \t]+[ \t]+([^ \t]+)" ) ;
if ( mountpoint .length() > 0 &&
node .length() > 0 &&
node != "/dev/root" )
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
if ( file_test( mountpoint, Glib::FILE_TEST_EXISTS ) )
{
map[ node ] .push_back( mountpoint ) ;
//FIXME: Should check if file is a symbolic link. If so then find real path
}
}
}