This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.13-118-g28377d1
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 8 May 2011 04:50:05 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.13-118-g28377d1
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 28377d1bf58625172a1734b92e835591d4d23a18 (commit)
from 66bdbaa4522f561d4ea90a77af243c004ecf642c (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=28377d1bf58625172a1734b92e835591d4d23a18
commit 28377d1bf58625172a1734b92e835591d4d23a18
Author: Ulrich Drepper <drepper@gmail.com>
Date: Sun May 8 00:48:30 2011 -0400
Optimize fdopendir a bit.
Don't call fcntl(F_SETFD) unnecessarily.
diff --git a/ChangeLog b/ChangeLog
index 7d2da4e..132f0d0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2011-05-08 Ulrich Drepper <drepper@gmail.com>
+
+ * include/dirent.h (__alloc_dir): Add flags parameter.
+ * sysdeps/unix/fdopendir.c (__fdopendir): Pass flags to __alloc_dir.
+ * sysdeps/unix/opendir.c (__opendir): Pass 0 in new parameter to
+ __alloc_dir.
+ (__alloc_dir): Take new parameter. Don't call fcntl for invocations
+ from fdopendir if O_CLOEXEC is already set.
+
2011-03-15 Alan Modra <amodra@gmail.com>
* elf/dl-reloc.c (_dl_try_allocate_static_tls <TLS_DTV_AT_TP>): Handle
diff --git a/include/dirent.h b/include/dirent.h
index 3f6c4b9..4db63a6 100644
--- a/include/dirent.h
+++ b/include/dirent.h
@@ -28,7 +28,8 @@ extern int __alphasort64 (const struct dirent64 **a, const struct dirent64 **b)
extern int __versionsort64 (const struct dirent64 **a,
const struct dirent64 **b)
__attribute_pure__;
-extern DIR *__alloc_dir (int fd, bool close_fd, const struct stat64 *statp)
+extern DIR *__alloc_dir (int fd, bool close_fd, int flags,
+ const struct stat64 *statp)
internal_function;
#endif
diff --git a/sysdeps/unix/fdopendir.c b/sysdeps/unix/fdopendir.c
index 565ce1e..9c5969d 100644
--- a/sysdeps/unix/fdopendir.c
+++ b/sysdeps/unix/fdopendir.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005, 2006 Free Software Foundation, Inc.
+/* Copyright (C) 2005, 2006, 2011 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
@@ -47,6 +47,6 @@ __fdopendir (int fd)
return NULL;
}
- return __alloc_dir (fd, false, &statbuf);
+ return __alloc_dir (fd, false, flags, &statbuf);
}
weak_alias (__fdopendir, fdopendir)
diff --git a/sysdeps/unix/opendir.c b/sysdeps/unix/opendir.c
index fbf14f5..c2d1dda 100644
--- a/sysdeps/unix/opendir.c
+++ b/sysdeps/unix/opendir.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-1996,98,2000-2003,2005,2007,2009
+/* Copyright (C) 1991-1996,98,2000-2003,2005,2007,2009,2011
Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -138,7 +138,7 @@ __opendir (const char *name)
statp = &statbuf;
}
- return __alloc_dir (fd, true, statp);
+ return __alloc_dir (fd, true, 0, statp);
}
weak_alias (__opendir, opendir)
@@ -158,13 +158,14 @@ check_have_o_cloexec (int fd)
DIR *
internal_function
-__alloc_dir (int fd, bool close_fd, const struct stat64 *statp)
+__alloc_dir (int fd, bool close_fd, int flags, const struct stat64 *statp)
{
/* We always have to set the close-on-exit flag if the user provided
the file descriptor. Otherwise only if we have no working
O_CLOEXEC support. */
#ifdef O_CLOEXEC
- if (! close_fd || ! check_have_o_cloexec (fd))
+ if ((! close_fd && (flags & O_CLOEXEC) == 0)
+ || ! check_have_o_cloexec (fd))
#endif
{
if (__builtin_expect (__fcntl (fd, F_SETFD, FD_CLOEXEC), 0) < 0)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 9 +++++++++
include/dirent.h | 3 ++-
sysdeps/unix/fdopendir.c | 4 ++--
sysdeps/unix/opendir.c | 9 +++++----
4 files changed, 18 insertions(+), 7 deletions(-)
hooks/post-receive
--
GNU C Library master sources