Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 2 Nov 1997 16:13:20 -0600 (CST)
From:      Jim Bryant <jbryant@unix.tfs.net>
To:        jwm@CSUA.Berkeley.EDU (John Milford)
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: gcc and bitfields
Message-ID:  <199711022213.QAA00245@argus.tfs.net>
In-Reply-To: <199711021618.IAA02063@soda.CSUA.Berkeley.EDU> from John Milford at "Nov 2, 97 08:18:29 am"

next in thread | previous in thread | raw e-mail | index | archive | help
In reply:
> Christoph Kukulies <kuku@gilberto.physik.RWTH-Aachen.DE>  wrote:
> 
> >
> > During porting a piece of a DOS program to make a driver
> > for FreeBSD of it for a certain device I'm stuck at the
> > point where there is a structure:
> >
> >     struct C_OPEN {
> >          int a;
> >          int b;
> >          unsigned xdt:1;
> >          unsigned reserved:15;
> >     }
> >
> > The sizeof this structure is 10 under DOS (borland C)
> > and evaluates to 12 under cc (gcc) on FreeBSD.

ahem, DOG should show 6 bytes.

> > There are a lot of these definitions and it would be
> > tedious to find a workaround.
> >
> > Does anyone know if I can pack the structure respectively
> > enforce the bitfield to a short int?
> 
> By default gcc pads structures to make make the size a multiple of 4 bytes.
> Try:
> 
>    struct C_OPEN {
>         int a;
> 	int b;
> 	unsigned xdt:1;
> 	unsigned reserved:15;
>    } __attribute__ ((packed));

i didn't know about this...

but it will still not solve his problem...

sizeof(struct C_OPEN) will still == 12.

under MS-DOG, sizeof(int || unsigned) == 2.

which is strange, because his sizing above should actually show 6
under DOG.

since he apparently uses 16 bits in the bitfield, I can assume that to
be a short.

thus:

>    struct C_OPEN {
>       int a;
> 	int b;
> 	unsigned short xdt:1;        /* note addition of short */
> 	unsigned short reserved:15;  /* note addition of short */
>    } __attribute__ ((packed));

should work.

jim
-- 
All opinions expressed are mine, if you    |  "I will not be pushed, stamped,
think otherwise, then go jump into turbid  |  briefed, debriefed, indexed, or
radioactive waters and yell WAHOO !!!      |  numbered!" - #1, "The Prisoner"
------------------------------------------------------------------------------
Inet: jbryant@tfs.net    AX.25: kc5vdj@wv0t.#neks.ks.usa.noam     grid: EM28pw
voice: KC5VDJ - 6 & 2 Meters AM/FM/SSB, 70cm FM.   http://www.tfs.net/~jbryant
------------------------------------------------------------------------------
HF/6M/2M: IC-706-MkII, 2M: HTX-212, 2M: HTX-202, 70cm: HTX-404, Packet: KPC-3+



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199711022213.QAA00245>