Read and display UUID for some filesystems.

svn path=/trunk/extragear/sysadmin/partitionmanager/; revision=964310
This commit is contained in:
Volker Lanz 2009-05-06 14:19:23 +00:00
parent 52914fdc57
commit 5c0acb2bba
17 changed files with 148 additions and 67 deletions

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -228,6 +228,9 @@ static void scanDevicePartitions(PedDevice* pedDevice, Device& d, PedDisk* pedDi
if (fs->supportGetLabel() == FileSystem::SupportExternal) if (fs->supportGetLabel() == FileSystem::SupportExternal)
fs->setLabel(fs->readLabel(part->deviceNode())); fs->setLabel(fs->readLabel(part->deviceNode()));
if (fs->supportGetUUID() == FileSystem::SupportExternal)
fs->setUUID(fs->readUUID(part->deviceNode()));
parent->append(part); parent->append(part);
PartitionTable::isSnapped(d, *part); PartitionTable::isSnapped(d, *part);

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -38,6 +38,7 @@ namespace FS
FileSystem::SupportType ext2::m_Backup = FileSystem::SupportNone; FileSystem::SupportType ext2::m_Backup = FileSystem::SupportNone;
FileSystem::SupportType ext2::m_SetLabel = FileSystem::SupportNone; FileSystem::SupportType ext2::m_SetLabel = FileSystem::SupportNone;
FileSystem::SupportType ext2::m_UpdateUUID = FileSystem::SupportNone; FileSystem::SupportType ext2::m_UpdateUUID = FileSystem::SupportNone;
FileSystem::SupportType ext2::m_GetUUID = FileSystem::SupportNone;
ext2::ext2(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label, FileSystem::Type t) : ext2::ext2(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label, FileSystem::Type t) :
FileSystem(firstsector, lastsector, sectorsused, label, t) FileSystem(firstsector, lastsector, sectorsused, label, t)
@ -56,6 +57,7 @@ namespace FS
m_Copy = (m_Check != SupportNone) ? SupportInternal : SupportNone; m_Copy = (m_Check != SupportNone) ? SupportInternal : SupportNone;
m_Move = (m_Check != SupportNone) ? SupportInternal : SupportNone; m_Move = (m_Check != SupportNone) ? SupportInternal : SupportNone;
m_Backup = SupportInternal; m_Backup = SupportInternal;
m_GetUUID = findExternal("vol_id") ? SupportExternal : SupportNone;
} }
qint64 ext2::maxCapacity() const qint64 ext2::maxCapacity() const

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -49,7 +49,7 @@ namespace FS
virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const; virtual bool resize(Report& report, const QString& deviceNode, qint64 length) const;
virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel); virtual bool writeLabel(Report& report, const QString& deviceNode, const QString& newLabel);
virtual bool updateUUID(Report& report, const QString& deviceNode) const; virtual bool updateUUID(Report& report, const QString& deviceNode) const;
virtual SupportType supportGetUsed() const { return m_GetUsed; } virtual SupportType supportGetUsed() const { return m_GetUsed; }
virtual SupportType supportGetLabel() const { return m_GetLabel; } virtual SupportType supportGetLabel() const { return m_GetLabel; }
virtual SupportType supportCreate() const { return m_Create; } virtual SupportType supportCreate() const { return m_Create; }
@ -61,9 +61,10 @@ namespace FS
virtual SupportType supportBackup() const { return m_Backup; } virtual SupportType supportBackup() const { return m_Backup; }
virtual SupportType supportSetLabel() const { return m_SetLabel; } virtual SupportType supportSetLabel() const { return m_SetLabel; }
virtual SupportType supportUpdateUUID() const { return m_UpdateUUID; } virtual SupportType supportUpdateUUID() const { return m_UpdateUUID; }
virtual SupportType supportGetUUID() const { return m_GetUUID; }
virtual qint64 maxCapacity() const; virtual qint64 maxCapacity() const;
protected: protected:
static SupportType m_GetUsed; static SupportType m_GetUsed;
static SupportType m_GetLabel; static SupportType m_GetLabel;
@ -76,6 +77,7 @@ namespace FS
static SupportType m_Backup; static SupportType m_Backup;
static SupportType m_SetLabel; static SupportType m_SetLabel;
static SupportType m_UpdateUUID; static SupportType m_UpdateUUID;
static SupportType m_GetUUID;
}; };
} }

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -42,7 +42,7 @@ namespace FS
FileSystem::SupportType fat16::m_Copy = FileSystem::SupportNone; FileSystem::SupportType fat16::m_Copy = FileSystem::SupportNone;
FileSystem::SupportType fat16::m_Backup = FileSystem::SupportNone; FileSystem::SupportType fat16::m_Backup = FileSystem::SupportNone;
FileSystem::SupportType fat16::m_UpdateUUID = FileSystem::SupportNone; FileSystem::SupportType fat16::m_UpdateUUID = FileSystem::SupportNone;
FileSystem::SupportType fat16::m_GetUUID = FileSystem::SupportNone;
fat16::fat16(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label, FileSystem::Type t) : fat16::fat16(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label, FileSystem::Type t) :
FileSystem(firstsector, lastsector, sectorsused, label, t) FileSystem(firstsector, lastsector, sectorsused, label, t)
@ -65,6 +65,7 @@ namespace FS
m_Copy = SupportInternal; m_Copy = SupportInternal;
m_Backup = SupportInternal; m_Backup = SupportInternal;
m_UpdateUUID = findExternal("dd") ? SupportExternal : SupportNone; m_UpdateUUID = findExternal("dd") ? SupportExternal : SupportNone;
m_GetUUID = findExternal("vol_id") ? SupportExternal : SupportNone;
} }
qint64 fat16::minCapacity() const qint64 fat16::minCapacity() const

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -58,6 +58,7 @@ namespace FS
virtual SupportType supportCopy() const { return m_Copy; } virtual SupportType supportCopy() const { return m_Copy; }
virtual SupportType supportBackup() const { return m_Backup; } virtual SupportType supportBackup() const { return m_Backup; }
virtual SupportType supportUpdateUUID() const { return m_UpdateUUID; } virtual SupportType supportUpdateUUID() const { return m_UpdateUUID; }
virtual SupportType supportGetUUID() const { return m_GetUUID; }
virtual qint64 minCapacity() const; virtual qint64 minCapacity() const;
virtual qint64 maxCapacity() const; virtual qint64 maxCapacity() const;
@ -73,6 +74,7 @@ namespace FS
static SupportType m_Copy; static SupportType m_Copy;
static SupportType m_Backup; static SupportType m_Backup;
static SupportType m_UpdateUUID; static SupportType m_UpdateUUID;
static SupportType m_GetUUID;
}; };
} }

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -37,7 +37,8 @@ FileSystem::FileSystem(qint64 firstsector, qint64 lastsector, qint64 sectorsused
m_FirstSector(firstsector), m_FirstSector(firstsector),
m_LastSector(lastsector), m_LastSector(lastsector),
m_SectorsUsed(sectorsused), m_SectorsUsed(sectorsused),
m_Label(l) m_Label(l),
m_UUID()
{ {
} }
@ -164,6 +165,26 @@ bool FileSystem::updateUUID(Report& report, const QString& deviceNode) const
return true; return true;
} }
/** Returns the FileSystem UUID (or an empty string, if not supported).
@param deviceNode the device node for the Partition the FileSystem is on
@return the UUID or an empty string if the FileSystem does not support UUIDs
*/
QString FileSystem::readUUID(const QString& deviceNode) const
{
ExternalCommand cmd("vol_id", QStringList() << deviceNode);
if (cmd.run())
{
QRegExp rxUuid("ID_FS_UUID=([^\\s]+)");
if (rxUuid.indexIn(cmd.output()) != -1)
return rxUuid.cap(1).simplified();
}
return QString();
}
/** @return the minimum capacity valid for this FileSystem in bytes */ /** @return the minimum capacity valid for this FileSystem in bytes */
qint64 FileSystem::minCapacity() const qint64 FileSystem::minCapacity() const
{ {

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -92,6 +92,7 @@ class FileSystem
virtual bool backup(Report& report, const Device& sourceDevice, const QString& deviceNode, const QString& filename) const; virtual bool backup(Report& report, const Device& sourceDevice, const QString& deviceNode, const QString& filename) const;
virtual bool check(Report& report, const QString& deviceNode) const; virtual bool check(Report& report, const QString& deviceNode) const;
virtual bool updateUUID(Report& report, const QString& deviceNode) const; virtual bool updateUUID(Report& report, const QString& deviceNode) const;
virtual QString readUUID(const QString& deviceNode) const;
virtual SupportType supportGetUsed() const { return SupportNone; } /**< @return SupportType for getting used capacity */ virtual SupportType supportGetUsed() const { return SupportNone; } /**< @return SupportType for getting used capacity */
virtual SupportType supportGetLabel() const { return SupportNone; } /**< @return SupportType for reading label*/ virtual SupportType supportGetLabel() const { return SupportNone; } /**< @return SupportType for reading label*/
@ -104,6 +105,7 @@ class FileSystem
virtual SupportType supportBackup() const { return SupportNone; } /**< @return SupportType for backing up */ virtual SupportType supportBackup() const { return SupportNone; } /**< @return SupportType for backing up */
virtual SupportType supportSetLabel() const { return SupportNone; } /**< @return SupportType for setting label*/ virtual SupportType supportSetLabel() const { return SupportNone; } /**< @return SupportType for setting label*/
virtual SupportType supportUpdateUUID() const { return SupportNone; } /**< @return SupportType for updating the UUID */ virtual SupportType supportUpdateUUID() const { return SupportNone; } /**< @return SupportType for updating the UUID */
virtual SupportType supportGetUUID() const { return SupportNone; } /**< @return SupportType for reading the UUID */
virtual qint64 minCapacity() const; virtual qint64 minCapacity() const;
virtual qint64 maxCapacity() const; virtual qint64 maxCapacity() const;
@ -136,9 +138,11 @@ class FileSystem
const QString& label() const { return m_Label; } /**< @return the FileSystem's label */ const QString& label() const { return m_Label; } /**< @return the FileSystem's label */
qint64 sectorsUsed() const { return m_SectorsUsed; } /**< @return the sectors in use on the FileSystem */ qint64 sectorsUsed() const { return m_SectorsUsed; } /**< @return the sectors in use on the FileSystem */
const QString& uuid() const { return m_UUID; } /**< @return the FileSystem's UUID */
void setSectorsUsed(qint64 s) { m_SectorsUsed = s; } /**< @param s the new value for sectors in use */ void setSectorsUsed(qint64 s) { m_SectorsUsed = s; } /**< @param s the new value for sectors in use */
void setLabel(const QString& s) { m_Label = s; } /**< @param s the new label */ void setLabel(const QString& s) { m_Label = s; } /**< @param s the new label */
void setUUID(const QString& s) { m_UUID = s; } /**< @param s the new UUID */
protected: protected:
static bool findExternal(const QString& cmdName, const QStringList& args = QStringList(), int exptectedCode = 1); static bool findExternal(const QString& cmdName, const QStringList& args = QStringList(), int exptectedCode = 1);
@ -149,6 +153,7 @@ class FileSystem
qint64 m_LastSector; qint64 m_LastSector;
qint64 m_SectorsUsed; qint64 m_SectorsUsed;
QString m_Label; QString m_Label;
QString m_UUID;
}; };
Q_DECLARE_OPERATORS_FOR_FLAGS(FileSystem::SupportTypes) Q_DECLARE_OPERATORS_FOR_FLAGS(FileSystem::SupportTypes)

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -32,6 +32,7 @@ namespace FS
FileSystem::SupportType linuxswap::m_Copy = FileSystem::SupportNone; FileSystem::SupportType linuxswap::m_Copy = FileSystem::SupportNone;
FileSystem::SupportType linuxswap::m_GetLabel = FileSystem::SupportNone; FileSystem::SupportType linuxswap::m_GetLabel = FileSystem::SupportNone;
FileSystem::SupportType linuxswap::m_SetLabel = FileSystem::SupportNone; FileSystem::SupportType linuxswap::m_SetLabel = FileSystem::SupportNone;
FileSystem::SupportType linuxswap::m_GetUUID = FileSystem::SupportNone;
linuxswap::linuxswap(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label) : linuxswap::linuxswap(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label) :
FileSystem(firstsector, lastsector, sectorsused, label, FileSystem::LinuxSwap) FileSystem(firstsector, lastsector, sectorsused, label, FileSystem::LinuxSwap)
@ -44,6 +45,7 @@ namespace FS
m_GetLabel = findExternal("vol_id") ? SupportExternal : SupportNone; m_GetLabel = findExternal("vol_id") ? SupportExternal : SupportNone;
m_Copy = SupportInternal; m_Copy = SupportInternal;
m_Move = SupportInternal; m_Move = SupportInternal;
m_GetUUID = findExternal("vol_id") ? SupportExternal : SupportNone;
} }
bool linuxswap::create(Report& report, const QString& deviceNode) const bool linuxswap::create(Report& report, const QString& deviceNode) const

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -49,10 +49,10 @@ namespace FS
virtual bool canMount(const QString&) const { return true; } virtual bool canMount(const QString&) const { return true; }
virtual bool canUnmount(const QString&) const { return true; } virtual bool canUnmount(const QString&) const { return true; }
virtual bool mount(const QString& deviceNode); virtual bool mount(const QString& deviceNode);
virtual bool unmount(const QString& deviceNode); virtual bool unmount(const QString& deviceNode);
virtual QString mountTitle() const; virtual QString mountTitle() const;
virtual QString unmountTitle() const; virtual QString unmountTitle() const;
@ -63,7 +63,8 @@ namespace FS
virtual SupportType supportCopy() const { return m_Copy; } virtual SupportType supportCopy() const { return m_Copy; }
virtual SupportType supportGetLabel() const { return m_GetLabel; } virtual SupportType supportGetLabel() const { return m_GetLabel; }
virtual SupportType supportSetLabel() const { return m_SetLabel; } virtual SupportType supportSetLabel() const { return m_SetLabel; }
virtual SupportType supportGetUUID() const { return m_GetUUID; }
protected: protected:
static SupportType m_Create; static SupportType m_Create;
static SupportType m_Grow; static SupportType m_Grow;
@ -72,6 +73,7 @@ namespace FS
static SupportType m_Copy; static SupportType m_Copy;
static SupportType m_SetLabel; static SupportType m_SetLabel;
static SupportType m_GetLabel; static SupportType m_GetLabel;
static SupportType m_GetUUID;
}; };
} }

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -41,6 +41,7 @@ namespace FS
FileSystem::SupportType ntfs::m_Backup = FileSystem::SupportNone; FileSystem::SupportType ntfs::m_Backup = FileSystem::SupportNone;
FileSystem::SupportType ntfs::m_SetLabel = FileSystem::SupportNone; FileSystem::SupportType ntfs::m_SetLabel = FileSystem::SupportNone;
FileSystem::SupportType ntfs::m_UpdateUUID = FileSystem::SupportNone; FileSystem::SupportType ntfs::m_UpdateUUID = FileSystem::SupportNone;
FileSystem::SupportType ntfs::m_GetUUID = FileSystem::SupportNone;
ntfs::ntfs(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label) : ntfs::ntfs(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label) :
FileSystem(firstsector, lastsector, sectorsused, label, FileSystem::Ntfs) FileSystem(firstsector, lastsector, sectorsused, label, FileSystem::Ntfs)
@ -56,13 +57,14 @@ namespace FS
m_Backup = SupportInternal; m_Backup = SupportInternal;
m_UpdateUUID = findExternal("dd") ? SupportExternal : SupportNone; m_UpdateUUID = findExternal("dd") ? SupportExternal : SupportNone;
m_Move = (m_Check != SupportNone) ? SupportInternal : SupportNone; m_Move = (m_Check != SupportNone) ? SupportInternal : SupportNone;
m_GetUUID = findExternal("vol_id") ? SupportExternal : SupportNone;
} }
qint64 ntfs::maxCapacity() const qint64 ntfs::maxCapacity() const
{ {
return 256 * Capacity::unitFactor(Capacity::Byte, Capacity::TiB); return 256 * Capacity::unitFactor(Capacity::Byte, Capacity::TiB);
} }
qint64 ntfs::readUsedCapacity(const QString& deviceNode) const qint64 ntfs::readUsedCapacity(const QString& deviceNode) const
{ {
ExternalCommand cmd("ntfsresize", QStringList() << "--info" << "--force" << "--no-progress-bar" << deviceNode); ExternalCommand cmd("ntfsresize", QStringList() << "--info" << "--force" << "--no-progress-bar" << deviceNode);
@ -103,10 +105,10 @@ namespace FS
ExternalCommand testCmd("ntfslabel", QStringList() << "--force" << deviceNode); ExternalCommand testCmd("ntfslabel", QStringList() << "--force" << deviceNode);
testCmd.setProcessChannelMode(QProcess::SeparateChannels); testCmd.setProcessChannelMode(QProcess::SeparateChannels);
if (!testCmd.run(-1)) if (!testCmd.run(-1))
return false; return false;
return testCmd.output().simplified() == newLabel.simplified(); return testCmd.output().simplified() == newLabel.simplified();
} }
@ -132,7 +134,7 @@ namespace FS
{ {
QStringList args; QStringList args;
args << "-P" << "-f" << deviceNode << "-s" << QString::number(length); args << "-P" << "-f" << deviceNode << "-s" << QString::number(length);
QStringList dryRunArgs = args; QStringList dryRunArgs = args;
dryRunArgs << "-n"; dryRunArgs << "-n";
ExternalCommand cmdDryRun("ntfsresize", dryRunArgs); ExternalCommand cmdDryRun("ntfsresize", dryRunArgs);
@ -142,7 +144,7 @@ namespace FS
ExternalCommand cmd(report, "ntfsresize", args); ExternalCommand cmd(report, "ntfsresize", args);
return cmd.run(-1) && cmd.exitCode() == 0; return cmd.run(-1) && cmd.exitCode() == 0;
} }
return false; return false;
} }
@ -150,7 +152,7 @@ namespace FS
{ {
char uuid[16]; char uuid[16];
uuid_generate(reinterpret_cast<unsigned char*>(uuid)); uuid_generate(reinterpret_cast<unsigned char*>(uuid));
ExternalCommand cmd(report, "dd", QStringList() << "of=" + deviceNode << "bs=1" << "count=8" << "seek=72"); ExternalCommand cmd(report, "dd", QStringList() << "of=" + deviceNode << "bs=1" << "count=8" << "seek=72");
if (!cmd.start()) if (!cmd.start())
@ -158,7 +160,7 @@ namespace FS
if (cmd.write(uuid, 8) != 8) if (cmd.write(uuid, 8) != 8)
return false; return false;
return cmd.waitFor(-1); return cmd.waitFor(-1);
} }
} }

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -62,9 +62,10 @@ namespace FS
virtual SupportType supportBackup() const { return m_Backup; } virtual SupportType supportBackup() const { return m_Backup; }
virtual SupportType supportSetLabel() const { return m_SetLabel; } virtual SupportType supportSetLabel() const { return m_SetLabel; }
virtual SupportType supportUpdateUUID() const { return m_UpdateUUID; } virtual SupportType supportUpdateUUID() const { return m_UpdateUUID; }
virtual SupportType supportGetUUID() const { return m_GetUUID; }
virtual qint64 maxCapacity() const; virtual qint64 maxCapacity() const;
protected: protected:
static SupportType m_GetUsed; static SupportType m_GetUsed;
static SupportType m_GetLabel; static SupportType m_GetLabel;
@ -77,6 +78,7 @@ namespace FS
static SupportType m_Backup; static SupportType m_Backup;
static SupportType m_SetLabel; static SupportType m_SetLabel;
static SupportType m_UpdateUUID; static SupportType m_UpdateUUID;
static SupportType m_GetUUID;
}; };
} }

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -41,6 +41,7 @@ namespace FS
FileSystem::SupportType reiserfs::m_Backup = FileSystem::SupportNone; FileSystem::SupportType reiserfs::m_Backup = FileSystem::SupportNone;
FileSystem::SupportType reiserfs::m_SetLabel = FileSystem::SupportNone; FileSystem::SupportType reiserfs::m_SetLabel = FileSystem::SupportNone;
FileSystem::SupportType reiserfs::m_UpdateUUID = FileSystem::SupportNone; FileSystem::SupportType reiserfs::m_UpdateUUID = FileSystem::SupportNone;
FileSystem::SupportType reiserfs::m_GetUUID = FileSystem::SupportNone;
reiserfs::reiserfs(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label) : reiserfs::reiserfs(qint64 firstsector, qint64 lastsector, qint64 sectorsused, const QString& label) :
FileSystem(firstsector, lastsector, sectorsused, label, FileSystem::ReiserFS) FileSystem(firstsector, lastsector, sectorsused, label, FileSystem::ReiserFS)
@ -58,6 +59,7 @@ namespace FS
m_Shrink = (m_GetUsed != SupportNone && m_Grow != SupportNone) ? SupportExternal : SupportNone; m_Shrink = (m_GetUsed != SupportNone && m_Grow != SupportNone) ? SupportExternal : SupportNone;
m_Backup = SupportInternal; m_Backup = SupportInternal;
m_UpdateUUID = findExternal("reiserfstune") ? SupportExternal : SupportNone; m_UpdateUUID = findExternal("reiserfstune") ? SupportExternal : SupportNone;
m_GetUUID = findExternal("vol_id") ? SupportExternal : SupportNone;
} }
qint64 reiserfs::minCapacity() const qint64 reiserfs::minCapacity() const
@ -69,7 +71,7 @@ namespace FS
{ {
return 16 * Capacity::unitFactor(Capacity::Byte, Capacity::TiB); return 16 * Capacity::unitFactor(Capacity::Byte, Capacity::TiB);
} }
qint64 reiserfs::readUsedCapacity(const QString& deviceNode) const qint64 reiserfs::readUsedCapacity(const QString& deviceNode) const
{ {
ExternalCommand cmd("debugreiserfs", QStringList() << deviceNode); ExternalCommand cmd("debugreiserfs", QStringList() << deviceNode);
@ -81,7 +83,7 @@ namespace FS
if (rxBlockCount.indexIn(cmd.output()) != -1) if (rxBlockCount.indexIn(cmd.output()) != -1)
blockCount = rxBlockCount.cap(1).toLongLong(); blockCount = rxBlockCount.cap(1).toLongLong();
qint64 blockSize = -1; qint64 blockSize = -1;
QRegExp rxBlockSize("Blocksize: (\\d+)"); QRegExp rxBlockSize("Blocksize: (\\d+)");
@ -131,19 +133,19 @@ namespace FS
{ {
return ExternalCommand(report, "mkfs.reiserfs", QStringList() << "-f" << deviceNode).run(-1); return ExternalCommand(report, "mkfs.reiserfs", QStringList() << "-f" << deviceNode).run(-1);
} }
bool reiserfs::resize(Report& report, const QString& deviceNode, qint64 length) const bool reiserfs::resize(Report& report, const QString& deviceNode, qint64 length) const
{ {
ExternalCommand cmd(report, "resize_reiserfs", QStringList() << deviceNode << "-q" << "-s" << QString::number(length)); ExternalCommand cmd(report, "resize_reiserfs", QStringList() << deviceNode << "-q" << "-s" << QString::number(length));
bool rval = cmd.start(-1); bool rval = cmd.start(-1);
if (!rval) if (!rval)
return false; return false;
if (cmd.write("y\n", 2) != 2) if (cmd.write("y\n", 2) != 2)
return false; return false;
return cmd.waitFor(-1) && (cmd.exitCode() == 0 || cmd.exitCode() == 256); return cmd.waitFor(-1) && (cmd.exitCode() == 0 || cmd.exitCode() == 256);
} }
@ -153,7 +155,7 @@ namespace FS
uuid_generate(uuid); uuid_generate(uuid);
char uuid_ascii[37]; char uuid_ascii[37];
uuid_unparse(uuid, uuid_ascii); uuid_unparse(uuid, uuid_ascii);
return ExternalCommand(report, "reiserfstune", QStringList() << "-u" << uuid_ascii << deviceNode).run(-1); return ExternalCommand(report, "reiserfstune", QStringList() << "-u" << uuid_ascii << deviceNode).run(-1);
} }
} }

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -63,10 +63,11 @@ namespace FS
virtual SupportType supportBackup() const { return m_Backup; } virtual SupportType supportBackup() const { return m_Backup; }
virtual SupportType supportSetLabel() const { return m_SetLabel; } virtual SupportType supportSetLabel() const { return m_SetLabel; }
virtual SupportType supportUpdateUUID() const { return m_UpdateUUID; } virtual SupportType supportUpdateUUID() const { return m_UpdateUUID; }
virtual SupportType supportGetUUID() const { return m_GetUUID; }
virtual qint64 minCapacity() const; virtual qint64 minCapacity() const;
virtual qint64 maxCapacity() const; virtual qint64 maxCapacity() const;
protected: protected:
static SupportType m_GetUsed; static SupportType m_GetUsed;
static SupportType m_GetLabel; static SupportType m_GetLabel;
@ -79,6 +80,7 @@ namespace FS
static SupportType m_Backup; static SupportType m_Backup;
static SupportType m_SetLabel; static SupportType m_SetLabel;
static SupportType m_UpdateUUID; static SupportType m_UpdateUUID;
static SupportType m_GetUUID;
}; };
} }

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -116,6 +116,8 @@ void PartPropsDialog::setupDialog()
} }
dialogWidget().status().setText(statusText); dialogWidget().status().setText(statusText);
dialogWidget().uuid().setText(partition().fileSystem().uuid().isEmpty() ? i18nc("@item uuid", "(none)") : partition().fileSystem().uuid());
setupFileSystemComboBox(); setupFileSystemComboBox();
// don't do this before the file system combo box has been set up! // don't do this before the file system combo box has been set up!
@ -164,7 +166,7 @@ void PartPropsDialog::setupFlagsList()
void PartPropsDialog::updateHideAndShow() void PartPropsDialog::updateHideAndShow()
{ {
// create a temporary fs just to check if the currently selected type supports setting a label // create a temporary fs for some checks
const FileSystem* fs = FileSystemFactory::create(newFileSystemType(), -1, -1, -1, ""); const FileSystem* fs = FileSystemFactory::create(newFileSystemType(), -1, -1, -1, "");
if (fs == NULL || fs->supportSetLabel() == FileSystem::SupportNone) if (fs == NULL || fs->supportSetLabel() == FileSystem::SupportNone)
@ -185,6 +187,13 @@ void PartPropsDialog::updateHideAndShow()
dialogWidget().noSetLabel().setVisible(false); dialogWidget().noSetLabel().setVisible(false);
} }
// when do we show the uuid?
const bool showUuid =
partition().state() != Partition::StateNew && // not for new partitions
!(fs == NULL || fs->supportGetUUID() == FileSystem::SupportNone); // not if the FS doesn't support it
dialogWidget().showUuid(showUuid);
delete fs; delete fs;
// when do we show available and used capacity? // when do we show available and used capacity?

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -37,7 +37,7 @@ class PartPropsWidget : public QWidget, public Ui::PartPropsWidgetBase
QLabel& mountPoint() { Q_ASSERT(m_LabelMountPoint); return *m_LabelMountPoint; } QLabel& mountPoint() { Q_ASSERT(m_LabelMountPoint); return *m_LabelMountPoint; }
QLabel& role() { Q_ASSERT(m_LabelRole); return *m_LabelRole; } QLabel& role() { Q_ASSERT(m_LabelRole); return *m_LabelRole; }
QLabel& capacity() { Q_ASSERT(m_LabelCapacity); return *m_LabelCapacity; } QLabel& capacity() { Q_ASSERT(m_LabelCapacity); return *m_LabelCapacity; }
QLabel& textAvailable() { Q_ASSERT(m_LabelTextAvailable); return *m_LabelTextAvailable; } QLabel& textAvailable() { Q_ASSERT(m_LabelTextAvailable); return *m_LabelTextAvailable; }
QLabel& available() { Q_ASSERT(m_LabelAvailable); return *m_LabelAvailable; } QLabel& available() { Q_ASSERT(m_LabelAvailable); return *m_LabelAvailable; }
@ -55,6 +55,9 @@ class PartPropsWidget : public QWidget, public Ui::PartPropsWidgetBase
QLabel& numSectors() { Q_ASSERT(m_LabelNumSectors); return *m_LabelNumSectors; } QLabel& numSectors() { Q_ASSERT(m_LabelNumSectors); return *m_LabelNumSectors; }
QLabel& status() { Q_ASSERT(m_LabelStatus); return *m_LabelStatus; } QLabel& status() { Q_ASSERT(m_LabelStatus); return *m_LabelStatus; }
QLabel& textUuid() { Q_ASSERT(m_LabelTextUuid); return *m_LabelTextUuid; }
QLabel& uuid() { Q_ASSERT(m_LabelUuid); return *m_LabelUuid; }
QLabel& textLabel() { Q_ASSERT(m_LabelTextLabel); return *m_LabelTextLabel; } QLabel& textLabel() { Q_ASSERT(m_LabelTextLabel); return *m_LabelTextLabel; }
KLineEdit& label() { Q_ASSERT(m_EditLabel); return *m_EditLabel; } KLineEdit& label() { Q_ASSERT(m_EditLabel); return *m_EditLabel; }
const KLineEdit& label() const { Q_ASSERT(m_EditLabel); return *m_EditLabel; } const KLineEdit& label() const { Q_ASSERT(m_EditLabel); return *m_EditLabel; }
@ -71,6 +74,7 @@ class PartPropsWidget : public QWidget, public Ui::PartPropsWidgetBase
void showCheckRecreate(bool b) { checkRecreate().setVisible(b); } void showCheckRecreate(bool b) { checkRecreate().setVisible(b); }
void showListFlags(bool b) { listFlags().setVisible(b); textFlags().setVisible(b); lineFlags().setVisible(b); } void showListFlags(bool b) { listFlags().setVisible(b); textFlags().setVisible(b); lineFlags().setVisible(b); }
void showLabel(bool b) { textLabel().setVisible(b); label().setVisible(b); } void showLabel(bool b) { textLabel().setVisible(b); label().setVisible(b); }
void showUuid(bool b) { textUuid().setVisible(b); uuid().setVisible(b); }
}; };
#endif #endif

