mirror of
https://gitlab.gnome.org/GNOME/gparted
synced 2024-08-27 19:50:23 +00:00
lots of stuff and cleanups, including fixing getting used/unused space of
* lots of stuff and cleanups, including fixing getting used/unused space of hfs/hfs+/fat16/fat32 * also fixes bug #161362
This commit is contained in:
parent
ece676d4bd
commit
61cd0ce778
|
@ -1,3 +1,7 @@
|
||||||
|
2005-09-13 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||||
|
* lots of stuff and cleanups, including fixing getting used/unused space of hfs/hfs+/fat16/fat32
|
||||||
|
* also fixes bug #161362
|
||||||
|
|
||||||
2005-08-31 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
2005-08-31 Bart Hakvoort <hakvoort@cvs.gnome.org>
|
||||||
|
|
||||||
* src/Dialog_Filesystems.cc: at startup closebutton is focused (#308381)
|
* src/Dialog_Filesystems.cc: at startup closebutton is focused (#308381)
|
||||||
|
|
|
@ -179,8 +179,8 @@ namespace UStringPrivate
|
||||||
: arg_no(1)
|
: arg_no(1)
|
||||||
{
|
{
|
||||||
#if __GNUC__ >= 3
|
#if __GNUC__ >= 3
|
||||||
//plors: i've uncommented this one since it caused a crasher at line 124 for some locales (e.g. nl_BE)
|
//see #157871
|
||||||
//os.imbue(std::locale("")); // use the user's locale for the stream
|
//os.imbue(std::locale("")); // use the user's locale for the stream
|
||||||
#endif
|
#endif
|
||||||
std::string::size_type b = 0, i = 0;
|
std::string::size_type b = 0, i = 0;
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include "../include/xfs.h"
|
#include "../include/xfs.h"
|
||||||
#include "../include/jfs.h"
|
#include "../include/jfs.h"
|
||||||
#include "../include/hfs.h"
|
#include "../include/hfs.h"
|
||||||
|
#include "../include/hfsplus.h"
|
||||||
#include "../include/reiser4.h"
|
#include "../include/reiser4.h"
|
||||||
|
|
||||||
#include <glibmm/ustring.h>
|
#include <glibmm/ustring.h>
|
||||||
|
|
|
@ -71,11 +71,6 @@ inline long Sector_To_MB( Sector sectors )
|
||||||
return Round( sectors * 0.000488281250 ) ; // that's what 512/1024/1024 gives you :)
|
return Round( sectors * 0.000488281250 ) ; // that's what 512/1024/1024 gives you :)
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Sector Abs( Sector sectors )
|
|
||||||
{
|
|
||||||
return sectors < 0 ? sectors - 2*sectors : sectors ;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline Gtk::Label * mk_label( const Glib::ustring & text, bool use_markup = true, bool align_left = true, bool wrap = false, const Glib::ustring & text_color = "black" )
|
inline Gtk::Label * mk_label( const Glib::ustring & text, bool use_markup = true, bool align_left = true, bool wrap = false, const Glib::ustring & text_color = "black" )
|
||||||
{
|
{
|
||||||
Gtk::Label * label = manage( new Gtk::Label( text ) ) ;
|
Gtk::Label * label = manage( new Gtk::Label( text ) ) ;
|
||||||
|
@ -96,9 +91,10 @@ inline Gtk::Label * mk_label( const Glib::ustring & text, bool use_markup = true
|
||||||
return label ;
|
return label ;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline Glib::ustring num_to_str( Sector number )
|
inline Glib::ustring num_to_str( Sector number, bool use_C_locale = false )
|
||||||
{
|
{
|
||||||
std::stringstream ss;
|
std::stringstream ss ;
|
||||||
|
//ss.imbue( std::locale( use_C_locale ? "C" : "" ) ) ; see #157871
|
||||||
ss << number ;
|
ss << number ;
|
||||||
return ss .str( ) ;
|
return ss .str( ) ;
|
||||||
}
|
}
|
||||||
|
@ -128,6 +124,7 @@ inline Glib::ustring Get_Color( const Glib::ustring & filesystem )
|
||||||
else if ( filesystem == "jfs" ) return "#E0C39E" ;
|
else if ( filesystem == "jfs" ) return "#E0C39E" ;
|
||||||
|
|
||||||
else if ( filesystem == "hfs" ) return "#E0B6AF" ;
|
else if ( filesystem == "hfs" ) return "#E0B6AF" ;
|
||||||
|
else if ( filesystem == "hfs+" ) return "#C0A39E" ;
|
||||||
|
|
||||||
else if ( filesystem == "ufs" ) return "#D1940C" ;
|
else if ( filesystem == "ufs" ) return "#D1940C" ;
|
||||||
|
|
||||||
|
|
41
include/hfsplus.h
Normal file
41
include/hfsplus.h
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
/* Copyright (C) 2004 Bart
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef HFSPLUS
|
||||||
|
#define HFSPLUS
|
||||||
|
|
||||||
|
#include "../include/FileSystem.h"
|
||||||
|
|
||||||
|
namespace GParted
|
||||||
|
{
|
||||||
|
|
||||||
|
class hfsplus : public FileSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FS get_filesystem_support( ) ;
|
||||||
|
void Set_Used_Sectors( Partition & partition ) ;
|
||||||
|
bool Create( const Partition & new_partition ) ;
|
||||||
|
bool Resize( const Partition & partition_new, bool fill_partition = false ) ;
|
||||||
|
bool Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path ) ;
|
||||||
|
bool Check_Repair( const Partition & partition ) ;
|
||||||
|
int get_estimated_time( long MB_to_Consider ) ;
|
||||||
|
};
|
||||||
|
|
||||||
|
} //GParted
|
||||||
|
|
||||||
|
#endif //HFSPLUS
|
|
@ -43,6 +43,9 @@ void GParted_Core::find_supported_filesystems( )
|
||||||
hfs fs_hfs;
|
hfs fs_hfs;
|
||||||
FILESYSTEMS .push_back( fs_hfs .get_filesystem_support( ) ) ;
|
FILESYSTEMS .push_back( fs_hfs .get_filesystem_support( ) ) ;
|
||||||
|
|
||||||
|
hfsplus fs_hfsplus;
|
||||||
|
FILESYSTEMS .push_back( fs_hfsplus .get_filesystem_support( ) ) ;
|
||||||
|
|
||||||
jfs fs_jfs;
|
jfs fs_jfs;
|
||||||
FILESYSTEMS .push_back( fs_jfs .get_filesystem_support( ) ) ;
|
FILESYSTEMS .push_back( fs_jfs .get_filesystem_support( ) ) ;
|
||||||
|
|
||||||
|
@ -311,7 +314,7 @@ int GParted_Core::get_estimated_time( const Operation & operation )
|
||||||
case GParted::RESIZE_MOVE:
|
case GParted::RESIZE_MOVE:
|
||||||
set_proper_filesystem( operation .partition_new .filesystem ) ;
|
set_proper_filesystem( operation .partition_new .filesystem ) ;
|
||||||
if ( p_filesystem )
|
if ( p_filesystem )
|
||||||
return p_filesystem ->get_estimated_time( Abs( operation .partition_original .Get_Length_MB( ) - operation .partition_new .Get_Length_MB( ) ) ) ;
|
return p_filesystem ->get_estimated_time( std::abs( operation .partition_original .Get_Length_MB( ) - operation .partition_new .Get_Length_MB( ) ) ) ;
|
||||||
|
|
||||||
break ;
|
break ;
|
||||||
|
|
||||||
|
@ -736,6 +739,8 @@ void GParted_Core::set_proper_filesystem( const Glib::ustring & filesystem )
|
||||||
p_filesystem = new fat32( ) ;
|
p_filesystem = new fat32( ) ;
|
||||||
else if ( filesystem == "hfs" )
|
else if ( filesystem == "hfs" )
|
||||||
p_filesystem = new hfs( ) ;
|
p_filesystem = new hfs( ) ;
|
||||||
|
else if ( filesystem == "hfs+" )
|
||||||
|
p_filesystem = new hfsplus( ) ;
|
||||||
else if ( filesystem == "jfs" )
|
else if ( filesystem == "jfs" )
|
||||||
p_filesystem = new jfs( ) ;
|
p_filesystem = new jfs( ) ;
|
||||||
else if ( filesystem == "linux-swap" )
|
else if ( filesystem == "linux-swap" )
|
||||||
|
|
|
@ -37,6 +37,7 @@ gparted_SOURCES = \
|
||||||
fat16.cc\
|
fat16.cc\
|
||||||
fat32.cc\
|
fat32.cc\
|
||||||
hfs.cc\
|
hfs.cc\
|
||||||
|
hfsplus.cc\
|
||||||
jfs.cc\
|
jfs.cc\
|
||||||
linux_swap.cc\
|
linux_swap.cc\
|
||||||
main.cc\
|
main.cc\
|
||||||
|
|
|
@ -60,7 +60,7 @@ Glib::ustring Operation::Get_String( )
|
||||||
/*TO TRANSLATORS: looks like Create Logical Partition #1 (ntfs, 2345 MB) on /dev/hda */
|
/*TO TRANSLATORS: looks like Create Logical Partition #1 (ntfs, 2345 MB) on /dev/hda */
|
||||||
return String::ucompose( _("Create %1 #%2 (%3, %4 MB) on %5"), temp, partition_new.partition_number, partition_new.filesystem , partition_new .Get_Length_MB( ), device .path ) ;
|
return String::ucompose( _("Create %1 #%2 (%3, %4 MB) on %5"), temp, partition_new.partition_number, partition_new.filesystem , partition_new .Get_Length_MB( ), device .path ) ;
|
||||||
case RESIZE_MOVE: //if startsector has changed >= 1 MB we consider it a move
|
case RESIZE_MOVE: //if startsector has changed >= 1 MB we consider it a move
|
||||||
diff = Abs( partition_new .sector_start - partition_original .sector_start ) ;
|
diff = std::abs( partition_new .sector_start - partition_original .sector_start ) ;
|
||||||
if ( diff >= MEGABYTE )
|
if ( diff >= MEGABYTE )
|
||||||
{
|
{
|
||||||
if ( partition_new .sector_start > partition_original .sector_start )
|
if ( partition_new .sector_start > partition_original .sector_start )
|
||||||
|
@ -70,8 +70,8 @@ Glib::ustring Operation::Get_String( )
|
||||||
}
|
}
|
||||||
|
|
||||||
//check if size has changed ( we only consider changes >= 1 MB )
|
//check if size has changed ( we only consider changes >= 1 MB )
|
||||||
diff = Abs( (partition_original .sector_end - partition_original .sector_start) - (partition_new .sector_end - partition_new .sector_start) ) ;
|
diff = std::abs( (partition_original .sector_end - partition_original .sector_start) - (partition_new .sector_end - partition_new .sector_start) ) ;
|
||||||
|
|
||||||
if ( diff >= MEGABYTE )
|
if ( diff >= MEGABYTE )
|
||||||
{
|
{
|
||||||
if ( temp .empty( ) )
|
if ( temp .empty( ) )
|
||||||
|
|
|
@ -85,17 +85,17 @@ bool ext2::Create( const Partition & new_partition )
|
||||||
|
|
||||||
bool ext2::Resize( const Partition & partition_new, bool fill_partition )
|
bool ext2::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
{
|
{
|
||||||
Glib::ustring str_temp = "LC_NUMERIC=C resize2fs " + partition_new .partition ;
|
Glib::ustring str_temp = "resize2fs " + partition_new .partition ;
|
||||||
|
|
||||||
if ( ! fill_partition )
|
if ( ! fill_partition )
|
||||||
str_temp += " " + num_to_str( partition_new .Get_Length_MB( ) - cylinder_size ) + "M" ;
|
str_temp += " " + num_to_str( partition_new .Get_Length_MB( ) - cylinder_size, true ) + "M" ;
|
||||||
|
|
||||||
return ! Execute_Command( str_temp ) ;
|
return ! Execute_Command( str_temp ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ext2::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool ext2::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
{
|
{
|
||||||
if ( ! Execute_Command( "LC_NUMERIC=C dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) )
|
if ( ! Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) )
|
||||||
{
|
{
|
||||||
Partition partition ;
|
Partition partition ;
|
||||||
partition .partition = dest_part_path ;
|
partition .partition = dest_part_path ;
|
||||||
|
|
|
@ -85,17 +85,17 @@ bool ext3::Create( const Partition & new_partition )
|
||||||
|
|
||||||
bool ext3::Resize( const Partition & partition_new, bool fill_partition )
|
bool ext3::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
{
|
{
|
||||||
Glib::ustring str_temp = "LC_NUMERIC=C resize2fs " + partition_new .partition ;
|
Glib::ustring str_temp = "resize2fs " + partition_new .partition ;
|
||||||
|
|
||||||
if ( ! fill_partition )
|
if ( ! fill_partition )
|
||||||
str_temp += " " + num_to_str( partition_new .Get_Length_MB( ) - cylinder_size ) + "M" ;
|
str_temp += " " + num_to_str( partition_new .Get_Length_MB( ) - cylinder_size, true ) + "M" ;
|
||||||
|
|
||||||
return ! Execute_Command( str_temp ) ;
|
return ! Execute_Command( str_temp ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ext3::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool ext3::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
{
|
{
|
||||||
if ( ! Execute_Command( "LC_NUMERIC=C dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) )
|
if ( ! Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) )
|
||||||
{
|
{
|
||||||
Partition partition ;
|
Partition partition ;
|
||||||
partition .partition = dest_part_path ;
|
partition .partition = dest_part_path ;
|
||||||
|
|
52
src/fat16.cc
52
src/fat16.cc
|
@ -26,14 +26,16 @@ FS fat16::get_filesystem_support( )
|
||||||
FS fs ;
|
FS fs ;
|
||||||
|
|
||||||
fs .filesystem = "fat16" ;
|
fs .filesystem = "fat16" ;
|
||||||
fs .read = true ; //provided by libparted
|
|
||||||
|
|
||||||
//find out if we can create fat16 filesystems
|
//find out if we can create fat16 filesystems
|
||||||
if ( ! system( "which mkdosfs 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which mkdosfs 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .create = true ;
|
fs .create = true ;
|
||||||
|
|
||||||
if ( ! system( "which dosfsck 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which dosfsck 1>/dev/null 2>/dev/null" ) )
|
||||||
|
{
|
||||||
fs .check = true ;
|
fs .check = true ;
|
||||||
|
fs .read = true ;
|
||||||
|
}
|
||||||
|
|
||||||
//resizing of start and endpoint are provided by libparted
|
//resizing of start and endpoint are provided by libparted
|
||||||
fs .grow = true ;
|
fs .grow = true ;
|
||||||
|
@ -43,7 +45,7 @@ FS fat16::get_filesystem_support( )
|
||||||
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .copy = true ;
|
fs .copy = true ;
|
||||||
|
|
||||||
fs .MIN = 32 ;
|
fs .MIN = 16 ;
|
||||||
fs .MAX = 4096 ;
|
fs .MAX = 4096 ;
|
||||||
|
|
||||||
return fs ;
|
return fs ;
|
||||||
|
@ -51,31 +53,33 @@ FS fat16::get_filesystem_support( )
|
||||||
|
|
||||||
void fat16::Set_Used_Sectors( Partition & partition )
|
void fat16::Set_Used_Sectors( Partition & partition )
|
||||||
{
|
{
|
||||||
PedFileSystem *fs = NULL;
|
char c_buf[ 512 ] ;
|
||||||
PedConstraint *constraint = NULL;
|
FILE *f ;
|
||||||
PedPartition *c_part = NULL ;
|
|
||||||
|
|
||||||
if ( disk )
|
Glib::ustring output ;
|
||||||
|
Sector free_clusters = -1, bytes_per_cluster = -1 ;
|
||||||
|
|
||||||
|
//get free blocks..
|
||||||
|
f = popen( ( "LC_ALL=C echo 2 | dosfsck -v " + partition .partition ) .c_str( ), "r" ) ;
|
||||||
|
while ( fgets( c_buf, 512, f ) )
|
||||||
{
|
{
|
||||||
c_part = ped_disk_get_partition_by_sector( disk, (partition .sector_end + partition .sector_start) / 2 ) ;
|
output = Glib::locale_to_utf8( c_buf ) ;
|
||||||
if ( c_part )
|
|
||||||
|
//bytes per cluster
|
||||||
|
if ( output .find( "bytes per cluster" ) < output .length( ) )
|
||||||
|
bytes_per_cluster = atol( output .substr( 0, output .find( "b" ) ) .c_str( ) ) ;
|
||||||
|
|
||||||
|
//free clusters
|
||||||
|
if ( output .find( partition .partition ) < output .length( ) )
|
||||||
{
|
{
|
||||||
fs = ped_file_system_open( & c_part ->geom );
|
output = output .substr( output .find( "," ) +2, output .length( ) ) ;
|
||||||
|
free_clusters = atol( output .substr( output .find( "/" ) +1, output .find( " " ) ) .c_str( ) ) - atol( output .substr( 0, output .find( "/" ) ) .c_str( ) ) ;
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
constraint = ped_file_system_get_resize_constraint ( fs ) ;
|
|
||||||
if ( constraint )
|
|
||||||
{
|
|
||||||
partition .Set_Unused( (partition .sector_end - partition .sector_start) - constraint ->min_size ) ;
|
|
||||||
|
|
||||||
ped_constraint_destroy ( constraint );
|
|
||||||
}
|
|
||||||
|
|
||||||
ped_file_system_close( fs ) ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pclose( f ) ;
|
||||||
|
|
||||||
|
if ( free_clusters > -1 && bytes_per_cluster > -1 )
|
||||||
|
partition .Set_Unused( free_clusters * bytes_per_cluster / 512 ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fat16::Create( const Partition & new_partition )
|
bool fat16::Create( const Partition & new_partition )
|
||||||
|
@ -91,7 +95,7 @@ bool fat16::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
|
|
||||||
bool fat16::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool fat16::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
{
|
{
|
||||||
return ! Execute_Command( "LC_NUMERIC=C dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
return ! Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fat16::Check_Repair( const Partition & partition )
|
bool fat16::Check_Repair( const Partition & partition )
|
||||||
|
|
52
src/fat32.cc
52
src/fat32.cc
|
@ -26,14 +26,16 @@ FS fat32::get_filesystem_support( )
|
||||||
FS fs ;
|
FS fs ;
|
||||||
|
|
||||||
fs .filesystem = "fat32" ;
|
fs .filesystem = "fat32" ;
|
||||||
fs .read = true ; //provided by libparted
|
|
||||||
|
|
||||||
//find out if we can create fat32 filesystems
|
//find out if we can create fat32 filesystems
|
||||||
if ( ! system( "which mkdosfs 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which mkdosfs 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .create = true ;
|
fs .create = true ;
|
||||||
|
|
||||||
if ( ! system( "which dosfsck 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which dosfsck 1>/dev/null 2>/dev/null" ) )
|
||||||
|
{
|
||||||
fs .check = true ;
|
fs .check = true ;
|
||||||
|
fs .read = true ;
|
||||||
|
}
|
||||||
|
|
||||||
//resizing of start and endpoint are provided by libparted
|
//resizing of start and endpoint are provided by libparted
|
||||||
fs .grow = true ;
|
fs .grow = true ;
|
||||||
|
@ -43,38 +45,40 @@ FS fat32::get_filesystem_support( )
|
||||||
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which dd 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .copy = true ;
|
fs .copy = true ;
|
||||||
|
|
||||||
fs .MIN = 256 ;
|
fs .MIN = 32 ; //smaller fs'es will cause windows scandisk to fail..
|
||||||
|
|
||||||
return fs ;
|
return fs ;
|
||||||
}
|
}
|
||||||
|
|
||||||
void fat32::Set_Used_Sectors( Partition & partition )
|
void fat32::Set_Used_Sectors( Partition & partition )
|
||||||
{
|
{
|
||||||
PedFileSystem *fs = NULL;
|
char c_buf[ 512 ] ;
|
||||||
PedConstraint *constraint = NULL;
|
FILE *f ;
|
||||||
PedPartition *c_part = NULL ;
|
|
||||||
|
|
||||||
if ( disk )
|
Glib::ustring output ;
|
||||||
|
Sector free_clusters = -1, bytes_per_cluster = -1 ;
|
||||||
|
|
||||||
|
//get free blocks..
|
||||||
|
f = popen( ( "LC_ALL=C echo 2 | dosfsck -v " + partition .partition ) .c_str( ), "r" ) ;
|
||||||
|
while ( fgets( c_buf, 512, f ) )
|
||||||
{
|
{
|
||||||
c_part = ped_disk_get_partition_by_sector( disk, (partition .sector_end + partition .sector_start) / 2 ) ;
|
output = Glib::locale_to_utf8( c_buf ) ;
|
||||||
if ( c_part )
|
|
||||||
|
//bytes per cluster
|
||||||
|
if ( output .find( "bytes per cluster" ) < output .length( ) )
|
||||||
|
bytes_per_cluster = atol( output .substr( 0, output .find( "b" ) ) .c_str( ) ) ;
|
||||||
|
|
||||||
|
//free clusters
|
||||||
|
if ( output .find( partition .partition ) < output .length( ) )
|
||||||
{
|
{
|
||||||
fs = ped_file_system_open( & c_part ->geom );
|
output = output .substr( output .find( "," ) +2, output .length( ) ) ;
|
||||||
|
free_clusters = atol( output .substr( output .find( "/" ) +1, output .find( " " ) ) .c_str( ) ) - atol( output .substr( 0, output .find( "/" ) ) .c_str( ) ) ;
|
||||||
if ( fs )
|
|
||||||
{
|
|
||||||
constraint = ped_file_system_get_resize_constraint ( fs ) ;
|
|
||||||
if ( constraint )
|
|
||||||
{
|
|
||||||
partition .Set_Unused( (partition .sector_end - partition .sector_start) - constraint ->min_size ) ;
|
|
||||||
|
|
||||||
ped_constraint_destroy ( constraint );
|
|
||||||
}
|
|
||||||
|
|
||||||
ped_file_system_close( fs ) ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
pclose( f ) ;
|
||||||
|
|
||||||
|
if ( free_clusters > -1 && bytes_per_cluster > -1 )
|
||||||
|
partition .Set_Unused( free_clusters * bytes_per_cluster / 512 ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fat32::Create( const Partition & new_partition )
|
bool fat32::Create( const Partition & new_partition )
|
||||||
|
@ -90,7 +94,7 @@ bool fat32::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
|
|
||||||
bool fat32::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool fat32::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
{
|
{
|
||||||
return ! Execute_Command( "LC_NUMERIC=C dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
return ! Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool fat32::Check_Repair( const Partition & partition )
|
bool fat32::Check_Repair( const Partition & partition )
|
||||||
|
|
43
src/hfs.cc
43
src/hfs.cc
|
@ -24,10 +24,10 @@ namespace GParted
|
||||||
FS hfs::get_filesystem_support( )
|
FS hfs::get_filesystem_support( )
|
||||||
{
|
{
|
||||||
FS fs ;
|
FS fs ;
|
||||||
|
|
||||||
fs .filesystem = "hfs" ;
|
fs .filesystem = "hfs" ;
|
||||||
if ( ! system( "which hfs 1>/dev/null 2>/dev/null" ) )
|
|
||||||
fs .read = true ;
|
fs .read = true ; //provided by libparted
|
||||||
|
|
||||||
if ( ! system( "which hformat 1>/dev/null 2>/dev/null" ) )
|
if ( ! system( "which hformat 1>/dev/null 2>/dev/null" ) )
|
||||||
fs .create = true ;
|
fs .create = true ;
|
||||||
|
@ -42,26 +42,31 @@ FS hfs::get_filesystem_support( )
|
||||||
|
|
||||||
void hfs::Set_Used_Sectors( Partition & partition )
|
void hfs::Set_Used_Sectors( Partition & partition )
|
||||||
{
|
{
|
||||||
char c_buf[ 512 ] ;
|
PedFileSystem *fs = NULL;
|
||||||
FILE *f ;
|
PedConstraint *constraint = NULL;
|
||||||
|
PedPartition *c_part = NULL ;
|
||||||
|
|
||||||
Glib::ustring output ;
|
if ( disk )
|
||||||
|
|
||||||
//get free bytes..
|
|
||||||
f = popen( ( "echo 'quit' | LC_ALL=C hfs " + partition .partition ) .c_str( ), "r" ) ;
|
|
||||||
while ( fgets( c_buf, 512, f ) )
|
|
||||||
{
|
{
|
||||||
output = Glib::locale_to_utf8( c_buf ) ;
|
c_part = ped_disk_get_partition_by_sector( disk, (partition .sector_end + partition .sector_start) / 2 ) ;
|
||||||
|
if ( c_part )
|
||||||
if ( output .find( "bytes free" ) < output .length( ) )
|
|
||||||
{
|
{
|
||||||
output = output .substr( 0, output .find( " bytes free" ) ) ;
|
fs = ped_file_system_open( & c_part ->geom );
|
||||||
|
|
||||||
partition .Set_Unused( atol( (output .substr( output .find_last_of( ' ' ) ) ) .c_str( ) ) / 512 ) ;
|
if ( fs )
|
||||||
break ;
|
{
|
||||||
|
constraint = ped_file_system_get_resize_constraint ( fs ) ;
|
||||||
|
if ( constraint )
|
||||||
|
{
|
||||||
|
partition .Set_Unused( (partition .sector_end - partition .sector_start) - constraint ->min_size ) ;
|
||||||
|
|
||||||
|
ped_constraint_destroy ( constraint );
|
||||||
|
}
|
||||||
|
|
||||||
|
ped_file_system_close( fs ) ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pclose( f ) ;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hfs::Create( const Partition & new_partition )
|
bool hfs::Create( const Partition & new_partition )
|
||||||
|
@ -76,7 +81,7 @@ bool hfs::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
|
|
||||||
bool hfs::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool hfs::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
{
|
{
|
||||||
return ! Execute_Command( "LC_NUMERIC=C dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
return ! Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hfs::Check_Repair( const Partition & partition )
|
bool hfs::Check_Repair( const Partition & partition )
|
||||||
|
|
92
src/hfsplus.cc
Normal file
92
src/hfsplus.cc
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
/* Copyright (C) 2004 Bart
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Library General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include "../include/hfsplus.h"
|
||||||
|
|
||||||
|
namespace GParted
|
||||||
|
{
|
||||||
|
|
||||||
|
FS hfsplus::get_filesystem_support( )
|
||||||
|
{
|
||||||
|
FS fs ;
|
||||||
|
|
||||||
|
fs .filesystem = "hfs+" ;
|
||||||
|
|
||||||
|
fs .read = true ; //provided by libparted
|
||||||
|
|
||||||
|
return fs ;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hfsplus::Set_Used_Sectors( Partition & partition )
|
||||||
|
{
|
||||||
|
PedFileSystem *fs = NULL;
|
||||||
|
PedConstraint *constraint = NULL;
|
||||||
|
PedPartition *c_part = NULL ;
|
||||||
|
|
||||||
|
if ( disk )
|
||||||
|
{
|
||||||
|
c_part = ped_disk_get_partition_by_sector( disk, (partition .sector_end + partition .sector_start) / 2 ) ;
|
||||||
|
if ( c_part )
|
||||||
|
{
|
||||||
|
fs = ped_file_system_open( & c_part ->geom );
|
||||||
|
|
||||||
|
if ( fs )
|
||||||
|
{
|
||||||
|
constraint = ped_file_system_get_resize_constraint ( fs ) ;
|
||||||
|
if ( constraint )
|
||||||
|
{
|
||||||
|
partition .Set_Unused( (partition .sector_end - partition .sector_start) - constraint ->min_size ) ;
|
||||||
|
|
||||||
|
ped_constraint_destroy ( constraint );
|
||||||
|
}
|
||||||
|
|
||||||
|
ped_file_system_close( fs ) ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hfsplus::Create( const Partition & new_partition )
|
||||||
|
{
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hfsplus::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
|
{
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hfsplus::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
|
{
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hfsplus::Check_Repair( const Partition & partition )
|
||||||
|
{
|
||||||
|
return true ;
|
||||||
|
}
|
||||||
|
|
||||||
|
int hfsplus::get_estimated_time( long MB_to_Consider )
|
||||||
|
{
|
||||||
|
return -1 ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
} //GParted
|
||||||
|
|
||||||
|
|
|
@ -112,7 +112,7 @@ bool jfs::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
|
|
||||||
bool jfs::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool jfs::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
{
|
{
|
||||||
if ( ! Execute_Command( "LC_NUMERIC=C dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) )
|
if ( ! Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) )
|
||||||
{
|
{
|
||||||
Partition partition ;
|
Partition partition ;
|
||||||
partition .partition = dest_part_path ;
|
partition .partition = dest_part_path ;
|
||||||
|
|
|
@ -24,7 +24,7 @@ int main( int argc, char *argv[ ] )
|
||||||
Glib::thread_init( );
|
Glib::thread_init( );
|
||||||
|
|
||||||
Gtk::Main kit( argc, argv );
|
Gtk::Main kit( argc, argv );
|
||||||
|
|
||||||
//i18n
|
//i18n
|
||||||
bindtextdomain( GETTEXT_PACKAGE, GNOMELOCALEDIR );
|
bindtextdomain( GETTEXT_PACKAGE, GNOMELOCALEDIR );
|
||||||
bind_textdomain_codeset( GETTEXT_PACKAGE, "UTF-8" );
|
bind_textdomain_codeset( GETTEXT_PACKAGE, "UTF-8" );
|
||||||
|
|
|
@ -81,10 +81,10 @@ bool ntfs::Create( const Partition & new_partition )
|
||||||
|
|
||||||
bool ntfs::Resize( const Partition & partition_new, bool fill_partition )
|
bool ntfs::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
{
|
{
|
||||||
Glib::ustring str_temp = "echo y | LC_NUMERIC=C ntfsresize -f " + partition_new .partition ;
|
Glib::ustring str_temp = "echo y | ntfsresize -f " + partition_new .partition ;
|
||||||
|
|
||||||
if ( ! fill_partition )
|
if ( ! fill_partition )
|
||||||
str_temp += " -s " + num_to_str( partition_new .Get_Length_MB( ) - cylinder_size ) + "M" ;
|
str_temp += " -s " + num_to_str( partition_new .Get_Length_MB( ) - cylinder_size, true ) + "M" ;
|
||||||
|
|
||||||
return ! Execute_Command( str_temp ) ;
|
return ! Execute_Command( str_temp ) ;
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ void reiser4::Set_Used_Sectors( Partition & partition )
|
||||||
|
|
||||||
bool reiser4::Create( const Partition & new_partition )
|
bool reiser4::Create( const Partition & new_partition )
|
||||||
{
|
{
|
||||||
return ! Execute_Command( "mkfs.reiser4 -y " + new_partition .partition ) ;
|
return ! Execute_Command( "mkfs.reiser4 --yes " + new_partition .partition ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool reiser4::Resize( const Partition & partition_new, bool fill_partition )
|
bool reiser4::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
|
@ -114,7 +114,7 @@ bool reiser4::Copy( const Glib::ustring & src_part_path, const Glib::ustring & d
|
||||||
|
|
||||||
bool reiser4::Check_Repair( const Partition & partition )
|
bool reiser4::Check_Repair( const Partition & partition )
|
||||||
{
|
{
|
||||||
return ! Execute_Command( "fsck.reiser4 -y --fix " + partition .partition ) ;
|
return ! Execute_Command( "fsck.reiser4 --yes --fix " + partition .partition ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
int reiser4::get_estimated_time( long MB_to_Consider )
|
int reiser4::get_estimated_time( long MB_to_Consider )
|
||||||
|
|
|
@ -89,17 +89,17 @@ bool reiserfs::Create( const Partition & new_partition )
|
||||||
|
|
||||||
bool reiserfs::Resize( const Partition & partition_new, bool fill_partition )
|
bool reiserfs::Resize( const Partition & partition_new, bool fill_partition )
|
||||||
{
|
{
|
||||||
Glib::ustring str_temp = "echo y | LC_NUMERIC=C resize_reiserfs " + partition_new .partition ;
|
Glib::ustring str_temp = "echo y | resize_reiserfs " + partition_new .partition ;
|
||||||
|
|
||||||
if ( ! fill_partition )
|
if ( ! fill_partition )
|
||||||
str_temp += " -s " + num_to_str( partition_new .Get_Length_MB( ) - cylinder_size ) + "M" ;
|
str_temp += " -s " + num_to_str( partition_new .Get_Length_MB( ) - cylinder_size, true ) + "M" ;
|
||||||
|
|
||||||
return ! Execute_Command( str_temp ) ;
|
return ! Execute_Command( str_temp ) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool reiserfs::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
bool reiserfs::Copy( const Glib::ustring & src_part_path, const Glib::ustring & dest_part_path )
|
||||||
{
|
{
|
||||||
if ( ! Execute_Command( "LC_NUMERIC=C dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) )
|
if ( ! Execute_Command( "dd bs=8192 if=" + src_part_path + " of=" + dest_part_path ) )
|
||||||
{
|
{
|
||||||
Partition partition ;
|
Partition partition ;
|
||||||
partition .partition = dest_part_path ;
|
partition .partition = dest_part_path ;
|
||||||
|
|
Loading…
Reference in a new issue