From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1792) id 70889395C408; Sun, 14 Jun 2020 18:27:12 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 70889395C408 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Samuel Thibault To: glibc-cvs@sourceware.org Subject: [glibc] hurd: Fix __writev_nocancel_nostatus X-Act-Checkin: glibc X-Git-Author: Samuel Thibault X-Git-Refname: refs/heads/master X-Git-Oldrev: 0c46891442c0b4ca593691f62ad1213e022ff00b X-Git-Newrev: c1dcc541131bb090ddc792139545ffcd2511a1dc Message-Id: <20200614182712.70889395C408@sourceware.org> Date: Sun, 14 Jun 2020 18:27:12 +0000 (GMT) X-BeenThere: glibc-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Glibc-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Jun 2020 18:27:12 -0000 https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=c1dcc541131bb090ddc792139545ffcd2511a1dc commit c1dcc541131bb090ddc792139545ffcd2511a1dc Author: Samuel Thibault Date: Sun Jun 14 17:44:57 2020 +0000 hurd: Fix __writev_nocancel_nostatus * sysdeps/mach/hurd/Makefile [subdir=misc] (sysdep_routines): Add writev_nocancel writev_nocancel_nostatus. * sysdeps/mach/hurd/not-cancel.h (__writev_nocancel_nostatus): Replace macro with function declaration (with hidden prototype in libc). (__writev_nocancel): New function declaration (with hidden prototype in libc). * sysdeps/mach/hurd/writev_nocancel_nostatus.c: New file. * sysdeps/posix/writev_nocancel.c: New file, includes writev.c to make a nocancel variant that calls __write_nocancel. * sysdeps/posix/writev.c (writev): Do not define alias if __writev is renamed. Diff: --- sysdeps/mach/hurd/Makefile | 4 ++++ sysdeps/mach/hurd/not-cancel.h | 10 ++++++++-- sysdeps/mach/hurd/writev_nocancel_nostatus.c | 28 ++++++++++++++++++++++++++++ sysdeps/posix/writev.c | 2 ++ sysdeps/posix/writev_nocancel.c | 4 ++++ 5 files changed, 46 insertions(+), 2 deletions(-) diff --git a/sysdeps/mach/hurd/Makefile b/sysdeps/mach/hurd/Makefile index 8b74d3f002..daa69c0dae 100644 --- a/sysdeps/mach/hurd/Makefile +++ b/sysdeps/mach/hurd/Makefile @@ -200,6 +200,10 @@ sysdep_routines += f_setlk close_nocancel_nostatus read_nocancel \ pread64_nocancel write_nocancel pwrite64_nocancel endif +ifeq (misc, $(subdir)) +sysdep_routines += writev_nocancel writev_nocancel_nostatus +endif + ifeq ($(subdir),sunrpc) sysdep_headers += nfs/nfs.h endif diff --git a/sysdeps/mach/hurd/not-cancel.h b/sysdeps/mach/hurd/not-cancel.h index d2c3e20019..202dca8792 100644 --- a/sysdeps/mach/hurd/not-cancel.h +++ b/sysdeps/mach/hurd/not-cancel.h @@ -54,8 +54,12 @@ __typeof (__write) __write_nocancel; /* Non cancellable pwrite syscall (LFS version). */ __typeof (__pwrite64) __pwrite64_nocancel; -#define __writev_nocancel_nostatus(fd, iov, n) \ - (void) __writev (fd, iov, n) +/* Non cancellable writev syscall. */ +__typeof (__writev) __writev_nocancel; + +/* Non cancellable writev syscall with no status. */ +void __writev_nocancel_nostatus (int fd, const struct iovec *vector, int count); + # define __waitpid_nocancel(pid, stat_loc, options) \ __waitpid (pid, stat_loc, options) #define __fcntl64_nocancel(fd, cmd, ...) \ @@ -66,6 +70,8 @@ hidden_proto (__read_nocancel) hidden_proto (__pread64_nocancel) hidden_proto (__write_nocancel) hidden_proto (__pwrite64_nocancel) +hidden_proto (__writev_nocancel) +hidden_proto (__writev_nocancel_nostatus) hidden_proto (__close_nocancel_nostatus) #endif diff --git a/sysdeps/mach/hurd/writev_nocancel_nostatus.c b/sysdeps/mach/hurd/writev_nocancel_nostatus.c new file mode 100644 index 0000000000..6db24d1b53 --- /dev/null +++ b/sysdeps/mach/hurd/writev_nocancel_nostatus.c @@ -0,0 +1,28 @@ +/* Copyright (C) 1991-2020 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +#include +#include + +void +__writev_nocancel_nostatus (int fd, const struct iovec *vector, int count) +{ + int save = errno; + __writev_nocancel (fd, vector, count); + __set_errno (save); +} +libc_hidden_weak (__writev_nocancel_nostatus) diff --git a/sysdeps/posix/writev.c b/sysdeps/posix/writev.c index a9942e4b99..1a45779a9a 100644 --- a/sysdeps/posix/writev.c +++ b/sysdeps/posix/writev.c @@ -89,4 +89,6 @@ __writev (int fd, const struct iovec *vector, int count) return bytes_written; } libc_hidden_def (__writev) +#ifndef __writev weak_alias (__writev, writev) +#endif diff --git a/sysdeps/posix/writev_nocancel.c b/sysdeps/posix/writev_nocancel.c new file mode 100644 index 0000000000..5379e9e491 --- /dev/null +++ b/sysdeps/posix/writev_nocancel.c @@ -0,0 +1,4 @@ +#include +#define __writev __writev_nocancel +#define __write __write_nocancel +#include