Mail Archives: djgpp/1999/03/03/12:43:31
At 11:21 PM 3/1/99 GMT, you wrote:
>struct SXM_Pat_header{
> int pat_size;
> char pack_type;
> short nr_rows;
> short pattern_data_size;
>};
>
>struct SXM_Pat_header{
> char pat_size[4];
> char pack_type;
> char nr_rows[2];
> char pattern_data_size[2];
>};
>
>These are two structures, and They should be the same size at least I
>think they should be. But DJGPP manages to call the first one a size
>of 12, and the second one (the correct size) 9.
>
> Does anyone know why? And if so, how do I fix it?
It's padding the structs. The latter struct is all chars, but the former
has shorts at the end that it aligns to word boundaries.
You end up with:
Offset     Struct 1                     Struct 2
0          int pat_size                 char pat_size[4]
1              |                            |
2              |                            |
3              V                            V
4          char pack_type               char pack_type
5          packing byte                 char nr_rows[2]
6          packing byte                     V
7          packing byte                 char pattern_data_size[2]
8          short nr_rows                ____V____________________
9              V
10         short pattern_data_size
11         ____V__________________
           (length 12)                  (length 9)
To get these structs compatible, pack the first one:
struct SXM_Pat_header {
   int pat_size __attribute__ ((__packed__));
   char pack_type __attribute__ ((__packed__));
   short nr_rows __attribute__ ((__packed__));
   short pattern_data_size __attribute__ ((__packed__));
};
-- 
   .*.  "Clouds are not spheres, mountains are not cones, coastlines are not
-()  <  circles, and bark is not smooth, nor does lightning travel in a
   `*'  straight line."    -------------------------------------------------
        -- B. Mandelbrot  |http://surf.to/pgd.net
_____________________ ____|________     Paul Derbyshire     pderbysh AT usa DOT net
Programmer & Humanist|ICQ: 10423848|
- Raw text -