Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Dec 2013 08:49:33 -0800
From:      Adrian Chadd <adrian@freebsd.org>
To:        Warner Losh <imp@bsdimp.com>
Cc:        Bruce Evans <bde@freebsd.org>, "freebsd-arch@freebsd.org" <freebsd-arch@freebsd.org>
Subject:   Re: Using sys/types.h types in sys/socket.h
Message-ID:  <CAJ-Vmokb-gcO%2BrEOn-uc42%2BPHzMMQsqBe0NcVtuNRKk7vuM5Qw@mail.gmail.com>
In-Reply-To: <9C1291B5-215B-440E-B8B0-6308840F755C@bsdimp.com>
References:  <CAJ-Vmo=MWPQWfP9duWPPwaKee5Zp9Gemj3GKqE8=bxkjn_1YYA@mail.gmail.com> <9C1291B5-215B-440E-B8B0-6308840F755C@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On 17 December 2013 07:42, Warner Losh <imp@bsdimp.com> wrote:
> The tl;dr version: use sys/_types.h and use the usual conventions to avoid namespace pollution.  I read Bruce's reply, and I think I'm saying the same things he is...
>
> Warner

Right. I was hoping for something dirty but not namespace pollution-y.

> On Dec 17, 2013, at 1:23 AM, Adrian Chadd wrote:
>
>> Hi,
>>
>> I have a patch to implement some new sendfile functionality, but this
>> involves adding stuff to sys/socket.h:
>>
>> Index: sys/sys/socket.h
>> ===================================================================
>> --- sys/sys/socket.h (revision 258883)
>> +++ sys/sys/socket.h (working copy)
>> @@ -577,11 +577,27 @@
>> };
>>
>> /*
>> + * sendfile(2) kqueue information
>> + */
>> +struct sf_hdtr_kq {
>> + int kq_fd; /* kq fd to post completion events on */
>> + uint32_t kq_flags; /* extra flags to pass in */
>> + void *kq_udata; /* user data pointer */
>> + uintptr_t kq_ident; /* ident (from userland?) */
>> +};
>
> This is a terrible interface. Or I'd say that the ordering of the elements in this structure is suboptimal. Having the uint32_t in the middle like that causes badness. Guess not much can be done about that given that fd must be an int, eh?

Yeah, the FD is an int. I can easily put that at the end and order it
more appropriately.

> To avoid namespace pollution, you'll need to include sys/_types.h use __uint32_t and __uintptr_t respectively. You'd also need
> #if __BSD_VISIBLE
> #ifndef _UINT32_T_DECLARED
> typedef __uint32_t uint32_t;
> #define _UINT32_T_DECLARED
> #endif
> and similar for __uintptr_t. thankfully, sys/_stdint.h already does this dance to avoid namespace pollution, so you just need a few lines at the top of socket.h to do this righ.

Ok.

I really dislike how the sendfile stuff is in sys/socket.h. It really
should be in its own header file so it doesn't pollute sys/socket.h.

I wish I had found this sendfile dirtiness all out before 10.0-RELEASE
so we could've just make a clean break. I'll evaluate possibly doing
it in -HEAD at some point soon.



-a



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmokb-gcO%2BrEOn-uc42%2BPHzMMQsqBe0NcVtuNRKk7vuM5Qw>