summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2006-04-27 21:29:55 +0000
committerJakub Jelinek <jakub@redhat.com>2006-04-27 21:29:55 +0000
commit0ad70fc14340d1e3ac2976014766c6eb6d5d3715 (patch)
tree31c5833023f6399a6bada4016306a5a417461ed7
parent9b356005b4dca9c57af7cb1f5313a13a728c6310 (diff)
Updated to fedora-glibc-20060427T2122
-rw-r--r--ChangeLog38
-rw-r--r--Makeconfig3
-rw-r--r--fedora/branch.mk4
-rw-r--r--iconvdata/ibm932.c16
-rw-r--r--iconvdata/ibm943.c16
-rw-r--r--localedata/ChangeLog14
-rw-r--r--nptl/ChangeLog10
-rw-r--r--nptl/sysdeps/unix/sysv/linux/timer_routines.c36
-rw-r--r--nptl/sysdeps/x86_64/tls.h4
-rw-r--r--nscd/connections.c17
-rw-r--r--nscd/nscd.conf2
-rw-r--r--stdio-common/renameat.c4
-rw-r--r--sysdeps/unix/sysv/linux/Versions2
-rw-r--r--sysdeps/unix/sysv/linux/alpha/bits/fcntl.h8
-rw-r--r--sysdeps/unix/sysv/linux/bits/uio.h10
-rw-r--r--sysdeps/unix/sysv/linux/i386/bits/fcntl.h9
-rw-r--r--sysdeps/unix/sysv/linux/ia64/bits/fcntl.h7
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h9
-rw-r--r--sysdeps/unix/sysv/linux/s390/bits/fcntl.h8
-rw-r--r--sysdeps/unix/sysv/linux/sh/bits/fcntl.h9
-rw-r--r--sysdeps/unix/sysv/linux/sparc/bits/fcntl.h7
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list1
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h9
23 files changed, 179 insertions, 64 deletions
diff --git a/ChangeLog b/ChangeLog
index b1361a1382..18a7ede5fc 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,10 +1,48 @@
+2006-04-27 Ulrich Drepper <drepper@redhat.com>
+
+ * nscd/connections.c (restart): If we want to switch back to the
+ old ID use setresuid and setresgid.
+ (finish_drop_privileges): Likewise.
+
+2006-04-27 Jakub Jelinek <jakub@redhat.com>
+
+ * nscd/nscd.conf: Fix a typo.
+
+2006-04-27 Ulrich Drepper <drepper@redhat.com>
+
+ [BZ #2611]
+ * stdio-common/renameat.c (renameat): Fix typo.
+
2006-04-27 Jakub Jelinek <jakub@redhat.com>
* nscd/connections.c (sighup_handler): Only run prune_cache on
enabled databases.
+2006-04-26 Roland McGrath <roland@redhat.com>
+
+ * Makeconfig (%.v.i rule): Don't use -DASSEMBLER.
+ The predefined __ASSEMBLER__ is sufficient.
+
2006-04-26 Ulrich Drepper <drepper@redhat.com>
+ [BZ #1386]
+ * iconvdata/ibm932.c: Change mapping to allow round-trips.
+ * iconvdata/ibm943.c: Likewise.
+ Patch by Masahide Washizawa <WASHI@jp.ibm.com>.
+
+ * sysdeps/unix/sysv/linux/syscalls.list: Add vmsplice.
+ * sysdeps/unix/sysv/linux/Versions: Export vmsplice@@GLIBC_2.5.
+ * sysdeps/unix/sysv/linux/sparc/bits/fcntl.h: Declare vmsplice.
+ * sysdeps/unix/sysv/linux/ia64/bits/fcntl.h: Likewise.
+ * sysdeps/unix/sysv/linux/sh/bits/fcntl.h: Likewise.
+ * sysdeps/unix/sysv/linux/i386/bits/fcntl.h: Likewise.
+ * sysdeps/unix/sysv/linux/s390/bits/fcntl.h: Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h: Likewise.
+ * sysdeps/unix/sysv/linux/alpha/bits/fcntl.h: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h: Likewise.
+
+ * sysdeps/unix/sysv/linux/bits/uio.h: Fix a typo in a comment.
+
* sysdeps/posix/getaddrinfo.c (getaddrinfo): Fix typo which caused
bugs not to be reported.
diff --git a/Makeconfig b/Makeconfig
index 1f4b62822a..87f8ba7fbe 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -783,8 +783,7 @@ ifeq (yes, $(build-shared))
# (but no commands).
%.v.i: $(common-objpfx)config.h
sed '/^[ ]*#/d;s/^[ ]*%/#/' $(filter-out FORCE %.h,$^) \
- | $(CC) -E -undef $(CPPFLAGS) \
- -DASSEMBLER -x assembler-with-cpp - \
+ | $(CC) -E -undef $(CPPFLAGS) -x assembler-with-cpp - \
> $@T
mv -f $@T $@
%.v: %.v.i
diff --git a/fedora/branch.mk b/fedora/branch.mk
index 3c74097cd1..60cebf722c 100644
--- a/fedora/branch.mk
+++ b/fedora/branch.mk
@@ -3,5 +3,5 @@ glibc-branch := fedora
glibc-base := HEAD
DIST_BRANCH := devel
COLLECTION := dist-fc4
-fedora-sync-date := 2006-04-26 20:00 UTC
-fedora-sync-tag := fedora-glibc-20060426T2000
+fedora-sync-date := 2006-04-27 21:22 UTC
+fedora-sync-tag := fedora-glibc-20060427T2122
diff --git a/iconvdata/ibm932.c b/iconvdata/ibm932.c
index 8f05581c13..4fb1582e79 100644
--- a/iconvdata/ibm932.c
+++ b/iconvdata/ibm932.c
@@ -94,16 +94,10 @@
} \
else \
{ \
- if (res == 0x1c) \
- res = 0x1a; \
- else if (res == 0x7f) \
- res = 0x1c; \
- else if (res == 0xa5) \
+ if (res == 0xa5) \
res = 0x5c; \
else if (res == 0x203e) \
res = 0x7e; \
- else if (res == 0x1a) \
- res = 0x7f; \
put32 (outptr, res); \
outptr += 4; \
inptr++; \
@@ -117,16 +111,10 @@
uint32_t res = __ibm932sb_to_ucs4[c]; \
if (res == 0 && c != 0) \
return WEOF; \
- if (res == 0x1c) \
- res = 0x1a; \
- else if (res == 0x7f) \
- res = 0x1c; \
- else if (res == 0xa5) \
+ if (res == 0xa5) \
res = 0x5c; \
else if (res == 0x203e) \
res = 0x7e; \
- else if (res == 0x1a) \
- res = 0x7f; \
return res; \
}
#include <iconv/loop.c>
diff --git a/iconvdata/ibm943.c b/iconvdata/ibm943.c
index daeac1d8b2..119bb1f4b9 100644
--- a/iconvdata/ibm943.c
+++ b/iconvdata/ibm943.c
@@ -95,16 +95,10 @@
} \
else \
{ \
- if (res == 0x1c) \
- res = 0x1a; \
- else if (res == 0x7f) \
- res = 0x1c; \
- else if (res == 0xa5) \
+ if (res == 0xa5) \
res = 0x5c; \
else if (res == 0x203e) \
res = 0x7e; \
- else if (res == 0x1a) \
- res = 0x7f; \
put32 (outptr, res); \
outptr += 4; \
inptr++; \
@@ -118,16 +112,10 @@
uint32_t res = __ibm943sb_to_ucs4[c]; \
if (res == 0 && c != 0) \
return WEOF; \
- if (res == 0x1c) \
- res = 0x1a; \
- else if (res == 0x7f) \
- res = 0x1c; \
- else if (res == 0xa5) \
+ if (res == 0xa5) \
res = 0x5c; \
else if (res == 0x203e) \
res = 0x7e; \
- else if (res == 0x1a) \
- res = 0x7f; \
return res; \
}
#include <iconv/loop.c>
diff --git a/localedata/ChangeLog b/localedata/ChangeLog
index addfec9c9d..423a3bac62 100644
--- a/localedata/ChangeLog
+++ b/localedata/ChangeLog
@@ -1,11 +1,11 @@
2006-04-26 Ulrich Drepper <drepper@redhat.com>
- * bg_BG: Update after iso-4217.def update.
- * bs_BA: Likewise.
- * es_MX: Likewise.
- * ru_RU: Likewise.
- * tg_TJ: Likewise.
- * tt_RU: Likewise.
+ * locales/bg_BG: Update after iso-4217.def update.
+ * locales/bs_BA: Likewise.
+ * locales/es_MX: Likewise.
+ * locales/ru_RU: Likewise.
+ * locales/tg_TJ: Likewise.
+ * locales/tt_RU: Likewise.
2006-04-25 Ulrich Drepper <drepper@redhat.com>
@@ -24,7 +24,7 @@
* locales/ca_AD: New file.
* locales/ca_FR: New file.
* locales/ca_IT: New file.
-
+
2006-04-23 Ulrich Drepper <drepper@redhat.com>
[BZ #2134]
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 2418fa8106..41a1d7f594 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,13 @@
+2006-04-27 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/timer_routines.c (timer_helper_thread):
+ Allocate new object which is passed to timer_sigev_thread so that
+ the timer can be deleted before the new thread is scheduled.
+
+2006-04-26 Roland McGrath <roland@redhat.com>
+
+ * sysdeps/x86_64/tls.h: Include <asm/prctl.h> inside [! __ASSEMBLER__].
+
2006-04-08 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/i386/lowlevellock.h: Remove branch predicion
diff --git a/nptl/sysdeps/unix/sysv/linux/timer_routines.c b/nptl/sysdeps/unix/sysv/linux/timer_routines.c
index c180b27c96..a5eb442251 100644
--- a/nptl/sysdeps/unix/sysv/linux/timer_routines.c
+++ b/nptl/sysdeps/unix/sysv/linux/timer_routines.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
@@ -27,6 +27,13 @@
#include "kernel-posix-timers.h"
+struct thread_start_data
+{
+ void (*thrfunc) (sigval_t);
+ sigval_t sival;
+};
+
+
#ifdef __NR_timer_create
/* Helper thread to call the user-provided function. */
static void *
@@ -40,10 +47,16 @@ timer_sigev_thread (void *arg)
INTERNAL_SYSCALL_DECL (err);
INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, NULL, _NSIG / 8);
- struct timer *tk = (struct timer *) arg;
+ struct thread_start_data *td = (struct thread_start_data *) arg;
+
+ void (*thrfunc) (sigval_t) = td->thrfunc;
+ sigval_t sival = td->sival;
+
+ /* The TD object was allocated in timer_helper_thread. */
+ free (td);
/* Call the user-provided function. */
- tk->thrfunc (tk->sival);
+ thrfunc (sival);
return NULL;
}
@@ -82,10 +95,19 @@ timer_helper_thread (void *arg)
if (si.si_code == SI_TIMER)
{
struct timer *tk = (struct timer *) si.si_ptr;
-
- /* That the signal we are waiting for. */
- pthread_t th;
- (void) pthread_create (&th, &tk->attr, timer_sigev_thread, tk);
+ struct thread_start_data *td = malloc (sizeof (*td));
+
+ /* There is not much we can do if the allocation fails. */
+ if (td != NULL)
+ {
+ /* That is the signal we are waiting for. */
+ td->thrfunc = tk->thrfunc;
+ td->sival = tk->sival;
+
+ pthread_t th;
+ (void) pthread_create (&th, &tk->attr, timer_sigev_thread,
+ td);
+ }
}
else if (si.si_code == SI_TKILL)
/* The thread is canceled. */
diff --git a/nptl/sysdeps/x86_64/tls.h b/nptl/sysdeps/x86_64/tls.h
index 13cf6fb3f5..65ff0639b6 100644
--- a/nptl/sysdeps/x86_64/tls.h
+++ b/nptl/sysdeps/x86_64/tls.h
@@ -1,5 +1,5 @@
/* Definition for thread-local data handling. nptl/x86_64 version.
- Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006 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
@@ -20,8 +20,8 @@
#ifndef _TLS_H
#define _TLS_H 1
-#include <asm/prctl.h> /* For ARCH_SET_FS. */
#ifndef __ASSEMBLER__
+# include <asm/prctl.h> /* For ARCH_SET_FS. */
# include <stdbool.h>
# include <stddef.h>
# include <stdint.h>
diff --git a/nscd/connections.c b/nscd/connections.c
index f8e66c20a6..167b9913f4 100644
--- a/nscd/connections.c
+++ b/nscd/connections.c
@@ -1176,7 +1176,7 @@ cannot open /proc/self/cmdline: %s; disabling paranoia mode"),
/* Second, change back to the old user if we changed it. */
if (server_user != NULL)
{
- if (setuid (old_uid) != 0)
+ if (setresuid (old_uid, old_uid, old_uid) != 0)
{
dbg_log (_("\
cannot change to old UID: %s; disabling paranoia mode"),
@@ -1186,7 +1186,7 @@ cannot change to old UID: %s; disabling paranoia mode"),
return;
}
- if (setgid (old_gid) != 0)
+ if (setresgid (old_gid, old_gid, old_gid) != 0)
{
dbg_log (_("\
cannot change to old GID: %s; disabling paranoia mode"),
@@ -1873,14 +1873,23 @@ finish_drop_privileges (void)
error (EXIT_FAILURE, errno, _("setgroups failed"));
}
- if (setgid (server_gid) == -1)
+ int res;
+ if (paranoia)
+ res = setresgid (server_gid, server_gid, old_gid);
+ else
+ res = setgid (server_gid);
+ if (res == -1)
{
dbg_log (_("Failed to run nscd as user '%s'"), server_user);
perror ("setgid");
exit (4);
}
- if (setuid (server_uid) == -1)
+ if (paranoia)
+ res = setresuid (server_uid, server_uid, old_uid);
+ else
+ res = setuid (server_uid);
+ if (res == -1)
{
dbg_log (_("Failed to run nscd as user '%s'"), server_user);
perror ("setuid");
diff --git a/nscd/nscd.conf b/nscd/nscd.conf
index 4cdcb7dc9e..954eafd554 100644
--- a/nscd/nscd.conf
+++ b/nscd/nscd.conf
@@ -24,7 +24,7 @@
# persistent <service> <yes|no>
# shared <service> <yes|no>
# max-db-size <service> <number bytes>
-* auto-propagate <service> <yes|no>
+# auto-propagate <service> <yes|no>
#
# Currently supported cache names (services): passwd, group, hosts
#
diff --git a/stdio-common/renameat.c b/stdio-common/renameat.c
index e09c5933ed..1261da88a4 100644
--- a/stdio-common/renameat.c
+++ b/stdio-common/renameat.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005 Free Software Foundation, Inc.
+/* Copyright (C) 2005, 2006 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
@@ -29,7 +29,7 @@ renameat (oldfd, old, newfd, new)
int newfd;
const char *new;
{
- if ((oldfd < 0 & oldfd != AT_FDCWD) || (newfd < 0 && newfd != AT_FDCWD))
+ if ((oldfd < 0 && oldfd != AT_FDCWD) || (newfd < 0 && newfd != AT_FDCWD))
{
__set_errno (EBADF);
return -1;
diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions
index ad7a8701fd..7c015b1d62 100644
--- a/sysdeps/unix/sysv/linux/Versions
+++ b/sysdeps/unix/sysv/linux/Versions
@@ -124,7 +124,7 @@ libc {
_sys_errlist; sys_errlist; _sys_nerr; sys_nerr;
}
GLIBC_2.5 {
- splice; sync_file_range; tee;
+ splice; sync_file_range; tee; vmsplice;
}
GLIBC_PRIVATE {
# functions used in other libraries
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h b/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h
index 6898fe8743..4a20f1d673 100644
--- a/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/alpha/bits/fcntl.h
@@ -21,8 +21,10 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-
#include <sys/types.h>
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
@@ -200,6 +202,10 @@ extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
unsigned int __flags);
+/* Splice address range into a pipe. */
+extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
+ unsigned int __flags);
+
/* Splice two files together. */
extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
__THROW;
diff --git a/sysdeps/unix/sysv/linux/bits/uio.h b/sysdeps/unix/sysv/linux/bits/uio.h
index 84b4805fe8..6a283ed771 100644
--- a/sysdeps/unix/sysv/linux/bits/uio.h
+++ b/sysdeps/unix/sysv/linux/bits/uio.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1996, 1997, 2006 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
@@ -16,10 +16,12 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#ifndef _SYS_UIO_H
+#if !defined _SYS_UIO_H && !defined _FCNTL_H
# error "Never include <bits/uio.h> directly; use <sys/uio.h> instead."
#endif
+#ifndef _BITS_UIO_H
+#define _BITS_UIO_H 1
#include <sys/types.h>
@@ -31,7 +33,7 @@
/* Size of object which can be written atomically.
This macro has different values in different kernel versions. The
- latest versions of ther kernel use 1024 and this is good choice. Since
+ latest versions of the kernel use 1024 and this is good choice. Since
the C library implementation of readv/writev is able to emulate the
functionality even if the currently running kernel does not support
this large value the readv/writev call will not fail because of this. */
@@ -44,3 +46,5 @@ struct iovec
void *iov_base; /* Pointer to data. */
size_t iov_len; /* Length of data. */
};
+
+#endif
diff --git a/sysdeps/unix/sysv/linux/i386/bits/fcntl.h b/sysdeps/unix/sysv/linux/i386/bits/fcntl.h
index a375888106..82f06332be 100644
--- a/sysdeps/unix/sysv/linux/i386/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/i386/bits/fcntl.h
@@ -22,8 +22,11 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-
#include <sys/types.h>
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
+
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
located on an ext2 file system */
@@ -207,6 +210,10 @@ extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
unsigned int __flags);
+/* Splice address range into a pipe. */
+extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
+ unsigned int __flags);
+
/* Splice two files together. */
extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
__THROW;
diff --git a/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h b/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h
index 63a771ddb9..1d684ad367 100644
--- a/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/ia64/bits/fcntl.h
@@ -23,6 +23,9 @@
#include <sys/types.h>
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
located on an ext2 file system */
@@ -201,6 +204,10 @@ extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
unsigned int __flags);
+/* Splice address range into a pipe. */
+extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
+ unsigned int __flags);
+
/* Splice two files together. */
extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
__THROW;
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h b/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h
index 2219271a1b..2843c6e9cc 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/fcntl.h
@@ -22,8 +22,11 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-
#include <sys/types.h>
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
+
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
located on an ext2 file system */
@@ -207,6 +210,10 @@ extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
unsigned int __flags);
+/* Splice address range into a pipe. */
+extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
+ unsigned int __flags);
+
/* Splice two files together. */
extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
__THROW;
diff --git a/sysdeps/unix/sysv/linux/s390/bits/fcntl.h b/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
index ad3ef420a1..7a9aa5738e 100644
--- a/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/s390/bits/fcntl.h
@@ -23,6 +23,10 @@
#include <sys/types.h>
#include <bits/wordsize.h>
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
+
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
located on an ext2 file system */
@@ -226,6 +230,10 @@ extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
unsigned int __flags);
+/* Splice address range into a pipe. */
+extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
+ unsigned int __flags);
+
/* Splice two files together. */
extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
__THROW;
diff --git a/sysdeps/unix/sysv/linux/sh/bits/fcntl.h b/sysdeps/unix/sysv/linux/sh/bits/fcntl.h
index a375888106..82f06332be 100644
--- a/sysdeps/unix/sysv/linux/sh/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/sh/bits/fcntl.h
@@ -22,8 +22,11 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-
#include <sys/types.h>
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
+
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
located on an ext2 file system */
@@ -207,6 +210,10 @@ extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
unsigned int __flags);
+/* Splice address range into a pipe. */
+extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
+ unsigned int __flags);
+
/* Splice two files together. */
extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
__THROW;
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h b/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h
index b3788f0daf..e8cc3987e3 100644
--- a/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/sparc/bits/fcntl.h
@@ -24,6 +24,9 @@
#include <sys/types.h>
#include <bits/wordsize.h>
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
located on an ext2 file system */
@@ -226,6 +229,10 @@ extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
unsigned int __flags);
+/* Splice address range into a pipe. */
+extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
+ unsigned int __flags);
+
/* Splice two files together. */
extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
__THROW;
diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list
index 6bfccd26aa..969d054c62 100644
--- a/sysdeps/unix/sysv/linux/syscalls.list
+++ b/sysdeps/unix/sysv/linux/syscalls.list
@@ -77,6 +77,7 @@ swapoff - swapoff i:s __swapoff swapoff
tee EXTRA tee i:iiii tee
unshare EXTRA unshare i:i unshare
uselib EXTRA uselib i:s uselib
+vmsplice EXTRA vmsplice i:iPii vmsplice
wait4 - wait4 i:iWiP __wait4 wait4
chown - chown i:sii __libc_chown __chown chown
diff --git a/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h b/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h
index 2351737f7c..ad4c1443e4 100644
--- a/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h
+++ b/sysdeps/unix/sysv/linux/x86_64/bits/fcntl.h
@@ -21,9 +21,12 @@
# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead."
#endif
-
#include <sys/types.h>
#include <bits/wordsize.h>
+#ifdef __USE_GNU
+# include <bits/uio.h>
+#endif
+
/* open/fcntl - O_SYNC is only implemented on blocks devices and on files
located on an ext2 file system */
@@ -221,6 +224,10 @@ extern int sync_file_range (int __fd, __off64_t __from, __off64_t __to,
unsigned int __flags);
+/* Splice address range into a pipe. */
+extern int vmsplice (int __fdout, const struct iovec *__iov, size_t __count,
+ unsigned int __flags);
+
/* Splice two files together. */
extern int splice (int __fdin, int __fdout, size_t __len, unsigned int __flags)
__THROW;