From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 92916 invoked by alias); 6 Apr 2018 19:49:13 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 91669 invoked by uid 89); 6 Apr 2018 19:49:12 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-qt0-f196.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:references:openpgp:autocrypt :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=nnDWM227iCablB8Ni6wx89uVXDKgYdGJ7f2D9645ugs=; b=Ob4q+RdqC3IAtiNj+U44E4Dh8+6dEAnGIq+c83hfNoFnsjNzInC8UIQDWLyqVMjwW+ nL/ZpSzognqC6PftbRW42f57tzdih20QO9oxVKThC28ZznhAxrL76HI+hYiZjC+VU1a1 99/4d23fn0GDEQQ5w1ZT136VS+H1qXlo3ANtnaseERaB1LkxFXalFElU5MgvTwzYM6Wu UEgdKlKyv+pzntGLthJDUbyWGIk2wZmMIJnV06znFIz9jcvHgNo34lpWw3WFqczQIh8Q Ky6xO8lhx+ckc2f0YzDU7xfRQQuEEEoXdofFxv43cx2Gs/9uUFozw5c6eu9K22tLH/jy Ibhw== X-Gm-Message-State: ALQs6tC69fiy6DNq8wnsaIVInBhpkx0OK5FVI+cyoqacLhG2F9GtKQfS b6w3TvlP5Tzfk1eGsRkpip9YoSQMMjuYNA== X-Google-Smtp-Source: AIpwx48/9kUNmU5wGTVnRQbk9y3+c26UssJpwNvklEzFPZ2OgZV9O9DfU9qd3Z1YYz3U7O4aXyXb2g== X-Received: by 10.200.40.102 with SMTP id 35mr39453815qtr.92.1523044146745; Fri, 06 Apr 2018 12:49:06 -0700 (PDT) Subject: Re: [PATCH 3/7] Consolidate Linux readdir{64}{_r} implementation From: Adhemerval Zanella To: libc-alpha@sourceware.org References: <1520017165-15830-1-git-send-email-adhemerval.zanella@linaro.org> <1520017165-15830-3-git-send-email-adhemerval.zanella@linaro.org> Openpgp: preference=signencrypt Autocrypt: addr=adhemerval.zanella@linaro.org; prefer-encrypt=mutual; keydata= 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 Message-ID: <18b89378-0a3b-d903-6333-c3d8d2ba1195@linaro.org> Date: Fri, 06 Apr 2018 19:49:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <1520017165-15830-3-git-send-email-adhemerval.zanella@linaro.org> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2018-04/txt/msg00155.txt.bz2 If no one opposes, I will commit this shortly. On 02/03/2018 15:59, Adhemerval Zanella wrote: > This patch consolidates Linux readdir{64}{_r} implementation on just > the default sysdeps/unix/sysv/linux/readdir{64}{_r}.c ones. The > default implementation handle the Linux requirements: > > * readdir{_r} is only built for _DIRENT_MATCHES_DIRENT64 being 0. > > * readdir64{_r} is always built and aliased to readdir{_r} for > ABI that define _DIRENT_MATCHES_DIRENT64. > > * A compat symbol is added for readdir64{_r} for ABI that used to > export the old non-LFS version. > > Checked on aarch64-linux-gnu, x86_64-linux-gnu, i686-linux-gnu, > sparcv9-linux-gnu, sparc64-linux-gnu, powerpc-linux-gnu, and > powerpc64le-linux-gnu. > > * sysdeps/posix/readdir.c (__READDIR, __GETDENTS, DIRENTY_TYPE, > __READDIR_ALIAS): Undefine after usage. > * sysdeps/posix/readdir_r.c (__READDIR_R, __GETDENTS, DIRENT_TYPE, > __READDIR_R_ALIAS): Likewise. > * sysdeps/unix/sysv/linux/arm/readdir64.c: Remove file. > * sysdeps/unix/sysv/linux/arm/readdir64_r.c: Likewise. > * sysdeps/unix/sysv/linux/m68k/readdir64.c: Likewise. > * sysdeps/unix/sysv/linux/m68k/readdir64_r.c: Likewise. > * sysdeps/unix/sysv/linux/powerpc/readdir64.c: Likewise. > * sysdeps/unix/sysv/linux/powerpc/readdir64_r.c: Likewise. > * sysdeps/unix/sysv/linux/i386/readdir64.c: Likewise. > * sysdeps/unix/sysv/linux/i386/readdir64_r.c: Likewise. > * sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c: Likewise. > * sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c: Likewise. > * sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c: Likewise. > * sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c: Likewise. > * sysdeps/unix/sysv/linux/wordsize-64/readdir.c: Likewise. > * sysdeps/unix/sysv/linux/wordsize-64/readdir64.c: Likewise. > * sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c: Likewise. > * sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c: Likewise. > * sysdeps/unix/sysv/linux/readdir.c: New file. > * sysdeps/unix/sysv/linux/readdir_r.c: Likewise. > * sysdeps/unix/sysv/linux/readdir64.c: Add compat symbol if required. > * sysdeps/unix/sysv/linux/readdir64_r.c: Likewise. > --- > ChangeLog | 25 +++++++++++ > sysdeps/posix/readdir.c | 5 +++ > sysdeps/posix/readdir_r.c | 5 +++ > sysdeps/unix/sysv/linux/arm/readdir64.c | 1 - > sysdeps/unix/sysv/linux/arm/readdir64_r.c | 1 - > sysdeps/unix/sysv/linux/m68k/readdir64.c | 1 - > sysdeps/unix/sysv/linux/m68k/readdir64_r.c | 1 - > sysdeps/unix/sysv/linux/powerpc/readdir64.c | 1 - > sysdeps/unix/sysv/linux/powerpc/readdir64_r.c | 1 - > .../sysv/linux/{i386/readdir64_r.c => readdir.c} | 30 +++---------- > sysdeps/unix/sysv/linux/readdir64.c | 51 +++++++++++++++++++++- > sysdeps/unix/sysv/linux/readdir64_r.c | 48 +++++++++++++++++++- > .../sysv/linux/{i386/readdir64.c => readdir_r.c} | 33 +++----------- > sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c | 1 - > sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c | 1 - > sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c | 1 - > .../unix/sysv/linux/sparc/sparc32/readdir64_r.c | 1 - > sysdeps/unix/sysv/linux/wordsize-64/readdir.c | 8 ---- > sysdeps/unix/sysv/linux/wordsize-64/readdir64.c | 1 - > sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c | 1 - > sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c | 4 -- > 21 files changed, 141 insertions(+), 80 deletions(-) > delete mode 100644 sysdeps/unix/sysv/linux/arm/readdir64.c > delete mode 100644 sysdeps/unix/sysv/linux/arm/readdir64_r.c > delete mode 100644 sysdeps/unix/sysv/linux/m68k/readdir64.c > delete mode 100644 sysdeps/unix/sysv/linux/m68k/readdir64_r.c > delete mode 100644 sysdeps/unix/sysv/linux/powerpc/readdir64.c > delete mode 100644 sysdeps/unix/sysv/linux/powerpc/readdir64_r.c > rename sysdeps/unix/sysv/linux/{i386/readdir64_r.c => readdir.c} (52%) > rename sysdeps/unix/sysv/linux/{i386/readdir64.c => readdir_r.c} (51%) > delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c > delete mode 100644 sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c > delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c > delete mode 100644 sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c > delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/readdir.c > delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/readdir64.c > delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c > delete mode 100644 sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c > > diff --git a/sysdeps/posix/readdir.c b/sysdeps/posix/readdir.c > index fcd3853..a6ecc0f 100644 > --- a/sysdeps/posix/readdir.c > +++ b/sysdeps/posix/readdir.c > @@ -120,3 +120,8 @@ __READDIR (DIR *dirp) > #ifdef __READDIR_ALIAS > weak_alias (__readdir, readdir) > #endif > + > +#undef __READDIR > +#undef __GETDENTS > +#undef DIRENT_TYPE > +#undef __READDIR_ALIAS > diff --git a/sysdeps/posix/readdir_r.c b/sysdeps/posix/readdir_r.c > index 79030ab..2d691e7 100644 > --- a/sysdeps/posix/readdir_r.c > +++ b/sysdeps/posix/readdir_r.c > @@ -152,3 +152,8 @@ __READDIR_R (DIR *dirp, DIRENT_TYPE *entry, DIRENT_TYPE **result) > #ifdef __READDIR_R_ALIAS > weak_alias (__readdir_r, readdir_r) > #endif > + > +#undef __READDIR_R > +#undef __GETDENTS > +#undef DIRENT_TYPE > +#undef __READDIR_R_ALIAS > diff --git a/sysdeps/unix/sysv/linux/arm/readdir64.c b/sysdeps/unix/sysv/linux/arm/readdir64.c > deleted file mode 100644 > index 2ea26dd..0000000 > --- a/sysdeps/unix/sysv/linux/arm/readdir64.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include > diff --git a/sysdeps/unix/sysv/linux/arm/readdir64_r.c b/sysdeps/unix/sysv/linux/arm/readdir64_r.c > deleted file mode 100644 > index 9f54f89..0000000 > --- a/sysdeps/unix/sysv/linux/arm/readdir64_r.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include > diff --git a/sysdeps/unix/sysv/linux/m68k/readdir64.c b/sysdeps/unix/sysv/linux/m68k/readdir64.c > deleted file mode 100644 > index 2ea26dd..0000000 > --- a/sysdeps/unix/sysv/linux/m68k/readdir64.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include > diff --git a/sysdeps/unix/sysv/linux/m68k/readdir64_r.c b/sysdeps/unix/sysv/linux/m68k/readdir64_r.c > deleted file mode 100644 > index 9f54f89..0000000 > --- a/sysdeps/unix/sysv/linux/m68k/readdir64_r.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include > diff --git a/sysdeps/unix/sysv/linux/powerpc/readdir64.c b/sysdeps/unix/sysv/linux/powerpc/readdir64.c > deleted file mode 100644 > index 2ea26dd..0000000 > --- a/sysdeps/unix/sysv/linux/powerpc/readdir64.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include > diff --git a/sysdeps/unix/sysv/linux/powerpc/readdir64_r.c b/sysdeps/unix/sysv/linux/powerpc/readdir64_r.c > deleted file mode 100644 > index 9f54f89..0000000 > --- a/sysdeps/unix/sysv/linux/powerpc/readdir64_r.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include > diff --git a/sysdeps/unix/sysv/linux/i386/readdir64_r.c b/sysdeps/unix/sysv/linux/readdir.c > similarity index 52% > rename from sysdeps/unix/sysv/linux/i386/readdir64_r.c > rename to sysdeps/unix/sysv/linux/readdir.c > index 31862a0..b99bc96 100644 > --- a/sysdeps/unix/sysv/linux/i386/readdir64_r.c > +++ b/sysdeps/unix/sysv/linux/readdir.c > @@ -1,4 +1,5 @@ > -/* Copyright (C) 2000-2018 Free Software Foundation, Inc. > +/* Read a directory. Linux no-LFS version. > + Copyright (C) 2018 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 > @@ -15,29 +16,8 @@ > License along with the GNU C Library; if not, see > . */ > > -#define __READDIR_R __readdir64_r > -#define __GETDENTS __getdents64 > -#define DIRENT_TYPE struct dirent64 > +#include > > -#include > - > -#undef __READDIR_R > -#undef __GETDENTS > -#undef DIRENT_TYPE > - > -#include > - > -versioned_symbol (libc, __readdir64_r, readdir64_r, GLIBC_2_2); > - > -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) > - > -#include > - > -#define __READDIR_R attribute_compat_text_section __old_readdir64_r > -#define __GETDENTS __old_getdents64 > -#define DIRENT_TYPE struct __old_dirent64 > - > -#include > - > -compat_symbol (libc, __old_readdir64_r, readdir64_r, GLIBC_2_1); > +#if !_DIRENT_MATCHES_DIRENT64 > +# include > #endif > diff --git a/sysdeps/unix/sysv/linux/readdir64.c b/sysdeps/unix/sysv/linux/readdir64.c > index 6d154fe..054e4ff 100644 > --- a/sysdeps/unix/sysv/linux/readdir64.c > +++ b/sysdeps/unix/sysv/linux/readdir64.c > @@ -1,8 +1,55 @@ > -#define __READDIR __readdir64 > -#define __GETDENTS __getdents64 > +/* Read a directory. Linux LFS version. > + Copyright (C) 2018 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 > + . */ > + > +/* When _DIRENT_MATCHES_DIRENT64 is defined we can alias 'readdir64' to > + 'readdir'. However the function signatures are not equal due > + different return types, so we need to suppress {__}readdir so weak > + and strong alias do not throw conflicting types errors. */ > +#define readdir __no_readdir_decl > +#define __readdir __no___readdir_decl > +#include > + > +#define __READDIR __readdir64 > +#define __GETDENTS __getdents64 > #define DIRENT_TYPE struct dirent64 > > #include > > +#undef __readdir > +#undef readdir > + > libc_hidden_def (__readdir64) > +#if _DIRENT_MATCHES_DIRENT64 > +strong_alias (__readdir64, __readdir) > weak_alias (__readdir64, readdir64) > +weak_alias (__readdir64, readdir) > +#else > +/* The compat code expects the 'struct direct' with d_ino being a __ino_t > + instead of __ino64_t. */ > +# include > +versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2); > +# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) > +# include > +# define __READDIR attribute_compat_text_section __old_readdir64 > +# define __GETDENTS __old_getdents64 > +# define DIRENT_TYPE struct __old_dirent64 > +# include > +libc_hidden_def (__old_readdir64) > +compat_symbol (libc, __old_readdir64, readdir64, GLIBC_2_1); > +# endif /* SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) */ > +#endif /* _DIRENT_MATCHES_DIRENT64 */ > diff --git a/sysdeps/unix/sysv/linux/readdir64_r.c b/sysdeps/unix/sysv/linux/readdir64_r.c > index 3dfbf4f..22b23d5 100644 > --- a/sysdeps/unix/sysv/linux/readdir64_r.c > +++ b/sysdeps/unix/sysv/linux/readdir64_r.c > @@ -1,7 +1,53 @@ > +/* Read a directory in reentrant mode. Linux LFS version. > + Copyright (C) 2018 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 > + . */ > + > +/* When _DIRENT_MATCHES_DIRENT64 is defined we can alias 'readdir64' to > + 'readdir'. However the function signatures are not equal due > + different return types, so we need to suppress {__}readdir so weak > + and strong alias do not throw conflicting types errors. */ > +#define readdir_r __no_readdir_r_decl > +#define __readdir_r __no___readdir_r_decl > +#include > + > #define __READDIR_R __readdir64_r > -#define __GETDENTS __getdents64 > +#define __GETDENTS __getdents64 > #define DIRENT_TYPE struct dirent64 > > #include > > +#undef __readdir_r > +#undef readdir_r > + > +#if _DIRENT_MATCHES_DIRENT64 > +strong_alias (__readdir64_r, __readdir_r) > +weak_alias (__readdir64_r, readdir_r) > weak_alias (__readdir64_r, readdir64_r) > +#else > +/* The compat code expects the 'struct direct' with d_ino being a __ino_t > + instead of __ino64_t. */ > +# include > +versioned_symbol (libc, __readdir64_r, readdir64_r, GLIBC_2_2); > +# if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) > +# include > +# define __READDIR_R attribute_compat_text_section __old_readdir64_r > +# define __GETDENTS __old_getdents64 > +# define DIRENT_TYPE struct __old_dirent64 > +# include > +compat_symbol (libc, __old_readdir64_r, readdir64_r, GLIBC_2_1); > +# endif /* SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) */ > +#endif /* _DIRENT_MATCHES_DIRENT64 */ > diff --git a/sysdeps/unix/sysv/linux/i386/readdir64.c b/sysdeps/unix/sysv/linux/readdir_r.c > similarity index 51% > rename from sysdeps/unix/sysv/linux/i386/readdir64.c > rename to sysdeps/unix/sysv/linux/readdir_r.c > index 42b7302..7ca9e8e 100644 > --- a/sysdeps/unix/sysv/linux/i386/readdir64.c > +++ b/sysdeps/unix/sysv/linux/readdir_r.c > @@ -1,4 +1,5 @@ > -/* Copyright (C) 2000-2018 Free Software Foundation, Inc. > +/* Read a directory in reentrant mode. Linux no-LFS version. > + Copyright (C) 2018 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 > @@ -15,32 +16,8 @@ > License along with the GNU C Library; if not, see > . */ > > -#define __READDIR __readdir64 > -#define __GETDENTS __getdents64 > -#define DIRENT_TYPE struct dirent64 > +#include > > -#include > - > -#include > - > -#undef __READDIR > -#undef __GETDENTS > -#undef DIRENT_TYPE > - > -libc_hidden_def (__readdir64) > -versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2); > - > -#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2) > - > -#include > - > -#define __READDIR attribute_compat_text_section __old_readdir64 > -#define __GETDENTS __old_getdents64 > -#define DIRENT_TYPE struct __old_dirent64 > - > -#include > - > -libc_hidden_def (__old_readdir64) > - > -compat_symbol (libc, __old_readdir64, readdir64, GLIBC_2_1); > +#if !_DIRENT_MATCHES_DIRENT64 > +# include > #endif > diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c b/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c > deleted file mode 100644 > index 2ea26dd..0000000 > --- a/sysdeps/unix/sysv/linux/s390/s390-32/readdir64.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include > diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c b/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c > deleted file mode 100644 > index 9f54f89..0000000 > --- a/sysdeps/unix/sysv/linux/s390/s390-32/readdir64_r.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c b/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c > deleted file mode 100644 > index 2ea26dd..0000000 > --- a/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include > diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c b/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c > deleted file mode 100644 > index 9f54f89..0000000 > --- a/sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c > +++ /dev/null > @@ -1 +0,0 @@ > -#include > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/readdir.c b/sysdeps/unix/sysv/linux/wordsize-64/readdir.c > deleted file mode 100644 > index 0d57988..0000000 > --- a/sysdeps/unix/sysv/linux/wordsize-64/readdir.c > +++ /dev/null > @@ -1,8 +0,0 @@ > -#define readdir64 __no_readdir64_decl > -#define __readdir64 __no___readdir64_decl > -#include > -#undef __readdir64 > -strong_alias (__readdir, __readdir64) > -strong_alias (__readdir, __GI___readdir64) > -#undef readdir64 > -weak_alias (__readdir, readdir64) > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/readdir64.c b/sysdeps/unix/sysv/linux/wordsize-64/readdir64.c > deleted file mode 100644 > index 9796431..0000000 > --- a/sysdeps/unix/sysv/linux/wordsize-64/readdir64.c > +++ /dev/null > @@ -1 +0,0 @@ > -/* readdir64 is in readdir.c */ > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c b/sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c > deleted file mode 100644 > index b8fe9a3..0000000 > --- a/sysdeps/unix/sysv/linux/wordsize-64/readdir64_r.c > +++ /dev/null > @@ -1 +0,0 @@ > -/* readdir64_r is in readdir_r.c */ > diff --git a/sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c b/sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c > deleted file mode 100644 > index 290f2c8..0000000 > --- a/sysdeps/unix/sysv/linux/wordsize-64/readdir_r.c > +++ /dev/null > @@ -1,4 +0,0 @@ > -#define readdir64_r __no_readdir64_r_decl > -#include > -#undef readdir64_r > -weak_alias (__readdir_r, readdir64_r) >