diff --git a/src/tests/add-ons/translators/TranslatorTestAddOn.cpp b/src/tests/add-ons/translators/TranslatorTestAddOn.cpp index 3298fdcd93..8be3879f90 100644 --- a/src/tests/add-ons/translators/TranslatorTestAddOn.cpp +++ b/src/tests/add-ons/translators/TranslatorTestAddOn.cpp @@ -32,34 +32,36 @@ bool CompareStreams(BPositionIO &a, BPositionIO &b) { off_t alen = 0, blen = 0; - uint8 *abuf = NULL, *bbuf = NULL; + const uint32 kbuflen = 2048; + uint8 abuf[kbuflen], bbuf[kbuflen]; a.Seek(0, SEEK_END); alen = a.Position(); b.Seek(0, SEEK_END); - blen = b.Position(); - + blen = b.Position(); if (alen != blen) return false; - - bool bresult = false; - abuf = new uint8[alen]; - bbuf = new uint8[blen]; - if (a.ReadAt(0, abuf, alen) == alen) { - if (b.ReadAt(0, bbuf, blen) == blen) { - if (memcmp(abuf, bbuf, alen) == 0) - bresult = true; - else - bresult = false; - } - } - delete[] abuf; - abuf = NULL; - delete[] bbuf; - bbuf = NULL; + if (a.Seek(0, SEEK_SET) != 0) + return false; + if (b.Seek(0, SEEK_SET) != 0) + return false; + + ssize_t read = 0; + while (alen > 0) { + read = a.Read(abuf, kbuflen); + if (read < 0) + return false; + if (b.Read(bbuf, read) != read) + return false; + + if (memcmp(abuf, bbuf, read) != 0) + return false; + + alen -= read; + } - return bresult; + return true; } // Check each member of translator_info to see that it matches