cvs commit: src/include ar.h
Stefan Farfeleder
stefanf at FreeBSD.org
Mon Nov 13 09:43:16 UTC 2006
On Mon, Nov 13, 2006 at 07:30:11PM +1100, Bruce Evans wrote:
> On Mon, 13 Nov 2006, Joseph Koshy wrote:
>
> >jkoshy 2006-11-13 04:28:29 UTC
> >
> > FreeBSD src repository
> >
> > Modified files:
> > include ar.h
> > Log:
> > Attempt to improve application portability by marking `struct ar_hdr'
> > as `packed'.
> >
> > The C standard leaves the alignment of individual members of a C
> > struct upto the implementation, so pedantically speaking portable
> > code cannot assume that the layout of a `struct ar_hdr' in memory
> > will match its layout in a file. Using a __packed attribute
> > declaration forces file and memory layouts for this structure to
> > match.
> >
> > Submitted by: ru
>
> I don't see how this can be more portable. It uses an unportable
> extension, but packing is automatic on all compilers that are known
> to support this extension. On compilers that are not known to support
> this extension (all except gcc >= 2.7 and icc), using __packed gives
> a syntax error and thus changes code that is portable in practice into
> code that doesn't compile. On lints that known not to support this
> extension (FreeBSD lint), linting for portability is broken by not
> giving the syntax error.
>
> In <ar.h>, all struct members are char arrays so there will be no
> padding in practice.
You seem to have missed the discussion on -current. GCC pads "struct foo
{ char c; };" to 4 bytes on ARM. I agree on __packed not being
portable.
Stefan
More information about the cvs-src
mailing list