On Tue, 21 Sep 2010, Brian Somers wrote:
On Mon, 20 Sep 2010 16:55:57 +1000 (EST) Bruce Evans <b...@optusnet.com.au>
wrote:
On Mon, 20 Sep 2010, Marcel Moolenaar wrote:
Log:
Unbreak the build on strong-aligned architectures (arm, ia64).
Casting from (char *) to (struct ufs1_dinode *) changes the
alignment requirement of the pointer and GCC does not know that
the pointer is adequately aligned (due to malloc(3)), and warns
about it. Cast to (void *) first to by-pass the check.
A previous version in which the pointer (iobuf) the correct type to
begin with was better. It used to have type void *, but now has type
...
Maybe iobuf ought to go back to being a void * with casting where the
arithmetic happens. If it's changed, newfs/mkfs.c should probably change
too.
Is there some subtle difference that makes the casting ok in newfs/mkfs.c:
dp1 = (struct ufs1_dinode *)(&iobuf[start]);
and not ok in growfs/growfs.c r212885:
dp1 = (struct ufs1_dinode *)iobuf;
or is it just ignored because WARNS is 3 for newfs and is defaulted to 6 for
growfs?
Just because of WARNS.
The `caddr_t iobuf;' in newfs is really old and should be fixed someday. It
is the only caddr_t remaining in newfs. In Lite2, newfs also uses caddr_t
for its now-dead mfs parts, including for its replacements for the malloc()
family which were errors in theory even at the time of Lite2 and which are
now errors in practice.
Bruce
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"