mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-28 00:21:52 +03:00
Update.
2000-08-11 Ulrich Drepper <drepper@redhat.com> * rt/aio_cancel.c: If canceling a specific request which is running *really* do nothing. * rt/aio_misc.h: Add `done' to states of a request. * rt/aio_misc.c: Add several tests for the correct state. Simplify request table memory handling. 2000-08-10 Jakub Jelinek <jakub@redhat.com> * dirent/scandir.c: Use it for scandir64 and old_scandir64 as well. * dirent/scandir64.c: Move... * sysdeps/generic/scandir64.c: ...here. * dirent/alphasort64.c: Move... * sysdeps/generic/alphasort64.c: ...here. * dirent/versionsort64.c: Move... * sysdeps/generic/versionsort64.c: ...here. * sysdeps/unix/sysv/linux/i386/dirent/Versions (alphasort64, getdirentries64, readdir64, readdir64_r, scandir64, versionsort64): Export symbols at GLIBC_2.2. * sysdeps/unix/sysv/linux/powerpc/dirent/Versions: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc32/dirent/Versions: Likewise. * include/dirent.h (__readdir64_r, __scandir64, __alphasort64, __versionsort64): Add prototypes. * io/Versions (__xstat64, __fxstat64, __lxstat64): Export at GLIBC_2.2. * sysdeps/unix/sysv/linux/alpha/kernel_stat.h (__xstat_conv): Remove unused prototype. * sysdeps/unix/sysv/linux/alpha/readdir.c: Export at both GLIBC_2.1 and GLIBC_2.2. * sysdeps/unix/sysv/linux/alpha/readdir_r.c: Likewise. * sysdeps/unix/sysv/linux/alpha/getdents.c: New. * sysdeps/unix/sysv/linux/alpha/getdents64.c: New. * sysdeps/unix/sysv/linux/bits/types.h (__ino64_t): Change to __u_quad_t. * sysdeps/unix/sysv/linux/bits/stat.h (struct stat, struct stat64): Adjust for kernel-2.4.0-test6 layout. * sysdeps/unix/sysv/linux/i386/fxstat.c (__fxstat64): Export at both GLIBC_2.1 and GLIBC_2.2. * sysdeps/unix/sysv/linux/i386/lxstat.c (__lxstat64): Likewise. * sysdeps/unix/sysv/linux/i386/xstat.c (__xstat64): Likewise. * sysdeps/unix/sysv/linux/i386/getdents64.c: New. * sysdeps/unix/sysv/linux/i386/olddirent.h: New. * sysdeps/unix/sysv/linux/i386/readdir64.c: New. * sysdeps/unix/sysv/linux/i386/readdir64_r.c: New. * sysdeps/unix/sysv/linux/i386/scandir64.c: New. * sysdeps/unix/sysv/linux/i386/alphasort64.c: New. * sysdeps/unix/sysv/linux/i386/versionsort64.c: New. * sysdeps/unix/sysv/linux/ia64/getdents.c: New. * sysdeps/unix/sysv/linux/ia64/getdents64.c: New. * sysdeps/unix/sysv/linux/ia64/readdir.c: Include alpha/readdir.c. * sysdeps/unix/sysv/linux/ia64/readdir_r.c: Include alpha/readdir_r.c. * sysdeps/unix/sysv/linux/mips/bits/types.h (__ino64_t): Change to __u_quad_t. * sysdeps/unix/sysv/linux/powerpc/bits/stat.h: New. * sysdeps/unix/sysv/linux/powerpc/kernel_stat.h (_HAVE_STAT*): Define. * sysdeps/unix/sysv/linux/powerpc/scandir64.c: New. * sysdeps/unix/sysv/linux/powerpc/getdents64.c: New. * sysdeps/unix/sysv/linux/powerpc/readdir64.c: New. * sysdeps/unix/sysv/linux/powerpc/readdir64_r.c: New. * sysdeps/unix/sysv/linux/sparc/bits/types.h (__ino64_t): Change to __u_quad_t. * sysdeps/unix/sysv/linux/sparc/bits/stat.h: New. * sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h (_HAVE_STAT*): Define. * sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c: New. * sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c: New. * sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c: New. * sysdeps/unix/sysv/linux/sparc/sparc32/scandir64.c: New. * sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h (_HAVE_STAT*): Define. * sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c: Include alpha/readdir.c. * sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c: Include alpha/readdir_r.c * sysdeps/unix/sysv/linux/sparc/sparc64/getdents.c: New. * sysdeps/unix/sysv/linux/sparc/sparc64/getdents64.c: New. * sysdeps/unix/sysv/linux/fxstat64.c (__fxstat64): If _HAVE_STAT64___ST_INO and __st_ino != (uint32_t)st_ino, set st_ino from __st_ino. * sysdeps/unix/sysv/linux/lxstat64.c (__lxstat64): Likewise. * sysdeps/unix/sysv/linux/xstat64.c (__xstat64): Likewise. * sysdeps/unix/sysv/linux/xstatconv.c (xstat_conv, xstat64_conv, xstat32_conv): Use _HAVE_STAT* macros. If _HAVE_STAT64___ST_INO, set __st_ino in addition to st_ino. * sysdeps/unix/sysv/linux/kernel_stat.h (_HAVE_STAT*): Define. * sysdeps/unix/sysv/linux/getdents.c: Use it for __getdents64 and __old_getdents64 as well. * sysdeps/unix/sysv/linux/getdirentries.c: Use it for getdirentries64 and old_getdirentries64 as well. * sysdeps/unix/sysv/linux/getdirentries64.c (GETDIRENTRIES, __GETDENTS): Define. (GETDENTS64): Remove. * sysdeps/unix/sysv/linux/getdents64.c (__GETDENTS, DIRENT_TYPE): Define. (GETDENTS64): Remove. * sysdeps/unix/sysv/linux/readdir64.c: Use sysdeps/unix/readdir.c. * sysdeps/unix/sysv/linux/readdir64_r.c: Use sysdeps/unix/readdir_r.c. * sysdeps/unix/readdir.c: Use it for readdir64 and __old_readdir64 as well. * sysdeps/unix/readdir_r.c: Use it for readdir64_r and __old_readdir64_r as well. * sysdeps/unix/sysv/linux/kernel-features.h: Define __ASSUME_ST_INO_64_bit for kernel 2.4.1 and up. * sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Add SI_KERNEL define.
This commit is contained in:
107
ChangeLog
107
ChangeLog
@ -1,7 +1,110 @@
|
|||||||
|
2000-08-11 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* rt/aio_cancel.c: If canceling a specific request which is running
|
||||||
|
*really* do nothing.
|
||||||
|
* rt/aio_misc.h: Add `done' to states of a request.
|
||||||
|
* rt/aio_misc.c: Add several tests for the correct state.
|
||||||
|
Simplify request table memory handling.
|
||||||
|
|
||||||
|
2000-08-10 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
|
* dirent/scandir.c: Use it for scandir64 and old_scandir64 as well.
|
||||||
|
* dirent/scandir64.c: Move...
|
||||||
|
* sysdeps/generic/scandir64.c: ...here.
|
||||||
|
* dirent/alphasort64.c: Move...
|
||||||
|
* sysdeps/generic/alphasort64.c: ...here.
|
||||||
|
* dirent/versionsort64.c: Move...
|
||||||
|
* sysdeps/generic/versionsort64.c: ...here.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/dirent/Versions (alphasort64,
|
||||||
|
getdirentries64, readdir64, readdir64_r, scandir64, versionsort64):
|
||||||
|
Export symbols at GLIBC_2.2.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/dirent/Versions: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/dirent/Versions: Likewise.
|
||||||
|
* include/dirent.h (__readdir64_r, __scandir64, __alphasort64,
|
||||||
|
__versionsort64): Add prototypes.
|
||||||
|
* io/Versions (__xstat64, __fxstat64, __lxstat64): Export at GLIBC_2.2.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/kernel_stat.h (__xstat_conv): Remove
|
||||||
|
unused prototype.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/readdir.c: Export at both GLIBC_2.1
|
||||||
|
and GLIBC_2.2.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/readdir_r.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/getdents.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/alpha/getdents64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/bits/types.h (__ino64_t): Change to
|
||||||
|
__u_quad_t.
|
||||||
|
* sysdeps/unix/sysv/linux/bits/stat.h (struct stat, struct stat64):
|
||||||
|
Adjust for kernel-2.4.0-test6 layout.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/fxstat.c (__fxstat64): Export at both
|
||||||
|
GLIBC_2.1 and GLIBC_2.2.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/lxstat.c (__lxstat64): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/xstat.c (__xstat64): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/getdents64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/olddirent.h: New.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/readdir64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/readdir64_r.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/scandir64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/alphasort64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/i386/versionsort64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/ia64/getdents.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/ia64/getdents64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/ia64/readdir.c: Include alpha/readdir.c.
|
||||||
|
* sysdeps/unix/sysv/linux/ia64/readdir_r.c: Include alpha/readdir_r.c.
|
||||||
|
* sysdeps/unix/sysv/linux/mips/bits/types.h (__ino64_t): Change to
|
||||||
|
__u_quad_t.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/bits/stat.h: New.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/kernel_stat.h (_HAVE_STAT*): Define.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/scandir64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/getdents64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/readdir64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/readdir64_r.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/bits/types.h (__ino64_t): Change to
|
||||||
|
__u_quad_t.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/bits/stat.h: New.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/kernel_stat.h (_HAVE_STAT*):
|
||||||
|
Define.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc32/scandir64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/kernel_stat.h (_HAVE_STAT*):
|
||||||
|
Define.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/readdir.c: Include
|
||||||
|
alpha/readdir.c.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/readdir_r.c: Include
|
||||||
|
alpha/readdir_r.c
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/getdents.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/sparc/sparc64/getdents64.c: New.
|
||||||
|
* sysdeps/unix/sysv/linux/fxstat64.c (__fxstat64): If
|
||||||
|
_HAVE_STAT64___ST_INO and __st_ino != (uint32_t)st_ino, set
|
||||||
|
st_ino from __st_ino.
|
||||||
|
* sysdeps/unix/sysv/linux/lxstat64.c (__lxstat64): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/xstat64.c (__xstat64): Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/xstatconv.c (xstat_conv, xstat64_conv,
|
||||||
|
xstat32_conv): Use _HAVE_STAT* macros. If _HAVE_STAT64___ST_INO,
|
||||||
|
set __st_ino in addition to st_ino.
|
||||||
|
* sysdeps/unix/sysv/linux/kernel_stat.h (_HAVE_STAT*): Define.
|
||||||
|
* sysdeps/unix/sysv/linux/getdents.c: Use it for __getdents64 and
|
||||||
|
__old_getdents64 as well.
|
||||||
|
* sysdeps/unix/sysv/linux/getdirentries.c: Use it for
|
||||||
|
getdirentries64 and old_getdirentries64 as well.
|
||||||
|
* sysdeps/unix/sysv/linux/getdirentries64.c (GETDIRENTRIES,
|
||||||
|
__GETDENTS): Define.
|
||||||
|
(GETDENTS64): Remove.
|
||||||
|
* sysdeps/unix/sysv/linux/getdents64.c (__GETDENTS, DIRENT_TYPE):
|
||||||
|
Define.
|
||||||
|
(GETDENTS64): Remove.
|
||||||
|
* sysdeps/unix/sysv/linux/readdir64.c: Use sysdeps/unix/readdir.c.
|
||||||
|
* sysdeps/unix/sysv/linux/readdir64_r.c: Use sysdeps/unix/readdir_r.c.
|
||||||
|
* sysdeps/unix/readdir.c: Use it for readdir64 and __old_readdir64
|
||||||
|
as well.
|
||||||
|
* sysdeps/unix/readdir_r.c: Use it for readdir64_r and
|
||||||
|
__old_readdir64_r as well.
|
||||||
|
* sysdeps/unix/sysv/linux/kernel-features.h: Define
|
||||||
|
__ASSUME_ST_INO_64_bit for kernel 2.4.1 and up.
|
||||||
|
|
||||||
2000-08-08 Jes Sorensen <jes@linuxcare.com>
|
2000-08-08 Jes Sorensen <jes@linuxcare.com>
|
||||||
|
|
||||||
* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Add SI_KERNEL
|
* sysdeps/unix/sysv/linux/ia64/bits/siginfo.h: Add SI_KERNEL define.
|
||||||
define.
|
|
||||||
Add missing ILL_BADIADDR to enum and make ILL_BREAK match the
|
Add missing ILL_BADIADDR to enum and make ILL_BREAK match the
|
||||||
define of the kernel.
|
define of the kernel.
|
||||||
Add missing __SEG_PSTKOVF definition.
|
Add missing __SEG_PSTKOVF definition.
|
||||||
|
15
NEWS
15
NEWS
@ -1,4 +1,4 @@
|
|||||||
GNU C Library NEWS -- history of user-visible changes. 2000-08-03
|
GNU C Library NEWS -- history of user-visible changes. 2000-08-11
|
||||||
|
|
||||||
Copyright (C) 1992-1999, 2000 Free Software Foundation, Inc.
|
Copyright (C) 1992-1999, 2000 Free Software Foundation, Inc.
|
||||||
See the end for copying conditions.
|
See the end for copying conditions.
|
||||||
@ -1084,7 +1084,8 @@ Version 1.04
|
|||||||
compiler, so the C library should now work with C++ code.
|
compiler, so the C library should now work with C++ code.
|
||||||
|
|
||||||
* The header file <bstring.h> is gone. <string.h> now declares bcopy,
|
* The header file <bstring.h> is gone. <string.h> now declares bcopy,
|
||||||
bcmp, bzero, and ffs.
|
bcmp, bzero, and ffs. (Update: nowadays these functions are declared
|
||||||
|
in <strings.h>.)
|
||||||
|
|
||||||
* Mike Haertel (of GNU e?grep and malloc fame) has written a new sorting
|
* Mike Haertel (of GNU e?grep and malloc fame) has written a new sorting
|
||||||
function which uses the `merge sort' algorithm, and is said to be
|
function which uses the `merge sort' algorithm, and is said to be
|
||||||
@ -1095,14 +1096,6 @@ Version 1.04
|
|||||||
|
|
||||||
* The C library now includes Michael Glad's Ultra Fast Crypt, which
|
* The C library now includes Michael Glad's Ultra Fast Crypt, which
|
||||||
provides the Unix `crypt' function, plus some other entry points.
|
provides the Unix `crypt' function, plus some other entry points.
|
||||||
Because of the United States export restriction on DES implementations,
|
|
||||||
we are distributing this code separately from the rest of the C library.
|
|
||||||
There is an extra distribution tar file just for crypt; it is called
|
|
||||||
`glibc-VERSION-crypt.tar.Z', e.g. `glibc-1.04-crypt.tar.Z'. You can just
|
|
||||||
unpack the crypt distribution along with the rest of the C library and
|
|
||||||
build; you can also build the library without getting crypt. Users
|
|
||||||
outside the USA can get the crypt distribution via anonymous FTP from
|
|
||||||
ftp.uni-c.dk [129.142.6.74], or another archive site outside the U.S.
|
|
||||||
|
|
||||||
* The code and header files taken from 4.4 BSD have been updated with the
|
* The code and header files taken from 4.4 BSD have been updated with the
|
||||||
latest files released from Berkeley.
|
latest files released from Berkeley.
|
||||||
@ -1110,7 +1103,7 @@ Version 1.04
|
|||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Copyright information:
|
Copyright information:
|
||||||
|
|
||||||
Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
|
Copyright (C) 1992-1999, 2000 Free Software Foundation, Inc.
|
||||||
|
|
||||||
Permission is granted to anyone to make or distribute verbatim copies
|
Permission is granted to anyone to make or distribute verbatim copies
|
||||||
of this document as received, in any medium, provided that the
|
of this document as received, in any medium, provided that the
|
||||||
|
@ -21,17 +21,23 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
|
#ifndef SCANDIR
|
||||||
|
#define SCANDIR scandir
|
||||||
|
#define READDIR __readdir
|
||||||
|
#define DIRENT_TYPE struct dirent
|
||||||
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
scandir (dir, namelist, select, cmp)
|
SCANDIR (dir, namelist, select, cmp)
|
||||||
const char *dir;
|
const char *dir;
|
||||||
struct dirent ***namelist;
|
DIRENT_TYPE ***namelist;
|
||||||
int (*select) (const struct dirent *);
|
int (*select) (const DIRENT_TYPE *);
|
||||||
int (*cmp) (const void *, const void *);
|
int (*cmp) (const void *, const void *);
|
||||||
{
|
{
|
||||||
DIR *dp = __opendir (dir);
|
DIR *dp = __opendir (dir);
|
||||||
struct dirent **v = NULL;
|
DIRENT_TYPE **v = NULL;
|
||||||
size_t vsize = 0, i;
|
size_t vsize = 0, i;
|
||||||
struct dirent *d;
|
DIRENT_TYPE *d;
|
||||||
int save;
|
int save;
|
||||||
|
|
||||||
if (dp == NULL)
|
if (dp == NULL)
|
||||||
@ -41,10 +47,10 @@ scandir (dir, namelist, select, cmp)
|
|||||||
__set_errno (0);
|
__set_errno (0);
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while ((d = __readdir (dp)) != NULL)
|
while ((d = READDIR (dp)) != NULL)
|
||||||
if (select == NULL || (*select) (d))
|
if (select == NULL || (*select) (d))
|
||||||
{
|
{
|
||||||
struct dirent *vnew;
|
DIRENT_TYPE *vnew;
|
||||||
size_t dsize;
|
size_t dsize;
|
||||||
|
|
||||||
/* Ignore errors from select or readdir */
|
/* Ignore errors from select or readdir */
|
||||||
@ -52,23 +58,23 @@ scandir (dir, namelist, select, cmp)
|
|||||||
|
|
||||||
if (__builtin_expect (i == vsize, 0))
|
if (__builtin_expect (i == vsize, 0))
|
||||||
{
|
{
|
||||||
struct dirent **new;
|
DIRENT_TYPE **new;
|
||||||
if (vsize == 0)
|
if (vsize == 0)
|
||||||
vsize = 10;
|
vsize = 10;
|
||||||
else
|
else
|
||||||
vsize *= 2;
|
vsize *= 2;
|
||||||
new = (struct dirent **) realloc (v, vsize * sizeof (*v));
|
new = (DIRENT_TYPE **) realloc (v, vsize * sizeof (*v));
|
||||||
if (new == NULL)
|
if (new == NULL)
|
||||||
break;
|
break;
|
||||||
v = new;
|
v = new;
|
||||||
}
|
}
|
||||||
|
|
||||||
dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d;
|
dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d;
|
||||||
vnew = (struct dirent *) malloc (dsize);
|
vnew = (DIRENT_TYPE *) malloc (dsize);
|
||||||
if (vnew == NULL)
|
if (vnew == NULL)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
v[i++] = (struct dirent *) memcpy (vnew, d, dsize);
|
v[i++] = (DIRENT_TYPE *) memcpy (vnew, d, dsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (__builtin_expect (errno, 0) != 0)
|
if (__builtin_expect (errno, 0) != 0)
|
||||||
|
@ -1,93 +0,0 @@
|
|||||||
/* Copyright (C) 1992,93,94,95,96,97,98,2000 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 Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 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
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
scandir64 (dir, namelist, select, cmp)
|
|
||||||
const char *dir;
|
|
||||||
struct dirent64 ***namelist;
|
|
||||||
int (*select) (const struct dirent64 *);
|
|
||||||
int (*cmp) (const void *, const void *);
|
|
||||||
{
|
|
||||||
DIR *dp = __opendir (dir);
|
|
||||||
struct dirent64 **v = NULL;
|
|
||||||
size_t vsize = 0, i;
|
|
||||||
struct dirent64 *d;
|
|
||||||
int save;
|
|
||||||
|
|
||||||
if (dp == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
save = errno;
|
|
||||||
__set_errno (0);
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while ((d = __readdir64 (dp)) != NULL)
|
|
||||||
if (select == NULL || (*select) (d))
|
|
||||||
{
|
|
||||||
struct dirent64 *vnew;
|
|
||||||
size_t dsize;
|
|
||||||
|
|
||||||
/* Ignore errors from select or readdir */
|
|
||||||
__set_errno (0);
|
|
||||||
|
|
||||||
if (i == vsize)
|
|
||||||
{
|
|
||||||
struct dirent64 **new;
|
|
||||||
if (vsize == 0)
|
|
||||||
vsize = 10;
|
|
||||||
else
|
|
||||||
vsize *= 2;
|
|
||||||
new = (struct dirent64 **) realloc (v, vsize * sizeof (*v));
|
|
||||||
if (new == NULL)
|
|
||||||
break;
|
|
||||||
v = new;
|
|
||||||
}
|
|
||||||
|
|
||||||
dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d;
|
|
||||||
vnew = (struct dirent64 *) malloc (dsize);
|
|
||||||
if (vnew == NULL)
|
|
||||||
break;
|
|
||||||
|
|
||||||
v[i++] = (struct dirent64 *) memcpy (vnew, d, dsize);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (errno != 0)
|
|
||||||
{
|
|
||||||
save = errno;
|
|
||||||
(void) __closedir (dp);
|
|
||||||
while (i > 0)
|
|
||||||
free (v[--i]);
|
|
||||||
free (v);
|
|
||||||
__set_errno (save);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(void) __closedir (dp);
|
|
||||||
__set_errno (save);
|
|
||||||
|
|
||||||
/* Sort the list if we have a comparison function to sort with. */
|
|
||||||
if (cmp != NULL)
|
|
||||||
qsort (v, i, sizeof (*v), cmp);
|
|
||||||
*namelist = v;
|
|
||||||
return i;
|
|
||||||
}
|
|
@ -8,8 +8,16 @@ extern struct dirent *__readdir (DIR *__dirp);
|
|||||||
extern struct dirent64 *__readdir64 (DIR *__dirp);
|
extern struct dirent64 *__readdir64 (DIR *__dirp);
|
||||||
extern int __readdir_r (DIR *__dirp, struct dirent *__entry,
|
extern int __readdir_r (DIR *__dirp, struct dirent *__entry,
|
||||||
struct dirent **__result);
|
struct dirent **__result);
|
||||||
|
extern int __readdir64_r (DIR *__dirp, struct dirent64 *__entry,
|
||||||
|
struct dirent64 **__result);
|
||||||
|
extern int __scandir64 (__const char * __dir,
|
||||||
|
struct dirent64 *** __namelist,
|
||||||
|
int (*__selector) (__const struct dirent64 *),
|
||||||
|
int (*__cmp) (__const void *, __const void *));
|
||||||
extern __ssize_t __getdents (int __fd, char *__buf, size_t __nbytes)
|
extern __ssize_t __getdents (int __fd, char *__buf, size_t __nbytes)
|
||||||
internal_function;
|
internal_function;
|
||||||
extern __ssize_t __getdents64 (int __fd, char *__buf, size_t __nbytes)
|
extern __ssize_t __getdents64 (int __fd, char *__buf, size_t __nbytes)
|
||||||
internal_function;
|
internal_function;
|
||||||
|
extern int __alphasort64 (const void *a, const void *b);
|
||||||
|
extern int __versionsort64 (const void *a, const void *b);
|
||||||
#endif
|
#endif
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
/* And undo the hack. */
|
/* And undo the hack. */
|
||||||
#undef aio_cancel64
|
#undef aio_cancel64
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "aio_misc.h"
|
#include "aio_misc.h"
|
||||||
@ -74,18 +75,21 @@ aio_cancel (fildes, aiocbp)
|
|||||||
|
|
||||||
/* Don't remove the entry if a thread is already working on it. */
|
/* Don't remove the entry if a thread is already working on it. */
|
||||||
if (req->running == allocated)
|
if (req->running == allocated)
|
||||||
|
{
|
||||||
result = AIO_NOTCANCELED;
|
result = AIO_NOTCANCELED;
|
||||||
else if (req->running == yes)
|
req = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
/* We can remove the entry. */
|
/* We can remove the entry. */
|
||||||
__aio_remove_request (last, req, 0);
|
__aio_remove_request (last, req, 0);
|
||||||
|
|
||||||
result = AIO_CANCELED;
|
result = AIO_CANCELED;
|
||||||
}
|
|
||||||
|
|
||||||
req->next_prio = NULL;
|
req->next_prio = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Find the beginning of the list of all requests for this
|
/* Find the beginning of the list of all requests for this
|
||||||
@ -103,19 +107,25 @@ aio_cancel (fildes, aiocbp)
|
|||||||
old->next_prio = NULL;
|
old->next_prio = NULL;
|
||||||
|
|
||||||
result = AIO_NOTCANCELED;
|
result = AIO_NOTCANCELED;
|
||||||
|
|
||||||
|
if (req != NULL)
|
||||||
|
__aio_remove_request (old, req, 1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
result = AIO_CANCELED;
|
result = AIO_CANCELED;
|
||||||
|
|
||||||
/* We can remove the entry. */
|
/* We can remove the entry. */
|
||||||
__aio_remove_request (NULL, req, 1);
|
__aio_remove_request (NULL, req, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Mark requests as canceled and send signal. */
|
/* Mark requests as canceled and send signal. */
|
||||||
while (req != NULL)
|
while (req != NULL)
|
||||||
{
|
{
|
||||||
struct requestlist *old = req;
|
struct requestlist *old = req;
|
||||||
|
assert (req->running == yes || req->running == queued);
|
||||||
req->aiocbp->aiocb.__error_code = ECANCELED;
|
req->aiocbp->aiocb.__error_code = ECANCELED;
|
||||||
req->aiocbp->aiocb.__return_value = -1;
|
req->aiocbp->aiocb.__return_value = -1;
|
||||||
__aio_notify (req);
|
__aio_notify (req);
|
||||||
|
@ -36,16 +36,16 @@ static void add_request_to_runlist (struct requestlist *newrequest);
|
|||||||
static struct requestlist **pool;
|
static struct requestlist **pool;
|
||||||
|
|
||||||
/* Number of total and allocated pool entries. */
|
/* Number of total and allocated pool entries. */
|
||||||
static size_t pool_tab_size;
|
static size_t pool_max_size;
|
||||||
static size_t pool_size;
|
static size_t pool_size;
|
||||||
|
|
||||||
/* We implement a two dimensional array but allocate each row separately.
|
/* We implement a two dimensional array but allocate each row separately.
|
||||||
The macro below determines how many entries should be used per row.
|
The macro below determines how many entries should be used per row.
|
||||||
It should better be a power of two. */
|
It should better be a power of two. */
|
||||||
#define ENTRIES_PER_ROW 16
|
#define ENTRIES_PER_ROW 32
|
||||||
|
|
||||||
/* The row table is incremented in units of this. */
|
/* How many rows we allocate at once. */
|
||||||
#define ROW_STEP 8
|
#define ROWS_STEP 8
|
||||||
|
|
||||||
/* List of available entries. */
|
/* List of available entries. */
|
||||||
static struct requestlist *freelist;
|
static struct requestlist *freelist;
|
||||||
@ -68,7 +68,7 @@ static int idle_thread_count;
|
|||||||
static struct aioinit optim =
|
static struct aioinit optim =
|
||||||
{
|
{
|
||||||
20, /* int aio_threads; Maximal number of threads. */
|
20, /* int aio_threads; Maximal number of threads. */
|
||||||
256, /* int aio_num; Number of expected simultanious requests. */
|
64, /* int aio_num; Number of expected simultanious requests. */
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
@ -96,51 +96,33 @@ get_elem (void)
|
|||||||
if (freelist == NULL)
|
if (freelist == NULL)
|
||||||
{
|
{
|
||||||
struct requestlist *new_row;
|
struct requestlist *new_row;
|
||||||
size_t new_size;
|
int cnt;
|
||||||
|
|
||||||
assert (sizeof (struct aiocb) == sizeof (struct aiocb64));
|
assert (sizeof (struct aiocb) == sizeof (struct aiocb64));
|
||||||
|
|
||||||
/* Compute new size. */
|
if (pool_size + 1 >= pool_max_size)
|
||||||
new_size = pool_size ? pool_size + ENTRIES_PER_ROW : optim.aio_num;
|
|
||||||
|
|
||||||
if ((new_size / ENTRIES_PER_ROW) >= pool_tab_size)
|
|
||||||
{
|
{
|
||||||
size_t new_tab_size = new_size / ENTRIES_PER_ROW;
|
size_t new_max_size = pool_max_size + ROWS_STEP;
|
||||||
struct requestlist **new_tab;
|
struct requestlist **new_tab;
|
||||||
|
|
||||||
new_tab = (struct requestlist **)
|
new_tab = (struct requestlist **)
|
||||||
realloc (pool, (new_tab_size * sizeof (struct requestlist *)));
|
realloc (pool, new_max_size * sizeof (struct requestlist *));
|
||||||
|
|
||||||
if (new_tab == NULL)
|
if (new_tab == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
pool_tab_size = new_tab_size;
|
pool_max_size = new_max_size;
|
||||||
pool = new_tab;
|
pool = new_tab;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pool_size == 0)
|
/* Allocat the new row. */
|
||||||
{
|
cnt = pool_size == 0 ? optim.aio_num : ENTRIES_PER_ROW;
|
||||||
size_t cnt;
|
new_row = (struct requestlist *) calloc (cnt,
|
||||||
|
sizeof (struct requestlist));
|
||||||
new_row = (struct requestlist *)
|
|
||||||
calloc (new_size, sizeof (struct requestlist));
|
|
||||||
|
|
||||||
if (new_row == NULL)
|
if (new_row == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
for (cnt = 0; cnt < new_size / ENTRIES_PER_ROW; ++cnt)
|
pool[pool_size++] = new_row;
|
||||||
pool[cnt] = &new_row[cnt * ENTRIES_PER_ROW];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Allocat one new row. */
|
|
||||||
new_row = (struct requestlist *)
|
|
||||||
calloc (ENTRIES_PER_ROW, sizeof (struct requestlist));
|
|
||||||
if (new_row == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
pool[new_size / ENTRIES_PER_ROW - 1] = new_row;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Put all the new entries in the freelist. */
|
/* Put all the new entries in the freelist. */
|
||||||
do
|
do
|
||||||
@ -148,7 +130,7 @@ get_elem (void)
|
|||||||
new_row->next_prio = freelist;
|
new_row->next_prio = freelist;
|
||||||
freelist = new_row++;
|
freelist = new_row++;
|
||||||
}
|
}
|
||||||
while (++pool_size < new_size);
|
while (--cnt > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
result = freelist;
|
result = freelist;
|
||||||
@ -210,8 +192,11 @@ internal_function
|
|||||||
__aio_remove_request (struct requestlist *last, struct requestlist *req,
|
__aio_remove_request (struct requestlist *last, struct requestlist *req,
|
||||||
int all)
|
int all)
|
||||||
{
|
{
|
||||||
|
assert (req->running == yes || req->running == queued
|
||||||
|
|| req->running == done);
|
||||||
|
|
||||||
if (last != NULL)
|
if (last != NULL)
|
||||||
last->next_prio = req->next_prio;
|
last->next_prio = all ? NULL : req->next_prio;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (all || req->next_prio == NULL)
|
if (all || req->next_prio == NULL)
|
||||||
@ -419,22 +404,27 @@ __aio_enqueue_request (aiocb_union *aiocbp, int operation)
|
|||||||
pthread_attr_init (&attr);
|
pthread_attr_init (&attr);
|
||||||
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
|
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
|
||||||
|
|
||||||
|
running = newp->running = allocated;
|
||||||
|
|
||||||
/* Now try to start a thread. */
|
/* Now try to start a thread. */
|
||||||
if (pthread_create (&thid, &attr, handle_fildes_io, newp) == 0)
|
if (pthread_create (&thid, &attr, handle_fildes_io, newp) == 0)
|
||||||
{
|
|
||||||
/* We managed to enqueue the request. All errors which can
|
/* We managed to enqueue the request. All errors which can
|
||||||
happen now can be recognized by calls to `aio_return' and
|
happen now can be recognized by calls to `aio_return' and
|
||||||
`aio_error'. */
|
`aio_error'. */
|
||||||
running = allocated;
|
|
||||||
++nthreads;
|
++nthreads;
|
||||||
}
|
else
|
||||||
else if (nthreads == 0)
|
{
|
||||||
|
/* Reset the running flat. The new request is not running. */
|
||||||
|
running = newp->running = yes;
|
||||||
|
|
||||||
|
if (nthreads == 0)
|
||||||
/* We cannot create a thread in the moment and there is
|
/* We cannot create a thread in the moment and there is
|
||||||
also no thread running. This is a problem. `errno' is
|
also no thread running. This is a problem. `errno' is
|
||||||
set to EAGAIN if this is only a temporary problem. */
|
set to EAGAIN if this is only a temporary problem. */
|
||||||
result = -1;
|
result = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* Enqueue the request in the run queue if it is not yet running. */
|
/* Enqueue the request in the run queue if it is not yet running. */
|
||||||
if (running == yes && result == 0)
|
if (running == yes && result == 0)
|
||||||
@ -486,6 +476,9 @@ handle_fildes_io (void *arg)
|
|||||||
pthread_mutex_lock (&__aio_requests_mutex);
|
pthread_mutex_lock (&__aio_requests_mutex);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
/* Hopefully this request is marked as running. */
|
||||||
|
assert (runp->running == allocated);
|
||||||
|
|
||||||
/* Update our variables. */
|
/* Update our variables. */
|
||||||
aiocbp = runp->aiocbp;
|
aiocbp = runp->aiocbp;
|
||||||
fildes = aiocbp->aiocb.aio_fildes;
|
fildes = aiocbp->aiocb.aio_fildes;
|
||||||
@ -584,6 +577,11 @@ handle_fildes_io (void *arg)
|
|||||||
request. */
|
request. */
|
||||||
__aio_notify (runp);
|
__aio_notify (runp);
|
||||||
|
|
||||||
|
/* For debugging purposes we reset the running flag of the
|
||||||
|
finished request. */
|
||||||
|
assert (runp->running == allocated);
|
||||||
|
runp->running = done;
|
||||||
|
|
||||||
/* Now dequeue the current request. */
|
/* Now dequeue the current request. */
|
||||||
__aio_remove_request (NULL, runp, 0);
|
__aio_remove_request (NULL, runp, 0);
|
||||||
if (runp->next_prio != NULL)
|
if (runp->next_prio != NULL)
|
||||||
@ -672,11 +670,7 @@ free_res (void)
|
|||||||
{
|
{
|
||||||
size_t row;
|
size_t row;
|
||||||
|
|
||||||
/* The first block of rows as specified in OPTIM is allocated in
|
for (row = 0; row < pool_max_size; ++row)
|
||||||
one chunk. */
|
|
||||||
free (pool[0]);
|
|
||||||
|
|
||||||
for (row = optim.aio_num / ENTRIES_PER_ROW; row < pool_tab_size; ++row)
|
|
||||||
free (pool[row]);
|
free (pool[row]);
|
||||||
|
|
||||||
free (pool);
|
free (pool);
|
||||||
|
@ -62,7 +62,8 @@ enum
|
|||||||
no,
|
no,
|
||||||
queued,
|
queued,
|
||||||
yes,
|
yes,
|
||||||
allocated
|
allocated,
|
||||||
|
done
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1992, 1997, 1998 Free Software Foundation, Inc.
|
/* Copyright (C) 1992, 1997, 1998, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -20,8 +20,17 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
alphasort64 (const void *a, const void *b)
|
__alphasort64 (const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return strcoll ((*(const struct dirent64 **) a)->d_name,
|
return strcoll ((*(const struct dirent64 **) a)->d_name,
|
||||||
(*(const struct dirent64 **) b)->d_name);
|
(*(const struct dirent64 **) b)->d_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
versioned_symbol (libc, __alphasort64, alphasort64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
strong_alias (__alphasort64, __old_alphasort64)
|
||||||
|
compat_symbol (libc, __old_alphasort64, alphasort64, GLIBC_2_1);
|
||||||
|
#endif
|
40
sysdeps/generic/scandir64.c
Normal file
40
sysdeps/generic/scandir64.c
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
/* Copyright (C) 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#define SCANDIR __scandir64
|
||||||
|
#define READDIR __readdir64
|
||||||
|
#define DIRENT_TYPE struct dirent64
|
||||||
|
|
||||||
|
int __scandir64 (__const char *__restrict __dir,
|
||||||
|
struct dirent64 ***__restrict __namelist,
|
||||||
|
int (*__selector) (__const struct dirent64 *),
|
||||||
|
int (*__cmp) (__const void *, __const void *));
|
||||||
|
|
||||||
|
#include <dirent/scandir.c>
|
||||||
|
|
||||||
|
#undef SCANDIR
|
||||||
|
#undef READDIR
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
versioned_symbol (libc, __scandir64, scandir64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
strong_alias (__scandir64, __old_scandir64)
|
||||||
|
compat_symbol (libc, __old_scandir64, scandir64, GLIBC_2_1);
|
||||||
|
#endif
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1992, 1997, 1998 Free Software Foundation, Inc.
|
/* Copyright (C) 1992, 1997, 1998, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -20,8 +20,17 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
versionsort64 (const void *a, const void *b)
|
__versionsort64 (const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return __strverscmp ((*(const struct dirent64 **) a)->d_name,
|
return __strverscmp ((*(const struct dirent64 **) a)->d_name,
|
||||||
(*(const struct dirent64 **) b)->d_name);
|
(*(const struct dirent64 **) b)->d_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
versioned_symbol (libc, __versionsort64, versionsort64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
strong_alias (__versionsort64, __old_versionsort64)
|
||||||
|
compat_symbol (libc, __old_versionsort64, versionsort64, GLIBC_2_1);
|
||||||
|
#endif
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991,92,93,94,95,96,97,99 Free Software Foundation, Inc.
|
/* Copyright (C) 1991,92,93,94,95,96,97,99,2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -27,12 +27,18 @@
|
|||||||
|
|
||||||
#include <dirstream.h>
|
#include <dirstream.h>
|
||||||
|
|
||||||
|
#ifndef __READDIR
|
||||||
|
# define __READDIR __readdir
|
||||||
|
# define __GETDENTS __getdents
|
||||||
|
# define DIRENT_TYPE struct dirent
|
||||||
|
# define __READDIR_ALIAS
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Read a directory entry from DIRP. */
|
/* Read a directory entry from DIRP. */
|
||||||
struct dirent *
|
DIRENT_TYPE *
|
||||||
__readdir (DIR *dirp)
|
__READDIR (DIR *dirp)
|
||||||
{
|
{
|
||||||
struct dirent *dp;
|
DIRENT_TYPE *dp;
|
||||||
|
|
||||||
__libc_lock_lock (dirp->lock);
|
__libc_lock_lock (dirp->lock);
|
||||||
|
|
||||||
@ -54,7 +60,7 @@ __readdir (DIR *dirp)
|
|||||||
maxread = dirp->allocation;
|
maxread = dirp->allocation;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bytes = __getdents (dirp->fd, dirp->data, maxread);
|
bytes = __GETDENTS (dirp->fd, dirp->data, maxread);
|
||||||
if (bytes <= 0)
|
if (bytes <= 0)
|
||||||
{
|
{
|
||||||
dp = NULL;
|
dp = NULL;
|
||||||
@ -66,12 +72,12 @@ __readdir (DIR *dirp)
|
|||||||
dirp->offset = 0;
|
dirp->offset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dp = (struct dirent *) &dirp->data[dirp->offset];
|
dp = (DIRENT_TYPE *) &dirp->data[dirp->offset];
|
||||||
|
|
||||||
#ifdef _DIRENT_HAVE_D_RECLEN
|
#ifdef _DIRENT_HAVE_D_RECLEN
|
||||||
reclen = dp->d_reclen;
|
reclen = dp->d_reclen;
|
||||||
#else
|
#else
|
||||||
/* The only version of `struct dirent' that lacks `d_reclen'
|
/* The only version of `struct dirent*' that lacks `d_reclen'
|
||||||
is fixed-size. */
|
is fixed-size. */
|
||||||
assert (sizeof dp->d_name > 1);
|
assert (sizeof dp->d_name > 1);
|
||||||
reclen = sizeof *dp;
|
reclen = sizeof *dp;
|
||||||
@ -97,4 +103,7 @@ __readdir (DIR *dirp)
|
|||||||
|
|
||||||
return dp;
|
return dp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __READDIR_ALIAS
|
||||||
weak_alias (__readdir, readdir)
|
weak_alias (__readdir, readdir)
|
||||||
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991,92,93,94,95,96,97,98,99 Free Software Foundation, Inc.
|
/* Copyright (C) 1991,92,93,94,95,96,97,98,99,2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -27,12 +27,18 @@
|
|||||||
|
|
||||||
#include <dirstream.h>
|
#include <dirstream.h>
|
||||||
|
|
||||||
|
#ifndef __READDIR_R
|
||||||
|
# define __READDIR_R __readdir_r
|
||||||
|
# define __GETDENTS __getdents
|
||||||
|
# define DIRENT_TYPE struct dirent
|
||||||
|
# define __READDIR_R_ALIAS
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Read a directory entry from DIRP. */
|
/* Read a directory entry from DIRP. */
|
||||||
int
|
int
|
||||||
__readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result)
|
__READDIR_R (DIR *dirp, DIRENT_TYPE *entry, DIRENT_TYPE **result)
|
||||||
{
|
{
|
||||||
struct dirent *dp;
|
DIRENT_TYPE *dp;
|
||||||
size_t reclen;
|
size_t reclen;
|
||||||
|
|
||||||
__libc_lock_lock (dirp->lock);
|
__libc_lock_lock (dirp->lock);
|
||||||
@ -53,7 +59,7 @@ __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result)
|
|||||||
maxread = dirp->allocation;
|
maxread = dirp->allocation;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bytes = __getdents (dirp->fd, dirp->data, maxread);
|
bytes = __GETDENTS (dirp->fd, dirp->data, maxread);
|
||||||
if (bytes <= 0)
|
if (bytes <= 0)
|
||||||
{
|
{
|
||||||
dp = NULL;
|
dp = NULL;
|
||||||
@ -67,12 +73,12 @@ __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result)
|
|||||||
dirp->offset = 0;
|
dirp->offset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
dp = (struct dirent *) &dirp->data[dirp->offset];
|
dp = (DIRENT_TYPE *) &dirp->data[dirp->offset];
|
||||||
|
|
||||||
#ifdef _DIRENT_HAVE_D_RECLEN
|
#ifdef _DIRENT_HAVE_D_RECLEN
|
||||||
reclen = dp->d_reclen;
|
reclen = dp->d_reclen;
|
||||||
#else
|
#else
|
||||||
/* The only version of `struct dirent' that lacks `d_reclen'
|
/* The only version of `struct dirent*' that lacks `d_reclen'
|
||||||
is fixed-size. */
|
is fixed-size. */
|
||||||
assert (sizeof dp->d_name > 1);
|
assert (sizeof dp->d_name > 1);
|
||||||
reclen = sizeof *dp;
|
reclen = sizeof *dp;
|
||||||
@ -104,4 +110,7 @@ __readdir_r (DIR *dirp, struct dirent *entry, struct dirent **result)
|
|||||||
|
|
||||||
return dp != NULL ? 0 : reclen ? errno : 0;
|
return dp != NULL ? 0 : reclen ? errno : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef __READDIR_R_ALIAS
|
||||||
weak_alias (__readdir_r, readdir_r)
|
weak_alias (__readdir_r, readdir_r)
|
||||||
|
#endif
|
||||||
|
6
sysdeps/unix/sysv/linux/alpha/getdents.c
Normal file
6
sysdeps/unix/sysv/linux/alpha/getdents.c
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
#define DIRENT_SET_DP_INO(dp, value) \
|
||||||
|
do { (dp)->d_ino = (value); (dp)->__pad = 0; } while (0)
|
||||||
|
#define __getdents64 __no___getdents64_decl
|
||||||
|
#include <sysdeps/unix/sysv/linux/getdents.c>
|
||||||
|
#undef __getdents64
|
||||||
|
weak_alias(__getdents, __getdents64);
|
1
sysdeps/unix/sysv/linux/alpha/getdents64.c
Normal file
1
sysdeps/unix/sysv/linux/alpha/getdents64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
/* getdents64 is in getdents.c */
|
@ -38,6 +38,4 @@ struct glibc2_stat
|
|||||||
unsigned int st_gen;
|
unsigned int st_gen;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int __xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf);
|
|
||||||
|
|
||||||
#define XSTAT_IS_XSTAT64 1
|
#define XSTAT_IS_XSTAT64 1
|
||||||
|
@ -40,7 +40,7 @@ struct stat
|
|||||||
#ifndef __USE_FILE_OFFSET64
|
#ifndef __USE_FILE_OFFSET64
|
||||||
__ino_t st_ino; /* File serial number. */
|
__ino_t st_ino; /* File serial number. */
|
||||||
#else
|
#else
|
||||||
__ino64_t st_ino; /* File serial number. */
|
__ino_t __st_ino; /* 32bit file serial number. */
|
||||||
#endif
|
#endif
|
||||||
__mode_t st_mode; /* File mode. */
|
__mode_t st_mode; /* File mode. */
|
||||||
__nlink_t st_nlink; /* Link count. */
|
__nlink_t st_nlink; /* Link count. */
|
||||||
@ -66,23 +66,27 @@ struct stat
|
|||||||
unsigned long int __unused2;
|
unsigned long int __unused2;
|
||||||
__time_t st_ctime; /* Time of last status change. */
|
__time_t st_ctime; /* Time of last status change. */
|
||||||
unsigned long int __unused3;
|
unsigned long int __unused3;
|
||||||
|
#ifndef __USE_FILE_OFFSET64
|
||||||
unsigned long int __unused4;
|
unsigned long int __unused4;
|
||||||
unsigned long int __unused5;
|
unsigned long int __unused5;
|
||||||
|
#else
|
||||||
|
__ino64_t st_ino; /* File serial number. */
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __USE_LARGEFILE64
|
#ifdef __USE_LARGEFILE64
|
||||||
struct stat64
|
struct stat64
|
||||||
{
|
{
|
||||||
__dev_t st_dev; /* Device. */
|
__dev_t st_dev; /* Device. */
|
||||||
unsigned short int __pad1;
|
unsigned int __pad1;
|
||||||
|
|
||||||
__ino64_t st_ino; /* File serial number. */
|
__ino_t __st_ino; /* 32bit file serial number. */
|
||||||
__mode_t st_mode; /* File mode. */
|
__mode_t st_mode; /* File mode. */
|
||||||
__nlink_t st_nlink; /* Link count. */
|
__nlink_t st_nlink; /* Link count. */
|
||||||
__uid_t st_uid; /* User ID of the file's owner. */
|
__uid_t st_uid; /* User ID of the file's owner. */
|
||||||
__gid_t st_gid; /* Group ID of the file's group.*/
|
__gid_t st_gid; /* Group ID of the file's group.*/
|
||||||
__dev_t st_rdev; /* Device number, if device. */
|
__dev_t st_rdev; /* Device number, if device. */
|
||||||
unsigned short int __pad2;
|
unsigned int __pad2;
|
||||||
__off64_t st_size; /* Size of file, in bytes. */
|
__off64_t st_size; /* Size of file, in bytes. */
|
||||||
__blksize_t st_blksize; /* Optimal block size for I/O. */
|
__blksize_t st_blksize; /* Optimal block size for I/O. */
|
||||||
|
|
||||||
@ -93,8 +97,7 @@ struct stat64
|
|||||||
unsigned long int __unused2;
|
unsigned long int __unused2;
|
||||||
__time_t st_ctime; /* Time of last status change. */
|
__time_t st_ctime; /* Time of last status change. */
|
||||||
unsigned long int __unused3;
|
unsigned long int __unused3;
|
||||||
unsigned long int __unused4;
|
__ino64_t st_ino; /* File serial number. */
|
||||||
unsigned long int __unused5;
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -137,7 +137,7 @@ typedef __u_long __fsfilcnt_t;
|
|||||||
typedef __u_quad_t __fsfilcnt64_t;
|
typedef __u_quad_t __fsfilcnt64_t;
|
||||||
|
|
||||||
/* Type of file serial numbers. */
|
/* Type of file serial numbers. */
|
||||||
typedef __u_long __ino64_t;
|
typedef __u_quad_t __ino64_t;
|
||||||
|
|
||||||
/* Type of file sizes and offsets. */
|
/* Type of file sizes and offsets. */
|
||||||
typedef __loff_t __off64_t;
|
typedef __loff_t __off64_t;
|
||||||
|
@ -43,13 +43,20 @@ extern int __have_no_stat64;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Get information about the file FD in BUF. */
|
/* Get information about the file FD in BUF. */
|
||||||
|
extern int ___fxstat64 (int vers, int fd, struct stat64 *buf);
|
||||||
|
|
||||||
int
|
int
|
||||||
__fxstat64 (int vers, int fd, struct stat64 *buf)
|
___fxstat64 (int vers, int fd, struct stat64 *buf)
|
||||||
{
|
{
|
||||||
#if __ASSUME_STAT64_SYSCALL > 0
|
|
||||||
return INLINE_SYSCALL (fstat64, 2, fd, CHECK_1 (buf));
|
|
||||||
#else
|
|
||||||
int result;
|
int result;
|
||||||
|
#if __ASSUME_STAT64_SYSCALL > 0
|
||||||
|
result = INLINE_SYSCALL (fstat64, 2, fd, CHECK_1 (buf));
|
||||||
|
# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0
|
||||||
|
if (!result && buf->__st_ino != (__ino_t) buf->st_ino)
|
||||||
|
buf->st_ino = buf->__st_ino;
|
||||||
|
# endif
|
||||||
|
return result;
|
||||||
|
#else
|
||||||
struct kernel_stat kbuf;
|
struct kernel_stat kbuf;
|
||||||
# if defined __NR_fstat64
|
# if defined __NR_fstat64
|
||||||
if (! __have_no_stat64)
|
if (! __have_no_stat64)
|
||||||
@ -58,7 +65,13 @@ __fxstat64 (int vers, int fd, struct stat64 *buf)
|
|||||||
result = INLINE_SYSCALL (fstat64, 2, fd, CHECK_1 (buf));
|
result = INLINE_SYSCALL (fstat64, 2, fd, CHECK_1 (buf));
|
||||||
|
|
||||||
if (result != -1 || errno != ENOSYS)
|
if (result != -1 || errno != ENOSYS)
|
||||||
|
{
|
||||||
|
# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0
|
||||||
|
if (!result && buf->__st_ino != (__ino_t)buf->st_ino)
|
||||||
|
buf->st_ino = buf->__st_ino;
|
||||||
|
# endif
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
__set_errno (saved_errno);
|
__set_errno (saved_errno);
|
||||||
__have_no_stat64 = 1;
|
__have_no_stat64 = 1;
|
||||||
@ -71,3 +84,12 @@ __fxstat64 (int vers, int fd, struct stat64 *buf)
|
|||||||
return result;
|
return result;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
versioned_symbol (libc, ___fxstat64, __fxstat64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
strong_alias (___fxstat64, __old__fxstat64)
|
||||||
|
compat_symbol (libc, __old__fxstat64, __fxstat64, GLIBC_2_1);
|
||||||
|
#endif
|
||||||
|
@ -51,9 +51,12 @@ struct kernel_dirent
|
|||||||
char d_name[256];
|
char d_name[256];
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef GETDENTS64
|
#ifndef __GETDENTS
|
||||||
# define __getdents __getdents64
|
# define __GETDENTS __getdents
|
||||||
# define dirent dirent64
|
# define DIRENT_TYPE struct dirent
|
||||||
|
#endif
|
||||||
|
#ifndef DIRENT_SET_DP_INO
|
||||||
|
# define DIRENT_SET_DP_INO(dp, value) (dp)->d_ino = (value)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The problem here is that we cannot simply read the next NBYTES
|
/* The problem here is that we cannot simply read the next NBYTES
|
||||||
@ -66,22 +69,22 @@ struct kernel_dirent
|
|||||||
amount of data returned much more then the reduced buffer size. */
|
amount of data returned much more then the reduced buffer size. */
|
||||||
ssize_t
|
ssize_t
|
||||||
internal_function
|
internal_function
|
||||||
__getdents (int fd, char *buf, size_t nbytes)
|
__GETDENTS (int fd, char *buf, size_t nbytes)
|
||||||
{
|
{
|
||||||
off_t last_offset = -1;
|
off_t last_offset = -1;
|
||||||
size_t red_nbytes;
|
size_t red_nbytes;
|
||||||
struct kernel_dirent *skdp, *kdp;
|
struct kernel_dirent *skdp, *kdp;
|
||||||
struct dirent *dp;
|
DIRENT_TYPE *dp;
|
||||||
int retval;
|
int retval;
|
||||||
const size_t size_diff = (offsetof (struct dirent, d_name)
|
const size_t size_diff = (offsetof (DIRENT_TYPE, d_name)
|
||||||
- offsetof (struct kernel_dirent, d_name));
|
- offsetof (struct kernel_dirent, d_name));
|
||||||
|
|
||||||
red_nbytes = MIN (nbytes
|
red_nbytes = MIN (nbytes
|
||||||
- ((nbytes / (offsetof (struct dirent, d_name) + 14))
|
- ((nbytes / (offsetof (DIRENT_TYPE, d_name) + 14))
|
||||||
* size_diff),
|
* size_diff),
|
||||||
nbytes - size_diff);
|
nbytes - size_diff);
|
||||||
|
|
||||||
dp = (struct dirent *) buf;
|
dp = (DIRENT_TYPE *) buf;
|
||||||
skdp = kdp = __alloca (red_nbytes);
|
skdp = kdp = __alloca (red_nbytes);
|
||||||
|
|
||||||
retval = INLINE_SYSCALL (getdents, 3, fd,
|
retval = INLINE_SYSCALL (getdents, 3, fd,
|
||||||
@ -92,7 +95,7 @@ __getdents (int fd, char *buf, size_t nbytes)
|
|||||||
|
|
||||||
while ((char *) kdp < (char *) skdp + retval)
|
while ((char *) kdp < (char *) skdp + retval)
|
||||||
{
|
{
|
||||||
const size_t alignment = __alignof__ (struct dirent);
|
const size_t alignment = __alignof__ (DIRENT_TYPE);
|
||||||
/* Since kdp->d_reclen is already aligned for the kernel structure
|
/* Since kdp->d_reclen is already aligned for the kernel structure
|
||||||
this may compute a value that is bigger than necessary. */
|
this may compute a value that is bigger than necessary. */
|
||||||
size_t new_reclen = ((kdp->d_reclen + size_diff + alignment - 1)
|
size_t new_reclen = ((kdp->d_reclen + size_diff + alignment - 1)
|
||||||
@ -116,14 +119,14 @@ __getdents (int fd, char *buf, size_t nbytes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
last_offset = kdp->d_off;
|
last_offset = kdp->d_off;
|
||||||
dp->d_ino = kdp->d_ino;
|
DIRENT_SET_DP_INO(dp, kdp->d_ino);
|
||||||
dp->d_off = kdp->d_off;
|
dp->d_off = kdp->d_off;
|
||||||
dp->d_reclen = new_reclen;
|
dp->d_reclen = new_reclen;
|
||||||
dp->d_type = DT_UNKNOWN;
|
dp->d_type = DT_UNKNOWN;
|
||||||
memcpy (dp->d_name, kdp->d_name,
|
memcpy (dp->d_name, kdp->d_name,
|
||||||
kdp->d_reclen - offsetof (struct kernel_dirent, d_name));
|
kdp->d_reclen - offsetof (struct kernel_dirent, d_name));
|
||||||
|
|
||||||
dp = (struct dirent *) ((char *) dp + new_reclen);
|
dp = (DIRENT_TYPE *) ((char *) dp + new_reclen);
|
||||||
kdp = (struct kernel_dirent *) (((char *) kdp) + kdp->d_reclen);
|
kdp = (struct kernel_dirent *) (((char *) kdp) + kdp->d_reclen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
#define GETDENTS64
|
#define __GETDENTS __getdents64
|
||||||
|
#define DIRENT_TYPE struct dirent64
|
||||||
#include <getdents.c>
|
#include <getdents.c>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1993, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
|
/* Copyright (C) 1993, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -19,20 +19,21 @@
|
|||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#ifdef GETDENTS64
|
#ifndef GETDIRENTRIES
|
||||||
# define getdirentries getdirentries64
|
# define GETDIRENTRIES getdirentries
|
||||||
# define __getdents __getdents64
|
# define __GETDENTS __getdents
|
||||||
|
#else
|
||||||
# define off_t off64_t
|
# define off_t off64_t
|
||||||
# define __lseek __lseek64
|
# define __lseek __lseek64
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
getdirentries (int fd, char *buf, size_t nbytes, off_t *basep)
|
GETDIRENTRIES (int fd, char *buf, size_t nbytes, off_t *basep)
|
||||||
{
|
{
|
||||||
off_t base = __lseek (fd, (off_t) 0, SEEK_CUR);
|
off_t base = __lseek (fd, (off_t) 0, SEEK_CUR);
|
||||||
ssize_t result;
|
ssize_t result;
|
||||||
|
|
||||||
result = __getdents (fd, buf, nbytes);
|
result = __GETDENTS (fd, buf, nbytes);
|
||||||
|
|
||||||
if (result != -1)
|
if (result != -1)
|
||||||
*basep = base;
|
*basep = base;
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
#define GETDENTS64 1
|
#define GETDIRENTRIES getdirentries64
|
||||||
|
#define __GETDENTS __getdents64
|
||||||
#include "getdirentries.c"
|
#include "getdirentries.c"
|
||||||
|
@ -13,7 +13,24 @@ libc {
|
|||||||
__modify_ldt; modify_ldt;
|
__modify_ldt; modify_ldt;
|
||||||
}
|
}
|
||||||
GLIBC_2.2 {
|
GLIBC_2.2 {
|
||||||
|
# functions used in other libraries
|
||||||
|
__xstat64; __fxstat64; __lxstat64;
|
||||||
|
|
||||||
|
# a*
|
||||||
|
alphasort64;
|
||||||
|
|
||||||
|
# g*
|
||||||
|
getdirentries64;
|
||||||
# New rlimit interface
|
# New rlimit interface
|
||||||
getrlimit; setrlimit; getrlimit64;
|
getrlimit; setrlimit; getrlimit64;
|
||||||
|
|
||||||
|
# r*
|
||||||
|
readdir64; readdir64_r;
|
||||||
|
|
||||||
|
# s*
|
||||||
|
scandir64;
|
||||||
|
|
||||||
|
# v*
|
||||||
|
versionsort64;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
48
sysdeps/unix/sysv/linux/i386/alphasort64.c
Normal file
48
sysdeps/unix/sysv/linux/i386/alphasort64.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* Copyright (C) 1992, 1997, 1998, 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
__alphasort64 (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return strcoll ((*(const struct dirent64 **) a)->d_name,
|
||||||
|
(*(const struct dirent64 **) b)->d_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
versioned_symbol (libc, __alphasort64, alphasort64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
|
||||||
|
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
__old_alphasort64 (const void *a, const void *b);
|
||||||
|
|
||||||
|
int
|
||||||
|
__old_alphasort64 (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return strcoll ((*(const struct __old_dirent64 **) a)->d_name,
|
||||||
|
(*(const struct __old_dirent64 **) b)->d_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
compat_symbol (libc, __old_alphasort64, alphasort64, GLIBC_2_1);
|
||||||
|
#endif
|
43
sysdeps/unix/sysv/linux/i386/getdents64.c
Normal file
43
sysdeps/unix/sysv/linux/i386/getdents64.c
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/* Copyright (C) 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#define __GETDENTS __getdents64
|
||||||
|
#define DIRENT_TYPE struct dirent64
|
||||||
|
|
||||||
|
#include <sysdeps/unix/sysv/linux/getdents.c>
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
#undef __READDIR
|
||||||
|
#undef __GETDENTS
|
||||||
|
#undef DIRENT_TYPE
|
||||||
|
|
||||||
|
versioned_symbol (libc, __getdents64, getdents64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
|
||||||
|
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
|
||||||
|
|
||||||
|
#define __GETDENTS __old_getdents64
|
||||||
|
#define DIRENT_TYPE struct __old_dirent64
|
||||||
|
#define kernel_dirent old_kernel_dirent
|
||||||
|
|
||||||
|
#include <sysdeps/unix/sysv/linux/getdents.c>
|
||||||
|
|
||||||
|
compat_symbol (libc, __old_getdents64, getdents64, GLIBC_2_1);
|
||||||
|
#endif
|
44
sysdeps/unix/sysv/linux/i386/olddirent.h
Normal file
44
sysdeps/unix/sysv/linux/i386/olddirent.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/* Copyright (C) 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#ifndef __OLD_DIRENT_H
|
||||||
|
#define __OLD_DIRENT_H 1
|
||||||
|
|
||||||
|
#include <dirent.h>
|
||||||
|
|
||||||
|
struct __old_dirent64
|
||||||
|
{
|
||||||
|
__ino_t d_ino;
|
||||||
|
__off64_t d_off;
|
||||||
|
unsigned short int d_reclen;
|
||||||
|
unsigned char d_type;
|
||||||
|
char d_name[256]; /* We must not include limits.h! */
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Now define the internal interfaces. */
|
||||||
|
extern struct __old_dirent64 *__old_readdir64 (DIR *__dirp);
|
||||||
|
extern int __old_readdir64_r (DIR *__dirp, struct __old_dirent64 *__entry,
|
||||||
|
struct __old_dirent64 **__result);
|
||||||
|
extern __ssize_t __old_getdents64 (int __fd, char *__buf, size_t __nbytes)
|
||||||
|
internal_function;
|
||||||
|
int __old_scandir64 (__const char * __dir,
|
||||||
|
struct __old_dirent64 *** __namelist,
|
||||||
|
int (*__selector) (__const struct __old_dirent64 *),
|
||||||
|
int (*__cmp) (__const void *, __const void *));
|
||||||
|
|
||||||
|
#endif
|
44
sysdeps/unix/sysv/linux/i386/readdir64.c
Normal file
44
sysdeps/unix/sysv/linux/i386/readdir64.c
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/* Copyright (C) 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#define __READDIR __readdir64
|
||||||
|
#define __GETDENTS __getdents64
|
||||||
|
#define DIRENT_TYPE struct dirent64
|
||||||
|
|
||||||
|
#include <sysdeps/unix/readdir.c>
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
#undef __READDIR
|
||||||
|
#undef __GETDENTS
|
||||||
|
#undef DIRENT_TYPE
|
||||||
|
|
||||||
|
versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
|
||||||
|
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
|
||||||
|
|
||||||
|
#define __READDIR __old_readdir64
|
||||||
|
#define __GETDENTS __old_getdents64
|
||||||
|
#define DIRENT_TYPE struct __old_dirent64
|
||||||
|
|
||||||
|
#include <sysdeps/unix/readdir.c>
|
||||||
|
|
||||||
|
compat_symbol (libc, __old_readdir64, readdir64, GLIBC_2_1);
|
||||||
|
#endif
|
44
sysdeps/unix/sysv/linux/i386/readdir64_r.c
Normal file
44
sysdeps/unix/sysv/linux/i386/readdir64_r.c
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/* Copyright (C) 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#define __READDIR_R __readdir64_r
|
||||||
|
#define __GETDENTS __getdents64
|
||||||
|
#define DIRENT_TYPE struct dirent64
|
||||||
|
|
||||||
|
#include <sysdeps/unix/readdir_r.c>
|
||||||
|
|
||||||
|
#undef __READDIR_R
|
||||||
|
#undef __GETDENTS
|
||||||
|
#undef DIRENT_TYPE
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
versioned_symbol (libc, __readdir64_r, readdir64_r, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
|
||||||
|
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
|
||||||
|
|
||||||
|
#define __READDIR_R __old_readdir64_r
|
||||||
|
#define __GETDENTS __old_getdents64
|
||||||
|
#define DIRENT_TYPE struct __old_dirent64
|
||||||
|
|
||||||
|
#include <sysdeps/unix/readdir_r.c>
|
||||||
|
|
||||||
|
compat_symbol (libc, __old_readdir64_r, readdir64_r, GLIBC_2_1);
|
||||||
|
#endif
|
47
sysdeps/unix/sysv/linux/i386/scandir64.c
Normal file
47
sysdeps/unix/sysv/linux/i386/scandir64.c
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/* Copyright (C) 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <dirent.h>
|
||||||
|
|
||||||
|
#define SCANDIR __scandir64
|
||||||
|
#define READDIR __readdir64
|
||||||
|
#define DIRENT_TYPE struct dirent64
|
||||||
|
|
||||||
|
#include <dirent/scandir.c>
|
||||||
|
|
||||||
|
#undef SCANDIR
|
||||||
|
#undef READDIR
|
||||||
|
#undef DIRENT_TYPE
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
versioned_symbol (libc, __scandir64, scandir64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
|
||||||
|
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
|
||||||
|
|
||||||
|
#define SCANDIR __old_scandir64
|
||||||
|
#define READDIR __old_readdir64
|
||||||
|
#define DIRENT_TYPE struct __old_dirent64
|
||||||
|
|
||||||
|
#include <dirent/scandir.c>
|
||||||
|
|
||||||
|
compat_symbol (libc, __old_scandir64, scandir64, GLIBC_2_1);
|
||||||
|
|
||||||
|
#endif
|
48
sysdeps/unix/sysv/linux/i386/versionsort64.c
Normal file
48
sysdeps/unix/sysv/linux/i386/versionsort64.c
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/* Copyright (C) 1992, 1997, 1998, 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
__versionsort64 (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return __strverscmp ((*(const struct dirent64 **) a)->d_name,
|
||||||
|
(*(const struct dirent64 **) b)->d_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
versioned_symbol (libc, __versionsort64, versionsort64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
|
||||||
|
#include <sysdeps/unix/sysv/linux/i386/olddirent.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
__old_versionsort64 (const void *a, const void *b);
|
||||||
|
|
||||||
|
int
|
||||||
|
__old_versionsort64 (const void *a, const void *b)
|
||||||
|
{
|
||||||
|
return __strverscmp ((*(const struct __old_dirent64 **) a)->d_name,
|
||||||
|
(*(const struct __old_dirent64 **) b)->d_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
compat_symbol (libc, __old_versionsort64, versionsort64, GLIBC_2_1);
|
||||||
|
#endif
|
4
sysdeps/unix/sysv/linux/ia64/getdents.c
Normal file
4
sysdeps/unix/sysv/linux/ia64/getdents.c
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#define __getdents64 __no___getdents64_decl
|
||||||
|
#include <sysdeps/unix/sysv/linux/getdents.c>
|
||||||
|
#undef __getdents64
|
||||||
|
weak_alias(__getdents, __getdents64);
|
1
sysdeps/unix/sysv/linux/ia64/getdents64.c
Normal file
1
sysdeps/unix/sysv/linux/ia64/getdents64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
/* getdents64 is in getdents.c */
|
@ -1,7 +1 @@
|
|||||||
#define readdir64 __no_readdir64_decl
|
#include <sysdeps/unix/sysv/linux/alpha/readdir.c>
|
||||||
#define __readdir64 __no___readdir64_decl
|
|
||||||
#include <sysdeps/unix/readdir.c>
|
|
||||||
#undef __readdir64
|
|
||||||
strong_alias (__readdir, __readdir64)
|
|
||||||
#undef readdir64
|
|
||||||
weak_alias (__readdir, readdir64)
|
|
||||||
|
@ -1,4 +1 @@
|
|||||||
#define readdir64_r __no_readdir64_r_decl
|
#include <sysdeps/unix/sysv/linux/alpha/readdir_r.c>
|
||||||
#include <sysdeps/unix/readdir_r.c>
|
|
||||||
#undef readdir64_r
|
|
||||||
weak_alias (__readdir_r, readdir64_r)
|
|
||||||
|
@ -122,3 +122,10 @@
|
|||||||
#if __LINUX_KERNEL_VERSION >= 131939
|
#if __LINUX_KERNEL_VERSION >= 131939
|
||||||
# define __ASSUME_LDT_WORKS 1
|
# define __ASSUME_LDT_WORKS 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* The changed st_ino field appeared in 2.4.0-test6. But we cannot
|
||||||
|
distinguish this version from other 2.4.0 releases. Therefore play
|
||||||
|
save and assume it available for 2.4.1 and up. */
|
||||||
|
#if __LINUX_KERNEL_VERSION >= 132097
|
||||||
|
# define __ASSUME_ST_INO_64_BIT 1
|
||||||
|
#endif
|
||||||
|
@ -29,3 +29,17 @@ struct kernel_stat
|
|||||||
unsigned long int __unused5;
|
unsigned long int __unused5;
|
||||||
#define _HAVE___UNUSED5
|
#define _HAVE___UNUSED5
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define _HAVE_STAT___UNUSED1
|
||||||
|
#define _HAVE_STAT___UNUSED2
|
||||||
|
#define _HAVE_STAT___UNUSED3
|
||||||
|
#define _HAVE_STAT___UNUSED4
|
||||||
|
#define _HAVE_STAT___UNUSED5
|
||||||
|
#define _HAVE_STAT___PAD1
|
||||||
|
#define _HAVE_STAT___PAD2
|
||||||
|
#define _HAVE_STAT64___UNUSED1
|
||||||
|
#define _HAVE_STAT64___UNUSED2
|
||||||
|
#define _HAVE_STAT64___UNUSED3
|
||||||
|
#define _HAVE_STAT64___PAD1
|
||||||
|
#define _HAVE_STAT64___PAD2
|
||||||
|
#define _HAVE_STAT64___ST_INO
|
||||||
|
@ -32,10 +32,12 @@
|
|||||||
# include <xstatconv.c>
|
# include <xstatconv.c>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int __syscall_lstat (const char *__unbounded, struct kernel_stat *__unbounded);
|
extern int __syscall_lstat (const char *__unbounded,
|
||||||
|
struct kernel_stat *__unbounded);
|
||||||
|
|
||||||
#ifdef __NR_lstat64
|
#ifdef __NR_lstat64
|
||||||
extern int __syscall_lstat64 (const char *__unbounded, struct stat64 *__unbounded);
|
extern int __syscall_lstat64 (const char *__unbounded,
|
||||||
|
struct stat64 *__unbounded);
|
||||||
# if __ASSUME_STAT64_SYSCALL == 0
|
# if __ASSUME_STAT64_SYSCALL == 0
|
||||||
/* The variable is shared between all wrappers around *stat64 calls. */
|
/* The variable is shared between all wrappers around *stat64 calls. */
|
||||||
extern int __have_no_stat64;
|
extern int __have_no_stat64;
|
||||||
@ -43,14 +45,21 @@ extern int __have_no_stat64;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Get information about the file NAME in BUF. */
|
/* Get information about the file NAME in BUF. */
|
||||||
|
extern int ___lxstat64 (int vers, const char *name, struct stat64 *buf);
|
||||||
|
|
||||||
int
|
int
|
||||||
__lxstat64 (int vers, const char *name, struct stat64 *buf)
|
___lxstat64 (int vers, const char *name, struct stat64 *buf)
|
||||||
{
|
{
|
||||||
|
int result;
|
||||||
#ifdef __ASSUME_STAT64_SYSCALL
|
#ifdef __ASSUME_STAT64_SYSCALL
|
||||||
return INLINE_SYSCALL (lstat64, 2, CHECK_STRING (name), CHECK_1 (buf));
|
result = INLINE_SYSCALL (lstat64, 2, CHECK_STRING (name), CHECK_1 (buf));
|
||||||
|
# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0
|
||||||
|
if (!result && buf->__st_ino != (__ino_t)buf->st_ino)
|
||||||
|
buf->st_ino = buf->__st_ino;
|
||||||
|
# endif
|
||||||
|
return result;
|
||||||
#else
|
#else
|
||||||
struct kernel_stat kbuf;
|
struct kernel_stat kbuf;
|
||||||
int result;
|
|
||||||
# ifdef __NR_lstat64
|
# ifdef __NR_lstat64
|
||||||
if (! __have_no_stat64)
|
if (! __have_no_stat64)
|
||||||
{
|
{
|
||||||
@ -58,7 +67,13 @@ __lxstat64 (int vers, const char *name, struct stat64 *buf)
|
|||||||
result = INLINE_SYSCALL (lstat64, 2, CHECK_STRING (name), CHECK_1 (buf));
|
result = INLINE_SYSCALL (lstat64, 2, CHECK_STRING (name), CHECK_1 (buf));
|
||||||
|
|
||||||
if (result != -1 || errno != ENOSYS)
|
if (result != -1 || errno != ENOSYS)
|
||||||
|
{
|
||||||
|
# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0
|
||||||
|
if (!result && buf->__st_ino != (__ino_t)buf->st_ino)
|
||||||
|
buf->st_ino = buf->__st_ino;
|
||||||
|
# endif
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
__set_errno (saved_errno);
|
__set_errno (saved_errno);
|
||||||
__have_no_stat64 = 1;
|
__have_no_stat64 = 1;
|
||||||
@ -71,3 +86,12 @@ __lxstat64 (int vers, const char *name, struct stat64 *buf)
|
|||||||
return result;
|
return result;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
versioned_symbol (libc, ___lxstat64, __lxstat64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
strong_alias (___lxstat64, __old__lxstat64)
|
||||||
|
compat_symbol (libc, __old__lxstat64, __lxstat64, GLIBC_2_1);
|
||||||
|
#endif
|
||||||
|
@ -137,7 +137,7 @@ typedef __u_long __fsfilcnt_t;
|
|||||||
typedef __u_quad_t __fsfilcnt64_t;
|
typedef __u_quad_t __fsfilcnt64_t;
|
||||||
|
|
||||||
/* Type of file serial numbers. */
|
/* Type of file serial numbers. */
|
||||||
typedef __u_long __ino64_t;
|
typedef __u_quad_t __ino64_t;
|
||||||
|
|
||||||
/* Type of file sizes and offsets. */
|
/* Type of file sizes and offsets. */
|
||||||
typedef __loff_t __off64_t;
|
typedef __loff_t __off64_t;
|
||||||
|
@ -6,7 +6,24 @@ libc {
|
|||||||
__register_frame_info_table;
|
__register_frame_info_table;
|
||||||
}
|
}
|
||||||
GLIBC_2.2 {
|
GLIBC_2.2 {
|
||||||
|
# functions used in other libraries
|
||||||
|
__xstat64; __fxstat64; __lxstat64;
|
||||||
|
|
||||||
|
# a*
|
||||||
|
alphasort64;
|
||||||
|
|
||||||
|
# g*
|
||||||
|
getdirentries64;
|
||||||
# New rlimit interface
|
# New rlimit interface
|
||||||
getrlimit; setrlimit; getrlimit64; setrlimit64;
|
getrlimit; setrlimit; getrlimit64; setrlimit64;
|
||||||
|
|
||||||
|
# r*
|
||||||
|
readdir64; readdir64_r;
|
||||||
|
|
||||||
|
# s*
|
||||||
|
scandir64;
|
||||||
|
|
||||||
|
# v*
|
||||||
|
versionsort64;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
128
sysdeps/unix/sysv/linux/powerpc/bits/stat.h
Normal file
128
sysdeps/unix/sysv/linux/powerpc/bits/stat.h
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
/* Copyright (C) 1992, 95, 96, 97, 98, 99, 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#ifndef _SYS_STAT_H
|
||||||
|
# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Versions of the `struct stat' data structure. */
|
||||||
|
#define _STAT_VER_LINUX_OLD 1
|
||||||
|
#define _STAT_VER_KERNEL 1
|
||||||
|
#define _STAT_VER_SVR4 2
|
||||||
|
#define _STAT_VER_LINUX 3
|
||||||
|
#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */
|
||||||
|
|
||||||
|
/* Versions of the `xmknod' interface. */
|
||||||
|
#define _MKNOD_VER_LINUX 1
|
||||||
|
#define _MKNOD_VER_SVR4 2
|
||||||
|
#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */
|
||||||
|
|
||||||
|
|
||||||
|
struct stat
|
||||||
|
{
|
||||||
|
__dev_t st_dev; /* Device. */
|
||||||
|
#ifndef __USE_FILE_OFFSET64
|
||||||
|
unsigned short int __pad1;
|
||||||
|
__ino_t st_ino; /* File serial number. */
|
||||||
|
#else
|
||||||
|
__ino64_t st_ino; /* File serial number. */
|
||||||
|
#endif
|
||||||
|
__mode_t st_mode; /* File mode. */
|
||||||
|
__nlink_t st_nlink; /* Link count. */
|
||||||
|
__uid_t st_uid; /* User ID of the file's owner. */
|
||||||
|
__gid_t st_gid; /* Group ID of the file's group.*/
|
||||||
|
__dev_t st_rdev; /* Device number, if device. */
|
||||||
|
unsigned short int __pad2;
|
||||||
|
#ifndef __USE_FILE_OFFSET64
|
||||||
|
__off_t st_size; /* Size of file, in bytes. */
|
||||||
|
#else
|
||||||
|
__off64_t st_size; /* Size of file, in bytes. */
|
||||||
|
#endif
|
||||||
|
__blksize_t st_blksize; /* Optimal block size for I/O. */
|
||||||
|
|
||||||
|
#ifndef __USE_FILE_OFFSET64
|
||||||
|
__blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */
|
||||||
|
#else
|
||||||
|
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
|
||||||
|
#endif
|
||||||
|
__time_t st_atime; /* Time of last access. */
|
||||||
|
unsigned long int __unused1;
|
||||||
|
__time_t st_mtime; /* Time of last modification. */
|
||||||
|
unsigned long int __unused2;
|
||||||
|
__time_t st_ctime; /* Time of last status change. */
|
||||||
|
unsigned long int __unused3;
|
||||||
|
unsigned long int __unused4;
|
||||||
|
unsigned long int __unused5;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __USE_LARGEFILE64
|
||||||
|
struct stat64
|
||||||
|
{
|
||||||
|
__dev_t st_dev; /* Device. */
|
||||||
|
__ino64_t st_ino; /* File serial number. */
|
||||||
|
__mode_t st_mode; /* File mode. */
|
||||||
|
__nlink_t st_nlink; /* Link count. */
|
||||||
|
__uid_t st_uid; /* User ID of the file's owner. */
|
||||||
|
__gid_t st_gid; /* Group ID of the file's group.*/
|
||||||
|
__dev_t st_rdev; /* Device number, if device. */
|
||||||
|
unsigned short int __pad2;
|
||||||
|
__off64_t st_size; /* Size of file, in bytes. */
|
||||||
|
__blksize_t st_blksize; /* Optimal block size for I/O. */
|
||||||
|
|
||||||
|
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
|
||||||
|
__time_t st_atime; /* Time of last access. */
|
||||||
|
unsigned long int __unused1;
|
||||||
|
__time_t st_mtime; /* Time of last modification. */
|
||||||
|
unsigned long int __unused2;
|
||||||
|
__time_t st_ctime; /* Time of last status change. */
|
||||||
|
unsigned long int __unused3;
|
||||||
|
unsigned long int __unused4;
|
||||||
|
unsigned long int __unused5;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Tell code we have these members. */
|
||||||
|
#define _STATBUF_ST_BLKSIZE
|
||||||
|
#define _STATBUF_ST_RDEV
|
||||||
|
|
||||||
|
/* Encoding of the file mode. */
|
||||||
|
|
||||||
|
#define __S_IFMT 0170000 /* These bits determine file type. */
|
||||||
|
|
||||||
|
/* File types. */
|
||||||
|
#define __S_IFDIR 0040000 /* Directory. */
|
||||||
|
#define __S_IFCHR 0020000 /* Character device. */
|
||||||
|
#define __S_IFBLK 0060000 /* Block device. */
|
||||||
|
#define __S_IFREG 0100000 /* Regular file. */
|
||||||
|
#define __S_IFIFO 0010000 /* FIFO. */
|
||||||
|
#define __S_IFLNK 0120000 /* Symbolic link. */
|
||||||
|
#define __S_IFSOCK 0140000 /* Socket. */
|
||||||
|
|
||||||
|
/* POSIX.1b objects. */
|
||||||
|
#define __S_TYPEISMQ(buf) (0)
|
||||||
|
#define __S_TYPEISSEM(buf) (0)
|
||||||
|
#define __S_TYPEISSHM(buf) (0)
|
||||||
|
|
||||||
|
/* Protection bits. */
|
||||||
|
|
||||||
|
#define __S_ISUID 04000 /* Set user ID on execution. */
|
||||||
|
#define __S_ISGID 02000 /* Set group ID on execution. */
|
||||||
|
#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */
|
||||||
|
#define __S_IREAD 0400 /* Read by owner. */
|
||||||
|
#define __S_IWRITE 0200 /* Write by owner. */
|
||||||
|
#define __S_IEXEC 0100 /* Execute by owner. */
|
1
sysdeps/unix/sysv/linux/powerpc/getdents64.c
Normal file
1
sysdeps/unix/sysv/linux/powerpc/getdents64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/getdents64.c>
|
@ -1,5 +1,5 @@
|
|||||||
/* Definition of `struct stat' used in the kernel.
|
/* Definition of `struct stat' used in the kernel.
|
||||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
Copyright (C) 1997, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -43,3 +43,17 @@ struct kernel_stat
|
|||||||
unsigned long int __unused5;
|
unsigned long int __unused5;
|
||||||
#define _HAVE___UNUSED5
|
#define _HAVE___UNUSED5
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define _HAVE_STAT___UNUSED1
|
||||||
|
#define _HAVE_STAT___UNUSED2
|
||||||
|
#define _HAVE_STAT___UNUSED3
|
||||||
|
#define _HAVE_STAT___UNUSED4
|
||||||
|
#define _HAVE_STAT___UNUSED5
|
||||||
|
#define _HAVE_STAT___PAD1
|
||||||
|
#define _HAVE_STAT___PAD2
|
||||||
|
#define _HAVE_STAT64___UNUSED1
|
||||||
|
#define _HAVE_STAT64___UNUSED2
|
||||||
|
#define _HAVE_STAT64___UNUSED3
|
||||||
|
#define _HAVE_STAT64___UNUSED4
|
||||||
|
#define _HAVE_STAT64___UNUSED5
|
||||||
|
#define _HAVE_STAT64___PAD2
|
||||||
|
1
sysdeps/unix/sysv/linux/powerpc/readdir64.c
Normal file
1
sysdeps/unix/sysv/linux/powerpc/readdir64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/readdir64.c>
|
1
sysdeps/unix/sysv/linux/powerpc/readdir64_r.c
Normal file
1
sysdeps/unix/sysv/linux/powerpc/readdir64_r.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/readdir64_r.c>
|
1
sysdeps/unix/sysv/linux/powerpc/scandir64.c
Normal file
1
sysdeps/unix/sysv/linux/powerpc/scandir64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/scandir64.c>
|
@ -1,99 +1,14 @@
|
|||||||
/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
|
#define __READDIR __readdir64
|
||||||
This file is part of the GNU C Library.
|
#define __GETDENTS __getdents64
|
||||||
|
#define DIRENT_TYPE struct dirent64
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
#include <sysdeps/unix/readdir.c>
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
#include <shlib-compat.h>
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
versioned_symbol (libc, __readdir64, readdir64, GLIBC_2_2);
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#include <errno.h>
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
#include <limits.h>
|
strong_alias (__readdir64, __old_readdir64)
|
||||||
#include <stddef.h>
|
compat_symbol (libc, __old_readdir64, readdir64, GLIBC_2_1);
|
||||||
#include <string.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#include <dirstream.h>
|
|
||||||
|
|
||||||
/* Read a directory entry from DIRP. */
|
|
||||||
struct dirent64 *
|
|
||||||
__readdir64 (DIR *dirp)
|
|
||||||
{
|
|
||||||
struct dirent64 *dp;
|
|
||||||
|
|
||||||
__libc_lock_lock (dirp->lock);
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
size_t reclen;
|
|
||||||
|
|
||||||
if (dirp->offset >= dirp->size)
|
|
||||||
{
|
|
||||||
/* We've emptied out our buffer. Refill it. */
|
|
||||||
|
|
||||||
size_t maxread;
|
|
||||||
ssize_t bytes;
|
|
||||||
|
|
||||||
#ifndef _DIRENT_HAVE_D_RECLEN
|
|
||||||
/* Fixed-size struct; must read one at a time (see below). */
|
|
||||||
maxread = sizeof *dp;
|
|
||||||
#else
|
|
||||||
maxread = dirp->allocation;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bytes = __getdents64 (dirp->fd, dirp->data, maxread);
|
|
||||||
if (bytes <= 0)
|
|
||||||
{
|
|
||||||
dp = NULL;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
dirp->size = (size_t) bytes;
|
|
||||||
|
|
||||||
/* Reset the offset into the buffer. */
|
|
||||||
dirp->offset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
dp = (struct dirent64 *) &dirp->data[dirp->offset];
|
|
||||||
|
|
||||||
#ifdef _DIRENT_HAVE_D_RECLEN
|
|
||||||
reclen = dp->d_reclen;
|
|
||||||
#else
|
|
||||||
/* The only version of `struct dirent64' that lacks `d_reclen'
|
|
||||||
is fixed-size. */
|
|
||||||
assert (sizeof dp->d_name > 1);
|
|
||||||
reclen = sizeof *dp;
|
|
||||||
/* The name is not terminated if it is the largest possible size.
|
|
||||||
Clobber the following byte to ensure proper null termination. We
|
|
||||||
read jst one entry at a time above so we know that byte will not
|
|
||||||
be used later. */
|
|
||||||
dp->d_name[sizeof dp->d_name] = '\0';
|
|
||||||
#endif
|
|
||||||
|
|
||||||
dirp->offset += reclen;
|
|
||||||
|
|
||||||
#ifdef _DIRENT_HAVE_D_OFF
|
|
||||||
dirp->filepos = dp->d_off;
|
|
||||||
#else
|
|
||||||
dirp->filepos += reclen;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Skip deleted files. */
|
|
||||||
} while (dp->d_ino == 0);
|
|
||||||
|
|
||||||
__libc_lock_unlock (dirp->lock);
|
|
||||||
|
|
||||||
return dp;
|
|
||||||
}
|
|
||||||
weak_alias (__readdir64, readdir64)
|
|
||||||
|
@ -1,106 +1,14 @@
|
|||||||
/* Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
|
#define __READDIR_R __readdir64_r
|
||||||
This file is part of the GNU C Library.
|
#define __GETDENTS __getdents64
|
||||||
|
#define DIRENT_TYPE struct dirent64
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
#include <sysdeps/unix/readdir_r.c>
|
||||||
modify it under the terms of the GNU Library General Public License as
|
|
||||||
published by the Free Software Foundation; either version 2 of the
|
|
||||||
License, or (at your option) any later version.
|
|
||||||
|
|
||||||
The GNU C Library is distributed in the hope that it will be useful,
|
#include <shlib-compat.h>
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Library General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Library General Public
|
versioned_symbol (libc, __readdir64_r, readdir64_r, GLIBC_2_2);
|
||||||
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
||||||
Boston, MA 02111-1307, USA. */
|
|
||||||
|
|
||||||
#include <errno.h>
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
#include <limits.h>
|
strong_alias (__readdir64_r, __old_readdir64_r)
|
||||||
#include <stddef.h>
|
compat_symbol (libc, __old_readdir64_r, readdir64_r, GLIBC_2_1);
|
||||||
#include <string.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#include <dirstream.h>
|
|
||||||
|
|
||||||
/* Read a directory entry from DIRP, store result in ENTRY and return
|
|
||||||
pointer to result in *RESULT. */
|
|
||||||
int
|
|
||||||
readdir64_r (DIR *dirp, struct dirent64 *entry, struct dirent64 **result)
|
|
||||||
{
|
|
||||||
struct dirent64 *dp;
|
|
||||||
size_t reclen;
|
|
||||||
|
|
||||||
__libc_lock_lock (dirp->lock);
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if (dirp->offset >= dirp->size)
|
|
||||||
{
|
|
||||||
/* We've emptied out our buffer. Refill it. */
|
|
||||||
|
|
||||||
size_t maxread;
|
|
||||||
ssize_t bytes;
|
|
||||||
|
|
||||||
#ifndef _DIRENT_HAVE_D_RECLEN
|
|
||||||
/* Fixed-size struct; must read one at a time (see below). */
|
|
||||||
maxread = sizeof *dp;
|
|
||||||
#else
|
|
||||||
maxread = dirp->allocation;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bytes = __getdents64 (dirp->fd, dirp->data, maxread);
|
|
||||||
if (bytes <= 0)
|
|
||||||
{
|
|
||||||
dp = NULL;
|
|
||||||
/* Reclen != 0 signals that an error occurred. */
|
|
||||||
reclen = bytes != 0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
dirp->size = (size_t) bytes;
|
|
||||||
|
|
||||||
/* Reset the offset into the buffer. */
|
|
||||||
dirp->offset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
dp = (struct dirent64 *) &dirp->data[dirp->offset];
|
|
||||||
|
|
||||||
#ifdef _DIRENT_HAVE_D_RECLEN
|
|
||||||
reclen = dp->d_reclen;
|
|
||||||
#else
|
|
||||||
/* The only version of `struct dirent64' that lacks `d_reclen'
|
|
||||||
is fixed-size. */
|
|
||||||
assert (sizeof dp->d_name > 1);
|
|
||||||
reclen = sizeof *dp;
|
|
||||||
/* The name is not terminated if it is the largest possible size.
|
|
||||||
Clobber the following byte to ensure proper null termination. We
|
|
||||||
read just one entry at a time above so we know that byte will not
|
|
||||||
be used later. */
|
|
||||||
dp->d_name[sizeof dp->d_name] = '\0';
|
|
||||||
#endif
|
|
||||||
|
|
||||||
dirp->offset += reclen;
|
|
||||||
|
|
||||||
#ifdef _DIRENT_HAVE_D_OFF
|
|
||||||
dirp->filepos = dp->d_off;
|
|
||||||
#else
|
|
||||||
dirp->filepos += reclen;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Skip deleted files. */
|
|
||||||
}
|
|
||||||
while (dp->d_ino == 0);
|
|
||||||
|
|
||||||
if (dp != NULL)
|
|
||||||
*result = memcpy (entry, dp, reclen);
|
|
||||||
else
|
|
||||||
*result = NULL;
|
|
||||||
|
|
||||||
__libc_lock_unlock (dirp->lock);
|
|
||||||
|
|
||||||
return dp != NULL ? 0 : reclen ? errno : 0;
|
|
||||||
}
|
|
||||||
|
131
sysdeps/unix/sysv/linux/sparc/bits/stat.h
Normal file
131
sysdeps/unix/sysv/linux/sparc/bits/stat.h
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
/* Copyright (C) 1992, 95, 96, 97, 98, 99, 2000 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 Library General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 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
|
||||||
|
Library General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Library General Public
|
||||||
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
||||||
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#ifndef _SYS_STAT_H
|
||||||
|
# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Versions of the `struct stat' data structure. */
|
||||||
|
#define _STAT_VER_LINUX_OLD 1
|
||||||
|
#define _STAT_VER_KERNEL 1
|
||||||
|
#define _STAT_VER_SVR4 2
|
||||||
|
#define _STAT_VER_LINUX 3
|
||||||
|
#define _STAT_VER _STAT_VER_LINUX /* The one defined below. */
|
||||||
|
|
||||||
|
/* Versions of the `xmknod' interface. */
|
||||||
|
#define _MKNOD_VER_LINUX 1
|
||||||
|
#define _MKNOD_VER_SVR4 2
|
||||||
|
#define _MKNOD_VER _MKNOD_VER_LINUX /* The bits defined below. */
|
||||||
|
|
||||||
|
|
||||||
|
struct stat
|
||||||
|
{
|
||||||
|
__dev_t st_dev; /* Device. */
|
||||||
|
#if __WORDSIZE == 64 || !defined __USE_FILE_OFFSET64
|
||||||
|
unsigned short int __pad1;
|
||||||
|
__ino_t st_ino; /* File serial number. */
|
||||||
|
#else
|
||||||
|
__ino64_t st_ino; /* File serial number. */
|
||||||
|
#endif
|
||||||
|
__mode_t st_mode; /* File mode. */
|
||||||
|
__nlink_t st_nlink; /* Link count. */
|
||||||
|
__uid_t st_uid; /* User ID of the file's owner. */
|
||||||
|
__gid_t st_gid; /* Group ID of the file's group.*/
|
||||||
|
__dev_t st_rdev; /* Device number, if device. */
|
||||||
|
unsigned short int __pad2;
|
||||||
|
#ifndef __USE_FILE_OFFSET64
|
||||||
|
__off_t st_size; /* Size of file, in bytes. */
|
||||||
|
#else
|
||||||
|
__off64_t st_size; /* Size of file, in bytes. */
|
||||||
|
#endif
|
||||||
|
__blksize_t st_blksize; /* Optimal block size for I/O. */
|
||||||
|
|
||||||
|
#ifndef __USE_FILE_OFFSET64
|
||||||
|
__blkcnt_t st_blocks; /* Number 512-byte blocks allocated. */
|
||||||
|
#else
|
||||||
|
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
|
||||||
|
#endif
|
||||||
|
__time_t st_atime; /* Time of last access. */
|
||||||
|
unsigned long int __unused1;
|
||||||
|
__time_t st_mtime; /* Time of last modification. */
|
||||||
|
unsigned long int __unused2;
|
||||||
|
__time_t st_ctime; /* Time of last status change. */
|
||||||
|
unsigned long int __unused3;
|
||||||
|
unsigned long int __unused4;
|
||||||
|
unsigned long int __unused5;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __USE_LARGEFILE64
|
||||||
|
struct stat64
|
||||||
|
{
|
||||||
|
__dev_t st_dev; /* Device. */
|
||||||
|
#if __WORDSIZE == 64
|
||||||
|
unsigned short int __pad1;
|
||||||
|
#endif
|
||||||
|
__ino64_t st_ino; /* File serial number. */
|
||||||
|
__mode_t st_mode; /* File mode. */
|
||||||
|
__nlink_t st_nlink; /* Link count. */
|
||||||
|
__uid_t st_uid; /* User ID of the file's owner. */
|
||||||
|
__gid_t st_gid; /* Group ID of the file's group.*/
|
||||||
|
__dev_t st_rdev; /* Device number, if device. */
|
||||||
|
unsigned short int __pad2;
|
||||||
|
__off64_t st_size; /* Size of file, in bytes. */
|
||||||
|
__blksize_t st_blksize; /* Optimal block size for I/O. */
|
||||||
|
|
||||||
|
__blkcnt64_t st_blocks; /* Number 512-byte blocks allocated. */
|
||||||
|
__time_t st_atime; /* Time of last access. */
|
||||||
|
unsigned long int __unused1;
|
||||||
|
__time_t st_mtime; /* Time of last modification. */
|
||||||
|
unsigned long int __unused2;
|
||||||
|
__time_t st_ctime; /* Time of last status change. */
|
||||||
|
unsigned long int __unused3;
|
||||||
|
unsigned long int __unused4;
|
||||||
|
unsigned long int __unused5;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Tell code we have these members. */
|
||||||
|
#define _STATBUF_ST_BLKSIZE
|
||||||
|
#define _STATBUF_ST_RDEV
|
||||||
|
|
||||||
|
/* Encoding of the file mode. */
|
||||||
|
|
||||||
|
#define __S_IFMT 0170000 /* These bits determine file type. */
|
||||||
|
|
||||||
|
/* File types. */
|
||||||
|
#define __S_IFDIR 0040000 /* Directory. */
|
||||||
|
#define __S_IFCHR 0020000 /* Character device. */
|
||||||
|
#define __S_IFBLK 0060000 /* Block device. */
|
||||||
|
#define __S_IFREG 0100000 /* Regular file. */
|
||||||
|
#define __S_IFIFO 0010000 /* FIFO. */
|
||||||
|
#define __S_IFLNK 0120000 /* Symbolic link. */
|
||||||
|
#define __S_IFSOCK 0140000 /* Socket. */
|
||||||
|
|
||||||
|
/* POSIX.1b objects. */
|
||||||
|
#define __S_TYPEISMQ(buf) (0)
|
||||||
|
#define __S_TYPEISSEM(buf) (0)
|
||||||
|
#define __S_TYPEISSHM(buf) (0)
|
||||||
|
|
||||||
|
/* Protection bits. */
|
||||||
|
|
||||||
|
#define __S_ISUID 04000 /* Set user ID on execution. */
|
||||||
|
#define __S_ISGID 02000 /* Set group ID on execution. */
|
||||||
|
#define __S_ISVTX 01000 /* Save swapped text after use (sticky). */
|
||||||
|
#define __S_IREAD 0400 /* Read by owner. */
|
||||||
|
#define __S_IWRITE 0200 /* Write by owner. */
|
||||||
|
#define __S_IEXEC 0100 /* Execute by owner. */
|
@ -73,7 +73,7 @@ typedef __u_quad_t __dev_t; /* Type of device numbers. */
|
|||||||
typedef __u_int __uid_t; /* Type of user identifications. */
|
typedef __u_int __uid_t; /* Type of user identifications. */
|
||||||
typedef __u_int __gid_t; /* Type of group identifications. */
|
typedef __u_int __gid_t; /* Type of group identifications. */
|
||||||
typedef __u_long __ino_t; /* Type of file serial numbers. */
|
typedef __u_long __ino_t; /* Type of file serial numbers. */
|
||||||
typedef __u_long __ino64_t; /* Type of file serial numbers. */
|
typedef __u_quad_t __ino64_t; /* Type of file serial numbers. */
|
||||||
typedef __u_int __mode_t; /* Type of file attribute bitmasks. */
|
typedef __u_int __mode_t; /* Type of file attribute bitmasks. */
|
||||||
typedef __u_int __nlink_t; /* Type of file link counts. */
|
typedef __u_int __nlink_t; /* Type of file link counts. */
|
||||||
typedef long int __off_t; /* Type of file sizes and offsets. */
|
typedef long int __off_t; /* Type of file sizes and offsets. */
|
||||||
|
@ -5,4 +5,23 @@ libc {
|
|||||||
__register_frame_info; __deregister_frame_info; __frame_state_for;
|
__register_frame_info; __deregister_frame_info; __frame_state_for;
|
||||||
__register_frame_info_table;
|
__register_frame_info_table;
|
||||||
}
|
}
|
||||||
|
GLIBC_2.2 {
|
||||||
|
# functions used in other libraries
|
||||||
|
__xstat64; __fxstat64; __lxstat64;
|
||||||
|
|
||||||
|
# a*
|
||||||
|
alphasort64;
|
||||||
|
|
||||||
|
# g*
|
||||||
|
getdirentries64;
|
||||||
|
|
||||||
|
# r*
|
||||||
|
readdir64; readdir64_r;
|
||||||
|
|
||||||
|
# s*
|
||||||
|
scandir64;
|
||||||
|
|
||||||
|
# v*
|
||||||
|
versionsort64;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
1
sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c
Normal file
1
sysdeps/unix/sysv/linux/sparc/sparc32/getdents64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/getdents64.c>
|
@ -26,3 +26,17 @@ struct kernel_stat
|
|||||||
#define _HAVE___UNUSED3
|
#define _HAVE___UNUSED3
|
||||||
#define _HAVE___UNUSED4
|
#define _HAVE___UNUSED4
|
||||||
#define _HAVE___UNUSED5
|
#define _HAVE___UNUSED5
|
||||||
|
|
||||||
|
#define _HAVE_STAT___UNUSED1
|
||||||
|
#define _HAVE_STAT___UNUSED2
|
||||||
|
#define _HAVE_STAT___UNUSED3
|
||||||
|
#define _HAVE_STAT___UNUSED4
|
||||||
|
#define _HAVE_STAT___UNUSED5
|
||||||
|
#define _HAVE_STAT___PAD1
|
||||||
|
#define _HAVE_STAT___PAD2
|
||||||
|
#define _HAVE_STAT64___UNUSED1
|
||||||
|
#define _HAVE_STAT64___UNUSED2
|
||||||
|
#define _HAVE_STAT64___UNUSED3
|
||||||
|
#define _HAVE_STAT64___UNUSED4
|
||||||
|
#define _HAVE_STAT64___UNUSED5
|
||||||
|
#define _HAVE_STAT64___PAD2
|
||||||
|
1
sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c
Normal file
1
sysdeps/unix/sysv/linux/sparc/sparc32/readdir64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/readdir64.c>
|
1
sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c
Normal file
1
sysdeps/unix/sysv/linux/sparc/sparc32/readdir64_r.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/readdir64_r.c>
|
1
sysdeps/unix/sysv/linux/sparc/sparc32/scandir64.c
Normal file
1
sysdeps/unix/sysv/linux/sparc/sparc32/scandir64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
#include <sysdeps/unix/sysv/linux/i386/scandir64.c>
|
4
sysdeps/unix/sysv/linux/sparc/sparc64/getdents.c
Normal file
4
sysdeps/unix/sysv/linux/sparc/sparc64/getdents.c
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#define __getdents64 __no___getdents64_decl
|
||||||
|
#include <sysdeps/unix/sysv/linux/getdents.c>
|
||||||
|
#undef __getdents64
|
||||||
|
weak_alias(__getdents, __getdents64);
|
1
sysdeps/unix/sysv/linux/sparc/sparc64/getdents64.c
Normal file
1
sysdeps/unix/sysv/linux/sparc/sparc64/getdents64.c
Normal file
@ -0,0 +1 @@
|
|||||||
|
/* getdents64 is in getdents.c */
|
@ -21,4 +21,19 @@ struct kernel_stat
|
|||||||
#define _HAVE___UNUSED1
|
#define _HAVE___UNUSED1
|
||||||
#define _HAVE___UNUSED2
|
#define _HAVE___UNUSED2
|
||||||
|
|
||||||
|
#define _HAVE_STAT___UNUSED1
|
||||||
|
#define _HAVE_STAT___UNUSED2
|
||||||
|
#define _HAVE_STAT___UNUSED3
|
||||||
|
#define _HAVE_STAT___UNUSED4
|
||||||
|
#define _HAVE_STAT___UNUSED5
|
||||||
|
#define _HAVE_STAT___PAD1
|
||||||
|
#define _HAVE_STAT___PAD2
|
||||||
|
#define _HAVE_STAT64___UNUSED1
|
||||||
|
#define _HAVE_STAT64___UNUSED2
|
||||||
|
#define _HAVE_STAT64___UNUSED3
|
||||||
|
#define _HAVE_STAT64___UNUSED4
|
||||||
|
#define _HAVE_STAT64___UNUSED5
|
||||||
|
#define _HAVE_STAT64___PAD1
|
||||||
|
#define _HAVE_STAT64___PAD2
|
||||||
|
|
||||||
#define XSTAT_IS_XSTAT64 1
|
#define XSTAT_IS_XSTAT64 1
|
||||||
|
@ -1,7 +1 @@
|
|||||||
#define readdir64 __no_readdir64_decl
|
#include <sysdeps/unix/sysv/linux/alpha/readdir.c>
|
||||||
#define __readdir64 __no___readdir64_decl
|
|
||||||
#include <sysdeps/unix/readdir.c>
|
|
||||||
#undef __readdir64
|
|
||||||
strong_alias (__readdir, __readdir64)
|
|
||||||
#undef readdir64
|
|
||||||
weak_alias (__readdir, readdir64)
|
|
||||||
|
@ -1,4 +1 @@
|
|||||||
#define readdir64_r __no_readdir64_r_decl
|
#include <sysdeps/unix/sysv/linux/alpha/readdir_r.c>
|
||||||
#include <sysdeps/unix/readdir_r.c>
|
|
||||||
#undef readdir64_r
|
|
||||||
weak_alias (__readdir_r, readdir64_r)
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* xstat64 using old-style Unix stat system call.
|
/* xstat64 using old-style Unix stat system call.
|
||||||
Copyright (C) 1991, 95, 96, 97, 98, 99, 00 Free Software Foundation, Inc.
|
Copyright (C) 1991, 95, 96, 97, 98, 99, 2000 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -32,10 +32,12 @@
|
|||||||
# include <xstatconv.c>
|
# include <xstatconv.c>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern int __syscall_stat (const char *__unbounded, struct kernel_stat *__unbounded);
|
extern int __syscall_stat (const char *__unbounded,
|
||||||
|
struct kernel_stat *__unbounded);
|
||||||
|
|
||||||
#ifdef __NR_stat64
|
#ifdef __NR_stat64
|
||||||
extern int __syscall_stat64 (const char *__unbounded, struct stat64 *__unbounded);
|
extern int __syscall_stat64 (const char *__unbounded,
|
||||||
|
struct stat64 *__unbounded);
|
||||||
# if __ASSUME_STAT64_SYSCALL == 0
|
# if __ASSUME_STAT64_SYSCALL == 0
|
||||||
/* The variable is shared between all wrappers around *stat64 calls.
|
/* The variable is shared between all wrappers around *stat64 calls.
|
||||||
This is the definition. */
|
This is the definition. */
|
||||||
@ -46,13 +48,21 @@ int __have_no_stat64;
|
|||||||
/* Get information about the file NAME in BUF. */
|
/* Get information about the file NAME in BUF. */
|
||||||
|
|
||||||
int
|
int
|
||||||
__xstat64 (int vers, const char *name, struct stat64 *buf)
|
___xstat64 (int vers, const char *name, struct stat64 *buf);
|
||||||
|
|
||||||
|
int
|
||||||
|
___xstat64 (int vers, const char *name, struct stat64 *buf)
|
||||||
{
|
{
|
||||||
|
int result;
|
||||||
#if __ASSUME_STAT64_SYSCALL > 0
|
#if __ASSUME_STAT64_SYSCALL > 0
|
||||||
return INLINE_SYSCALL (stat64, 2, CHECK_STRING (name), CHECK_1 (buf));
|
result = INLINE_SYSCALL (stat64, 2, CHECK_STRING (name), CHECK_1 (buf));
|
||||||
|
# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0
|
||||||
|
if (!result && buf->__st_ino != (__ino_t) buf->st_ino)
|
||||||
|
buf->st_ino = buf->__st_ino;
|
||||||
|
# endif
|
||||||
|
return result;
|
||||||
#else
|
#else
|
||||||
struct kernel_stat kbuf;
|
struct kernel_stat kbuf;
|
||||||
int result;
|
|
||||||
# if defined __NR_stat64
|
# if defined __NR_stat64
|
||||||
if (! __have_no_stat64)
|
if (! __have_no_stat64)
|
||||||
{
|
{
|
||||||
@ -60,7 +70,13 @@ __xstat64 (int vers, const char *name, struct stat64 *buf)
|
|||||||
result = INLINE_SYSCALL (stat64, 2, CHECK_STRING (name), CHECK_1 (buf));
|
result = INLINE_SYSCALL (stat64, 2, CHECK_STRING (name), CHECK_1 (buf));
|
||||||
|
|
||||||
if (result != -1 || errno != ENOSYS)
|
if (result != -1 || errno != ENOSYS)
|
||||||
|
{
|
||||||
|
# if defined _HAVE_STAT64___ST_INO && __ASSUME_ST_INO_64_BIT == 0
|
||||||
|
if (!result && buf->__st_ino != (__ino_t) buf->st_ino)
|
||||||
|
buf->st_ino = buf->__st_ino;
|
||||||
|
# endif
|
||||||
return result;
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
__set_errno (saved_errno);
|
__set_errno (saved_errno);
|
||||||
__have_no_stat64 = 1;
|
__have_no_stat64 = 1;
|
||||||
@ -74,3 +90,12 @@ __xstat64 (int vers, const char *name, struct stat64 *buf)
|
|||||||
return result;
|
return result;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include <shlib-compat.h>
|
||||||
|
|
||||||
|
versioned_symbol (libc, ___xstat64, __xstat64, GLIBC_2_2);
|
||||||
|
|
||||||
|
#if SHLIB_COMPAT(libc, GLIBC_2_1, GLIBC_2_2)
|
||||||
|
strong_alias (___xstat64, __old__xstat64)
|
||||||
|
compat_symbol (libc, __old__xstat64, __xstat64, GLIBC_2_1);
|
||||||
|
#endif
|
||||||
|
@ -38,7 +38,7 @@ xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
|
|||||||
|
|
||||||
/* Convert to current kernel version of `struct stat'. */
|
/* Convert to current kernel version of `struct stat'. */
|
||||||
buf->st_dev = kbuf->st_dev;
|
buf->st_dev = kbuf->st_dev;
|
||||||
#ifdef _HAVE___PAD1
|
#ifdef _HAVE_STAT___PAD1
|
||||||
buf->__pad1 = 0;
|
buf->__pad1 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_ino = kbuf->st_ino;
|
buf->st_ino = kbuf->st_ino;
|
||||||
@ -47,28 +47,28 @@ xstat_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
|
|||||||
buf->st_uid = kbuf->st_uid;
|
buf->st_uid = kbuf->st_uid;
|
||||||
buf->st_gid = kbuf->st_gid;
|
buf->st_gid = kbuf->st_gid;
|
||||||
buf->st_rdev = kbuf->st_rdev;
|
buf->st_rdev = kbuf->st_rdev;
|
||||||
#ifdef _HAVE___PAD2
|
#ifdef _HAVE_STAT___PAD2
|
||||||
buf->__pad2 = 0;
|
buf->__pad2 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_size = kbuf->st_size;
|
buf->st_size = kbuf->st_size;
|
||||||
buf->st_blksize = kbuf->st_blksize;
|
buf->st_blksize = kbuf->st_blksize;
|
||||||
buf->st_blocks = kbuf->st_blocks;
|
buf->st_blocks = kbuf->st_blocks;
|
||||||
buf->st_atime = kbuf->st_atime;
|
buf->st_atime = kbuf->st_atime;
|
||||||
#ifdef _HAVE___UNUSED1
|
#ifdef _HAVE_STAT___UNUSED1
|
||||||
buf->__unused1 = 0;
|
buf->__unused1 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_mtime = kbuf->st_mtime;
|
buf->st_mtime = kbuf->st_mtime;
|
||||||
#ifdef _HAVE___UNUSED2
|
#ifdef _HAVE_STAT___UNUSED2
|
||||||
buf->__unused2 = 0;
|
buf->__unused2 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_ctime = kbuf->st_ctime;
|
buf->st_ctime = kbuf->st_ctime;
|
||||||
#ifdef _HAVE___UNUSED3
|
#ifdef _HAVE_STAT___UNUSED3
|
||||||
buf->__unused3 = 0;
|
buf->__unused3 = 0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _HAVE___UNUSED4
|
#ifdef _HAVE_STAT___UNUSED4
|
||||||
buf->__unused4 = 0;
|
buf->__unused4 = 0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _HAVE___UNUSED5
|
#ifdef _HAVE_STAT___UNUSED5
|
||||||
buf->__unused5 = 0;
|
buf->__unused5 = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -96,37 +96,40 @@ xstat64_conv (int vers, struct kernel_stat *kbuf, void *ubuf)
|
|||||||
|
|
||||||
/* Convert to current kernel version of `struct stat64'. */
|
/* Convert to current kernel version of `struct stat64'. */
|
||||||
buf->st_dev = kbuf->st_dev;
|
buf->st_dev = kbuf->st_dev;
|
||||||
#ifdef _HAVE___PAD1
|
#ifdef _HAVE_STAT64___PAD1
|
||||||
buf->__pad1 = 0;
|
buf->__pad1 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_ino = kbuf->st_ino;
|
buf->st_ino = kbuf->st_ino;
|
||||||
|
#ifdef _HAVE_STAT64___ST_INO
|
||||||
|
buf->__st_ino = kbuf->st_ino;
|
||||||
|
#endif
|
||||||
buf->st_mode = kbuf->st_mode;
|
buf->st_mode = kbuf->st_mode;
|
||||||
buf->st_nlink = kbuf->st_nlink;
|
buf->st_nlink = kbuf->st_nlink;
|
||||||
buf->st_uid = kbuf->st_uid;
|
buf->st_uid = kbuf->st_uid;
|
||||||
buf->st_gid = kbuf->st_gid;
|
buf->st_gid = kbuf->st_gid;
|
||||||
buf->st_rdev = kbuf->st_rdev;
|
buf->st_rdev = kbuf->st_rdev;
|
||||||
#ifdef _HAVE___PAD2
|
#ifdef _HAVE_STAT64___PAD2
|
||||||
buf->__pad2 = 0;
|
buf->__pad2 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_size = kbuf->st_size;
|
buf->st_size = kbuf->st_size;
|
||||||
buf->st_blksize = kbuf->st_blksize;
|
buf->st_blksize = kbuf->st_blksize;
|
||||||
buf->st_blocks = kbuf->st_blocks;
|
buf->st_blocks = kbuf->st_blocks;
|
||||||
buf->st_atime = kbuf->st_atime;
|
buf->st_atime = kbuf->st_atime;
|
||||||
#ifdef _HAVE___UNUSED1
|
#ifdef _HAVE_STAT64___UNUSED1
|
||||||
buf->__unused1 = 0;
|
buf->__unused1 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_mtime = kbuf->st_mtime;
|
buf->st_mtime = kbuf->st_mtime;
|
||||||
#ifdef _HAVE___UNUSED2
|
#ifdef _HAVE_STAT64___UNUSED2
|
||||||
buf->__unused2 = 0;
|
buf->__unused2 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_ctime = kbuf->st_ctime;
|
buf->st_ctime = kbuf->st_ctime;
|
||||||
#ifdef _HAVE___UNUSED3
|
#ifdef _HAVE_STAT64___UNUSED3
|
||||||
buf->__unused3 = 0;
|
buf->__unused3 = 0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _HAVE___UNUSED4
|
#ifdef _HAVE_STAT64___UNUSED4
|
||||||
buf->__unused4 = 0;
|
buf->__unused4 = 0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _HAVE___UNUSED5
|
#ifdef _HAVE_STAT64___UNUSED5
|
||||||
buf->__unused5 = 0;
|
buf->__unused5 = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -151,23 +154,48 @@ xstat32_conv (int vers, struct stat64 *kbuf, struct stat *buf)
|
|||||||
{
|
{
|
||||||
case _STAT_VER_LINUX:
|
case _STAT_VER_LINUX:
|
||||||
{
|
{
|
||||||
/* Convert current kernel version of `struct stat64' to `struct stat'. */
|
/* Convert current kernel version of `struct stat64' to
|
||||||
|
`struct stat'. */
|
||||||
buf->st_dev = kbuf->st_dev;
|
buf->st_dev = kbuf->st_dev;
|
||||||
#ifdef _HAVE___PAD1
|
#ifdef _HAVE_STAT___PAD1
|
||||||
buf->__pad1 = 0;
|
buf->__pad1 = 0;
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef _HAVE_STAT64___ST_INO
|
||||||
|
# if __ASSUME_ST_INO_64_BIT == 0
|
||||||
|
if (kbuf->st_ino == 0)
|
||||||
|
buf->st_ino = kbuf->__st_ino;
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
{
|
||||||
buf->st_ino = kbuf->st_ino;
|
buf->st_ino = kbuf->st_ino;
|
||||||
|
if (sizeof (buf->st_ino) != sizeof (kbuf->__st_ino)
|
||||||
|
&& buf->st_ino != kbuf->st_ino)
|
||||||
|
{
|
||||||
|
__set_errno (EOVERFLOW);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
buf->st_ino = kbuf->__st_ino;
|
||||||
|
if (sizeof (buf->st_ino) != sizeof (kbuf->__st_ino)
|
||||||
|
&& buf->st_ino != kbuf->st_ino)
|
||||||
|
{
|
||||||
|
__set_errno (EOVERFLOW);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
buf->st_mode = kbuf->st_mode;
|
buf->st_mode = kbuf->st_mode;
|
||||||
buf->st_nlink = kbuf->st_nlink;
|
buf->st_nlink = kbuf->st_nlink;
|
||||||
buf->st_uid = kbuf->st_uid;
|
buf->st_uid = kbuf->st_uid;
|
||||||
buf->st_gid = kbuf->st_gid;
|
buf->st_gid = kbuf->st_gid;
|
||||||
buf->st_rdev = kbuf->st_rdev;
|
buf->st_rdev = kbuf->st_rdev;
|
||||||
#ifdef _HAVE___PAD2
|
#ifdef _HAVE_STAT___PAD2
|
||||||
buf->__pad2 = 0;
|
buf->__pad2 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_size = kbuf->st_size;
|
buf->st_size = kbuf->st_size;
|
||||||
/* Check for overflow. */
|
/* Check for overflow. */
|
||||||
if (buf->st_size != kbuf->st_size)
|
if (sizeof (buf->st_size) != sizeof (kbuf->st_size)
|
||||||
|
&& buf->st_size != kbuf->st_size)
|
||||||
{
|
{
|
||||||
__set_errno (EOVERFLOW);
|
__set_errno (EOVERFLOW);
|
||||||
return -1;
|
return -1;
|
||||||
@ -175,27 +203,28 @@ xstat32_conv (int vers, struct stat64 *kbuf, struct stat *buf)
|
|||||||
buf->st_blksize = kbuf->st_blksize;
|
buf->st_blksize = kbuf->st_blksize;
|
||||||
buf->st_blocks = kbuf->st_blocks;
|
buf->st_blocks = kbuf->st_blocks;
|
||||||
/* Check for overflow. */
|
/* Check for overflow. */
|
||||||
if (buf->st_blocks != kbuf->st_blocks)
|
if (sizeof (buf->st_blocks) != sizeof (kbuf->st_blocks)
|
||||||
|
&& buf->st_blocks != kbuf->st_blocks)
|
||||||
{
|
{
|
||||||
__set_errno (EOVERFLOW);
|
__set_errno (EOVERFLOW);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
buf->st_atime = kbuf->st_atime;
|
buf->st_atime = kbuf->st_atime;
|
||||||
#ifdef _HAVE___UNUSED1
|
#ifdef _HAVE_STAT___UNUSED1
|
||||||
buf->__unused1 = 0;
|
buf->__unused1 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_mtime = kbuf->st_mtime;
|
buf->st_mtime = kbuf->st_mtime;
|
||||||
#ifdef _HAVE___UNUSED2
|
#ifdef _HAVE_STAT___UNUSED2
|
||||||
buf->__unused2 = 0;
|
buf->__unused2 = 0;
|
||||||
#endif
|
#endif
|
||||||
buf->st_ctime = kbuf->st_ctime;
|
buf->st_ctime = kbuf->st_ctime;
|
||||||
#ifdef _HAVE___UNUSED3
|
#ifdef _HAVE_STAT___UNUSED3
|
||||||
buf->__unused3 = 0;
|
buf->__unused3 = 0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _HAVE___UNUSED4
|
#ifdef _HAVE_STAT___UNUSED4
|
||||||
buf->__unused4 = 0;
|
buf->__unused4 = 0;
|
||||||
#endif
|
#endif
|
||||||
#ifdef _HAVE___UNUSED5
|
#ifdef _HAVE_STAT___UNUSED5
|
||||||
buf->__unused5 = 0;
|
buf->__unused5 = 0;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user