use statvfs instead of this ugly df-wrapping.

* include/GParted_Core.h,
  src/GParted_Core.cc: use statvfs instead of this ugly df-wrapping.
This commit is contained in:
Bart Hakvoort 2005-12-11 00:05:28 +00:00
parent 6d8e9a65de
commit a6a47c7df5
3 changed files with 60 additions and 54 deletions

View File

@ -1,3 +1,8 @@
2005-12-11 Bart Hakvoort <hakvoort@cvs.gnome.org>
* include/GParted_Core.h,
src/GParted_Core.cc: use statvfs instead of this ugly df-wrapping.
2005-12-08 Bart Hakvoort <hakvoort@cvs.gnome.org>
* include/Partition.h,

View File

@ -68,9 +68,9 @@ private:
GParted::FILESYSTEM Get_Filesystem( ) ; //temporary function.. asa new checks ripple through in libparted i'll remove it.
void set_device_partitions( Device & device ) ;
void set_mountpoints( std::vector<Partition> & partitions, bool first_time = true ) ;
void set_used_sectors( std::vector<Partition> & partitions ) ;
void Insert_Unallocated( const Glib::ustring & device_path, std::vector<Partition> & partitions, Sector start, Sector end, bool inside_extended ) ;
Glib::ustring get_sym_path( const Glib::ustring & real_path ) ;
void Set_Used_Sectors( Partition & partition );
void LP_Set_Used_Sectors( Partition & partition );
Glib::ustring Get_Flags( ) ;
int Create_Empty_Partition( Partition & new_partition, bool copy = false ) ;

View File

@ -1,5 +1,7 @@
#include "../include/GParted_Core.h"
#include <sys/statvfs.h>
namespace GParted
{
@ -121,11 +123,13 @@ void GParted_Core::get_devices( std::vector<Device> & devices )
set_device_partitions( temp_device ) ;
if ( temp_device .highest_busy )
{
set_mountpoints( temp_device .device_partitions ) ;
set_used_sectors( temp_device .device_partitions ) ;
if ( temp_device .highest_busy )
temp_device .readonly = ! ped_disk_commit_to_os( lp_disk ) ;
}
}
//harddisk without disklabel
else
{
@ -226,21 +230,6 @@ void GParted_Core::set_device_partitions( Device & device )
lp_partition ->type,
ped_partition_is_busy( lp_partition ) );
if ( partition_temp .filesystem != GParted::FS_LINUX_SWAP )
{
Set_Used_Sectors( partition_temp ) ;
//the 'Unknown' filesystem warning overrules this one
if ( partition_temp .sectors_used == -1 && partition_temp .error .empty( ) )
{
partition_temp .error = _("Unable to read the contents of this filesystem!") ;
partition_temp .error += "\n" ;
partition_temp .error += _("Because of this some operations may be unavailable.") ;
partition_temp .error += "\n\n" ;
partition_temp .error += _("Did you install the correct plugin for this filesystem?") ;
}
}
partition_temp .flags = Get_Flags( ) ;
if ( partition_temp .busy && partition_temp .partition_number > device .highest_busy )
@ -326,6 +315,54 @@ void GParted_Core::set_mountpoints( std::vector<Partition> & partitions, bool fi
mount_info .clear() ;
}
void GParted_Core::set_used_sectors( std::vector<Partition> & partitions )
{
struct statvfs sfs ;
temp = _("Unable to read the contents of this filesystem!") ;
temp += "\n" ;
temp += _("Because of this some operations may be unavailable.") ;
temp += "\n\n" ;
temp += _("Did you install the correct plugin for this filesystem?") ;
for ( unsigned int t = 0 ; t < partitions .size() ; t++ )
{
if ( partitions[ t ] .filesystem != GParted::FS_LINUX_SWAP && partitions[ t ] .filesystem != GParted::FS_UNKNOWN )
{
if ( partitions[ t ] .type == GParted::TYPE_PRIMARY || partitions[ t ] .type == GParted::TYPE_LOGICAL )
{
if ( partitions[ t ] .busy )
{
if ( statvfs( partitions[ t ] .mountpoint .c_str(), &sfs ) == 0 )
partitions[ t ] .Set_Unused( sfs .f_bfree * (sfs .f_bsize / 512) ) ;
}
else
{
switch( get_fs( partitions[ t ] .filesystem ) .read )
{
case GParted::FS::EXTERNAL :
set_proper_filesystem( partitions[ t ] .filesystem ) ;
p_filesystem ->Set_Used_Sectors( partitions[ t ] ) ;
break ;
case GParted::FS::LIBPARTED :
LP_Set_Used_Sectors( partitions[ t ] ) ;
break ;
default:
break ;
}
}
if ( partitions[ t ] .sectors_used == -1 )
partitions[ t ] .error = temp ;
}
else if ( partitions[ t ] .type == GParted::TYPE_EXTENDED )
set_used_sectors( partitions[ t ] .logicals ) ;
}
}
}
void GParted_Core::Insert_Unallocated( const Glib::ustring & device_path, std::vector<Partition> & partitions, Sector start, Sector end, bool inside_extended )
{
partition_temp .Reset( ) ;
@ -617,42 +654,6 @@ Glib::ustring GParted_Core::get_sym_path( const Glib::ustring & real_path )
return real_path;
}
void GParted_Core::Set_Used_Sectors( Partition & partition )
{
//because 'unknown' is translated we need to call get_fs instead of using partition .filesystem directly
if ( get_fs( partition .filesystem ) .filesystem == GParted::FS_UNKNOWN )
partition .Set_Unused( -1 ) ;
else if ( partition .busy )
{
system( ("df -k --sync " + partition .partition + " | grep " + partition .partition + " > /tmp/.tmp_gparted") .c_str( ) );
std::ifstream file_input( "/tmp/.tmp_gparted" );
//we need the 4th value
file_input >> temp; file_input >> temp; file_input >> temp;file_input >> temp;
if ( ! temp .empty( ) )
partition .Set_Unused( atol( temp .c_str( ) ) * 2 ) ;// 1024/512
file_input .close( );
system( "rm -f /tmp/.tmp_gparted" );
}
else
switch( get_fs( partition .filesystem ) .read )
{
case GParted::FS::EXTERNAL :
set_proper_filesystem( partition .filesystem ) ;
p_filesystem ->Set_Used_Sectors( partition ) ;
break ;
case GParted::FS::LIBPARTED :
LP_Set_Used_Sectors( partition ) ;
break ;
default:
partition .Set_Unused( -1 ) ;
}
}
void GParted_Core::LP_Set_Used_Sectors( Partition & partition )
{
PedFileSystem *fs = NULL;