Marking select(2) as restrict

Stefan Blachmann sblachmann at gmail.com
Wed Feb 21 01:52:37 UTC 2018


As the last C standard I know is ANSI, I was curious and read what
restrict does (https://en.wikipedia.org/wiki/Restrict).

To understand more about select() I read in the Linux tutorial
(http://man7.org/linux/man-pages/man2/select_tut.2.html) .
The section "Select Law" looks like that things could break easy.

Personally (in particular because I don't know the matter) I would be
afraid that making select pointers restrict could cause hard-to debug
misbehavior of a few programs that are already working borderline
(linux ports etc).

But as said, this is my unqualified guess.
And, few, almost no documents on select show it as restrict.

Always following Posix isn't necessarily good, as many don't care about it.
For example, with 11.0 the default Posix conform SHM setting was
changed to non-Posix-compliant, because posix conformity caused just
too many people troubles.
And, maybe the gain would be little anyway?

Just my worthless 2 cents.
Have a good day @hackers :)
Stefan


On 2/21/18, Eitan Adler <lists at eitanadler.com> wrote:
> I filed a request for a slightly modified version of this patch to be
> exp-run. I'm planning on committing unless there is significant
> fallout or objections on this list.
>
> https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=225981
>
> On 15 February 2018 at 00:10, Eitan Adler <lists at eitanadler.com> wrote:
>> Hi all,
>>
>> POSIX requires that the fd_set arguments in select(2) be marked as
>> restrict. This patch attempts to implement that.
>>
>> (a) Am I missing anything?
>> (b) Anything in particular to watch out for?
>> (c) Assuming an exp-run passes any reason not to commit?
>>
>>
>> Index: lib/libc/sys/select.2
>> ===================================================================
>> --- lib/libc/sys/select.2 (revision 329296)
>> +++ lib/libc/sys/select.2 (working copy)
>> @@ -39,7 +39,7 @@
>>  .Sh SYNOPSIS
>>  .In sys/select.h
>>  .Ft int
>> -.Fn select "int nfds" "fd_set *readfds" "fd_set *writefds" "fd_set
>> *exceptfds" "struct timeval *timeout"
>> +.Fn select "int nfds" "fd_set * restrict readfds" "fd_set * restrict
>> writefds" "fd_set * restrict exceptfds" "struct timeval *timeout"
>>  .Fn FD_SET fd &fdset
>>  .Fn FD_CLR fd &fdset
>>  .Fn FD_ISSET fd &fdset
>> Index: lib/libc/sys/select.c
>> ===================================================================
>> --- lib/libc/sys/select.c (revision 329296)
>> +++ lib/libc/sys/select.c (working copy)
>> @@ -41,7 +41,7 @@ __weak_reference(__sys_select, __select);
>>
>>  #pragma weak select
>>  int
>> -select(int n, fd_set *rs, fd_set *ws, fd_set *es, struct timeval *t)
>> +select(int n, fd_set * restrict rs, fd_set * restrict ws, fd_set *
>> restrict es, struct timeval *t)
>>  {
>>
>>   return (((int (*)(int, fd_set *, fd_set *, fd_set *, struct timeval *))
>> Index: sys/sys/select.h
>> ===================================================================
>> --- sys/sys/select.h (revision 329296)
>> +++ sys/sys/select.h (working copy)
>> @@ -101,8 +101,7 @@ int pselect(int, fd_set *__restrict, fd_set *__res
>>   const struct timespec *__restrict, const sigset_t *__restrict);
>>  #ifndef _SELECT_DECLARED
>>  #define _SELECT_DECLARED
>> -/* XXX missing restrict type-qualifier */
>> -int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
>> +int select(int, fd_set *__restrict, fd_set *__restrict, fd_set
>> *__restrict, struct timeval *);
>>  #endif
>>  __END_DECLS
>>  #endif /* !_KERNEL */
>>
>>
>> --
>> Eitan Adler
>
>
>
> --
> Eitan Adler
> _______________________________________________
> freebsd-hackers at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe at freebsd.org"
>


More information about the freebsd-hackers mailing list