Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 15 Feb 2018 00:10:19 -0800
From:      Eitan Adler <lists@eitanadler.com>
To:        FreeBSD Hackers <freebsd-hackers@freebsd.org>, Warner Losh <imp@bsdimp.com>
Subject:   Marking select(2) as restrict
Message-ID:  <CAF6rxg=h_oMiUu7P=GAOQf_OySQM2w31hg6Kas%2B3jeEM3qq_Cg@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAF6rxg=h_oMiUu7P=GAOQf_OySQM2w31hg6Kas%2B3jeEM3qq_Cg>