svn commit: r212886 - head/sbin/growfs

Bruce Evans brde at optusnet.com.au
Tue Sep 21 11:50:03 UTC 2010


On Tue, 21 Sep 2010, Brian Somers wrote:

> On Mon, 20 Sep 2010 16:55:57 +1000 (EST) Bruce Evans <brde at 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


More information about the svn-src-head mailing list