From: Michael Wetherell Date: Wed, 30 Dec 2009 17:44:09 +0000 (+0000) Subject: Add another test for sparse file support so that the large file tests can run X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/9e477451a173c2096b163f94a425c659c211a6ab Add another test for sparse file support so that the large file tests can run as part of the default suite for more platforms. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63024 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/tests/streams/largefile.cpp b/tests/streams/largefile.cpp index 8f35746d7d..b5f14d4498 100644 --- a/tests/streams/largefile.cpp +++ b/tests/streams/largefile.cpp @@ -16,8 +16,8 @@ // // 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". @@ -304,10 +304,6 @@ CppUnit::Test *largeFile::suite() // 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__ @@ -384,12 +380,17 @@ void MakeSparse(const wxString& path, int fd) 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); } @@ -404,7 +405,36 @@ CppUnit::Test* GetlargeFileSuite() 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__