On Thu, Jan 26, 2012 at 08:09:13PM +0100, Peter J. Philipp wrote:

> On Thu, Jan 26, 2012 at 07:22:37PM +0100, Otto Moerbeek wrote:
> > > cc -Wall -g  -I/usr/local/include/db4   -c reply.c
> > > reply.c: In function 'create_anyreply':
> > > reply.c:2975: warning: array size (2) smaller than bound length (4)
> > > reply.c:2975: warning: array size (2) smaller than bound length (4)
> > > cc -Wall -g  -I/usr/local/include/db4   -c additional.c
> 
> <some cut>
> 
> 
> > 
> > 2553                struct answer {
> > 2554                        u_int16_t type;         /* 0 */
> > 2555                        u_int16_t class;        /* 2 */
> > 2556                        u_int32_t ttl;          /* 4 */
> > 2557                        u_int16_t rdlength;      /* 8 */
> > 2558                        char rdata[0];          /* 10 */
> > 2559                } __packed;
> > 
> > Since rdate is an array, there's at least a redundant &.
> > 
> > Zero sized arrays are actually not legal and a gnu extension.  With
> > ANDSI C, use [1] but note it changes the size of the struct), and with
> > C99 use []. 
> > 
> >     -Otto
> 
> When I changed it to "char rdata[4];" on line 2558 like you pointed me to
> the message disappeared.  Now correct me if I'm wrong, __packed or 
> __attribute__((packed)) which I throw out due to some code example eons ago,
> should have packed the struct below a 2 byte boundary or something.  Is this
> functionality gone now?  Because when I do rdata[4], the size of the struct
> should be 14 bytes which lies on a 2 bytes boundary.  Thankfully my code is
> forgiving on an rdata[4].  At least at first sight.
> 
> Thank you for solving my problem!  (Thanks to Christiano too!)
> 
> -peter

This of course depends on the exact alignment rules of the
architecture you're compiling on. ttl has an offset of 4 bytes, so
your "even" rule might not be enough on strict alignment archs, since
padding is being added to the struct. 

Especially if the struct is used to decode network data, beware.

There's is a reason we tell developers to test on sparc64, this arch
is very good at pinpointing alignment problems. 

        -Otto

Reply via email to