--- a/e32tools/elf2e32/source/pagedcompress.cpp Wed Jun 16 16:51:40 2010 +0300
+++ b/e32tools/elf2e32/source/pagedcompress.cpp Wed Jun 23 16:56:47 2010 +0800
@@ -270,32 +270,26 @@
}
-void CompressPages(TUint8 * bytes, TInt size, std::ofstream& os)
+void CompressPages(TUint8* bytes, TInt size, std::ofstream& os)
{
// Build a list of compressed pages
- TUint16 numOfPages = (TUint16) (size / PAGE_SIZE);
- if ( size % PAGE_SIZE > 0)
- ++numOfPages;
+ TUint16 numOfPages = (TUint16) ((size + PAGE_SIZE - 1) / PAGE_SIZE);
- CBytePairCompressedImage *comprImage = CBytePairCompressedImage::NewLC(numOfPages, size);
- if( NULL == comprImage)
+ CBytePairCompressedImage* comprImage = CBytePairCompressedImage::NewLC(numOfPages, size);
+ if (!comprImage)
{
//Print(EError," NULL == comprImage\n");
return;
}
- TUint8* iPageStart;
- TUint16 iPageLen;
- TUint16 iPage = 0;
-
- while(iPage * PAGE_SIZE <= size )
+ TUint pageNum;
+ TUint remain = (TUint)size;
+ for (pageNum=0; pageNum<numOfPages; ++pageNum)
{
- iPageStart = &bytes[iPage * PAGE_SIZE];
- iPageLen = (TUint16)( (iPage + 1) * PAGE_SIZE < size ? PAGE_SIZE : size - iPage * PAGE_SIZE);
-
- comprImage->AddPage(iPage, iPageStart, iPageLen);
-
- ++iPage;
+ TUint8* pageStart = bytes + pageNum * PAGE_SIZE;
+ TUint pageLen = remain>PAGE_SIZE ? PAGE_SIZE : remain;
+ comprImage->AddPage((TUint16)pageNum, pageStart, (TUint16)pageLen);
+ remain -= pageLen;
}
// Write out index table and compressed pages
@@ -307,6 +301,7 @@
}
+
int DecompressPages(TUint8 * bytes, std::ifstream& is)
{
TUint decompressedSize = 0;