From patchwork Thu Sep 7 22:42:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Albert ARIBAUD (3ADEV)" X-Patchwork-Id: 811254 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=sourceware.org (client-ip=209.132.180.131; helo=sourceware.org; envelope-from=libc-alpha-return-84367-incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.b="F0I5t7gz"; dkim-atps=neutral Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3xpG0v1WJWz9rxl for ; Fri, 8 Sep 2017 08:51:59 +1000 (AEST) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; q=dns; s=default; b=OLNS4j3OBMfpcY4u/F9ZbIpqvDdhJkE BXG3Ed+tyVdGVm4/VOHiLHMjV1pR6tNqsvSJ6jFP7i/7P/zBshFamMRZ49WAoNLY XYSV21AfwNqTzqfA23DoOTDkdbDZasRWmM/F8z4yTLXQWGxkg3dj2W2KbPKUmFzp CJXbyRMmY3Bk= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:cc:subject:date:message-id:in-reply-to :references; s=default; bh=SL735i7IB5FFIAdVF+yLkDiBdvI=; b=F0I5t 7gzvXrVp/YbU2ZAAp9EkDRNR8mANkYXvo8hv1t7PY/pzAZzdQT56/8TLa4Z7VvHq i09arVEexR9asROq5Kn8xmEy2c1Mo2DJRDnDH2OYA8LxlUp+Jnax5wkHmTUaL/ch YCudQnWYitP1J9kBuZDqvKaLWcqK0uQw1mLvM0= Received: (qmail 7759 invoked by alias); 7 Sep 2017 22:46:07 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 5254 invoked by uid 89); 7 Sep 2017 22:46:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_LAZY_DOMAIN_SECURITY, RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.2 spammy= X-HELO: smtp6-g21.free.fr From: "Albert ARIBAUD (3ADEV)" To: libc-alpha@sourceware.org Cc: "Albert ARIBAUD (3ADEV)" Subject: [RFC PATCH 49/52] Y2038: add function pselect Date: Fri, 8 Sep 2017 00:42:16 +0200 Message-Id: <20170907224219.12483-50-albert.aribaud@3adev.fr> In-Reply-To: <20170907224219.12483-49-albert.aribaud@3adev.fr> References: <20170907224219.12483-1-albert.aribaud@3adev.fr> <20170907224219.12483-2-albert.aribaud@3adev.fr> <20170907224219.12483-3-albert.aribaud@3adev.fr> <20170907224219.12483-4-albert.aribaud@3adev.fr> <20170907224219.12483-5-albert.aribaud@3adev.fr> <20170907224219.12483-6-albert.aribaud@3adev.fr> <20170907224219.12483-7-albert.aribaud@3adev.fr> <20170907224219.12483-8-albert.aribaud@3adev.fr> <20170907224219.12483-9-albert.aribaud@3adev.fr> <20170907224219.12483-10-albert.aribaud@3adev.fr> <20170907224219.12483-11-albert.aribaud@3adev.fr> <20170907224219.12483-12-albert.aribaud@3adev.fr> <20170907224219.12483-13-albert.aribaud@3adev.fr> <20170907224219.12483-14-albert.aribaud@3adev.fr> <20170907224219.12483-15-albert.aribaud@3adev.fr> <20170907224219.12483-16-albert.aribaud@3adev.fr> <20170907224219.12483-17-albert.aribaud@3adev.fr> <20170907224219.12483-18-albert.aribaud@3adev.fr> <20170907224219.12483-19-albert.aribaud@3adev.fr> <20170907224219.12483-20-albert.aribaud@3adev.fr> <20170907224219.12483-21-albert.aribaud@3adev.fr> <20170907224219.12483-22-albert.aribaud@3adev.fr> <20170907224219.12483-23-albert.aribaud@3adev.fr> <20170907224219.12483-24-albert.aribaud@3adev.fr> <20170907224219.12483-25-albert.aribaud@3adev.fr> <20170907224219.12483-26-albert.aribaud@3adev.fr> <20170907224219.12483-27-albert.aribaud@3adev.fr> <20170907224219.12483-28-albert.aribaud@3adev.fr> <20170907224219.12483-29-albert.aribaud@3adev.fr> <20170907224219.12483-30-albert.aribaud@3adev.fr> <20170907224219.12483-31-albert.aribaud@3adev.fr> <20170907224219.12483-32-albert.aribaud@3adev.fr> <20170907224219.12483-33-albert.aribaud@3adev.fr> <20170907224219.12483-34-albert.aribaud@3adev.fr> <20170907224219.12483-35-albert.aribaud@3adev.fr> <20170907224219.12483-36-albert.aribaud@3adev.fr> <20170907224219.12483-37-albert.aribaud@3adev.fr> <20170907224219.12483-38-albert.aribaud@3adev.fr> <20170907224219.12483-39-albert.aribaud@3adev.fr> <20170907224219.12483-40-albert.aribaud@3adev.fr> <20170907224219.12483-41-albert.aribaud@3adev.fr> <20170907224219.12483-42-albert.aribaud@3adev.fr> <20170907224219.12483-43-albert.aribaud@3adev.fr> <20170907224219.12483-44-albert.aribaud@3adev.fr> <20170907224219.12483-45-albert.aribaud@3adev.fr> <20170907224219.12483-46-albert.aribaud@3adev.fr> <20170907224219.12483-47-albert.aribaud@3adev.fr> <20170907224219.12483-48-albert.aribaud@3adev.fr> <20170907224219.12483-49-albert.aribaud@3adev.fr> Signed-off-by: Albert ARIBAUD (3ADEV) --- include/sys/select.h | 10 +++++++ sysdeps/unix/sysv/linux/pselect.c | 61 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/include/sys/select.h b/include/sys/select.h index 07bb49b994..3eb76faf9d 100644 --- a/include/sys/select.h +++ b/include/sys/select.h @@ -3,6 +3,9 @@ #ifndef _ISOMAC /* Now define the internal interfaces. */ + +#include + extern int __pselect (int __nfds, fd_set *__readfds, fd_set *__writefds, fd_set *__exceptfds, const struct timespec *__timeout, @@ -14,5 +17,12 @@ extern int __select (int __nfds, fd_set *__restrict __readfds, struct timeval *__restrict __timeout); libc_hidden_proto (__select) +/* 64-bit time version */ + +extern int __pselect_t64 (int __nfds, fd_set *__readfds, + fd_set *__writefds, fd_set *__exceptfds, + const struct __timespec64 *__timeout, + const __sigset_t *__sigmask); + #endif #endif diff --git a/sysdeps/unix/sysv/linux/pselect.c b/sysdeps/unix/sysv/linux/pselect.c index b5e8c7fbcd..ce8db34843 100644 --- a/sysdeps/unix/sysv/linux/pselect.c +++ b/sysdeps/unix/sysv/linux/pselect.c @@ -79,6 +79,67 @@ __pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, } weak_alias (__pselect, pselect) +/* 64-bit time version */ + +extern int __y2038_linux_support; + +int +__pselect_t64 (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + const struct __timespec64 *timeout, const sigset_t *sigmask) +{ + struct timespec tval32, *timeout32 = NULL; + + if (__y2038_linux_support) + { + /* TODO: implement using Linux kernel system call */ + } + + /* The Linux kernel can in some situations update the timeout value. + We do not want that so use a local variable. */ + if (timeout != NULL) + { + if (timeout->tv_sec > INT_MAX) + { + errno = EOVERFLOW; + return -1; + } + tval32.tv_sec = timeout->tv_sec; + tval32.tv_nsec = timeout->tv_nsec; + timeout32 = &tval32; + } + + /* Note: the system call expects 7 values but on most architectures + we can only pass in 6 directly. If there is an architecture with + support for more parameters a new version of this file needs to + be created. */ + struct + { + __syscall_ulong_t ss; + __syscall_ulong_t ss_len; + } data; + + data.ss = (__syscall_ulong_t) (uintptr_t) sigmask; + data.ss_len = _NSIG / 8; + + int result; + +#ifndef CALL_PSELECT6 +# define CALL_PSELECT6(nfds, readfds, writefds, exceptfds, timeout, data) \ + SYSCALL_CANCEL (pselect6, nfds, readfds, writefds, exceptfds, timeout32, data) +#endif + + result = CALL_PSELECT6 (nfds, readfds, writefds, exceptfds, timeout32, + &data); + +# ifndef __ASSUME_PSELECT + if (result == -1 && errno == ENOSYS) + result = __generic_pselect (nfds, readfds, writefds, exceptfds, timeout32, + sigmask); +# endif + + return result; +} + # ifndef __ASSUME_PSELECT # define __pselect static __generic_pselect # endif