Rewrote get_label to use vol_id command for hfs file system

svn path=/trunk/; revision=872
This commit is contained in:
Curtis Gedak 2008-07-25 23:05:20 +00:00
parent b12fbfb1b2
commit 0a95638dc8
4 changed files with 15 additions and 22 deletions

View File

@ -12,6 +12,7 @@ not an invitation to misrepresent who contributed to GNU GParted.
We need to keep track of copyright (see the Maintainer HOWTO on www.gnu.org). We need to keep track of copyright (see the Maintainer HOWTO on www.gnu.org).
Curtis Gedak <gedakc@users.sourceforge.net> Curtis Gedak <gedakc@users.sourceforge.net>
* Rewrote get_label functionality for hfs
* Wrote create, get_label, and check_repair functionality for hfs+ * Wrote create, get_label, and check_repair functionality for hfs+
* Wrote get_label functionality for fat16 and fat32 filesystems * Wrote get_label functionality for fat16 and fat32 filesystems
* Wrote Utils::regexp_label() function * Wrote Utils::regexp_label() function

View File

@ -1,5 +1,8 @@
2008-07-25 Curtis Gedak <gedakc@gmail.com> 2008-07-25 Curtis Gedak <gedakc@gmail.com>
* src/hfs.cc: Rewrote get_label to use vol_id for hfs file system
- Reason: not all hfsutils packages include hfsck (e.g. Ubuntu 7.10)
* src/hfsplus.cc: Enhanced support for hfsplus file system * src/hfsplus.cc: Enhanced support for hfsplus file system
- Added create, get_label, and check_repair functionality - Added create, get_label, and check_repair functionality
- Additional feature support is provided by the hfsprogs package - Additional feature support is provided by the hfsprogs package

3
README
View File

@ -98,10 +98,11 @@ Optional packages include:
dosfstools dosfstools
mtools mtools
hfsutils hfsutils
hfsprogs
jfsutils jfsutils
ntfsprogs ntfsprogs
reiser4progs reiser4progs
reiserfsprogs reiserfsprogs
xfsprogs xfsprogs
NOTE: If the vol_id command is in the search PATH, it will be NOTE: If the vol_id command is in the search PATH, it will be
used to read linux-swap volume labels. used to read linux-swap, hfs, and hfs+ file system volume labels.

View File

@ -34,10 +34,10 @@ FS hfs::get_filesystem_support()
fs .create = GParted::FS::EXTERNAL ; fs .create = GParted::FS::EXTERNAL ;
if ( ! Glib::find_program_in_path( "hfsck" ) .empty() ) if ( ! Glib::find_program_in_path( "hfsck" ) .empty() )
{
fs .get_label = FS::EXTERNAL ;
fs .check = FS::EXTERNAL ; fs .check = FS::EXTERNAL ;
}
if ( ! Glib::find_program_in_path( "vol_id" ) .empty() )
fs .get_label = FS::EXTERNAL ;
fs .copy = GParted::FS::GPARTED ; fs .copy = GParted::FS::GPARTED ;
fs .move = GParted::FS::GPARTED ; fs .move = GParted::FS::GPARTED ;
@ -53,22 +53,12 @@ void hfs::set_used_sectors( Partition & partition )
void hfs::get_label( Partition & partition ) void hfs::get_label( Partition & partition )
{ {
if ( ! Utils::execute_command( "hfsck -v " + partition .get_path(), output, error, true ) ) if ( ! Utils::execute_command( "vol_id " + partition .get_path(), output, error, true ) )
{ {
char buf[512] ; Glib::ustring label = Utils::regexp_label( output, "ID_FS_LABEL=([^\n]*)" ) ;
index = output .find( "drVN" ) ; //FIXME: find a better way to see if label is empty.. imagine someone uses 'untitled' as label.... ;)
if( label != "untitled" )
if ( index < output .length() && sscanf( output .substr( index ) .c_str(), "drVN = %512s", buf ) == 1 ) partition .label = label ;
{
partition .label = buf ;
//remove "" from the label..
if ( partition .label .size() > 0 && partition .label[0] == '\"' )
partition .label = partition .label .substr( 1 ) ;
if ( partition .label .size() > 0 && partition .label[ partition .label .size() -1 ] == '\"' )
partition .label = partition .label .substr( 0, partition .label .size() -1 ) ;
}
} }
else else
{ {
@ -114,5 +104,3 @@ bool hfs::check_repair( const Partition & partition, OperationDetail & operation
} }
} //GParted } //GParted