[Libreoffice] [PATCH] produce smaller .res files with the resource compiler
Andras Timar
timar74 at gmail.com
Fri Jul 22 06:15:22 PDT 2011
Hi,
I'm studying the binary .res format and I noticed that every .res file
contains a 2168 bytes long data block. This data block contains the
enumeration of VCL resource types, however, it is never read and seems
to be unnecessary. I thought that it would be a small size win, I
removed this block. 2158 bytes x 71 .res files x 105 languages =
15MB.
I tried to find out why resource compiler writes this block to .res
files but unfortunately I could not understand the code. When I
removed these structures from memory, the resource compiler did not
work. So I had to do the hack which is attached here. I detected the
magic bytes at the beginning of the block and I moved the pointer 2168
bytes further at fwrite().
LibreOffice master builds and runs fine with this patch.
Please review it, I'm not sure if such low level hacks are acceptable. :)
Best regards,
Andras
-------------- next part --------------
From d70605d2cd9dd8040253345f7294eca6787d9b48 Mon Sep 17 00:00:00 2001
From: Andras Timar <atimar at suse.com>
Date: Fri, 22 Jul 2011 11:30:37 +0200
Subject: [PATCH] do not write out unused data block to .res files
---
rsc/source/parser/rscdb.cxx | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/rsc/source/parser/rscdb.cxx b/rsc/source/parser/rscdb.cxx
index 967de81..c711873 100644
--- a/rsc/source/parser/rscdb.cxx
+++ b/rsc/source/parser/rscdb.cxx
@@ -571,7 +571,10 @@ void RscEnumerateObj :: WriteRcFile( RscWriteRc & rMem, FILE * fOut ){
//Position wurde vorher in Tabelle geschrieben
- fwrite( rMem.GetBuffer(), rMem.Size(), 1, fOut );
+ sal_uInt32 nOffset = 0;
+ if ( ( nId == 0xC8 ) && ( nRT == 0x102 ) )
+ nOffset = 2168; // size of the unused data block
+ fwrite( rMem.GetBuffer() + nOffset, rMem.Size() - nOffset, 1, fOut );
};
--
1.7.0.4
More information about the LibreOffice
mailing list