svn commit: r243215 - user/andre/tcp_workqueue/sys/sys
Navdeep Parhar
np at FreeBSD.org
Mon Nov 19 18:16:25 UTC 2012
On 11/19/12 10:13, Andre Oppermann wrote:
> On 19.11.2012 18:01, mdf at FreeBSD.org wrote:
>> On Mon, Nov 19, 2012 at 5:33 AM, Andre Oppermann <andre at freebsd.org>
>> wrote:
>>> On 19.11.2012 12:45, Gleb Smirnoff wrote:
>>>>
>>>> On Sun, Nov 18, 2012 at 12:17:07PM +0000, Andre Oppermann wrote:
>>>> A> Author: andre
>>>> A> Date: Sun Nov 18 12:17:07 2012
>>>> A> New Revision: 243215
>>>> A> URL: http://svnweb.freebsd.org/changeset/base/243215
>>>> A>
>>>> A> Log:
>>>> A> Add mtodo(m, o, t) macro taking an additional offset into
>>>> A> the mbuf data section before the casting to type 't'.
>>>>
>>>> IMHO, argument order of (m, t, o) is more intuitive, since
>>>> matches order of mtod().
>>>
>>>
>>> Yes, but that looks rather horrible and counter-intuitive:
>>>
>>> th = mtodo(m, struct tcphdr *, 20);
>>>
>>> vs.
>>>
>>> th = mtodo(m, 20, struct tcphdr *);
>>>
>>> Reads m->m_data at offset 20 is struct tcphdr.
>>>
>>> Naming it mtood() wasn't convincing either. ;-)
>>
>> Why a cast at all? Perpetuating the mistake of mtod()'s casting isn't
>> necessary. mtod() can't be fixed for source reasons, but the new one
>> doesn't need to cast. Since C automatically casts from void * to any
>> other pointer, the code gets shorter (usually) too:
>>
>> th = mtodo(m, 20);
>
> m->m_data is caddr_t which is "char *"
No matter what it is you can always cast it to void * before returning,
instead of having the caller supply the type.
Navdeep
>
>> Not that I care much, it's just if we're having a bikeshed I have my
>> favorite colors. :-)
>
More information about the svn-src-user
mailing list