From eac10791463c42ff4f6da20f548c046e300b3d6d Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sat, 19 Nov 2005 17:22:39 +0000 Subject: * sysdeps/unix/sysv/linux/ia64/bits/shm.h (shmatt_t): New type. (struct shmid_ds): Use it for shm_nattch field. 2005-11-18 Jakub Jelinek * sysdeps/unix/sysv/linux/futimesat.c (futimesat): If FILE is NULL, set access and modification times of the file referenced by FD. * sysdeps/generic/futimesat.c (futimesat): Don't return EINVAL if FILE is NULL. Don't check FD if FILE is absolute path. 2005-11-19 Ulrich Drepper * nscd/nscd_gethst_r.c (nscd_gethst_r): Avoid unnecesary read call if there are no aliases. * sysdeps/unix/sysv/linux/Makefile (CFLAGS-connections.c, CFLAGS-pwdcache.c, CFLAGS-grpcache.c, CFLAGS-hstcache.c, CFLAGS-aicache.c, CFLAGS-initgrcache.c): Add -DHAVE_SENDFILE. * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_SENDFILE): Define. * nscd/pwdcache.c [HAVE_SENDFILE]: Include and . [HAVE_SENDFILE] (cache_addpw): Use sendfile to transmit positive result. * nscd/grpcache.c: Likewise. * nscd/hstcache.c: Likewise. * nscd/aicache.c: Likewise. * nscd/initgrcache.c: Likewise. * nscd/connectionc.c: Likewise. --- sysdeps/unix/sysv/linux/Makefile | 7 ++++++- sysdeps/unix/sysv/linux/futimesat.c | 17 ++++++++++++++++- sysdeps/unix/sysv/linux/ia64/bits/shm.h | 6 ++++-- sysdeps/unix/sysv/linux/kernel-features.h | 5 +++++ 4 files changed, 31 insertions(+), 4 deletions(-) (limited to 'sysdeps/unix') diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index c5e1da03e9..b2bbbc0b28 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -152,6 +152,11 @@ CFLAGS-mq_receive.c += -fexceptions endif ifeq ($(subdir),nscd) -CFLAGS-connections.c += -DHAVE_EPOLL +CFLAGS-connections.c += -DHAVE_EPOLL -DHAVE_SENDFILE +CFLAGS-pwdcache.c += -DHAVE_SENDFILE +CFLAGS-grpcache.c += -DHAVE_SENDFILE +CFLAGS-hstcache.c += -DHAVE_SENDFILE +CFLAGS-aicache.c += -DHAVE_SENDFILE +CFLAGS-initgrcache.c += -DHAVE_SENDFILE CFLAGS-gai.c += -DNEED_NETLINK endif diff --git a/sysdeps/unix/sysv/linux/futimesat.c b/sysdeps/unix/sysv/linux/futimesat.c index 7ab0477c5e..8a87cc442b 100644 --- a/sysdeps/unix/sysv/linux/futimesat.c +++ b/sysdeps/unix/sysv/linux/futimesat.c @@ -37,7 +37,22 @@ futimesat (fd, file, tvp) { char *buf = NULL; - if (fd != AT_FDCWD && file[0] != '/') + if (file == NULL) + { + static const char procfd[] = "/proc/self/fd/%d"; + /* Buffer for the path name we are going to use. It consists of + - the string /proc/self/fd/ + - the file descriptor number. + The final NUL is included in the sizeof. A bit of overhead + due to the format elements compensates for possible negative + numbers. */ + size_t buflen = sizeof (procfd) + sizeof (int) * 3; + buf = alloca (buflen); + + __snprintf (buf, buflen, procfd, fd); + file = buf; + } + else if (fd != AT_FDCWD && file[0] != '/') { size_t filelen = strlen (file); static const char procfd[] = "/proc/self/fd/%d/%s"; diff --git a/sysdeps/unix/sysv/linux/ia64/bits/shm.h b/sysdeps/unix/sysv/linux/ia64/bits/shm.h index 7506e55867..7f38f2dd7b 100644 --- a/sysdeps/unix/sysv/linux/ia64/bits/shm.h +++ b/sysdeps/unix/sysv/linux/ia64/bits/shm.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2002 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2002, 2005 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 @@ -38,6 +38,8 @@ /* Segment low boundary address multiple. */ #define SHMLBA (1024 * 1024) +/* Type to count number of attaches. */ +typedef unsigned long int shmatt_t; /* Data structure describing a set of semaphores. */ struct shmid_ds @@ -49,7 +51,7 @@ struct shmid_ds __time_t shm_ctime; /* time of last change by shmctl() */ __pid_t shm_cpid; /* pid of creator */ __pid_t shm_lpid; /* pid of last shmop */ - unsigned long int shm_nattch; /* number of current attaches */ + shmatt_t shm_nattch; /* number of current attaches */ unsigned long int __unused1; unsigned long int __unused2; }; diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h index 002cc46c79..44ac727820 100644 --- a/sysdeps/unix/sysv/linux/kernel-features.h +++ b/sysdeps/unix/sysv/linux/kernel-features.h @@ -84,6 +84,11 @@ # define __ASSUME_MSG_NOSIGNAL 1 #endif +/* The sendfile syscall was introduced in 2.2.0. */ +#if __LINUX_KERNEL_VERSION >= 131584 +# define __ASSUME_SENDFILE 1 +#endif + /* On x86 another `getrlimit' syscall was added in 2.3.25. */ #if __LINUX_KERNEL_VERSION >= 131865 && defined __i386__ # define __ASSUME_NEW_GETRLIMIT_SYSCALL 1 -- cgit 1.4.1