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