mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-14 01:00:07 +00:00
Update.
2004-03-01 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/kernel-features.h: Add support for __ASSUME_GETDENTS32_D_TYPE. * sysdeps/unix/sysv/linux/getdents.c: For 2.6.4+ kernels you getdents syscall again since it provides d_type information. * manual/install.texi (Tools for Compilation): Autoconf 2.53 is required.
This commit is contained in:
parent
cff08c8110
commit
afedc4afee
11
ChangeLog
11
ChangeLog
@ -1,8 +1,15 @@
|
|||||||
|
2004-03-01 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/kernel-features.h: Add support for
|
||||||
|
__ASSUME_GETDENTS32_D_TYPE.
|
||||||
|
* sysdeps/unix/sysv/linux/getdents.c: For 2.6.4+ kernels you
|
||||||
|
getdents syscall again since it provides d_type information.
|
||||||
|
|
||||||
2004-02-29 Andreas Jaeger <aj@suse.de>
|
2004-02-29 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
* manual/install.texi (Tools for Compilation): Autoconf 2.53 is required.
|
* manual/install.texi (Tools for Compilation): Autoconf 2.53 is
|
||||||
|
required.
|
||||||
(Supported Configurations): Add x86_64-*-linux.
|
(Supported Configurations): Add x86_64-*-linux.
|
||||||
* INSTALL: Regenerated.
|
|
||||||
|
|
||||||
2004-02-28 Ulrich Drepper <drepper@redhat.com>
|
2004-02-28 Ulrich Drepper <drepper@redhat.com>
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1993, 1995-2002, 2003 Free Software Foundation, Inc.
|
/* Copyright (C) 1993, 1995-2003, 2004 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
|
||||||
@ -36,14 +36,18 @@
|
|||||||
#include "kernel-features.h"
|
#include "kernel-features.h"
|
||||||
|
|
||||||
#ifdef __NR_getdents64
|
#ifdef __NR_getdents64
|
||||||
#ifndef __ASSUME_GETDENTS64_SYSCALL
|
# ifndef __ASSUME_GETDENTS64_SYSCALL
|
||||||
#ifndef __GETDENTS
|
# ifndef __GETDENTS
|
||||||
/* The variable is shared between all *getdents* calls. */
|
/* The variable is shared between all *getdents* calls. */
|
||||||
int __have_no_getdents64;
|
int __have_no_getdents64;
|
||||||
#else
|
# else
|
||||||
extern int __have_no_getdents64;
|
extern int __have_no_getdents64;
|
||||||
|
# endif
|
||||||
|
# define have_no_getdents64_defined 1
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#ifndef have_no_getdents64_defined
|
||||||
|
# define __have_no_getdents64 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
|
||||||
@ -94,13 +98,42 @@ ssize_t
|
|||||||
internal_function
|
internal_function
|
||||||
__GETDENTS (int fd, char *buf, size_t nbytes)
|
__GETDENTS (int fd, char *buf, size_t nbytes)
|
||||||
{
|
{
|
||||||
off64_t last_offset = -1;
|
|
||||||
ssize_t retval;
|
ssize_t retval;
|
||||||
|
|
||||||
|
#ifdef __ASSUME_GETDENTS32_D_TYPE
|
||||||
|
if (sizeof (DIRENT_TYPE) == sizeof (struct dirent))
|
||||||
|
{
|
||||||
|
retval = INLINE_SYSCALL (getdents, 3, fd, CHECK_N(buf, nbytes), nbytes);
|
||||||
|
|
||||||
|
/* The kernel added the d_type value after the name. Change
|
||||||
|
this now. */
|
||||||
|
if (retval != -1)
|
||||||
|
{
|
||||||
|
union
|
||||||
|
{
|
||||||
|
struct kernel_dirent k;
|
||||||
|
struct dirent u;
|
||||||
|
} *kbuf = (void *) buf;
|
||||||
|
|
||||||
|
while ((char *) kbuf < buf + retval)
|
||||||
|
{
|
||||||
|
char d_type = *((char *) kbuf + kbuf->k.d_reclen - 1);
|
||||||
|
memmove (kbuf->u.d_name, kbuf->k.d_name,
|
||||||
|
strlen (kbuf->k.d_name) + 1);
|
||||||
|
kbuf->u.d_type = d_type;
|
||||||
|
|
||||||
|
kbuf = (void *) ((char *) kbuf + kbuf->k.d_reclen);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
off64_t last_offset = -1;
|
||||||
|
|
||||||
#ifdef __NR_getdents64
|
#ifdef __NR_getdents64
|
||||||
# ifndef __ASSUME_GETDENTS64_SYSCALL
|
|
||||||
if (!__have_no_getdents64)
|
if (!__have_no_getdents64)
|
||||||
# endif
|
|
||||||
{
|
{
|
||||||
# ifndef __ASSUME_GETDENTS64_SYSCALL
|
# ifndef __ASSUME_GETDENTS64_SYSCALL
|
||||||
int saved_errno = errno;
|
int saved_errno = errno;
|
||||||
|
@ -384,11 +384,17 @@
|
|||||||
SIMD (AKA Altivec, VMX) instructions and register state. This changes
|
SIMD (AKA Altivec, VMX) instructions and register state. This changes
|
||||||
the overall size of the sigcontext and adds the swapcontext syscall. */
|
the overall size of the sigcontext and adds the swapcontext syscall. */
|
||||||
#if __LINUX_KERNEL_VERSION >= 132608 && defined __powerpc__
|
#if __LINUX_KERNEL_VERSION >= 132608 && defined __powerpc__
|
||||||
# define __ASSUME_SWAPCONTEXT_SYSCALL 1
|
# define __ASSUME_SWAPCONTEXT_SYSCALL 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* The CLONE_DETACHED flag is not necessary in 2.6.2 kernels, it is
|
/* The CLONE_DETACHED flag is not necessary in 2.6.2 kernels, it is
|
||||||
implied. */
|
implied. */
|
||||||
#if __LINUX_KERNEL_VERSION >= 132610
|
#if __LINUX_KERNEL_VERSION >= 132610
|
||||||
# define __ASSUME_NO_CLONE_DETACHED 1
|
# define __ASSUME_NO_CLONE_DETACHED 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Starting with version 2.6.4-rc1 the getdents syscall returns d_type
|
||||||
|
information as well. */
|
||||||
|
#if __LINUX_KERNEL_VERSION >= 132612
|
||||||
|
# define __ASSUME_GETDENTS32_D_TYPE 1
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user