php-imlib
Michal Moskal
malekith w pld-linux.org
Śro, 26 Lut 2003, 15:26:25 CET
On Wed, Feb 26, 2003 at 11:31:50AM +0100, Jakub Bogusz wrote:
> On Wed, Feb 26, 2003 at 11:12:59AM +0100, Michal Moskal wrote:
> > On Tue, Feb 25, 2003 at 11:25:34PM +0100, Piotr Pawłow wrote:
> > > On Tuesday 25 of February 2003 17:49, Artur Frysiak wrote:
> > > > O ile rozumiem fragment z dynamic_filters.c (realokowanie
> > > > nie-zaalokowanego, zwalnianie nie-zaalokowanego), to nie wiem po co
> > > > ta magia w loader_tga.c
> > >
> > > Słuszna uwaga. Otóż gcc przy optymalizacji -O2 dodaje mi na koniec
> > > struktury tga_footer padding bytes, w wyniku czego fseek(fp, 0L -
> > > sizeof(tga_footer), SEEK_END) nie trafia we właściwe miejsce pliku, i
> > > loader nie działa. Zamieniłem więc sizeof() na zdefiniowaną "na
> > > sztywno" wartość - nie wiem czy jest to akurat najlepsze rozwiązanie,
> > > ale przynajmniej działa :)
> >
> > To do definicji tga_footer trzeba dodać __attribute__((packed)).
>
> A toto nie będzie miało problemów z różnymi rozmiarami typów
> i endianess (to drugie zależy od sposobu odczytu rekordu, nie seek)?
I tak i nie:
typedef struct {
unsigned int extensionAreaOffset;
unsigned int developerDirectoryOffset;
char signature[16];
char dot;
char null;
} tga_footer;
ale extensionAreaOffset i developerDirectoryOffset nie są nigdzie używane.
Czyli endianess mu nie przeszkadza, ale może mu przeszkadzać szerszy
int. Ale dla wszystkich architektur PLD jest OK.
Zamiast robić tego define wystarczy:
} __attribute__((packed)) tga_footer;
--
: Michal Moskal ::::: malekith/at/pld-linux.org : GCS {C,UL}++++$ a? !tv
: PLD Linux ::::::: Wroclaw University, CS Dept : {E-,w}-- {b++,e}>+++ h
Więcej informacji o liście dyskusyjnej pld-devel-pl