aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-08-08 13:49:37 -0400
committerUlrich Drepper <drepper@gmail.com>2011-08-08 13:49:37 -0400
commit879165f25a1a6b13995e43c11e88b1a21b6f101e (patch)
tree64b72b93baa2dd1f0f96bfb7e000c72d254f30af
parent16292eddd77f66002e2104848e75a0fb4d316692 (diff)
downloadglibc-879165f25a1a6b13995e43c11e88b1a21b6f101e.zip
glibc-879165f25a1a6b13995e43c11e88b1a21b6f101e.tar.gz
glibc-879165f25a1a6b13995e43c11e88b1a21b6f101e.tar.bz2
Avoid multiple definitions of identical scandir cancellation handler
-rw-r--r--ChangeLog8
-rw-r--r--dirent/scandir.c21
-rw-r--r--dirent/scandir64.c3
-rw-r--r--sysdeps/unix/sysv/linux/i386/scandir64.c3
4 files changed, 25 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index f8212a6..4b6a62f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-08-08 Ulrich Drepper <drepper@gmail.com>
+
+ * dirent/scandir.c (cancel_handler): Renamed to
+ __scandir_cancel_handler. Do not define if SKIP_SCANDIR_CANCEL is
+ defined. Adjust users.
+ * dirent/scandir64.c: Define SKIP_SCANDIR_CANCEL.
+ * sysdeps/unix/sysv/linux/i386/scandir64.c: Likewise.
+
2011-08-04 Ulrich Drepper <drepper@gmail.com>
* string/test-string.h (IMPL): Use __STRING to expand name and then
diff --git a/dirent/scandir.c b/dirent/scandir.c
index 2e03578..e90b942 100644
--- a/dirent/scandir.c
+++ b/dirent/scandir.c
@@ -1,4 +1,5 @@
-/* Copyright (C) 1992-1998,2000,2002,2003,2009 Free Software Foundation, Inc.
+/* Copyright (C) 1992-1998,2000,2002,2003,2009,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
@@ -23,13 +24,13 @@
#include <bits/libc-lock.h>
#ifndef SCANDIR
-#define SCANDIR scandir
-#define READDIR __readdir
-#define DIRENT_TYPE struct dirent
+# define SCANDIR scandir
+# define READDIR __readdir
+# define DIRENT_TYPE struct dirent
#endif
#ifndef SCANDIR_CANCEL
-#define SCANDIR_CANCEL
+# define SCANDIR_CANCEL
struct scandir_cancel_struct
{
DIR *dp;
@@ -37,8 +38,9 @@ struct scandir_cancel_struct
size_t cnt;
};
-static void
-cancel_handler (void *arg)
+# ifndef SKIP_SCANDIR_CANCEL
+void
+__scandir_cancel_handler (void *arg)
{
struct scandir_cancel_struct *cp = arg;
size_t i;
@@ -49,6 +51,9 @@ cancel_handler (void *arg)
free (v);
(void) __closedir (cp->dp);
}
+# else
+extern void __scandir_cancel_handler (void *arg);
+# endif
#endif
@@ -75,7 +80,7 @@ SCANDIR (dir, namelist, select, cmp)
c.dp = dp;
c.v = NULL;
c.cnt = 0;
- __libc_cleanup_push (cancel_handler, &c);
+ __libc_cleanup_push (__scandir_cancel_handler, &c);
while ((d = READDIR (dp)) != NULL)
{
diff --git a/dirent/scandir64.c b/dirent/scandir64.c
index b7bd654..274822e 100644
--- a/dirent/scandir64.c
+++ b/dirent/scandir64.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2009 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2009, 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
@@ -21,6 +21,7 @@
#define SCANDIR scandir64
#define READDIR __readdir64
#define DIRENT_TYPE struct dirent64
+#define SKIP_SCANDIR_CANCEL 1
int scandir64 (__const char *__restrict __dir,
struct dirent64 ***__restrict __namelist,
diff --git a/sysdeps/unix/sysv/linux/i386/scandir64.c b/sysdeps/unix/sysv/linux/i386/scandir64.c
index 690be81..837e1b9 100644
--- a/sysdeps/unix/sysv/linux/i386/scandir64.c
+++ b/sysdeps/unix/sysv/linux/i386/scandir64.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2004, 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
@@ -21,6 +21,7 @@
#define SCANDIR __scandir64
#define READDIR __readdir64
#define DIRENT_TYPE struct dirent64
+#define SKIP_SCANDIR_CANCEL 1
#include <dirent/scandir.c>