From: Piotr <pp...@si...> - 2002-11-06 14:38:08
|
On Wednesday 06 November 2002 05:15, Michael Jennings wrote: > > The first patch is self-evident, there is a fix for realloc() of > That was fixed ages ago. Oh, now I see it, 6 months ago!! I am terribly sorry, I had probably=20 looked into wrong directory :(( > > The second patch needs more explanation. I have removed these two > > fields from tga_footer struct because they: > Sorry, this breaks TGA loading on my system. The existing loader > works fine. But here I am puzzled. I use gcc 2.95 to compile this loader. If=20 compiled without optimizations it works fine. When I turn on=20 optimizations here is what happens: gcc adds padding bytes at the end=20 of the tga_footer typedef struct {=20 unsigned int extensionAreaOffset;=20 unsigned int developerDirectoryOffset;=20 char signature[16];=20 char dot;=20 char null;=20 // here padding bytes are added, so when you place another struct=20 after this one ints are nicely aligned } tga_footer;=20 Because size of the struct changes, wrong part of the file is read=20 into tga_footer struct: /* read the footer first */ fseek (fp, 0L - (sizeof (tga_footer)), SEEK_END); if (fread (&footer, sizeof (tga_footer), 1, fp) !=3D 1) sizeof(tga_footer) is bigger than the real footer size in file, so it=20 seeks too far and wrong part of the file is read. I have removed those ints in hope that gcc in that case won't add any=20 padding bytes. It works for me. But now I am really surprised why it=20 doesn't work for you. Does gcc add padding bytes anyway? Are there=20 also some padding issues in the TGA format? Can you send me those=20 images you were testing the loader on? Cheers, --=20 Piotr Paw=B3ow mailto:pp...@si... |