View File

@ -138,14 +138,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="0" colspan="3"> <item row="14" column="0" colspan="3">
<widget class="Line" name="line_2"> <widget class="Line" name="line_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="0"> <item row="15" column="0">
<widget class="QLabel" name="m_LabelTextCapacity"> <widget class="QLabel" name="m_LabelTextCapacity">
<property name="text"> <property name="text">
<string comment="@label">Size:</string> <string comment="@label">Size:</string>
@ -155,14 +155,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="1" colspan="2"> <item row="15" column="1" colspan="2">
<widget class="QLabel" name="m_LabelCapacity"> <widget class="QLabel" name="m_LabelCapacity">
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="14" column="0"> <item row="16" column="0">
<widget class="QLabel" name="m_LabelTextAvailable"> <widget class="QLabel" name="m_LabelTextAvailable">
<property name="text"> <property name="text">
<string comment="@label partition capacity available">Available:</string> <string comment="@label partition capacity available">Available:</string>
@ -172,14 +172,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="14" column="1" colspan="2"> <item row="16" column="1" colspan="2">
<widget class="QLabel" name="m_LabelAvailable"> <widget class="QLabel" name="m_LabelAvailable">
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="15" column="0"> <item row="17" column="0">
<widget class="QLabel" name="m_LabelTextUsed"> <widget class="QLabel" name="m_LabelTextUsed">
<property name="text"> <property name="text">
<string comment="@label partition capacity used">Used:</string> <string comment="@label partition capacity used">Used:</string>
@ -189,21 +189,21 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="15" column="1" colspan="2"> <item row="17" column="1" colspan="2">
<widget class="QLabel" name="m_LabelUsed"> <widget class="QLabel" name="m_LabelUsed">
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="16" column="0" colspan="3"> <item row="18" column="0" colspan="3">
<widget class="Line" name="line"> <widget class="Line" name="line">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
<item row="17" column="0"> <item row="19" column="0">
<widget class="QLabel" name="m_LabelTextFirstSector"> <widget class="QLabel" name="m_LabelTextFirstSector">
<property name="text"> <property name="text">
<string comment="@label">First sector:</string> <string comment="@label">First sector:</string>
@ -213,14 +213,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="17" column="1" colspan="2"> <item row="19" column="1" colspan="2">
<widget class="QLabel" name="m_LabelFirstSector"> <widget class="QLabel" name="m_LabelFirstSector">
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="18" column="0"> <item row="20" column="0">
<widget class="QLabel" name="m_LabelTextLastSector"> <widget class="QLabel" name="m_LabelTextLastSector">
<property name="text"> <property name="text">
<string comment="@label">Last sector:</string> <string comment="@label">Last sector:</string>
@ -230,14 +230,14 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="18" column="1" colspan="2"> <item row="20" column="1" colspan="2">
<widget class="QLabel" name="m_LabelLastSector"> <widget class="QLabel" name="m_LabelLastSector">
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="19" column="0"> <item row="21" column="0">
<widget class="QLabel" name="m_LabelTextNumSectors"> <widget class="QLabel" name="m_LabelTextNumSectors">
<property name="text"> <property name="text">
<string comment="@label">Number of sectors:</string> <string comment="@label">Number of sectors:</string>
@ -247,21 +247,21 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="19" column="1" colspan="2"> <item row="21" column="1" colspan="2">
<widget class="QLabel" name="m_LabelNumSectors"> <widget class="QLabel" name="m_LabelNumSectors">
<property name="textInteractionFlags"> <property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set> <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="20" column="0" colspan="3"> <item row="22" column="0" colspan="3">
<widget class="Line" name="m_LineListFlags"> <widget class="Line" name="m_LineListFlags">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
</widget> </widget>
</item> </item>
<item row="21" column="0"> <item row="23" column="0">
<widget class="QLabel" name="m_LabelTextFlags"> <widget class="QLabel" name="m_LabelTextFlags">
<property name="text"> <property name="text">
<string comment="@label">&amp;Flags:</string> <string comment="@label">&amp;Flags:</string>
@ -274,7 +274,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="21" column="1" colspan="2"> <item row="23" column="1" colspan="2">
<widget class="QListWidget" name="m_ListFlags"> <widget class="QListWidget" name="m_ListFlags">
<property name="horizontalScrollBarPolicy"> <property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum> <enum>Qt::ScrollBarAlwaysOff</enum>
@ -290,7 +290,7 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="22" column="1" colspan="2"> <item row="24" column="1" colspan="2">
<spacer name="verticalSpacer_2"> <spacer name="verticalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -329,6 +329,23 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="12" column="0">
<widget class="QLabel" name="m_LabelTextUuid">
<property name="text">
<string comment="@label">UUID:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="12" column="1">
<widget class="QLabel" name="m_LabelUuid">
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<customwidgets> <customwidgets>

