Rework logic to resolve real path for symbolic link devices (#582687)

This commit is contained in:
Curtis Gedak 2009-10-13 17:45:04 -06:00
parent 8f857692e0
commit 5f6301d1b0
1 changed files with 13 additions and 11 deletions

View File

@ -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 ) ;
}
}
}
}