Re: Triple code duplication
David Faure <[email protected]>
| Newsgroups | gmane.comp.kde.devel.optimize |
|---|---|
| Organization | KDE |
| Message-ID | <[email protected]> |
On Saturday 24 July 2004 11:50, Karl Vogel wrote: > While converting kdelibs to a version that explicitly defines what should be > exported (using KDE_EXPORT), I noticed that a few things are duplicated. > > For example: > > $ objdump -CT /opt/kde/lib/kde3/kbzip2filter.so |grep init_ > 00001ff0 g DF .text 00000052 Base init_kbzip2filter As wanted. > $ objdump -CT /opt/kde/lib/kde3/kio_help.so |grep init_ > 0000d900 g DF .text 00000052 Base init_kbzip2filter > > $ objdump -CT /opt/kde/lib/kde3/kio_ghelp.so |grep init_ > 0000d900 g DF .text 00000052 Base init_kbzip2filter Side effect, due to what you noticed: > kdelibs/kdoctools uses kbzip2filter.cpp and compiles it directly into the > kio_help.so and kio_ghelp.so shared libs. > Since this is exactly the same sourcecode as kioslave/bzip2, we now end up > with this code duplicated 3 times! So? For a little bit of unbzip2 code, it's not worth making a shared library, when every KDE code (other than kio_*help) gets that code dlopened from kbzip2filter.so If you want to fix this, add a #define INCLUDED_BY_KIO_HELP in kio_help.* and #ifndef INCLUDED_BY_KIO_HELP around the init_ function. > I'm also wary as I think this can introduce subtle bugs.. ie if one of those > versions is used and then another shared lib is opened containing a version, > won't this override the present version ?! What if some state is kept in a > global variable that is now overridden by the new version! I don't follow. The code dlopening kio_help isn't the same as the code dlopening kbzip2filter.so, so the above isn't a problem. -- David Faure, [email protected], sponsored by Trolltech to work on KDE, Konqueror (http://www.konqueror.org), and KOffice (http://www.koffice.org).