//
// test --verbose largeFile
//
-// On systems supporting sparse files they may also be registered in the
-// Streams subsuite.
+// On systems supporting sparse files they will also be registered in the
+// Streams subsuite so that they run by default.
//
// For compilers that support precompilation, includes "wx/wx.h".
// Ideally these tests will be part of the default suite so that regressions
// are picked up. However this is only possible when sparse files are
// supported otherwise the tests require too much disk space.
-//
-// On unix, most filesystems support sparse files, though not all. So for now
-// I'm not assuming sparse file support on unix. On Windows it's possible to
-// test, and sparse files should be available on Win 5+ with NTFS.
#ifdef __WXMSW__
volumeFlags &= ~FILE_SUPPORTS_SPARSE_FILES;
}
+// return the suite if sparse files are supported, otherwise return NULL
+//
CppUnit::Test* GetlargeFileSuite()
{
if (!volumeInfoInit) {
- wxFile file;
- wxString path = wxFileName::CreateTempFileName(wxT("wxlfs-"), &file);
- MakeSparse(path, file.fd());
+ wxString path;
+ {
+ wxFile file;
+ path = wxFileName::CreateTempFileName(wxT("wxlfs-"), &file);
+ MakeSparse(path, file.fd());
+ }
wxRemoveFile(path);
}
bool IsFAT(const wxString& WXUNUSED(path)) { return false; }
void MakeSparse(const wxString& WXUNUSED(path), int WXUNUSED(fd)) { }
-CppUnit::Test* GetlargeFileSuite() { return NULL; }
+// return the suite if sparse files are supported, otherwise return NULL
+//
+CppUnit::Test* GetlargeFileSuite()
+{
+ wxString path;
+ struct stat st1, st2;
+ memset(&st1, 0, sizeof(st1));
+ memset(&st2, 0, sizeof(st2));
+
+ {
+ wxFile file;
+ path = wxFileName::CreateTempFileName(wxT("wxlfs-"), &file);
+
+ fstat(file.fd(), &st1);
+ file.Seek(st1.st_blksize);
+ file.Write("x", 1);
+ fstat(file.fd(), &st1);
+
+ file.Seek(0);
+ file.Write("x", 1);
+ fstat(file.fd(), &st2);
+ }
+
+ wxRemoveFile(path);
+
+ if (st1.st_blocks != st2.st_blocks)
+ return largeFile::suite();
+ else
+ return NULL;
+}
#endif // __WXMSW__