This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

GNU C Library master sources branch master updated. glibc-2.17-355-gadbb802


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  adbb8027be47b3295367019b2f45863ea3d6c727 (commit)
      from  87bd9bc4bd2a49a441bb9ba744c9ddb0c9434823 (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=adbb8027be47b3295367019b2f45863ea3d6c727

commit adbb8027be47b3295367019b2f45863ea3d6c727
Author: Siddhesh Poyarekar <siddhesh@redhat.com>
Date:   Thu Mar 7 12:15:08 2013 +0530

    Remove PIPE_BUF Linux-specific code
    
    Fixes BZ #12723
    
    The variable pipe buffer size does nothing to the value of PIPE_BUF,
    since the number of bytes that are atomically written is still
    PIPE_BUF on Linux.

diff --git a/ChangeLog b/ChangeLog
index c82ed84..dd78188 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2013-03-07  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+	[BZ #12723]
+	* posix/Makefile (tests): Add tst-pathconf.
+	* posix/tst-pathconf.c: New test case.
+	* sysdeps/unix/sysv/linux/fpathconf.c (__fpathconf): Remove
+	_PC_PIPE_BUF.
+	* sysdeps/unix/sysv/linux/pathconf.c (__pathconf): Likewise.
+
 2013-03-06  Patsy Franklin  <pfrankli@redhat.com>
 
 	* io/fcntl.h: Added a comment about AT_EACCESS and AT_REMOVEDIR.
diff --git a/NEWS b/NEWS
index fcd79ec..26bdd19 100644
--- a/NEWS
+++ b/NEWS
@@ -9,9 +9,9 @@ Version 2.18
 
 * The following bugs are resolved with this release:
 
-  11561, 13550, 13951, 14142, 14200, 14317, 14327, 14496, 14920, 14964,
-  14981, 14982, 14985, 14994, 14996, 15003, 15006, 15020, 15023, 15036,
-  15054, 15055, 15062, 15078, 15160, 15232.
+  11561, 12723, 13550, 13951, 14142, 14200, 14317, 14327, 14496, 14920,
+  14964, 14981, 14982, 14985, 14994, 14996, 15003, 15006, 15020, 15023,
+  15036, 15054, 15055, 15062, 15078, 15160, 15232.
 
 * Add support for calling C++11 thread_local object destructors on thread
   and program exit.  This needs compiler support for offloading C++11
diff --git a/posix/Makefile b/posix/Makefile
index 2cacd21..658c47e 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -86,7 +86,8 @@ tests		:= tstgetopt testfnm runtests runptests	     \
 		   tst-rfc3484-3 \
 		   tst-getaddrinfo3 tst-fnmatch2 tst-cpucount tst-cpuset \
 		   bug-getopt1 bug-getopt2 bug-getopt3 bug-getopt4 \
-		   bug-getopt5 tst-getopt_long1 bug-regex34 bug-regex35
+		   bug-getopt5 tst-getopt_long1 bug-regex34 bug-regex35 \
+		   tst-pathconf
 xtests		:= bug-ga2
 ifeq (yes,$(build-shared))
 test-srcs	:= globtest
diff --git a/posix/tst-pathconf.c b/posix/tst-pathconf.c
new file mode 100644
index 0000000..7627a24
--- /dev/null
+++ b/posix/tst-pathconf.c
@@ -0,0 +1,176 @@
+/* Test that values of pathconf and fpathconf are consistent for a file.
+   Copyright (C) 2013 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
+   <http://www.gnu.org/licenses/>.  */
+
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+
+static void prepare (void);
+#define PREPARE(argc, argv) prepare ()
+
+static int do_test (void);
+#define TEST_FUNCTION do_test ()
+
+#include "../test-skeleton.c"
+
+static int dir_fd;
+static char *dirbuf;
+
+static void
+prepare (void)
+{
+  size_t test_dir_len = strlen (test_dir);
+  static const char dir_name[] = "/tst-pathconf.XXXXXX";
+
+  size_t dirbuflen = test_dir_len + sizeof (dir_name);
+  dirbuf = malloc (dirbuflen);
+  if (dirbuf == NULL)
+    {
+      puts ("Out of memory");
+      exit (1);
+    }
+
+  snprintf (dirbuf, dirbuflen, "%s%s", test_dir, dir_name);
+  if (mkdtemp (dirbuf) == NULL)
+    {
+      printf ("Cannot create temporary directory: %s\n", strerror (errno));
+      exit (1);
+    }
+
+  add_temp_file (dirbuf);
+
+  dir_fd = open (dirbuf, O_RDONLY);
+  if (dir_fd == -1)
+    {
+      printf ("Cannot open directory: %s\n", strerror (errno));
+      exit (1);
+    }
+}
+
+
+static int
+do_test (void)
+{
+  int ret = 0;
+  static const char *fifo_name = "some-fifo";
+
+  size_t filenamelen = strlen (dirbuf) + strlen (fifo_name) + 2;
+  char *filename = malloc (filenamelen);
+
+  snprintf (filename, filenamelen, "%s/%s", dirbuf, fifo_name);
+
+  /* Create a fifo in the directory.  */
+  int e = mkfifo (filename, 0777);
+  if (e == -1)
+    {
+      printf ("fifo creation failed (%s)\n", strerror (errno));
+      ret = 1;
+      goto out_nofifo;
+    }
+
+  long dir_pathconf = pathconf (dirbuf, _PC_PIPE_BUF);
+
+  if (dir_pathconf < 0)
+    {
+      printf ("pathconf on directory failed: %s\n", strerror (errno));
+      ret = 1;
+      goto out_nofifo;
+    }
+
+  long fifo_pathconf = pathconf (filename, _PC_PIPE_BUF);
+
+  if (fifo_pathconf < 0)
+    {
+      printf ("pathconf on file failed: %s\n", strerror (errno));
+      ret = 1;
+      goto out_nofifo;
+    }
+
+  int fifo = open (filename, O_RDONLY | O_NONBLOCK);
+
+  if (fifo < 0)
+    {
+      printf ("fifo open failed (%s)\n", strerror (errno));
+      ret = 1;
+      goto out_nofifo;
+    }
+
+  long dir_fpathconf = fpathconf (dir_fd, _PC_PIPE_BUF);
+
+  if (dir_fpathconf < 0)
+    {
+      printf ("fpathconf on directory failed: %s\n", strerror (errno));
+      ret = 1;
+      goto out;
+    }
+
+  long fifo_fpathconf = fpathconf (fifo, _PC_PIPE_BUF);
+
+  if (fifo_fpathconf < 0)
+    {
+      printf ("fpathconf on file failed: %s\n", strerror (errno));
+      ret = 1;
+      goto out;
+    }
+
+  if (fifo_pathconf != fifo_fpathconf)
+    {
+      printf ("fifo pathconf (%ld) != fifo fpathconf (%ld)\n", fifo_pathconf,
+	      fifo_fpathconf);
+      ret = 1;
+      goto out;
+    }
+
+  if (dir_pathconf != fifo_pathconf)
+    {
+      printf ("directory pathconf (%ld) != fifo pathconf (%ld)\n",
+	      dir_pathconf, fifo_pathconf);
+      ret = 1;
+      goto out;
+    }
+
+  if (dir_fpathconf != fifo_fpathconf)
+    {
+      printf ("directory fpathconf (%ld) != fifo fpathconf (%ld)\n",
+	      dir_fpathconf, fifo_fpathconf);
+      ret = 1;
+      goto out;
+    }
+
+out:
+  close (fifo);
+out_nofifo:
+  close (dir_fd);
+
+  if (unlink (filename) != 0)
+    {
+      printf ("Could not remove fifo (%s)\n", strerror (errno));
+      ret = 1;
+    }
+
+  if (rmdir (dirbuf) != 0)
+    {
+      printf ("Could not remove directory (%s)\n", strerror (errno));
+      ret = 1;
+    }
+
+  return ret;
+}
diff --git a/sysdeps/unix/sysv/linux/fpathconf.c b/sysdeps/unix/sysv/linux/fpathconf.c
index c971644..e8c4dc9 100644
--- a/sysdeps/unix/sysv/linux/fpathconf.c
+++ b/sysdeps/unix/sysv/linux/fpathconf.c
@@ -33,7 +33,6 @@ __fpathconf (fd, name)
      int name;
 {
   struct statfs fsbuf;
-  int r;
 
   switch (name)
     {
@@ -49,12 +48,6 @@ __fpathconf (fd, name)
     case _PC_CHOWN_RESTRICTED:
       return __statfs_chown_restricted (__fstatfs (fd, &fsbuf), &fsbuf);
 
-    case _PC_PIPE_BUF:
-      r = __fcntl (fd, F_GETPIPE_SZ);
-      if (r > 0)
-	return r;
-      /* FALLTHROUGH */
-
     default:
       return posix_fpathconf (fd, name);
     }
diff --git a/sysdeps/unix/sysv/linux/pathconf.c b/sysdeps/unix/sysv/linux/pathconf.c
index edc691e..de91a45 100644
--- a/sysdeps/unix/sysv/linux/pathconf.c
+++ b/sysdeps/unix/sysv/linux/pathconf.c
@@ -39,8 +39,6 @@ long int
 __pathconf (const char *file, int name)
 {
   struct statfs fsbuf;
-  int fd;
-  int flags;
 
   switch (name)
     {
@@ -56,21 +54,6 @@ __pathconf (const char *file, int name)
     case _PC_CHOWN_RESTRICTED:
       return __statfs_chown_restricted (__statfs (file, &fsbuf), &fsbuf);
 
-    case _PC_PIPE_BUF:
-      flags = O_RDONLY|O_NONBLOCK|O_NOCTTY;
-#ifdef O_CLOEXEC
-      flags |= O_CLOEXEC;
-#endif
-      fd = open_not_cancel_2 (file, flags);
-      if (fd >= 0)
-	{
-	  long int r = __fcntl (fd, F_GETPIPE_SZ);
-	  close_not_cancel_no_status (fd);
-	  if (r > 0)
-	    return r;
-	}
-      /* FALLTHROUGH */
-
     default:
       return posix_pathconf (file, name);
     }

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                           |    9 ++
 NEWS                                |    6 +-
 posix/Makefile                      |    3 +-
 posix/tst-pathconf.c                |  176 +++++++++++++++++++++++++++++++++++
 sysdeps/unix/sysv/linux/fpathconf.c |    7 --
 sysdeps/unix/sysv/linux/pathconf.c  |   17 ----
 6 files changed, 190 insertions(+), 28 deletions(-)
 create mode 100644 posix/tst-pathconf.c


hooks/post-receive
-- 
GNU C Library master sources


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]