Marking select(2) as restrict

Eitan Adler lists at eitanadler.com
Wed Feb 21 00:30:31 UTC 2018


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


More information about the freebsd-hackers mailing list