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:
parent
6d8e9a65de
commit
a6a47c7df5
|
@ -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>
|
2005-12-08 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||||
|
|
||||||
* include/Partition.h,
|
* include/Partition.h,
|
||||||
|
|
|
@ -68,9 +68,9 @@ private:
|
||||||
GParted::FILESYSTEM Get_Filesystem( ) ; //temporary function.. asa new checks ripple through in libparted i'll remove it.
|
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_device_partitions( Device & device ) ;
|
||||||
void set_mountpoints( std::vector<Partition> & partitions, bool first_time = true ) ;
|
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 ) ;
|
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 ) ;
|
Glib::ustring get_sym_path( const Glib::ustring & real_path ) ;
|
||||||
void Set_Used_Sectors( Partition & partition );
|
|
||||||
void LP_Set_Used_Sectors( Partition & partition );
|
void LP_Set_Used_Sectors( Partition & partition );
|
||||||
Glib::ustring Get_Flags( ) ;
|
Glib::ustring Get_Flags( ) ;
|
||||||
int Create_Empty_Partition( Partition & new_partition, bool copy = false ) ;
|
int Create_Empty_Partition( Partition & new_partition, bool copy = false ) ;
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
#include "../include/GParted_Core.h"
|
#include "../include/GParted_Core.h"
|
||||||
|
|
||||||
|
#include <sys/statvfs.h>
|
||||||
|
|
||||||
namespace GParted
|
namespace GParted
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -121,11 +123,13 @@ void GParted_Core::get_devices( std::vector<Device> & devices )
|
||||||
set_device_partitions( temp_device ) ;
|
set_device_partitions( temp_device ) ;
|
||||||
|
|
||||||
if ( temp_device .highest_busy )
|
if ( temp_device .highest_busy )
|
||||||
{
|
|
||||||
set_mountpoints( temp_device .device_partitions ) ;
|
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 ) ;
|
temp_device .readonly = ! ped_disk_commit_to_os( lp_disk ) ;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
//harddisk without disklabel
|
//harddisk without disklabel
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -226,21 +230,6 @@ void GParted_Core::set_device_partitions( Device & device )
|
||||||
lp_partition ->type,
|
lp_partition ->type,
|
||||||
ped_partition_is_busy( lp_partition ) );
|
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( ) ;
|
partition_temp .flags = Get_Flags( ) ;
|
||||||
|
|
||||||
if ( partition_temp .busy && partition_temp .partition_number > device .highest_busy )
|
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() ;
|
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 )
|
void GParted_Core::Insert_Unallocated( const Glib::ustring & device_path, std::vector<Partition> & partitions, Sector start, Sector end, bool inside_extended )
|
||||||
{
|
{
|
||||||
partition_temp .Reset( ) ;
|
partition_temp .Reset( ) ;
|
||||||
|
@ -617,42 +654,6 @@ Glib::ustring GParted_Core::get_sym_path( const Glib::ustring & real_path )
|
||||||
return 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 )
|
void GParted_Core::LP_Set_Used_Sectors( Partition & partition )
|
||||||
{
|
{
|
||||||
PedFileSystem *fs = NULL;
|
PedFileSystem *fs = NULL;
|
||||||
|
|
Loading…
Reference in New Issue