mirror of
https://github.com/taglib/taglib.git
synced 2026-06-10 00:09:18 -04:00
Support large files over 2GB on Windows (#1089)
Backport of4dcf0b41c6b01f45e141https://github.com/taglib/taglib/pull/77 Tested with files larger than 2GB which have been created using sox -n -r 44100 -C 320 large.mp3 synth 58916 sine 440 channels 2 sox -n -r 44100 -C 0 large.flac synth 25459 sine 440 channels 2 sox -n -r 44100 -C 10 large.ogg synth 229806 sine 440 channels 2 sox -n -r 44100 large.wav synth 6692 sine 440 channels 2 ffmpeg -f lavfi -i "sine=frequency=440:duration=244676" -y large.m4a The only file which was readable with the tagreader example before this commit was large.ogg. The problem is that long on Windows is only 32-bit (also in LLP64 data model of 64-bit compilation target) and all the file offsets using long are too small for large files. Now long is replaced by offset_t (defined to be long long on Windows and off_t on UNIX) for such cases and some unsigned long are now size_t, which has the correct size even on Windows.
This commit is contained in:
@@ -41,7 +41,7 @@ public:
|
||||
|
||||
ByteVector readAll() {
|
||||
seek(0, End);
|
||||
long end = tell();
|
||||
offset_t end = tell();
|
||||
seek(0);
|
||||
return readBlock(end);
|
||||
}
|
||||
|
||||
@@ -141,8 +141,8 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(String("Title1"), f.tag()->title());
|
||||
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(7030L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(-1L, f.find("Title2"));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(7030), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(-1), f.find("Title2"));
|
||||
}
|
||||
|
||||
void testFuzzedFile1()
|
||||
|
||||
@@ -389,10 +389,10 @@ public:
|
||||
ASF::File f(copy.fileName().c_str());
|
||||
f.tag()->setTitle(longText(128 * 1024));
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(297578L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(297578), f.length());
|
||||
f.tag()->setTitle(longText(16 * 1024));
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(68202L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(68202), f.length());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ public:
|
||||
{
|
||||
ByteVector v("abcdefghijklmnopqrstuvwxyz");
|
||||
ByteVectorStream stream(v);
|
||||
CPPUNIT_ASSERT_EQUAL(26L, stream.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(26), stream.length());
|
||||
|
||||
stream.seek(-4, IOStream::End);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("w"), stream.readBlock(1));
|
||||
|
||||
@@ -53,19 +53,19 @@ public:
|
||||
}
|
||||
{
|
||||
PlainFile file(name.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL(10l, file.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(10), file.length());
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(2l, file.find(ByteVector("23", 2)));
|
||||
CPPUNIT_ASSERT_EQUAL(2l, file.find(ByteVector("23", 2), 2));
|
||||
CPPUNIT_ASSERT_EQUAL(7l, file.find(ByteVector("23", 2), 3));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2), file.find(ByteVector("23", 2)));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2), file.find(ByteVector("23", 2), 2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(7), file.find(ByteVector("23", 2), 3));
|
||||
|
||||
file.seek(0);
|
||||
const ByteVector v = file.readBlock(file.length());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)10, v.size());
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((long)v.find("23"), file.find("23"));
|
||||
CPPUNIT_ASSERT_EQUAL((long)v.find("23", 2), file.find("23", 2));
|
||||
CPPUNIT_ASSERT_EQUAL((long)v.find("23", 3), file.find("23", 3));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.find("23")), file.find("23"));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.find("23", 2)), file.find("23", 2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.find("23", 3)), file.find("23", 3));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -81,19 +81,19 @@ public:
|
||||
}
|
||||
{
|
||||
PlainFile file(name.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL(10l, file.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(10), file.length());
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(7l, file.rfind(ByteVector("23", 2)));
|
||||
CPPUNIT_ASSERT_EQUAL(7l, file.rfind(ByteVector("23", 2), 7));
|
||||
CPPUNIT_ASSERT_EQUAL(2l, file.rfind(ByteVector("23", 2), 6));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(7), file.rfind(ByteVector("23", 2)));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(7), file.rfind(ByteVector("23", 2), 7));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2), file.rfind(ByteVector("23", 2), 6));
|
||||
|
||||
file.seek(0);
|
||||
const ByteVector v = file.readBlock(file.length());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)10, v.size());
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL((long)v.rfind("23"), file.rfind("23"));
|
||||
CPPUNIT_ASSERT_EQUAL((long)v.rfind("23", 7), file.rfind("23", 7));
|
||||
CPPUNIT_ASSERT_EQUAL((long)v.rfind("23", 6), file.rfind("23", 6));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.rfind("23")), file.rfind("23"));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.rfind("23", 7)), file.rfind("23", 7));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(v.rfind("23", 6)), file.rfind("23", 6));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -103,22 +103,22 @@ public:
|
||||
std::string name = copy.fileName();
|
||||
|
||||
PlainFile f(name.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL((long)0, f.tell());
|
||||
CPPUNIT_ASSERT_EQUAL((long)4328, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0), f.tell());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4328), f.length());
|
||||
|
||||
f.seek(100, File::Beginning);
|
||||
CPPUNIT_ASSERT_EQUAL((long)100, f.tell());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(100), f.tell());
|
||||
f.seek(100, File::Current);
|
||||
CPPUNIT_ASSERT_EQUAL((long)200, f.tell());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(200), f.tell());
|
||||
f.seek(-300, File::Current);
|
||||
CPPUNIT_ASSERT_EQUAL((long)200, f.tell());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(200), f.tell());
|
||||
|
||||
f.seek(-100, File::End);
|
||||
CPPUNIT_ASSERT_EQUAL((long)4228, f.tell());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4228), f.tell());
|
||||
f.seek(-100, File::Current);
|
||||
CPPUNIT_ASSERT_EQUAL((long)4128, f.tell());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4128), f.tell());
|
||||
f.seek(300, File::Current);
|
||||
CPPUNIT_ASSERT_EQUAL((long)4428, f.tell());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4428), f.tell());
|
||||
}
|
||||
|
||||
void testTruncate()
|
||||
@@ -128,18 +128,17 @@ public:
|
||||
|
||||
{
|
||||
PlainFile f(name.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL(4328L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4328), f.length());
|
||||
|
||||
f.truncate(2000);
|
||||
CPPUNIT_ASSERT_EQUAL(2000L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2000), f.length());
|
||||
}
|
||||
{
|
||||
PlainFile f(name.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL(2000L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2000), f.length());
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestFile);
|
||||
|
||||
|
||||
@@ -91,8 +91,8 @@ public:
|
||||
{
|
||||
FLAC::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL(String("The Artist"), f.tag()->artist());
|
||||
CPPUNIT_ASSERT_EQUAL(69L, f.find("Artist"));
|
||||
CPPUNIT_ASSERT_EQUAL(-1L, f.find("Artist", 70));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(69), f.find("Artist"));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(-1), f.find("Artist", 70));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -253,9 +253,9 @@ public:
|
||||
FLAC::File f(copy.fileName().c_str());
|
||||
f.ID3v2Tag(true)->setTitle("0123456789");
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(5735L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(5735), f.length());
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(5735L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(5735), f.length());
|
||||
CPPUNIT_ASSERT(f.find("fLaC") >= 0);
|
||||
}
|
||||
|
||||
@@ -266,9 +266,9 @@ public:
|
||||
FLAC::File f(copy.fileName().c_str());
|
||||
f.xiphComment()->setTitle(longText(8 * 1024));
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(12862L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(12862), f.length());
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(12862L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(12862), f.length());
|
||||
}
|
||||
|
||||
void testSaveMultipleValues()
|
||||
@@ -449,7 +449,7 @@ public:
|
||||
{
|
||||
FLAC::File f(copy.fileName().c_str());
|
||||
CPPUNIT_ASSERT(!f.hasID3v1Tag());
|
||||
CPPUNIT_ASSERT_EQUAL((long)4692, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4692), f.length());
|
||||
|
||||
f.seek(0x0100);
|
||||
audioStream = f.readBlock(4436);
|
||||
@@ -457,7 +457,7 @@ public:
|
||||
f.ID3v1Tag(true)->setTitle("01234 56789 ABCDE FGHIJ");
|
||||
f.save();
|
||||
CPPUNIT_ASSERT(f.hasID3v1Tag());
|
||||
CPPUNIT_ASSERT_EQUAL((long)4820, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4820), f.length());
|
||||
|
||||
f.seek(0x0100);
|
||||
CPPUNIT_ASSERT_EQUAL(audioStream, f.readBlock(4436));
|
||||
|
||||
@@ -1553,14 +1553,14 @@ public:
|
||||
{
|
||||
MPEG::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.hasID3v2Tag());
|
||||
CPPUNIT_ASSERT_EQUAL(74789L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(74789), f.length());
|
||||
f.ID3v2Tag()->setTitle("ABCDEFGHIJ");
|
||||
f.save(MPEG::File::ID3v2, File::StripOthers);
|
||||
}
|
||||
{
|
||||
MPEG::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.hasID3v2Tag());
|
||||
CPPUNIT_ASSERT_EQUAL(9263L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(9263), f.length());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1618,7 +1618,7 @@ public:
|
||||
{
|
||||
MPEG::File f(copy.fileName().c_str());
|
||||
CPPUNIT_ASSERT(f.hasID3v2Tag());
|
||||
CPPUNIT_ASSERT_EQUAL((long)3594, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(3594), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)1505, f.ID3v2Tag()->header()->completeTagSize());
|
||||
CPPUNIT_ASSERT_EQUAL(String("Artist A"), f.ID3v2Tag()->artist());
|
||||
CPPUNIT_ASSERT_EQUAL(44100, f.audioProperties()->sampleRate());
|
||||
@@ -1689,4 +1689,3 @@ public:
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestID3v2);
|
||||
|
||||
|
||||
@@ -298,7 +298,7 @@ public:
|
||||
|
||||
MP4::Atoms atoms(&f);
|
||||
MP4::Atom *moov = atoms.atoms[0];
|
||||
CPPUNIT_ASSERT_EQUAL(long(77), moov->length);
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(77), moov->length);
|
||||
|
||||
f.tag()->setItem("pgap", true);
|
||||
f.save();
|
||||
@@ -311,7 +311,7 @@ public:
|
||||
MP4::Atoms atoms(&f);
|
||||
MP4::Atom *moov = atoms.atoms[0];
|
||||
// original size + 'pgap' size + padding
|
||||
CPPUNIT_ASSERT_EQUAL(long(77 + 25 + 974), moov->length);
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(77 + 25 + 974), moov->length);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -589,8 +589,8 @@ public:
|
||||
f.tag()->setTitle("0123456789");
|
||||
f.save();
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(2862L, f.find("0123456789"));
|
||||
CPPUNIT_ASSERT_EQUAL(-1L, f.find("0123456789", 2863));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2862), f.find("0123456789"));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(-1), f.find("0123456789", 2863));
|
||||
}
|
||||
|
||||
void testWithZeroLengthAtom()
|
||||
|
||||
@@ -119,10 +119,10 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(44100, f.audioProperties()->sampleRate());
|
||||
CPPUNIT_ASSERT(!f.audioProperties()->xingHeader());
|
||||
|
||||
const long last = f.lastFrameOffset();
|
||||
const offset_t last = f.lastFrameOffset();
|
||||
const MPEG::Header lastHeader(&f, last, false);
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(28213L, last);
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(28213), last);
|
||||
CPPUNIT_ASSERT_EQUAL(209, lastHeader.frameLength());
|
||||
}
|
||||
|
||||
@@ -258,20 +258,20 @@ public:
|
||||
{
|
||||
MPEG::File f(TEST_FILE_PATH_C("ape.mp3"));
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL((long)0x0000, f.firstFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL((long)0x1FD6, f.lastFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0000), f.firstFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x1FD6), f.lastFrameOffset());
|
||||
}
|
||||
{
|
||||
MPEG::File f(TEST_FILE_PATH_C("ape-id3v1.mp3"));
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL((long)0x0000, f.firstFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL((long)0x1FD6, f.lastFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0000), f.firstFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x1FD6), f.lastFrameOffset());
|
||||
}
|
||||
{
|
||||
MPEG::File f(TEST_FILE_PATH_C("ape-id3v2.mp3"));
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL((long)0x041A, f.firstFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL((long)0x23F0, f.lastFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x041A), f.firstFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x23F0), f.lastFrameOffset());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -418,7 +418,7 @@ public:
|
||||
f.save();
|
||||
f.ID3v2Tag(true)->setTitle(std::string(4096, 'X').c_str());
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(5141L, f.firstFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(5141), f.firstFrameOffset());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -430,7 +430,7 @@ public:
|
||||
f.ID3v2Tag(true)->setTitle("0123456789");
|
||||
f.save();
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(-1L, f.find("ID3", 3));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(-1), f.find("ID3", 3));
|
||||
}
|
||||
|
||||
void testRepeatedSave3()
|
||||
@@ -524,8 +524,8 @@ public:
|
||||
MPEG::File f(copy.fileName().c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT(f.hasID3v2Tag());
|
||||
CPPUNIT_ASSERT_EQUAL(2255L, f.firstFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(6015L, f.lastFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2255), f.firstFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(6015), f.lastFrameOffset());
|
||||
CPPUNIT_ASSERT_EQUAL(String("Title A"), f.ID3v2Tag()->title());
|
||||
f.ID3v2Tag()->setTitle("Title B");
|
||||
f.save();
|
||||
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
{
|
||||
Vorbis::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(136383L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(136383), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(19, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(30U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(131127U, f.packet(1).size());
|
||||
@@ -100,7 +100,7 @@ public:
|
||||
{
|
||||
Vorbis::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(4370L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4370), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(3, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(30U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(60U, f.packet(1).size());
|
||||
|
||||
@@ -62,7 +62,7 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(String("The Artist"), f.tag()->artist());
|
||||
|
||||
f.seek(0, File::End);
|
||||
CPPUNIT_ASSERT_EQUAL(9134L, f.tell());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(9134), f.tell());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ public:
|
||||
{
|
||||
Ogg::FLAC::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(141141L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(141141), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(21, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(51U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(131126U, f.packet(1).size());
|
||||
@@ -104,7 +104,7 @@ public:
|
||||
{
|
||||
Ogg::FLAC::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(9128L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(9128), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(5, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(51U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(59U, f.packet(1).size());
|
||||
|
||||
@@ -102,7 +102,7 @@ public:
|
||||
{
|
||||
Ogg::Opus::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(167534L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(167534), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(27, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(19U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(131380U, f.packet(1).size());
|
||||
@@ -119,7 +119,7 @@ public:
|
||||
{
|
||||
Ogg::Opus::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(35521L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(35521), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(11, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(19U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(313U, f.packet(1).size());
|
||||
|
||||
@@ -40,7 +40,7 @@ public:
|
||||
PublicRIFF(FileName file) : RIFF::File(file, BigEndian) {};
|
||||
unsigned int riffSize() { return RIFF::File::riffSize(); };
|
||||
unsigned int chunkCount() { return RIFF::File::chunkCount(); };
|
||||
unsigned int chunkOffset(unsigned int i) { return RIFF::File::chunkOffset(i); };
|
||||
offset_t chunkOffset(unsigned int i) { return RIFF::File::chunkOffset(i); };
|
||||
unsigned int chunkPadding(unsigned int i) { return RIFF::File::chunkPadding(i); };
|
||||
unsigned int chunkDataSize(unsigned int i) { return RIFF::File::chunkDataSize(i); };
|
||||
ByteVector chunkName(unsigned int i) { return RIFF::File::chunkName(i); };
|
||||
@@ -78,7 +78,7 @@ public:
|
||||
{
|
||||
PublicRIFF f(filename.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x1728 + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x1728 + 8), f.chunkOffset(2));
|
||||
|
||||
f.setChunkData("TEST", "foo");
|
||||
}
|
||||
@@ -87,7 +87,7 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("foo"), f.chunkData(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(3), f.chunkDataSize(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x1728 + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x1728 + 8), f.chunkOffset(2));
|
||||
|
||||
f.setChunkData("SSND", "abcd");
|
||||
|
||||
@@ -120,18 +120,18 @@ public:
|
||||
|
||||
{
|
||||
PublicRIFF f(filename.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0xff0 + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0xff0 + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
|
||||
CPPUNIT_ASSERT_EQUAL(long(4400), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4400), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4399 - 8), f.riffSize());
|
||||
f.setChunkData("TEST", "abcd");
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4), f.chunkDataSize(3));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(3));
|
||||
@@ -139,15 +139,15 @@ public:
|
||||
}
|
||||
{
|
||||
PublicRIFF f(filename.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4), f.chunkDataSize(3));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(3));
|
||||
CPPUNIT_ASSERT_EQUAL(long(4412), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4412), f.length());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -158,18 +158,18 @@ public:
|
||||
|
||||
{
|
||||
PublicRIFF f(filename.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0xff0 + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0xff0 + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(2));
|
||||
CPPUNIT_ASSERT_EQUAL(long(4399), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4399), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4399 - 8), f.riffSize());
|
||||
f.setChunkData("TEST", "abcd");
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4), f.chunkDataSize(3));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(3));
|
||||
@@ -177,15 +177,15 @@ public:
|
||||
}
|
||||
{
|
||||
PublicRIFF f(filename.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4), f.chunkDataSize(3));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(3));
|
||||
CPPUNIT_ASSERT_EQUAL(long(4412), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4412), f.length());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -196,18 +196,18 @@ public:
|
||||
|
||||
{
|
||||
PublicRIFF f(filename.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0xff0 + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0xff0 + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0), f.chunkPadding(2));
|
||||
CPPUNIT_ASSERT_EQUAL(long(4399), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4399), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4399 - 8), f.riffSize());
|
||||
f.setChunkData("TEST", "abc");
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(3), f.chunkDataSize(3));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(3));
|
||||
@@ -215,15 +215,15 @@ public:
|
||||
}
|
||||
{
|
||||
PublicRIFF f(filename.c_str());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4088), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(311), f.chunkDataSize(2));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4408), f.chunkOffset(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(3), f.chunkDataSize(3));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(3));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(1), f.chunkPadding(3));
|
||||
CPPUNIT_ASSERT_EQUAL(long(4412), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(4412), f.length());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -235,21 +235,21 @@ public:
|
||||
PublicRIFF f(filename.c_str());
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(5928U, f.riffSize());
|
||||
CPPUNIT_ASSERT_EQUAL(5936L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(5936), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f.chunkName(0));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x000C + 8), f.chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x000C + 8), f.chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("SSND"), f.chunkName(1));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x0026 + 8), f.chunkOffset(1));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0026 + 8), f.chunkOffset(1));
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.chunkName(2));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x1728 + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x1728 + 8), f.chunkOffset(2));
|
||||
|
||||
const ByteVector data(0x400, ' ');
|
||||
f.setChunkData("SSND", data);
|
||||
CPPUNIT_ASSERT_EQUAL(1070U, f.riffSize());
|
||||
CPPUNIT_ASSERT_EQUAL(1078L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x000C + 8), f.chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x0026 + 8), f.chunkOffset(1));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x042E + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(1078), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x000C + 8), f.chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0026 + 8), f.chunkOffset(1));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x042E + 8), f.chunkOffset(2));
|
||||
|
||||
f.seek(f.chunkOffset(0) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f.readBlock(4));
|
||||
@@ -260,10 +260,10 @@ public:
|
||||
|
||||
f.setChunkData(0, data);
|
||||
CPPUNIT_ASSERT_EQUAL(2076U, f.riffSize());
|
||||
CPPUNIT_ASSERT_EQUAL(2084L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x000C + 8), f.chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x0414 + 8), f.chunkOffset(1));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x081C + 8), f.chunkOffset(2));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(2084), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x000C + 8), f.chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0414 + 8), f.chunkOffset(1));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x081C + 8), f.chunkOffset(2));
|
||||
|
||||
f.seek(f.chunkOffset(0) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f.readBlock(4));
|
||||
@@ -274,9 +274,9 @@ public:
|
||||
|
||||
f.removeChunk("SSND");
|
||||
CPPUNIT_ASSERT_EQUAL(1044U, f.riffSize());
|
||||
CPPUNIT_ASSERT_EQUAL(1052L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x000C + 8), f.chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x0414 + 8), f.chunkOffset(1));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(1052), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x000C + 8), f.chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x0414 + 8), f.chunkOffset(1));
|
||||
|
||||
f.seek(f.chunkOffset(0) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("COMM"), f.readBlock(4));
|
||||
@@ -285,8 +285,8 @@ public:
|
||||
|
||||
f.removeChunk(0);
|
||||
CPPUNIT_ASSERT_EQUAL(12U, f.riffSize());
|
||||
CPPUNIT_ASSERT_EQUAL(20L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL((unsigned int)(0x000C + 8), f.chunkOffset(0));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(20), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(0x000C + 8), f.chunkOffset(0));
|
||||
|
||||
f.seek(f.chunkOffset(0) - 8);
|
||||
CPPUNIT_ASSERT_EQUAL(ByteVector("TEST"), f.readBlock(4));
|
||||
@@ -295,4 +295,3 @@ public:
|
||||
};
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(TestRIFF);
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ public:
|
||||
{
|
||||
Ogg::Speex::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(156330L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(156330), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(23, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(80U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(131116U, f.packet(1).size());
|
||||
@@ -84,7 +84,7 @@ public:
|
||||
{
|
||||
Ogg::Speex::File f(newname.c_str());
|
||||
CPPUNIT_ASSERT(f.isValid());
|
||||
CPPUNIT_ASSERT_EQUAL(24317L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(24317), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(7, f.lastPageHeader()->pageSequenceNumber());
|
||||
CPPUNIT_ASSERT_EQUAL(80U, f.packet(0).size());
|
||||
CPPUNIT_ASSERT_EQUAL(49U, f.packet(1).size());
|
||||
|
||||
@@ -268,7 +268,7 @@ public:
|
||||
ScopedFileCopy copy("duplicate_tags", ".wav");
|
||||
|
||||
RIFF::WAV::File f(copy.fileName().c_str());
|
||||
CPPUNIT_ASSERT_EQUAL(17052L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(17052), f.length());
|
||||
|
||||
// duplicate_tags.wav has duplicate ID3v2/INFO tags.
|
||||
// title() returns "Title2" if can't skip the second tag.
|
||||
@@ -280,8 +280,8 @@ public:
|
||||
CPPUNIT_ASSERT_EQUAL(String("Title1"), f.InfoTag()->title());
|
||||
|
||||
f.save();
|
||||
CPPUNIT_ASSERT_EQUAL(15898L, f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(-1L, f.find("Title2"));
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(15898), f.length());
|
||||
CPPUNIT_ASSERT_EQUAL(static_cast<offset_t>(-1), f.find("Title2"));
|
||||
}
|
||||
|
||||
void testFuzzedFile1()
|
||||
|
||||
Reference in New Issue
Block a user