diff options
author | Ulrich Drepper <drepper@gmail.com> | 2011-08-08 13:49:37 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-08-08 13:49:37 -0400 |
commit | 879165f25a1a6b13995e43c11e88b1a21b6f101e (patch) | |
tree | 64b72b93baa2dd1f0f96bfb7e000c72d254f30af | |
parent | 16292eddd77f66002e2104848e75a0fb4d316692 (diff) | |
download | glibc-879165f25a1a6b13995e43c11e88b1a21b6f101e.zip glibc-879165f25a1a6b13995e43c11e88b1a21b6f101e.tar.gz glibc-879165f25a1a6b13995e43c11e88b1a21b6f101e.tar.bz2 |
Avoid multiple definitions of identical scandir cancellation handler
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | dirent/scandir.c | 21 | ||||
-rw-r--r-- | dirent/scandir64.c | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/scandir64.c | 3 |
4 files changed, 25 insertions, 10 deletions
@@ -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> |