diff options
34 files changed, 153 insertions, 51 deletions
@@ -1,5 +1,48 @@ 2012-08-06 Roland McGrath <roland@hack.frob.com> + * dirent/alphasort.c [_DIRENT_MATCHES_DIRENT64]: + Define alphasort64 as an alias. + * dirent/versionsort.c [_DIRENT_MATCHES_DIRENT64]: + Define versionsort64 as an alias. + * dirent/scandir.c [_DIRENT_MATCHES_DIRENT64]: + Define scandir64 as an alias. + * dirent/scandirat.c [_DIRENT_MATCHES_DIRENT64]: + Define scandirat64 as an alias. + * dirent/alphasort64.c (alphasort64): + Conditionalize on [!_DIRENT_MATCHES_DIRENT64]. + * dirent/versionsort64.c: Likewise. + * dirent/scandir64.c: Likewise. + * dirent/scandirat64.c: Likewise. + * sysdeps/wordsize-64/alphasort.c: File removed. + * sysdeps/wordsize-64/alphasort64.c: File removed. + * sysdeps/wordsize-64/scandir.c: File removed. + * sysdeps/wordsize-64/scandir64.c: File removed. + * sysdeps/wordsize-64/scandirat.c: File removed. + * sysdeps/wordsize-64/scandirat64.c: File removed. + * sysdeps/wordsize-64/versionsort.c: File removed. + * sysdeps/wordsize-64/versionsort64.c: File removed. + * sysdeps/unix/sysv/linux/x86_64/x32/alphasort.c: File removed. + * sysdeps/unix/sysv/linux/x86_64/x32/alphasort64.c: File removed. + * sysdeps/unix/sysv/linux/x86_64/x32/scandir.c: File removed. + * sysdeps/unix/sysv/linux/x86_64/x32/scandir64.c: File removed. + * sysdeps/unix/sysv/linux/x86_64/x32/scandirat.c: File removed. + * sysdeps/unix/sysv/linux/x86_64/x32/scandirat64.c: File removed. + * sysdeps/unix/sysv/linux/x86_64/x32/versionsort.c: File removed. + * sysdeps/unix/sysv/linux/x86_64/x32/versionsort64.c: File removed. + + * bits/typesizes.h [__LP64__] (__INO_T_MATCHES_INO64_T): New macros. + * sysdeps/unix/sysv/linux/s390/bits/typesizes.h: + [__s390x__] (__INO_T_MATCHES_INO64_T): New macro. + * sysdeps/unix/sysv/linux/sparc/bits/typesizes.h + [defined __arch64__ || defined __sparcv9] + (__INO_T_MATCHES_INO64_T): New macro. + * sysdeps/unix/sysv/linux/x86/bits/typesizes.h + [__x86_64__] (__INO_T_MATCHES_INO64_T): New macro. + * bits/dirent.h (_DIRENT_MATCHES_DIRENT64): New macro. + * sysdeps/unix/sysv/linux/bits/dirent.h + [defined __OFF_T_MATCHES_OFF64_T && defined __INO_T_MATCHES_INO64_T] + (_DIRENT_MATCHES_DIRENT64): New macro. + * io/lockf.c [__OFF_T_MATCHES_OFF64_T]: Define lockf64 as an alias. * libio/fseeko.c [__OFF_T_MATCHES_OFF64_T]: diff --git a/bits/dirent.h b/bits/dirent.h index ac1928d3db..5b803c6539 100644 --- a/bits/dirent.h +++ b/bits/dirent.h @@ -1,5 +1,5 @@ /* Directory entry structure `struct dirent'. Stub version. - Copyright (C) 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1996-2012 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 @@ -33,3 +33,6 @@ struct dirent64 int d_fileno; }; #endif + +/* Inform libc code that these two types are identical. */ +#define _DIRENT_MATCHES_DIRENT64 1 diff --git a/bits/typesizes.h b/bits/typesizes.h index 09959f2b45..c3debd0dd6 100644 --- a/bits/typesizes.h +++ b/bits/typesizes.h @@ -66,6 +66,9 @@ for all ABI purposes, even if possibly expressed as different base types for C type-checking purposes. */ # define __OFF_T_MATCHES_OFF64_T 1 + +/* Same for ino_t and ino64_t. */ +# define __INO_T_MATCHES_INO64_T 1 #endif /* Number of descriptors that can fit in an `fd_set'. */ diff --git a/dirent/alphasort.c b/dirent/alphasort.c index 5939322ab8..6fab7f89bd 100644 --- a/dirent/alphasort.c +++ b/dirent/alphasort.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1997, 1998, 2009 Free Software Foundation, Inc. +/* Copyright (C) 1992-2012 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,7 +15,15 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +/* We need to avoid the header declaration of alphasort64, because + the types don't match alphasort and then the compiler will + complain about the mismatch when we do the alias below. */ +#define alphasort64 __renamed_alphasort64 + #include <dirent.h> + +#undef alphasort64 + #include <string.h> int @@ -23,3 +31,7 @@ alphasort (const struct dirent **a, const struct dirent **b) { return strcoll ((*a)->d_name, (*b)->d_name); } + +#ifdef _DIRENT_MATCHES_DIRENT64 +weak_alias (alphasort, alphasort64) +#endif diff --git a/dirent/alphasort64.c b/dirent/alphasort64.c index 4f5c1ddc35..a4d37abbac 100644 --- a/dirent/alphasort64.c +++ b/dirent/alphasort64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1997, 1998, 2000, 2009 Free Software Foundation, Inc. +/* Copyright (C) 1992-2012 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 @@ -18,8 +18,13 @@ #include <dirent.h> #include <string.h> +/* alphasort.c defines alphasort64 as an alias if _DIRENT_MATCHES_DIRENT64. */ +#ifndef _DIRENT_MATCHES_DIRENT64 + int alphasort64 (const struct dirent64 **a, const struct dirent64 **b) { return strcoll ((*a)->d_name, (*b)->d_name); } + +#endif diff --git a/dirent/scandir.c b/dirent/scandir.c index 8b0a87ba06..6dce54d64a 100644 --- a/dirent/scandir.c +++ b/dirent/scandir.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1992-1998,2000,2002,2003,2009,2011 - Free Software Foundation, Inc. +/* Copyright (C) 1992-2012 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 @@ -16,7 +15,15 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +/* We need to avoid the header declaration of scandir64, because + the types don't match scandir and then the compiler will + complain about the mismatch when we do the alias below. */ +#define scandir64 __renamed_scandir64 + #include <dirent.h> + +#undef scandir64 + #include <fcntl.h> #ifndef SCANDIR @@ -35,3 +42,7 @@ SCANDIR (dir, namelist, select, cmp) { return SCANDIRAT (AT_FDCWD, dir, namelist, select, cmp); } + +#ifdef _DIRENT_MATCHES_DIRENT64 +weak_alias (scandir, scandir64) +#endif diff --git a/dirent/scandir64.c b/dirent/scandir64.c index 78ac570a18..bba302f01a 100644 --- a/dirent/scandir64.c +++ b/dirent/scandir64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2009, 2011 Free Software Foundation, Inc. +/* Copyright (C) 2000-2012 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 @@ -17,8 +17,13 @@ #include <dirent.h> +/* scandir.c defines scandir64 as an alias if _DIRENT_MATCHES_DIRENT64. */ +#ifndef _DIRENT_MATCHES_DIRENT64 + #define SCANDIR scandir64 #define SCANDIRAT scandirat64 #define DIRENT_TYPE struct dirent64 #include <dirent/scandir.c> + +#endif diff --git a/dirent/scandirat.c b/dirent/scandirat.c index 13bd57416a..c2704baa88 100644 --- a/dirent/scandirat.c +++ b/dirent/scandirat.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1992-1998,2000,2002,2003,2009,2011 - Free Software Foundation, Inc. +/* Copyright (C) 1992-2012 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 @@ -16,7 +15,15 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +/* We need to avoid the header declaration of scandir64, because + the types don't match scandir and then the compiler will + complain about the mismatch when we do the alias below. */ +#define scandirat64 __renamed_scandirat64 + #include <dirent.h> + +#undef scandirat64 + #include <stdlib.h> #include <string.h> #include <errno.h> @@ -141,3 +148,7 @@ SCANDIRAT (dfd, dir, namelist, select, cmp) return c.cnt; } libc_hidden_def (SCANDIRAT) + +#ifdef _DIRENT_MATCHES_DIRENT64 +weak_alias (scandirat, scandirat64) +#endif diff --git a/dirent/scandirat64.c b/dirent/scandirat64.c index a816ee9e85..608ca33ac9 100644 --- a/dirent/scandirat64.c +++ b/dirent/scandirat64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2009, 2011 Free Software Foundation, Inc. +/* Copyright (C) 2000-2012 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 @@ -17,9 +17,14 @@ #include <dirent.h> +/* scandirat.c defines scandirat64 as an alias if _DIRENT_MATCHES_DIRENT64. */ +#ifndef _DIRENT_MATCHES_DIRENT64 + #define SCANDIRAT scandirat64 #define READDIR __readdir64 #define DIRENT_TYPE struct dirent64 #define SKIP_SCANDIR_CANCEL 1 #include "scandirat.c" + +#endif diff --git a/dirent/versionsort.c b/dirent/versionsort.c index 47bda040db..ee34659042 100644 --- a/dirent/versionsort.c +++ b/dirent/versionsort.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1997, 1998, 2009 Free Software Foundation, Inc. +/* Copyright (C) 1992-2012 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,7 +15,15 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +/* We need to avoid the header declaration of versionsort64, because + the types don't match versionsort and then the compiler will + complain about the mismatch when we do the alias below. */ +#define versionsort64 __renamed_versionsort64 + #include <dirent.h> + +#undef versionsort64 + #include <string.h> int @@ -23,3 +31,7 @@ versionsort (const struct dirent **a, const struct dirent **b) { return __strverscmp ((*a)->d_name, (*b)->d_name); } + +#ifdef _DIRENT_MATCHES_DIRENT64 +weak_alias (versionsort, versionsort64) +#endif diff --git a/dirent/versionsort64.c b/dirent/versionsort64.c index 5b40e10bd7..dca72e8d1c 100644 --- a/dirent/versionsort64.c +++ b/dirent/versionsort64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1997, 1998, 2000, 2009 Free Software Foundation, Inc. +/* Copyright (C) 1992-2012 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 @@ -18,8 +18,13 @@ #include <dirent.h> #include <string.h> +/* versionsort.c defines a versionsort64 alias if _DIRENT_MATCHES_DIRENT64. */ +#ifndef _DIRENT_MATCHES_DIRENT64 + int versionsort64 (const struct dirent64 **a, const struct dirent64 **b) { return __strverscmp ((*a)->d_name, (*b)->d_name); } + +#endif diff --git a/ports/ChangeLog.alpha b/ports/ChangeLog.alpha index b13857f92d..eb178ea601 100644 --- a/ports/ChangeLog.alpha +++ b/ports/ChangeLog.alpha @@ -1,5 +1,10 @@ 2012-08-02 Roland McGrath <roland@hack.frob.com> + * sysdeps/unix/sysv/linux/alpha/bits/dirent.h + (_DIRENT_MATCHES_DIRENT64): New macro. + +2012-08-02 Roland McGrath <roland@hack.frob.com> + * sysdeps/unix/sysv/linux/alpha/bits/typesizes.h (__OFF_T_MATCHES_OFF64_T): New macro. diff --git a/ports/sysdeps/unix/sysv/linux/alpha/bits/dirent.h b/ports/sysdeps/unix/sysv/linux/alpha/bits/dirent.h index f146466e68..487ad15253 100644 --- a/ports/sysdeps/unix/sysv/linux/alpha/bits/dirent.h +++ b/ports/sysdeps/unix/sysv/linux/alpha/bits/dirent.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996-2012 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 @@ -51,4 +51,7 @@ struct dirent64 #define _DIRENT_HAVE_D_OFF #define _DIRENT_HAVE_D_TYPE +/* Inform libc code that these two types are effectively identical. */ +#define _DIRENT_MATCHES_DIRENT64 1 + #endif /* bits/dirent.h */ diff --git a/ports/sysdeps/unix/sysv/linux/generic/bits/typesizes.h b/ports/sysdeps/unix/sysv/linux/generic/bits/typesizes.h index 670c6d119f..d7d2a5c10d 100644 --- a/ports/sysdeps/unix/sysv/linux/generic/bits/typesizes.h +++ b/ports/sysdeps/unix/sysv/linux/generic/bits/typesizes.h @@ -67,6 +67,9 @@ for all ABI purposes, even if possibly expressed as different base types for C type-checking purposes. */ # define __OFF_T_MATCHES_OFF64_T 1 + +/* Same for ino_t and ino64_t. */ +# define __INO_T_MATCHES_INO64_T 1 #endif /* Number of descriptors that can fit in an `fd_set'. */ diff --git a/sysdeps/unix/sysv/linux/bits/dirent.h b/sysdeps/unix/sysv/linux/bits/dirent.h index 5728618f27..11daabe727 100644 --- a/sysdeps/unix/sysv/linux/bits/dirent.h +++ b/sysdeps/unix/sysv/linux/bits/dirent.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1996-2012 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 @@ -50,3 +50,8 @@ struct dirent64 #define _DIRENT_HAVE_D_RECLEN #define _DIRENT_HAVE_D_OFF #define _DIRENT_HAVE_D_TYPE + +#if defined __OFF_T_MATCHES_OFF64_T && defined __INO_T_MATCHES_INO64_T +/* Inform libc code that these two types are effectively identical. */ +# define _DIRENT_MATCHES_DIRENT64 1 +#endif diff --git a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h index bf3d8b761e..b630488406 100644 --- a/sysdeps/unix/sysv/linux/s390/bits/typesizes.h +++ b/sysdeps/unix/sysv/linux/s390/bits/typesizes.h @@ -72,6 +72,9 @@ for all ABI purposes, even if possibly expressed as different base types for C type-checking purposes. */ # define __OFF_T_MATCHES_OFF64_T 1 + +/* Same for ino_t and ino64_t. */ +# define __INO_T_MATCHES_INO64_T 1 #endif /* Number of descriptors that can fit in an `fd_set'. */ diff --git a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h index 7b1f19184b..e55d642e74 100644 --- a/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h +++ b/sysdeps/unix/sysv/linux/sparc/bits/typesizes.h @@ -66,6 +66,9 @@ for all ABI purposes, even if possibly expressed as different base types for C type-checking purposes. */ # define __OFF_T_MATCHES_OFF64_T 1 + +/* Same for ino_t and ino64_t. */ +# define __INO_T_MATCHES_INO64_T 1 #endif /* Number of descriptors that can fit in an `fd_set'. */ diff --git a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h index a477627a1b..397e867245 100644 --- a/sysdeps/unix/sysv/linux/x86/bits/typesizes.h +++ b/sysdeps/unix/sysv/linux/x86/bits/typesizes.h @@ -78,6 +78,9 @@ for all ABI purposes, even if possibly expressed as different base types for C type-checking purposes. */ # define __OFF_T_MATCHES_OFF64_T 1 + +/* Same for ino_t and ino64_t. */ +# define __INO_T_MATCHES_INO64_T 1 #endif /* Number of descriptors that can fit in an `fd_set'. */ diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/alphasort.c b/sysdeps/unix/sysv/linux/x86_64/x32/alphasort.c deleted file mode 100644 index 69ec42721f..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/alphasort.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/wordsize-64/alphasort.c> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/alphasort64.c b/sysdeps/unix/sysv/linux/x86_64/x32/alphasort64.c deleted file mode 100644 index 6c5b2a1e05..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/alphasort64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/wordsize-64/alphasort64.c> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/scandir.c b/sysdeps/unix/sysv/linux/x86_64/x32/scandir.c deleted file mode 100644 index 9288ca2588..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/scandir.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/wordsize-64/scandir.c> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/scandir64.c b/sysdeps/unix/sysv/linux/x86_64/x32/scandir64.c deleted file mode 100644 index 6d22057590..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/scandir64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/wordsize-64/scandir64.c> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/scandirat.c b/sysdeps/unix/sysv/linux/x86_64/x32/scandirat.c deleted file mode 100644 index 5b8899367d..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/scandirat.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/wordsize-64/scandirat.c> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/scandirat64.c b/sysdeps/unix/sysv/linux/x86_64/x32/scandirat64.c deleted file mode 100644 index 0d7893d29a..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/scandirat64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/wordsize-64/scandirat64.c> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/versionsort.c b/sysdeps/unix/sysv/linux/x86_64/x32/versionsort.c deleted file mode 100644 index af5a668c24..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/versionsort.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/wordsize-64/versionsort.c> diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/versionsort64.c b/sysdeps/unix/sysv/linux/x86_64/x32/versionsort64.c deleted file mode 100644 index fe220c90e3..0000000000 --- a/sysdeps/unix/sysv/linux/x86_64/x32/versionsort64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/wordsize-64/versionsort64.c> diff --git a/sysdeps/wordsize-64/alphasort.c b/sysdeps/wordsize-64/alphasort.c deleted file mode 100644 index edc410129d..0000000000 --- a/sysdeps/wordsize-64/alphasort.c +++ /dev/null @@ -1,7 +0,0 @@ -#define alphasort64 rename_alphasort64 - -#include "../../dirent/alphasort.c" - -#undef alphasort64 - -weak_alias (alphasort, alphasort64) diff --git a/sysdeps/wordsize-64/alphasort64.c b/sysdeps/wordsize-64/alphasort64.c deleted file mode 100644 index 08509131b6..0000000000 --- a/sysdeps/wordsize-64/alphasort64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in alphasort.c. */ diff --git a/sysdeps/wordsize-64/scandir.c b/sysdeps/wordsize-64/scandir.c deleted file mode 100644 index 9af7e9b386..0000000000 --- a/sysdeps/wordsize-64/scandir.c +++ /dev/null @@ -1,6 +0,0 @@ -#define scandir64 scandir64_renamed - -#include "../../dirent/scandir.c" - -#undef scandir64 -weak_alias (scandir, scandir64) diff --git a/sysdeps/wordsize-64/scandir64.c b/sysdeps/wordsize-64/scandir64.c deleted file mode 100644 index 3c2c4a1590..0000000000 --- a/sysdeps/wordsize-64/scandir64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in scandir.c. */ diff --git a/sysdeps/wordsize-64/scandirat.c b/sysdeps/wordsize-64/scandirat.c deleted file mode 100644 index 02b8fdee0f..0000000000 --- a/sysdeps/wordsize-64/scandirat.c +++ /dev/null @@ -1,6 +0,0 @@ -#define scandirat64 scandirat64_renamed - -#include "../../dirent/scandirat.c" - -#undef scandirat64 -weak_alias (scandirat, scandirat64) diff --git a/sysdeps/wordsize-64/scandirat64.c b/sysdeps/wordsize-64/scandirat64.c deleted file mode 100644 index fb938654a4..0000000000 --- a/sysdeps/wordsize-64/scandirat64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in scandirat.c. */ diff --git a/sysdeps/wordsize-64/versionsort.c b/sysdeps/wordsize-64/versionsort.c deleted file mode 100644 index bb25550d3d..0000000000 --- a/sysdeps/wordsize-64/versionsort.c +++ /dev/null @@ -1,7 +0,0 @@ -#define versionsort64 rename_versionsort64 - -#include "../../dirent/versionsort.c" - -#undef versionsort64 - -weak_alias (versionsort, versionsort64) diff --git a/sysdeps/wordsize-64/versionsort64.c b/sysdeps/wordsize-64/versionsort64.c deleted file mode 100644 index ac6c3c702a..0000000000 --- a/sysdeps/wordsize-64/versionsort64.c +++ /dev/null @@ -1 +0,0 @@ -/* Defined in versionsort.c. */ |