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-all mailing list