mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-22 04:01:57 +03:00
1998-12-06 Mark Kettenis <kettenis@phys.uva.nl>
Reverse the change of 1998-04-22. Providing a struct dirent with different members when __USE_FILE_OFFSET64 is defined is asking for trouble. Instead add the necessary LFS magic to the 4.4BSD header. * sysdeps/unix/bsd/bsd4.4/bits/dirent.h: Add LFS definitions. * sysdeps/mach/hurd/bits/dirent.h: Removed. * sysdeps/mach/hurd/readdir64.c: Removed. * sysdeps/mach/hurd/readdir64_r.c: Removed. * sysdeps/generic/bits/mman.h [__USE_MISC] (MAP_ANONYMOUS): Define as alias for MAP_ANON. * stdio/stdio.h (sys_errlist, sys_nerr, _sys_errlist, _sys_nerr): Remove decls. They don't exist at all on the Hurd.
This commit is contained in:
17
ChangeLog
17
ChangeLog
@ -1,5 +1,22 @@
|
|||||||
|
1998-12-06 Mark Kettenis <kettenis@phys.uva.nl>
|
||||||
|
|
||||||
|
Reverse the change of 1998-04-22. Providing a struct dirent with
|
||||||
|
different members when __USE_FILE_OFFSET64 is defined is asking
|
||||||
|
for trouble. Instead add the necessary LFS magic to the 4.4BSD
|
||||||
|
header.
|
||||||
|
* sysdeps/unix/bsd/bsd4.4/bits/dirent.h: Add LFS definitions.
|
||||||
|
* sysdeps/mach/hurd/bits/dirent.h: Removed.
|
||||||
|
* sysdeps/mach/hurd/readdir64.c: Removed.
|
||||||
|
* sysdeps/mach/hurd/readdir64_r.c: Removed.
|
||||||
|
|
||||||
1998-12-20 Roland McGrath <roland@baalperazim.frob.com>
|
1998-12-20 Roland McGrath <roland@baalperazim.frob.com>
|
||||||
|
|
||||||
|
* sysdeps/generic/bits/mman.h [__USE_MISC] (MAP_ANONYMOUS): Define as
|
||||||
|
alias for MAP_ANON.
|
||||||
|
|
||||||
|
* stdio/stdio.h (sys_errlist, sys_nerr, _sys_errlist, _sys_nerr):
|
||||||
|
Remove decls. They don't exist at all on the Hurd.
|
||||||
|
|
||||||
* sunrpc/svc_unix.c, sunrpc/clnt_unix.c: Avoid using `struct cmsghdr'
|
* sunrpc/svc_unix.c, sunrpc/clnt_unix.c: Avoid using `struct cmsghdr'
|
||||||
and `struct ucred' #ifndef SCM_CREDENTIALS.
|
and `struct ucred' #ifndef SCM_CREDENTIALS.
|
||||||
|
|
||||||
|
@ -41,6 +41,9 @@
|
|||||||
# define MAP_FILE 0x0001 /* Mapped from a file or device. */
|
# define MAP_FILE 0x0001 /* Mapped from a file or device. */
|
||||||
# define MAP_ANON 0x0002 /* Allocated from anonymous virtual memory. */
|
# define MAP_ANON 0x0002 /* Allocated from anonymous virtual memory. */
|
||||||
# define MAP_TYPE 0x000f /* Mask for type field. */
|
# define MAP_TYPE 0x000f /* Mask for type field. */
|
||||||
|
# ifdef __USE_MISC
|
||||||
|
# define MAP_ANONYMOUS MAP_ANON /* Linux name. */
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Sharing types (must choose one and only one of these). */
|
/* Sharing types (must choose one and only one of these). */
|
||||||
|
@ -745,15 +745,6 @@ extern int ferror_unlocked __P ((FILE *__stream));
|
|||||||
/* Print a message describing the meaning of the value of errno. */
|
/* Print a message describing the meaning of the value of errno. */
|
||||||
extern void perror __P ((__const char *__s));
|
extern void perror __P ((__const char *__s));
|
||||||
|
|
||||||
#ifdef __USE_BSD
|
|
||||||
extern int sys_nerr;
|
|
||||||
extern const char *const sys_errlist[];
|
|
||||||
#endif
|
|
||||||
#ifdef __USE_GNU
|
|
||||||
extern int _sys_nerr;
|
|
||||||
extern const char *const _sys_errlist[];
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __USE_POSIX
|
#ifdef __USE_POSIX
|
||||||
/* Return the system file descriptor for STREAM. */
|
/* Return the system file descriptor for STREAM. */
|
||||||
|
@ -41,6 +41,9 @@
|
|||||||
# define MAP_FILE 0x0001 /* Mapped from a file or device. */
|
# define MAP_FILE 0x0001 /* Mapped from a file or device. */
|
||||||
# define MAP_ANON 0x0002 /* Allocated from anonymous virtual memory. */
|
# define MAP_ANON 0x0002 /* Allocated from anonymous virtual memory. */
|
||||||
# define MAP_TYPE 0x000f /* Mask for type field. */
|
# define MAP_TYPE 0x000f /* Mask for type field. */
|
||||||
|
# ifdef __USE_MISC
|
||||||
|
# define MAP_ANONYMOUS MAP_ANON /* Linux name. */
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Sharing types (must choose one and only one of these). */
|
/* Sharing types (must choose one and only one of these). */
|
||||||
|
@ -1,67 +0,0 @@
|
|||||||
/* Directory entry structure `struct dirent'. Hurd version.
|
|
||||||
Copyright (C) 1996, 1997, 1998 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 _DIRENT_H
|
|
||||||
# error "Never use <bits/dirent.h> directly; include <dirent.h> instead."
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __USE_FILE_OFFSET64
|
|
||||||
/* The old BSD4.4-compatible struct dirent. */
|
|
||||||
struct dirent
|
|
||||||
{
|
|
||||||
__ino_t d_ino; /* File serial number. */
|
|
||||||
unsigned short int d_reclen; /* Length of the whole `struct dirent'. */
|
|
||||||
unsigned char d_type; /* File type, possibly unknown. */
|
|
||||||
unsigned char d_namlen; /* Length of the file name. */
|
|
||||||
|
|
||||||
/* Only this member is in the POSIX standard. */
|
|
||||||
char d_name[1]; /* File name (actually longer). */
|
|
||||||
};
|
|
||||||
|
|
||||||
#else
|
|
||||||
/* Linux-style 64-bit struct dirent. */
|
|
||||||
struct dirent
|
|
||||||
{
|
|
||||||
__ino64_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! */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __USE_LARGEFILE64
|
|
||||||
/* Same as above (Linux-style 64-bit struct dirent). */
|
|
||||||
struct dirent64
|
|
||||||
{
|
|
||||||
__ino64_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! */
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define d_fileno d_ino /* Backwards compatibility. */
|
|
||||||
|
|
||||||
/* These definitions are accurate for neither the 32-bit nor the
|
|
||||||
64-bit structures, but at least they are compatible. */
|
|
||||||
#undef _DIRENT_HAVE_D_NAMLEN
|
|
||||||
#define _DIRENT_HAVE_D_RECLEN 1
|
|
||||||
#define _DIRENT_HAVE_D_TYPE 1
|
|
@ -1,51 +0,0 @@
|
|||||||
/* Copyright (C) 1998 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 <errno.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
/* Read a directory entry from DIRP. */
|
|
||||||
struct dirent64 *
|
|
||||||
__readdir64 (DIR *dirp)
|
|
||||||
{
|
|
||||||
struct dirent *dp;
|
|
||||||
static struct dirent64 dent;
|
|
||||||
|
|
||||||
/* XXX the new __dir_readdir64 RPC is not yet implemented */
|
|
||||||
|
|
||||||
/* If __dir_readdir64 failed, then fall back on the old implementation */
|
|
||||||
dp = readdir (dirp);
|
|
||||||
if (!dp)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/* Return a struct dirent64, converted from the 32-bit value. */
|
|
||||||
memset (&dent, 0, sizeof (dent));
|
|
||||||
dent.d_reclen = sizeof (dent);
|
|
||||||
|
|
||||||
dent.d_ino = dp->d_fileno;
|
|
||||||
dent.d_type = dp->d_type;
|
|
||||||
memcpy (dent.d_name, dp->d_name, dp->d_namlen);
|
|
||||||
|
|
||||||
return &dent;
|
|
||||||
}
|
|
||||||
weak_alias (__readdir64, readdir64)
|
|
@ -1,57 +0,0 @@
|
|||||||
/* Copyright (C) 1998 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 <errno.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <dirent.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
/* Read a directory entry from DIRP. */
|
|
||||||
int
|
|
||||||
__readdir64_r (DIR *dirp, struct dirent64 *entry, struct dirent64 **result)
|
|
||||||
{
|
|
||||||
struct dirent ent32, *res32;
|
|
||||||
|
|
||||||
/* XXX the new __dir_readdir64 RPC is not yet implemented */
|
|
||||||
|
|
||||||
/* If __dir_readdir64 failed, then fall back on the old implementation */
|
|
||||||
if (readdir_r (dirp, &ent32, &res32))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (!res32)
|
|
||||||
{
|
|
||||||
/* End of directory. */
|
|
||||||
*result = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert our result from the 32-bit value. */
|
|
||||||
memset (entry, 0, sizeof (*entry));
|
|
||||||
entry->d_reclen = sizeof (*entry);
|
|
||||||
|
|
||||||
entry->d_ino = res32->d_fileno;
|
|
||||||
entry->d_type = res32->d_type;
|
|
||||||
memcpy (entry->d_name, res32->d_name, res32->d_namlen);
|
|
||||||
|
|
||||||
*result = entry;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
weak_alias (__readdir64_r, readdir64_r)
|
|
@ -1,5 +1,5 @@
|
|||||||
/* Directory entry structure `struct dirent'. 4.4BSD version.
|
/* Directory entry structure `struct dirent'. 4.4BSD version.
|
||||||
Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
Copyright (C) 1996, 1997, 1998 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
|
||||||
@ -23,7 +23,11 @@
|
|||||||
|
|
||||||
struct dirent
|
struct dirent
|
||||||
{
|
{
|
||||||
|
#ifndef __USE_FILE_OFFSET64
|
||||||
__ino_t d_fileno; /* File serial number. */
|
__ino_t d_fileno; /* File serial number. */
|
||||||
|
#else
|
||||||
|
__ino64_t d_fileno;
|
||||||
|
#endif
|
||||||
unsigned short int d_reclen; /* Length of the whole `struct dirent'. */
|
unsigned short int d_reclen; /* Length of the whole `struct dirent'. */
|
||||||
unsigned char d_type; /* File type, possibly unknown. */
|
unsigned char d_type; /* File type, possibly unknown. */
|
||||||
unsigned char d_namlen; /* Length of the file name. */
|
unsigned char d_namlen; /* Length of the file name. */
|
||||||
@ -32,6 +36,18 @@ struct dirent
|
|||||||
char d_name[1]; /* File name (actually longer). */
|
char d_name[1]; /* File name (actually longer). */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef __USE_LARGEFILE64
|
||||||
|
struct dirent64
|
||||||
|
{
|
||||||
|
__ino64_t d_fileno;
|
||||||
|
unsigned short int d_reclen;
|
||||||
|
unsigned char d_type;
|
||||||
|
unsigned char d_namlen;
|
||||||
|
|
||||||
|
char d_name[1];
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#define _DIRENT_HAVE_D_RECLEN 1
|
#define _DIRENT_HAVE_D_RECLEN 1
|
||||||
#define _DIRENT_HAVE_D_NAMLEN 1
|
#define _DIRENT_HAVE_D_NAMLEN 1
|
||||||
#define _DIRENT_HAVE_D_TYPE 1
|
#define _DIRENT_HAVE_D_TYPE 1
|
||||||
|
Reference in New Issue
Block a user