Fix sizes QStorageInfo returns for invalid drives

Zero is a legitimate size to be returned by bytesFree/bytesAvailable
functions, so change those functions to return some 'invalid' size
in case of an invalid drive.
This is also consistent with the original version from the Qt Systems
framework.

[ChangeLog][QtCore][QStorageInfo] Fixed sizes returned for invalid drives.

Task-number: QTBUG-45724
Change-Id: I312fba521fdf8d52d7a0ac0e46cacca625775e80
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Ivan Komissarov 2015-05-26 12:10:51 +03:00 committed by Jani Heikkinen
parent 827e195f17
commit 9a029c9de4
3 changed files with 16 additions and 10 deletions

View File

@ -186,6 +186,8 @@ QString QStorageInfo::rootPath() const
This size can be less than or equal to the free size returned by
bytesFree() function.
Returns -1 if QStorageInfo object is not valid.
\sa bytesTotal(), bytesFree()
*/
qint64 QStorageInfo::bytesAvailable() const
@ -198,6 +200,8 @@ qint64 QStorageInfo::bytesAvailable() const
quotas on the filesystem, this value can be larger than the value
returned by bytesAvailable().
Returns -1 if QStorageInfo object is not valid.
\sa bytesTotal(), bytesAvailable()
*/
qint64 QStorageInfo::bytesFree() const
@ -208,6 +212,8 @@ qint64 QStorageInfo::bytesFree() const
/*!
Returns the total volume size in bytes.
Returns -1 if QStorageInfo object is not valid.
\sa bytesFree(), bytesAvailable()
*/
qint64 QStorageInfo::bytesTotal() const

View File

@ -53,7 +53,7 @@ class QStorageInfoPrivate : public QSharedData
{
public:
inline QStorageInfoPrivate() : QSharedData(),
bytesTotal(0), bytesFree(0), bytesAvailable(0),
bytesTotal(-1), bytesFree(-1), bytesAvailable(-1),
readOnly(false), ready(false), valid(false)
{}

View File

@ -61,9 +61,9 @@ void tst_QStorageInfo::defaultValues()
QVERIFY(!storage.isRoot());
QVERIFY(storage.device().isEmpty());
QVERIFY(storage.fileSystemType().isEmpty());
QVERIFY(storage.bytesTotal() == 0);
QVERIFY(storage.bytesFree() == 0);
QVERIFY(storage.bytesAvailable() == 0);
QVERIFY(storage.bytesTotal() == -1);
QVERIFY(storage.bytesFree() == -1);
QVERIFY(storage.bytesAvailable() == -1);
}
void tst_QStorageInfo::operatorEqual()
@ -106,9 +106,9 @@ void tst_QStorageInfo::root()
QVERIFY(!storage.device().isEmpty());
QVERIFY(!storage.fileSystemType().isEmpty());
#ifndef Q_OS_HAIKU
QVERIFY(storage.bytesTotal() > 0);
QVERIFY(storage.bytesFree() > 0);
QVERIFY(storage.bytesAvailable() > 0);
QVERIFY(storage.bytesTotal() >= 0);
QVERIFY(storage.bytesFree() >= 0);
QVERIFY(storage.bytesAvailable() >= 0);
#endif
}
@ -121,9 +121,9 @@ void tst_QStorageInfo::currentStorage()
QVERIFY(appPath.startsWith(storage.rootPath(), Qt::CaseInsensitive));
QVERIFY(!storage.device().isEmpty());
QVERIFY(!storage.fileSystemType().isEmpty());
QVERIFY(storage.bytesTotal() > 0);
QVERIFY(storage.bytesFree() > 0);
QVERIFY(storage.bytesAvailable() > 0);
QVERIFY(storage.bytesTotal() >= 0);
QVERIFY(storage.bytesFree() >= 0);
QVERIFY(storage.bytesAvailable() >= 0);
}
void tst_QStorageInfo::storageList()