View File

@ -1,5 +1,5 @@
/*************************************************************************** /***************************************************************************
* Copyright (C) 2008 by Volker Lanz <vl@fidra.de> * * Copyright (C) 2008,2009 by Volker Lanz <vl@fidra.de> *
* * * *
* This program is free software; you can redistribute it and/or modify * * 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 * * it under the terms of the GNU General Public License as published by *
@ -54,9 +54,9 @@ qint32 CopyFileSystemJob::numSteps() const
bool CopyFileSystemJob::run(Report& parent) bool CopyFileSystemJob::run(Report& parent)
{ {
bool rval = false; bool rval = false;
Report* report = jobStarted(parent); Report* report = jobStarted(parent);
if (targetPartition().fileSystem().length() < sourcePartition().fileSystem().length()) if (targetPartition().fileSystem().length() < sourcePartition().fileSystem().length())
report->line() << i18nc("@info/plain", "Cannot copy file system: File system on target partition <filename>%1</filename> is smaller than the file system on source partition <filename>%2</filename>.", targetPartition().deviceNode(), sourcePartition().deviceNode()); report->line() << i18nc("@info/plain", "Cannot copy file system: File system on target partition <filename>%1</filename> is smaller than the file system on source partition <filename>%2</filename>.", targetPartition().deviceNode(), sourcePartition().deviceNode());
else if (sourcePartition().fileSystem().supportCopy() == FileSystem::SupportExternal) else if (sourcePartition().fileSystem().supportCopy() == FileSystem::SupportExternal)
@ -65,7 +65,7 @@ bool CopyFileSystemJob::run(Report& parent)
{ {
CopySourceDevice copySource(sourceDevice(), sourcePartition().fileSystem().firstSector(), sourcePartition().fileSystem().lastSector()); CopySourceDevice copySource(sourceDevice(), sourcePartition().fileSystem().firstSector(), sourcePartition().fileSystem().lastSector());
CopyTargetDevice copyTarget(targetDevice(), targetPartition().fileSystem().firstSector(), targetPartition().fileSystem().lastSector()); CopyTargetDevice copyTarget(targetDevice(), targetPartition().fileSystem().firstSector(), targetPartition().fileSystem().lastSector());
if (!copySource.open()) if (!copySource.open())
report->line() << i18nc("@info/plain", "Could not open file system on source partition <filename>%1</filename> for copying.", sourcePartition().deviceNode()); report->line() << i18nc("@info/plain", "Could not open file system on source partition <filename>%1</filename> for copying.", sourcePartition().deviceNode());
else if (!copyTarget.open()) else if (!copyTarget.open())
@ -81,14 +81,17 @@ bool CopyFileSystemJob::run(Report& parent)
{ {
// set the target file system to the length of the source // set the target file system to the length of the source
const qint64 newLastSector = targetPartition().fileSystem().firstSector() + sourcePartition().fileSystem().length() - 1; const qint64 newLastSector = targetPartition().fileSystem().firstSector() + sourcePartition().fileSystem().length() - 1;
targetPartition().fileSystem().setLastSector(newLastSector); targetPartition().fileSystem().setLastSector(newLastSector);
// and set a new UUID, if the target filesystem supports UUIDs // and set a new UUID, if the target filesystem supports UUIDs
if (targetPartition().fileSystem().supportUpdateUUID() == FileSystem::SupportExternal) if (targetPartition().fileSystem().supportUpdateUUID() == FileSystem::SupportExternal)
{
targetPartition().fileSystem().updateUUID(*report, targetPartition().deviceNode()); targetPartition().fileSystem().updateUUID(*report, targetPartition().deviceNode());
targetPartition().fileSystem().setUUID(targetPartition().fileSystem().readUUID(targetPartition().deviceNode()));
}
} }
jobFinished(*report, rval); jobFinished(*report, rval);
return rval; return rval;