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

Reply via email to