mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-23 09:43:32 +08:00
Mon Feb 26 10:22:30 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
* sysdeps/unix/dirstream.h: Rewritten. * sysdeps/unix/readdir.c: Rewritten. * sysdeps/unix/telldir.c: Rewritten. * sysdeps/unix/closedir.c: Use <...> instead of "..." for dirstream.h. Remove __ from DIR struct member names. * sysdeps/unix/dirfd.c: Likewise. * sysdeps/unix/seekdir.c: Likewise. * sysdeps/unix/rewinddir.c: Likewise. * sysdeps/unix/opendir.c: Likewise. Don't allocate extra space after DIR structure. * sysdeps/stub/direct.h: File removed. * sysdeps/unix/bsd/bsd4.4/direct.h: File removed. * sysdeps/unix/bsd/direct.h: File removed. * sysdeps/unix/common/direct.h: File removed. * sysdeps/unix/sysv/irix4/direct.h: File removed. * sysdeps/unix/sysv/isc3/direct.h: File removed. * sysdeps/unix/sysv/sco3.2.4/direct.h: File removed. * sysdeps/unix/sysv/sysv4/solaris2/direct.h: File removed. * sysdeps/unix/common/direntry.h: New file. * sysdeps/unix/bsd/direntry.h: New file. * sysdeps/unix/bsd/bsd4.4/direntry.h: New file. * sysdeps/unix/sysv/direntry.h: New file. * sysdeps/stub/direntry.h: New file. * dirent/dirent.h (struct dirent): Type removed. Include <direntry.h> to define it. (_D_EXACT_NAMLEN, _D_ALLOC_NAMLEN): New macros. * dirent/Makefile (headers): Add direntry.h. (distribute): Remove direct.h. * sysdeps/posix/getcwd.c: Use new macros instead of d_namlen. * dirent/scandir.c: Likewise. * io/fts.c (fts_build): Likewise. * io/ftw.c (ftw_dir): Likewise. * sysdeps/posix/ttyname.c: Likewise. * sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: New file. * sysdeps/mach/hurd/profil.c (MAX_PC_SAMPLES): New macro. (collector_timeout): New static variable. (update_waiter): Actually call __task_enable_pc_sampling. Set collector_timeout based on the `tick' count returned. (profile_waiter): Use MAX_PC_SAMPLES. Set nsamples before RPC. Use collector_timeout in __mach_msg call. * gmon/Makefile (noprof): New variable containing mcount. Append profil unless it is in $(unix-syscalls). (mcount.po): Use $(noprof) for list of targets in this rule. * libc-symbols.h: Define _LIBC before #include <config.h>. Sun Feb 25 12:29:23 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu> * config.h.in [_LIBC] (HAVE_STRERROR): Define it. Protect 2nd page of #undef's for generator programs with #ifndef _LIBC. * time/zic.c, time/zdump.c, time/private.h: Updated from ADO's latest. Fri Feb 9 12:40:19 1996 Brendan Kehoe <brendan@lisa.cygnus.com> * libio/cleanup.c (_IO_cleanup_registration_needed) [!_G_HAVE_ATEXIT]: Init to NULL. * libio/filedoalloc.c (_IO_cleanup_registration_needed): Remove decl. Thu Feb 8 08:12:50 1996 Brendan Kehoe <brendan@cygnus.com> * libio/filedoalloc.c (_IO_cleanup_registration_needed): Revert previous change, since cleanup.c only defines it if _G_HAVE_ATEXIT. Wed Feb 7 15:10:17 1996 Brendan Kehoe <brendan@lisa.cygnus.com> * libio/filedoalloc.c (_IO_cleanup_registration_needed): Declare as extern. Sat Feb 24 11:34:13 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu> * sysdeps/i386/memcmp.S: Fix argument %esp offsets. * time/sys/time.h (timeradd, timersub): New macros; BSD has these.
This commit is contained in:
parent
a182affdd9
commit
92777700d2
80
ChangeLog
80
ChangeLog
@ -1,3 +1,83 @@
|
||||
Mon Feb 26 10:22:30 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/unix/dirstream.h: Rewritten.
|
||||
* sysdeps/unix/readdir.c: Rewritten.
|
||||
* sysdeps/unix/telldir.c: Rewritten.
|
||||
* sysdeps/unix/closedir.c: Use <...> instead of "..." for dirstream.h.
|
||||
Remove __ from DIR struct member names.
|
||||
* sysdeps/unix/dirfd.c: Likewise.
|
||||
* sysdeps/unix/seekdir.c: Likewise.
|
||||
* sysdeps/unix/rewinddir.c: Likewise.
|
||||
* sysdeps/unix/opendir.c: Likewise. Don't allocate extra space after
|
||||
DIR structure.
|
||||
* sysdeps/stub/direct.h: File removed.
|
||||
* sysdeps/unix/bsd/bsd4.4/direct.h: File removed.
|
||||
* sysdeps/unix/bsd/direct.h: File removed.
|
||||
* sysdeps/unix/common/direct.h: File removed.
|
||||
* sysdeps/unix/sysv/irix4/direct.h: File removed.
|
||||
* sysdeps/unix/sysv/isc3/direct.h: File removed.
|
||||
* sysdeps/unix/sysv/sco3.2.4/direct.h: File removed.
|
||||
* sysdeps/unix/sysv/sysv4/solaris2/direct.h: File removed.
|
||||
* sysdeps/unix/common/direntry.h: New file.
|
||||
* sysdeps/unix/bsd/direntry.h: New file.
|
||||
* sysdeps/unix/bsd/bsd4.4/direntry.h: New file.
|
||||
* sysdeps/unix/sysv/direntry.h: New file.
|
||||
* sysdeps/stub/direntry.h: New file.
|
||||
* dirent/dirent.h (struct dirent): Type removed. Include <direntry.h>
|
||||
to define it.
|
||||
(_D_EXACT_NAMLEN, _D_ALLOC_NAMLEN): New macros.
|
||||
* dirent/Makefile (headers): Add direntry.h.
|
||||
(distribute): Remove direct.h.
|
||||
* sysdeps/posix/getcwd.c: Use new macros instead of d_namlen.
|
||||
* dirent/scandir.c: Likewise.
|
||||
* io/fts.c (fts_build): Likewise.
|
||||
* io/ftw.c (ftw_dir): Likewise.
|
||||
* sysdeps/posix/ttyname.c: Likewise.
|
||||
|
||||
* sysdeps/unix/sysv/sysv4/solaris2/syscalls.list: New file.
|
||||
|
||||
* sysdeps/mach/hurd/profil.c (MAX_PC_SAMPLES): New macro.
|
||||
(collector_timeout): New static variable.
|
||||
(update_waiter): Actually call __task_enable_pc_sampling.
|
||||
Set collector_timeout based on the `tick' count returned.
|
||||
(profile_waiter): Use MAX_PC_SAMPLES. Set nsamples before RPC.
|
||||
Use collector_timeout in __mach_msg call.
|
||||
|
||||
* gmon/Makefile (noprof): New variable containing mcount.
|
||||
Append profil unless it is in $(unix-syscalls).
|
||||
(mcount.po): Use $(noprof) for list of targets in this rule.
|
||||
|
||||
* libc-symbols.h: Define _LIBC before #include <config.h>.
|
||||
|
||||
Sun Feb 25 12:29:23 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* config.h.in [_LIBC] (HAVE_STRERROR): Define it.
|
||||
Protect 2nd page of #undef's for generator programs with #ifndef _LIBC.
|
||||
|
||||
* time/zic.c, time/zdump.c, time/private.h: Updated from ADO's latest.
|
||||
|
||||
Fri Feb 9 12:40:19 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
|
||||
|
||||
* libio/cleanup.c (_IO_cleanup_registration_needed)
|
||||
[!_G_HAVE_ATEXIT]: Init to NULL.
|
||||
* libio/filedoalloc.c (_IO_cleanup_registration_needed): Remove decl.
|
||||
|
||||
Thu Feb 8 08:12:50 1996 Brendan Kehoe <brendan@cygnus.com>
|
||||
|
||||
* libio/filedoalloc.c (_IO_cleanup_registration_needed): Revert
|
||||
previous change, since cleanup.c only defines it if _G_HAVE_ATEXIT.
|
||||
|
||||
Wed Feb 7 15:10:17 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
|
||||
|
||||
* libio/filedoalloc.c (_IO_cleanup_registration_needed): Declare as
|
||||
extern.
|
||||
|
||||
Sat Feb 24 11:34:13 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* sysdeps/i386/memcmp.S: Fix argument %esp offsets.
|
||||
|
||||
* time/sys/time.h (timeradd, timersub): New macros; BSD has these.
|
||||
|
||||
Wed Feb 21 02:25:07 1996 Roland McGrath <roland@charlie-brown.gnu.ai.mit.edu>
|
||||
|
||||
* Rules (others): Depend on $(extra-objs), $(install-lib),
|
||||
|
27
config.h.in
27
config.h.in
@ -34,12 +34,22 @@
|
||||
/* Define to use GNU libio instead of GNU stdio.
|
||||
This is defined by configure under --enable-libio. */
|
||||
#undef USE_IN_LIBIO
|
||||
/* */
|
||||
/* These symbols might be defined by some sysdeps configures. */
|
||||
|
||||
/*
|
||||
*/
|
||||
|
||||
#ifndef _LIBC
|
||||
|
||||
/* These symbols might be defined by some sysdeps configures.
|
||||
They are used only in miscellaneous generator programs, not
|
||||
in compiling libc itself. */
|
||||
|
||||
/* sysdeps/generic/configure.in */
|
||||
#undef HAVE_PSIGNAL
|
||||
|
||||
/* sysdeps/unix/configure.in */
|
||||
#undef HAVE_STRERROR
|
||||
|
||||
/* sysdeps/unix/common/configure.in */
|
||||
#undef HAVE_SYS_SIGLIST
|
||||
#undef HAVE__SYS_SIGLIST
|
||||
@ -49,3 +59,16 @@
|
||||
#undef HAVE__CTYPE__
|
||||
#undef HAVE__CTYPE
|
||||
#undef HAVE__LOCP
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
*/
|
||||
|
||||
#ifdef _LIBC
|
||||
|
||||
/* The zic and zdump programs need these definitions. */
|
||||
|
||||
#define HAVE_STRERROR 1
|
||||
|
||||
#endif
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1991, 92, 93, 94, 95, 96 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
|
||||
@ -21,11 +21,11 @@
|
||||
#
|
||||
subdir := dirent
|
||||
|
||||
headers := dirent.h
|
||||
headers := dirent.h direntry.h
|
||||
routines := opendir closedir readdir rewinddir \
|
||||
seekdir telldir scandir alphasort \
|
||||
getdents dirfd
|
||||
distribute := direct.h dirstream.h
|
||||
distribute := dirstream.h
|
||||
|
||||
tests := list tst-seekdir
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 93, 94, 95, 96 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
|
||||
@ -29,30 +29,48 @@ __BEGIN_DECLS
|
||||
|
||||
#include <gnu/types.h>
|
||||
|
||||
/* This file defines `struct dirent'.
|
||||
|
||||
/* Directory entry structure.
|
||||
It defines the macro `_DIRENT_HAVE_D_NAMLEN' iff there is a `d_namlen'
|
||||
member that gives the length of `d_name'.
|
||||
|
||||
This structure is laid out identically to the `struct direct' that
|
||||
represents directory entries in the GNU Hurd and in BSD 4.4 (and
|
||||
incidentally, on disk in the Berkeley fast file system). The `readdir'
|
||||
implementations for GNU and BSD know this; you must change them if you
|
||||
change this structure. */
|
||||
It defines the macro `_DIRENT_HAVE_D_RECLEN' iff there is a `d_reclen'
|
||||
member that gives the size of the entire directory entry. */
|
||||
|
||||
struct dirent
|
||||
{
|
||||
__ino_t d_fileno; /* 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). */
|
||||
};
|
||||
#include <direntry.h>
|
||||
|
||||
#if defined(__USE_BSD) || defined(__USE_MISC)
|
||||
#define d_ino d_fileno /* Backward compatibility. */
|
||||
#endif
|
||||
|
||||
/* These macros extract size information from a `struct dirent *'.
|
||||
They may evaluate their argument multiple times, so it must not
|
||||
have side effects. Each of these may involve a relatively costly
|
||||
call to `strlen' on some systems, so these values should be cached.
|
||||
|
||||
_D_EXACT_NAMLEN (DP) returns the length of DP->d_name, not including
|
||||
its terminating null character.
|
||||
|
||||
_D_ALLOC_NAMLEN (DP) returns a size at least (_D_EXACT_NAMLEN (DP) + 1);
|
||||
that is, the allocation size needed to hold the DP->d_name string.
|
||||
Use this macro when you don't need the exact length, just an upper bound.
|
||||
This macro is less likely to require calling `strlen' than _D_EXACT_NAMLEN.
|
||||
*/
|
||||
|
||||
#ifdef _DIRENT_HAVE_D_NAMLEN
|
||||
#define _D_EXACT_NAMLEN(d) ((d)->d_namlen)
|
||||
#define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1)
|
||||
#else
|
||||
#define _D_EXACT_NAMLEN(d) (strlen ((d)->d_name))
|
||||
#ifdef _DIRENT_HAVE_D_RECLEN
|
||||
#define _D_ALLOC_NAMLEN(d) (((char *) (d) + (d)->d_reclen) - &(d)->d_name[0])
|
||||
#else
|
||||
#define _D_ALLOC_NAMLEN(d) (sizeof (d)->d_name > 1 ? sizeof (d)->d_name : \
|
||||
_D_EXACT_NAMLEN (d) + 1)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef __USE_BSD
|
||||
/* File types for `d_type'. */
|
||||
enum
|
||||
|
@ -64,7 +64,7 @@ DEFUN(scandir, (dir, namelist, select, cmp),
|
||||
v = new;
|
||||
}
|
||||
|
||||
dsize = &d->d_name[d->d_namlen + 1] - (char *) d;
|
||||
dsize = &d->d_name[_D_ALLOC_NAMLEN (d)] - (char *) d;
|
||||
v[i] = (struct dirent *) malloc (dsize);
|
||||
if (v[i] == NULL)
|
||||
goto lose;
|
||||
|
@ -32,6 +32,14 @@ CFLAGS-mcount.c := -fno-omit-frame-pointer
|
||||
|
||||
# We cannot compile mcount.c with -pg because that would
|
||||
# create resursive calls. Just copy the normal static object.
|
||||
$(objpfx)mcount.po: $(objpfx)mcount.o
|
||||
# On systems where `profil' is not a system call, the same
|
||||
# problem exists for the internal functions in profil.c.
|
||||
|
||||
noprof := mcount
|
||||
ifeq (,$(filter profil,$(unix-syscalls)))
|
||||
noprof += profil
|
||||
endif
|
||||
|
||||
$(noprof:%=$(objpfx)%.po): %.po: %.o
|
||||
rm -f $@
|
||||
ln $< $@
|
||||
|
11
io/fts.c
11
io/fts.c
@ -661,13 +661,16 @@ fts_build(sp, type)
|
||||
/* Read the directory, attaching each entry to the `link' pointer. */
|
||||
adjaddr = NULL;
|
||||
for (head = tail = NULL, nitems = 0; dp = readdir(dirp);) {
|
||||
int namlen;
|
||||
|
||||
if (!ISSET(FTS_SEEDOT) && ISDOT(dp->d_name))
|
||||
continue;
|
||||
|
||||
if ((p = fts_alloc(sp, dp->d_name, (int)dp->d_namlen)) == NULL)
|
||||
namlen = _D_EXACT_NAMLEN (dp);
|
||||
if ((p = fts_alloc(sp, dp->d_name, namlen)) == NULL)
|
||||
goto mem1;
|
||||
if (dp->d_namlen > maxlen) {
|
||||
if (fts_palloc(sp, (size_t)dp->d_namlen)) {
|
||||
if (namlen > maxlen) {
|
||||
if (fts_palloc(sp, (size_t)namlen)) {
|
||||
/*
|
||||
* No more memory for path or structures. Save
|
||||
* errno, free up the current structure and the
|
||||
@ -687,7 +690,7 @@ mem1: saved_errno = errno;
|
||||
maxlen = sp->fts_pathlen - sp->fts_cur->fts_pathlen - 1;
|
||||
}
|
||||
|
||||
p->fts_pathlen = len + dp->d_namlen + 1;
|
||||
p->fts_pathlen = len + namlen + 1;
|
||||
p->fts_parent = sp->fts_cur;
|
||||
p->fts_level = level;
|
||||
|
||||
|
15
io/ftw.c
15
io/ftw.c
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1992, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1992, 1995, 1996 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Ian Lance Taylor (ian@airs.com).
|
||||
|
||||
@ -53,18 +53,21 @@ DEFUN (ftw_dir, (dirs, level, descriptors, dir, len, func),
|
||||
{
|
||||
struct stat s;
|
||||
int flag, retval, newlev;
|
||||
size_t namlen;
|
||||
|
||||
++got;
|
||||
|
||||
if (entry->d_name[0] == '.'
|
||||
&& (entry->d_namlen == 1 ||
|
||||
(entry->d_namlen == 2 && entry->d_name[1] == '.')))
|
||||
&& (entry->d_name[1] == '\0' ||
|
||||
(entry->d_name[1] == '.' && entry->d_name[2] == '\0')))
|
||||
{
|
||||
errno = 0;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (entry->d_namlen + len + 1 > PATH_MAX)
|
||||
namlen = _D_EXACT_NAMLEN (entry);
|
||||
|
||||
if (namlen + len + 1 > PATH_MAX)
|
||||
{
|
||||
#ifdef ENAMETOOLONG
|
||||
errno = ENAMETOOLONG;
|
||||
@ -76,7 +79,7 @@ DEFUN (ftw_dir, (dirs, level, descriptors, dir, len, func),
|
||||
|
||||
dir[len] = '/';
|
||||
memcpy ((PTR) (dir + len + 1), (PTR) entry->d_name,
|
||||
entry->d_namlen + 1);
|
||||
namlen + 1);
|
||||
|
||||
if (stat (dir, &s) < 0)
|
||||
{
|
||||
@ -110,7 +113,7 @@ DEFUN (ftw_dir, (dirs, level, descriptors, dir, len, func),
|
||||
{
|
||||
if (retval == 0)
|
||||
retval = ftw_dir (dirs, newlev, descriptors, dir,
|
||||
entry->d_namlen + len + 1, func);
|
||||
namlen + len + 1, func);
|
||||
if (dirs[newlev] != NULL)
|
||||
{
|
||||
int save;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Support macros for making weak and strong aliases for symbols,
|
||||
and for using symbol sets and linker warnings with GNU ld.
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996 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
|
||||
@ -37,15 +37,17 @@ Cambridge, MA 02139, USA. */
|
||||
linker being used. Set by --with-weak-symbols.
|
||||
|
||||
*/
|
||||
#include <config.h>
|
||||
|
||||
/* This is defined for the compilation of all C library code.
|
||||
features.h tests this to avoid inclusion of stubs.h while
|
||||
compiling the library, before stubs.h has been generated.
|
||||
Some library code that is shared with other packages also
|
||||
tests this symbol to see if it is being compiled as part
|
||||
of the C library. */
|
||||
/* This is defined for the compilation of all C library code. features.h
|
||||
tests this to avoid inclusion of stubs.h while compiling the library,
|
||||
before stubs.h has been generated. Some library code that is shared
|
||||
with other packages also tests this symbol to see if it is being
|
||||
compiled as part of the C library. We must define this before including
|
||||
config.h, because it makes some definitions conditional on whether libc
|
||||
itself is being compiled, or just some generator program. */
|
||||
#define _LIBC 1
|
||||
|
||||
#include <config.h>
|
||||
/*
|
||||
|
||||
*/
|
||||
|
7
libio/.cvsignore
Normal file
7
libio/.cvsignore
Normal file
@ -0,0 +1,7 @@
|
||||
*.gz *.Z *.tar *.tgz
|
||||
=*
|
||||
TODO COPYING* AUTHORS copyr-* copying.*
|
||||
glibc-*
|
||||
|
||||
mpn-copy.mk
|
||||
distinfo
|
@ -12,4 +12,6 @@ DEFUN_VOID(_IO_register_cleanup)
|
||||
}
|
||||
|
||||
void (*_IO_cleanup_registration_needed)() = _IO_register_cleanup;
|
||||
#else
|
||||
void (*_IO_cleanup_registration_needed)() = NULL;
|
||||
#endif /* _G_HAVE_ATEXIT */
|
||||
|
@ -49,12 +49,6 @@ the executable file might be covered by the GNU General Public License. */
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
/* If this function pointer is non-zero, we should call it.
|
||||
It's supposed to make sure _IO_cleanup gets called on exit.
|
||||
We call it from _IO_file_doallocate, since that is likely
|
||||
to get called by any program that does buffered I/O. */
|
||||
void (*_IO_cleanup_registration_needed)();
|
||||
|
||||
/*
|
||||
* Allocate a file buffer, or switch to unbuffered I/O.
|
||||
* Per the ANSI C standard, ALL tty devices default to line buffered.
|
||||
@ -72,6 +66,10 @@ DEFUN(_IO_file_doallocate, (fp),
|
||||
register char *p;
|
||||
struct stat st;
|
||||
|
||||
/* If _IO_cleanup_registration_needed is non-zero, we should call the
|
||||
function it points to. This is to make sure _IO_cleanup gets called
|
||||
on exit. We call it from _IO_file_doallocate, since that is likely
|
||||
to get called by any program that does buffered I/O. */
|
||||
if (_IO_cleanup_registration_needed)
|
||||
(*_IO_cleanup_registration_needed)();
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* memcmp -- compare two memory blocks for differences in the first COUNT
|
||||
bytes.
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996 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
|
||||
@ -34,9 +34,9 @@ ENTRY (memcmp)
|
||||
movl %edi, %edx /* Note that %edx is not used and can
|
||||
so be used to save %edi. It's faster. */
|
||||
|
||||
movl 12(%esp), %esi /* Load address of block #1. */
|
||||
movl 16(%esp), %edi /* Load address of block #2. */
|
||||
movl 20(%esp), %ecx /* Load maximal length of compare area. */
|
||||
movl 8(%esp), %esi /* Load address of block #1. */
|
||||
movl 12(%esp), %edi /* Load address of block #2. */
|
||||
movl 16(%esp), %ecx /* Load maximal length of compare area. */
|
||||
|
||||
cld /* Set direction of comparison. */
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Low-level statistical profiling support function. Mach/Hurd version.
|
||||
Copyright (C) 1995 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995, 1996 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
|
||||
@ -26,6 +26,8 @@ Cambridge, MA 02139, USA. */
|
||||
#include <cthreads.h>
|
||||
#include <assert.h>
|
||||
|
||||
#define MAX_PC_SAMPLES 512 /* XXX ought to be exported in kernel hdr */
|
||||
|
||||
static thread_t profile_thread = MACH_PORT_NULL;
|
||||
static u_short *samples;
|
||||
static size_t maxsamples;
|
||||
@ -33,6 +35,7 @@ static size_t pc_offset;
|
||||
static size_t sample_scale;
|
||||
static sampled_pc_seqno_t seqno;
|
||||
static struct mutex lock = MUTEX_INITIALIZER;
|
||||
static mach_msg_timeout_t collector_timeout; /* ms between collections. */
|
||||
|
||||
/* Enable statistical profiling, writing samples of the PC into at most
|
||||
SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling
|
||||
@ -59,7 +62,12 @@ update_waiter (u_short *sample_buffer, size_t size, size_t offset, u_int scale)
|
||||
|
||||
if (! err)
|
||||
{
|
||||
if (sample_scale == 0)
|
||||
int tick; /* Microseconds per sample. */
|
||||
err = __task_enable_pc_sampling (__mach_task_self (), &tick,
|
||||
SAMPLED_PC_PERIODIC);
|
||||
if (!err && sample_scale == 0)
|
||||
/* Profiling was not turned on, so the collector thread was
|
||||
suspended. Resume it. */
|
||||
err = __thread_resume (profile_thread);
|
||||
if (! err)
|
||||
{
|
||||
@ -67,6 +75,11 @@ update_waiter (u_short *sample_buffer, size_t size, size_t offset, u_int scale)
|
||||
maxsamples = size / sizeof *sample_buffer;
|
||||
pc_offset = offset;
|
||||
sample_scale = scale;
|
||||
/* Calculate a good period for the collector thread. From TICK
|
||||
and the kernel buffer size we get the length of time it takes
|
||||
to fill the buffer; translate that to milliseconds for
|
||||
mach_msg, and chop it in half for general lag factor. */
|
||||
collector_timeout = MAX_PC_SAMPLES * tick / 1000 / 2;
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,17 +113,17 @@ profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale)
|
||||
static void
|
||||
profile_waiter (void)
|
||||
{
|
||||
sampled_pc_t pc_samples[512];
|
||||
mach_msg_type_number_t nsamples = 512, i;
|
||||
sampled_pc_t pc_samples[MAX_PC_SAMPLES];
|
||||
mach_msg_type_number_t nsamples, i;
|
||||
mach_port_t rcv = __mach_reply_port ();
|
||||
mach_msg_header_t msg;
|
||||
const mach_msg_timeout_t timeout = 17; /* ??? XXX */
|
||||
error_t err;
|
||||
|
||||
while (1)
|
||||
{
|
||||
__mutex_lock (&lock);
|
||||
|
||||
nsamples = sizeof pc_samples / sizeof pc_samples[0];
|
||||
err = __task_get_sampled_pcs (__mach_task_self (), &seqno,
|
||||
pc_samples, &nsamples);
|
||||
assert_perror (err);
|
||||
@ -130,7 +143,7 @@ profile_waiter (void)
|
||||
__mutex_unlock (&lock);
|
||||
|
||||
__mach_msg (&msg, MACH_RCV_MSG|MACH_RCV_TIMEOUT, 0, sizeof msg,
|
||||
rcv, timeout, MACH_PORT_NULL);
|
||||
rcv, collector_timeout, MACH_PORT_NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -292,16 +292,15 @@ __getcwd (buf, size)
|
||||
while ((d = readdir (dirstream)) != NULL)
|
||||
{
|
||||
if (d->d_name[0] == '.' &&
|
||||
(d->d_namlen == 1 || (d->d_namlen == 2 && d->d_name[1] == '.')))
|
||||
(d->d_name[1] == '\0' ||
|
||||
(d->d_name[1] == '.' && d->d_name[2] == '\0')))
|
||||
continue;
|
||||
if (mount_point || d->d_ino == thisino)
|
||||
{
|
||||
char *name = __alloca (dotlist + dotsize - dotp +
|
||||
1 + d->d_namlen + 1);
|
||||
char name[dotlist + dotsize - dotp + 1 + _D_ALLOC_NAMLEN (d)];
|
||||
memcpy (name, dotp, dotlist + dotsize - dotp);
|
||||
name[dotlist + dotsize - dotp] = '/';
|
||||
memcpy (&name[dotlist + dotsize - dotp + 1],
|
||||
d->d_name, d->d_namlen + 1);
|
||||
strcpy (&name[dotlist + dotsize - dotp + 1], d->d_name);
|
||||
if (__lstat (name, &st) < 0)
|
||||
{
|
||||
int save = errno;
|
||||
@ -322,7 +321,9 @@ __getcwd (buf, size)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pathp - path < d->d_namlen + 1)
|
||||
size_t namlen = _D_EXACT_NAMLEN (d);
|
||||
|
||||
if (pathp - path < namlen)
|
||||
{
|
||||
if (buf != NULL)
|
||||
{
|
||||
@ -344,8 +345,8 @@ __getcwd (buf, size)
|
||||
path = buf;
|
||||
}
|
||||
}
|
||||
pathp -= d->d_namlen;
|
||||
(void) memcpy (pathp, d->d_name, d->d_namlen);
|
||||
pathp -= namlen;
|
||||
(void) memcpy (pathp, d->d_name, namlen);
|
||||
*--pathp = '/';
|
||||
(void) closedir (dirstream);
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1992, 1993, 1996 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
|
||||
@ -56,17 +56,18 @@ DEFUN(ttyname, (fd), int fd)
|
||||
while ((d = readdir (dirstream)) != NULL)
|
||||
if (d->d_fileno == myino)
|
||||
{
|
||||
if (sizeof (dev) + d->d_namlen + 1 > namelen)
|
||||
size_t dlen = _D_ALLOC_NAMLEN (d);
|
||||
if (sizeof (dev) + dlen > namelen)
|
||||
{
|
||||
free (name);
|
||||
namelen = 2 * (sizeof (dev) + d->d_namlen + 1); /* Big enough. */
|
||||
namelen = 2 * (sizeof (dev) + dlen); /* Big enough. */
|
||||
name = malloc (namelen);
|
||||
if (! name)
|
||||
return NULL;
|
||||
(void) memcpy (name, dev, sizeof (dev) - 1);
|
||||
name[sizeof (dev) - 1] = '/';
|
||||
}
|
||||
(void) memcpy (&name[sizeof (dev)], d->d_name, d->d_namlen + 1);
|
||||
(void) memcpy (&name[sizeof (dev)], d->d_name, dlen);
|
||||
if (stat (name, &st) == 0 && st.st_dev == mydev)
|
||||
{
|
||||
(void) closedir (dirstream);
|
||||
|
23
sysdeps/stub/direntry.h
Normal file
23
sysdeps/stub/direntry.h
Normal file
@ -0,0 +1,23 @@
|
||||
/* Directory entry structure `struct dirent'. Stub version.
|
||||
Copyright (C) 1996 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., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
struct dirent
|
||||
{
|
||||
char d_name[1]; /* Variable length. */
|
||||
}
|
33
sysdeps/unix/bsd/bsd4.4/direntry.h
Normal file
33
sysdeps/unix/bsd/bsd4.4/direntry.h
Normal file
@ -0,0 +1,33 @@
|
||||
/* Directory entry structure `struct dirent'. 4.4BSD version.
|
||||
Copyright (C) 1996 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., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
struct dirent
|
||||
{
|
||||
__ino_t d_fileno; /* 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). */
|
||||
};
|
||||
|
||||
#define _DIRENT_HAVE_D_RECLEN 1
|
||||
#define _DIRENT_HAVE_D_NAMLEN 1
|
||||
#define _DIRENT_HAVE_D_TYPE 1
|
29
sysdeps/unix/bsd/direntry.h
Normal file
29
sysdeps/unix/bsd/direntry.h
Normal file
@ -0,0 +1,29 @@
|
||||
/* Directory entry structure `struct dirent'. 4.2BSD version.
|
||||
Copyright (C) 1996 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., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
struct dirent
|
||||
{
|
||||
unsigned int d_fileno; /* 32 bits. */
|
||||
unsigned short int d_reclen; /* 16 bits. */
|
||||
unsigned short int d_namlen; /* 16 bits. */
|
||||
char d_name[0]; /* Variable length. */
|
||||
};
|
||||
|
||||
#define _DIRENT_HAVE_D_RECLEN 1
|
||||
#define _DIRENT_HAVE_D_NAMLEN 1
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1993, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1993, 1995, 1996 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
|
||||
@ -22,7 +22,7 @@ Cambridge, MA 02139, USA. */
|
||||
#include <stdlib.h>
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
#include "dirstream.h"
|
||||
#include <dirstream.h>
|
||||
|
||||
/* Close the directory stream DIRP.
|
||||
Return 0 if successful, -1 if not. */
|
||||
@ -37,9 +37,9 @@ DEFUN(closedir, (dirp), DIR *dirp)
|
||||
return -1;
|
||||
}
|
||||
|
||||
fd = dirp->__fd;
|
||||
fd = dirp->fd;
|
||||
|
||||
free ((PTR) dirp->__data);
|
||||
free ((PTR) dirp->data);
|
||||
free ((PTR) dirp);
|
||||
|
||||
return __close (fd);
|
||||
|
29
sysdeps/unix/common/direntry.h
Normal file
29
sysdeps/unix/common/direntry.h
Normal file
@ -0,0 +1,29 @@
|
||||
/* Directory entry structure `struct dirent'. SVR4/Linux version.
|
||||
Copyright (C) 1996 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., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
struct dirent
|
||||
{
|
||||
unsigned int d_fileno;
|
||||
int d_off; /* Position in directory of following entry. */
|
||||
unsigned short int d_reclen;
|
||||
char d_name[0]; /* Variable length. */
|
||||
};
|
||||
|
||||
#define _DIRENT_HAVE_D_RECLEN 1
|
||||
#define _DIRENT_HAVE_D_OFF 1
|
@ -26,5 +26,5 @@ int
|
||||
dirfd (dirp)
|
||||
DIR *dirp;
|
||||
{
|
||||
return dirp->__fd;
|
||||
return dirp->fd;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1993, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1993, 1995, 1996 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
|
||||
@ -20,26 +20,25 @@ Cambridge, MA 02139, USA. */
|
||||
|
||||
#define _DIRSTREAM_H 1
|
||||
|
||||
#define __need_size_t
|
||||
#include <stddef.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
/* Directory stream type.
|
||||
|
||||
The miscellaneous Unix `readdir' implementations read directory data
|
||||
into a buffer and fill in a `struct dirent' copy in the `DIR' object. */
|
||||
into a buffer and return `struct dirent *' pointers into it. */
|
||||
|
||||
struct __dirstream
|
||||
{
|
||||
int __fd; /* File descriptor. */
|
||||
int fd; /* File descriptor. */
|
||||
|
||||
char *__data; /* Directory block. */
|
||||
size_t __allocation; /* Space allocated for the block. */
|
||||
size_t __offset; /* Current offset into the block. */
|
||||
size_t __size; /* Total valid data in the block. */
|
||||
char *data; /* Directory block. */
|
||||
size_t allocation; /* Space allocated for the block. */
|
||||
size_t size; /* Total valid data in the block. */
|
||||
size_t offset; /* Current offset into the block. */
|
||||
|
||||
struct dirent __entry; /* Returned by `readdir'. */
|
||||
off_t filepos; /* Position of next entry to read. */
|
||||
};
|
||||
|
||||
#define _DIR_dirfd(dirp) ((dirp)->__fd)
|
||||
#define _DIR_dirfd(dirp) ((dirp)->fd)
|
||||
|
||||
#endif /* dirstream.h */
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -16,7 +16,6 @@ License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <stddef.h>
|
||||
@ -28,12 +27,11 @@ Cambridge, MA 02139, USA. */
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "direct.h" /* This file defines `struct direct'. */
|
||||
#include "dirstream.h"
|
||||
#include <dirstream.h>
|
||||
|
||||
/* Open a directory stream on NAME. */
|
||||
DIR *
|
||||
DEFUN(opendir, (name), CONST char *name)
|
||||
opendir (const char *name)
|
||||
{
|
||||
DIR *dirp;
|
||||
struct stat statbuf;
|
||||
@ -62,7 +60,7 @@ DEFUN(opendir, (name), CONST char *name)
|
||||
goto lose;
|
||||
}
|
||||
|
||||
dirp = (DIR *) calloc (1, sizeof (DIR) + NAME_MAX); /* Zero-fill. */
|
||||
dirp = (DIR *) calloc (1, sizeof (DIR)); /* Zero-fill. */
|
||||
if (dirp == NULL)
|
||||
lose:
|
||||
{
|
||||
@ -73,24 +71,24 @@ DEFUN(opendir, (name), CONST char *name)
|
||||
}
|
||||
|
||||
#ifdef _STATBUF_ST_BLKSIZE
|
||||
if (statbuf.st_blksize < sizeof (struct direct))
|
||||
dirp->__allocation = sizeof (struct direct);
|
||||
if (statbuf.st_blksize < sizeof (struct dirent))
|
||||
dirp->allocation = sizeof (struct dirent);
|
||||
else
|
||||
dirp->__allocation = statbuf.st_blksize;
|
||||
dirp->allocation = statbuf.st_blksize;
|
||||
#else
|
||||
dirp->__allocation = (BUFSIZ < sizeof (struct direct) ?
|
||||
sizeof (struct direct) : BUFSIZ);
|
||||
dirp->allocation = (BUFSIZ < sizeof (struct dirent) ?
|
||||
sizeof (struct dirent) : BUFSIZ);
|
||||
#endif
|
||||
dirp->__data = (char *) malloc (dirp->__allocation);
|
||||
if (dirp->__data == NULL)
|
||||
dirp->data = (char *) malloc (dirp->allocation);
|
||||
if (dirp->data == NULL)
|
||||
{
|
||||
int save = errno;
|
||||
free ((PTR) dirp);
|
||||
free (dirp);
|
||||
(void) __close (fd);
|
||||
errno = save;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dirp->__fd = fd;
|
||||
dirp->fd = fd;
|
||||
return dirp;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 93, 94, 95, 96 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
@ -16,7 +16,6 @@ License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
#include <stddef.h>
|
||||
@ -24,60 +23,77 @@ Cambridge, MA 02139, USA. */
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "direct.h" /* This file defines `struct direct'. */
|
||||
#include "dirstream.h"
|
||||
|
||||
/* direct.h may have an alternate definition for this. */
|
||||
#ifndef D_RECLEN
|
||||
#define D_RECLEN(dp) ((dp)->d_reclen)
|
||||
#endif
|
||||
#include <dirstream.h>
|
||||
|
||||
|
||||
/* Read a directory entry from DIRP. */
|
||||
struct dirent *
|
||||
DEFUN(readdir, (dirp), DIR *dirp)
|
||||
readdir (DIR *dirp)
|
||||
{
|
||||
if (dirp == NULL || dirp->__data == NULL)
|
||||
struct dirent *dp;
|
||||
|
||||
if (dirp == NULL || dirp->data == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
while (1)
|
||||
do
|
||||
{
|
||||
struct direct *dp;
|
||||
size_t reclen;
|
||||
|
||||
if (dirp->__offset >= dirp->__size)
|
||||
if (dirp->offset >= dirp->size)
|
||||
{
|
||||
/* We've emptied out our buffer. Refill it. */
|
||||
|
||||
size_t maxread;
|
||||
off_t base;
|
||||
ssize_t bytes = __getdirentries (dirp->__fd, dirp->__data,
|
||||
dirp->__allocation, &base);
|
||||
ssize_t bytes;
|
||||
|
||||
if (sizeof (dp->d_name) > 1)
|
||||
/* Fixed-size struct; must read one at a time (see below). */
|
||||
maxread = sizeof *dp;
|
||||
else
|
||||
maxread = dirp->allocation;
|
||||
|
||||
base = dirp->filepos;
|
||||
bytes = __getdirentries (dirp->fd, dirp->data, maxread, &base);
|
||||
if (bytes <= 0)
|
||||
return NULL;
|
||||
dirp->__size = (size_t) bytes;
|
||||
dirp->size = (size_t) bytes;
|
||||
|
||||
/* Reset the offset into the buffer. */
|
||||
dirp->__offset = 0;
|
||||
dirp->offset = 0;
|
||||
}
|
||||
|
||||
dp = (struct direct *) &dirp->__data[dirp->__offset];
|
||||
dirp->__offset += D_RECLEN (dp);
|
||||
dp = (struct dirent *) &dirp->data[dirp->offset];
|
||||
|
||||
if (dp->d_ino != 0)
|
||||
{
|
||||
/* Not a deleted file. */
|
||||
register struct dirent *d = &dirp->__entry;
|
||||
register const char *p;
|
||||
d->d_fileno = (ino_t) dp->d_ino;
|
||||
/* On some systems the name length does not actually mean much.
|
||||
But we always use it as a maximum. */
|
||||
p = memchr ((PTR) dp->d_name, '\0', D_NAMLEN (dp) + 1);
|
||||
d->d_namlen = (p != NULL) ? p - dp->d_name : D_NAMLEN (dp);
|
||||
memcpy (d->d_name, dp->d_name, d->d_namlen + 1);
|
||||
return d;
|
||||
}
|
||||
}
|
||||
#ifdef _DIRENT_HAVE_D_RECLEN
|
||||
reclen = dp->d_reclen;
|
||||
#else
|
||||
/* The only version of `struct dirent' 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);
|
||||
|
||||
return dp;
|
||||
}
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1995 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 1995, 1996 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
|
||||
@ -21,13 +21,13 @@ Cambridge, MA 02139, USA. */
|
||||
#include <dirent.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
#include "dirstream.h"
|
||||
#include <dirstream.h>
|
||||
|
||||
/* Rewind DIRP to the beginning of the directory. */
|
||||
void
|
||||
DEFUN(rewinddir, (dirp), DIR *dirp)
|
||||
{
|
||||
(void) lseek(dirp->__fd, (off_t) 0, SEEK_SET);
|
||||
dirp->__offset = 0;
|
||||
dirp->__size = 0;
|
||||
(void) lseek(dirp->fd, (off_t) 0, SEEK_SET);
|
||||
dirp->offset = 0;
|
||||
dirp->size = 0;
|
||||
}
|
||||
|
@ -21,13 +21,13 @@ Cambridge, MA 02139, USA. */
|
||||
#include <stddef.h>
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
#include "dirstream.h"
|
||||
#include <dirstream.h>
|
||||
|
||||
/* Seek to position POS in DIRP. */
|
||||
void
|
||||
DEFUN(seekdir, (dirp, pos), DIR *dirp AND __off_t pos)
|
||||
{
|
||||
(void) __lseek(dirp->__fd, pos, SEEK_SET);
|
||||
dirp->__size = 0;
|
||||
dirp->__offset = 0;
|
||||
(void) __lseek(dirp->fd, pos, SEEK_SET);
|
||||
dirp->size = 0;
|
||||
dirp->offset = 0;
|
||||
}
|
||||
|
24
sysdeps/unix/sysv/direntry.h
Normal file
24
sysdeps/unix/sysv/direntry.h
Normal file
@ -0,0 +1,24 @@
|
||||
/* Directory entry structure `struct dirent'. Old System V version.
|
||||
Copyright (C) 1996 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., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
struct dirent
|
||||
{
|
||||
unsigned short int d_fileno;
|
||||
char d_name[14];
|
||||
};
|
3
sysdeps/unix/sysv/sysv4/solaris2/syscalls.list
Normal file
3
sysdeps/unix/sysv/sysv4/solaris2/syscalls.list
Normal file
@ -0,0 +1,3 @@
|
||||
# File name Caller Syscall name # args Strong name Weak names
|
||||
|
||||
sigaction - sigaction 3 __sigaction sigaction
|
@ -16,28 +16,13 @@ License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include "dirstream.h"
|
||||
|
||||
#include <dirstream.h>
|
||||
|
||||
/* Return the current position of DIRP. */
|
||||
off_t
|
||||
DEFUN(telldir, (dirp), DIR *dirp)
|
||||
telldir (DIR *dirp)
|
||||
{
|
||||
register off_t pos;
|
||||
|
||||
if (dirp == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return (off_t) -1;
|
||||
}
|
||||
|
||||
pos = __lseek(dirp->__fd, (off_t) 0, SEEK_CUR);
|
||||
if (pos == (off_t) -1)
|
||||
return (off_t) -1;
|
||||
return pos + dirp->__size - dirp->__offset;
|
||||
return dirp->filepos;
|
||||
}
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
#ifndef lint
|
||||
#ifndef NOID
|
||||
static char privatehid[] = "@(#)private.h 7.40";
|
||||
static char privatehid[] = "@(#)private.h 7.42";
|
||||
#endif /* !defined NOID */
|
||||
#endif /* !defined lint */
|
||||
|
||||
@ -29,10 +29,18 @@ static char privatehid[] = "@(#)private.h 7.40";
|
||||
#define HAVE_ADJTIME 1
|
||||
#endif /* !defined HAVE_ADJTIME */
|
||||
|
||||
#ifndef HAVE_GETTEXT
|
||||
#define HAVE_GETTEXT 0
|
||||
#endif /* !defined HAVE_GETTEXT */
|
||||
|
||||
#ifndef HAVE_SETTIMEOFDAY
|
||||
#define HAVE_SETTIMEOFDAY 3
|
||||
#endif /* !defined HAVE_SETTIMEOFDAY */
|
||||
|
||||
#ifndef HAVE_STRERROR
|
||||
#define HAVE_STRERROR 0
|
||||
#endif /* !defined HAVE_STRERROR */
|
||||
|
||||
#ifndef HAVE_UNISTD_H
|
||||
#define HAVE_UNISTD_H 1
|
||||
#endif /* !defined HAVE_UNISTD_H */
|
||||
@ -57,6 +65,10 @@ static char privatehid[] = "@(#)private.h 7.40";
|
||||
#include "time.h"
|
||||
#include "stdlib.h"
|
||||
|
||||
#if HAVE_GETTEXT - 0
|
||||
#include "libintl.h"
|
||||
#endif /* HAVE_GETTEXT - 0 */
|
||||
|
||||
#if HAVE_UNISTD_H - 0
|
||||
#include "unistd.h" /* for F_OK and R_OK */
|
||||
#endif /* HAVE_UNISTD_H - 0 */
|
||||
@ -146,6 +158,15 @@ extern int unlink P((const char * filename));
|
||||
#define remove unlink
|
||||
#endif /* !defined remove */
|
||||
|
||||
/*
|
||||
** Some ancient errno.h implementations don't declare errno.
|
||||
** But some newer errno.h implementations define it as a macro.
|
||||
** Fix the former without affecting the latter.
|
||||
*/
|
||||
#ifndef errno
|
||||
extern int errno;
|
||||
#endif /* !defined errno */
|
||||
|
||||
/*
|
||||
** Finally, some convenience items.
|
||||
*/
|
||||
@ -203,12 +224,22 @@ extern int unlink P((const char * filename));
|
||||
|
||||
/*
|
||||
** For the benefit of GNU folk...
|
||||
** `_(MSGID)' uses the current locale's message library string for MSGID.
|
||||
** The default is to use gettext if available, and use MSGID otherwise.
|
||||
*/
|
||||
|
||||
#ifndef _
|
||||
#define _(x) x
|
||||
#if HAVE_GETTEXT - 0
|
||||
#define _(msgid) gettext(msgid)
|
||||
#else /* !(HAVE_GETTEXT - 0) */
|
||||
#define _(msgid) msgid
|
||||
#endif /* !(HAVE_GETTEXT - 0) */
|
||||
#endif /* !defined _ */
|
||||
|
||||
#ifndef TZ_DOMAIN
|
||||
#define TZ_DOMAIN "tz"
|
||||
#endif /* !defined TZ_DOMAIN */
|
||||
|
||||
/*
|
||||
** UNIX was a registered trademark of UNIX System Laboratories in 1993.
|
||||
*/
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991, 92, 93, 94, 96 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
|
||||
@ -135,11 +135,30 @@ extern int utimes __P ((__const char *__file, struct timeval __tvp[2]));
|
||||
/* Convenience macros for operations on timevals.
|
||||
NOTE: `timercmp' does not work for >= or <=. */
|
||||
#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
|
||||
#define timercmp(tvp, uvp, CMP) \
|
||||
((tvp)->tv_sec CMP (uvp)->tv_sec || \
|
||||
(tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec CMP (uvp)->tv_usec)
|
||||
#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
|
||||
|
||||
#define timercmp(a, b, CMP) \
|
||||
(((a)->tv_sec == (b)->tv_sec) ? \
|
||||
((a)->tv_usec CMP (b)->tv_usec) : \
|
||||
((a)->tv_sec CMP (b)->tv_sec))
|
||||
#define timeradd(a, b, result) \
|
||||
do { \
|
||||
(result)->tv_sec = (a)->tv_sec + (b)->tv_sec; \
|
||||
(result)->tv_usec = (a)->tv_usec + (b)->tv_usec; \
|
||||
if ((result)->tv_usec >= 1000000) \
|
||||
{ \
|
||||
++(result)->tv_sec; \
|
||||
(result)->tv_usec -= 1000000; \
|
||||
} \
|
||||
} while (0)
|
||||
#define timersub(a, b, result) \
|
||||
do { \
|
||||
(result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
|
||||
(result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
|
||||
if ((result)->tv_usec < 0) { \
|
||||
--(result)->tv_sec; \
|
||||
(result)->tv_usec += 1000000; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
__END_DECLS
|
||||
|
26
time/zdump.c
26
time/zdump.c
@ -1,6 +1,6 @@
|
||||
#ifndef lint
|
||||
#ifndef NOID
|
||||
static char elsieid[] = "@(#)zdump.c 7.22";
|
||||
static char elsieid[] = "@(#)zdump.c 7.23";
|
||||
#endif /* !defined NOID */
|
||||
#endif /* !defined lint */
|
||||
|
||||
@ -68,6 +68,11 @@ static char elsieid[] = "@(#)zdump.c 7.22";
|
||||
#define isleap(y) ((((y) % 4) == 0 && ((y) % 100) != 0) || ((y) % 400) == 0)
|
||||
#endif /* !defined isleap */
|
||||
|
||||
#if HAVE_GETTEXT - 0
|
||||
#include "locale.h" /* for setlocale */
|
||||
#include "libintl.h"
|
||||
#endif /* HAVE_GETTEXT - 0 */
|
||||
|
||||
#ifndef GNUC_or_lint
|
||||
#ifdef lint
|
||||
#define GNUC_or_lint
|
||||
@ -90,12 +95,22 @@ static char elsieid[] = "@(#)zdump.c 7.22";
|
||||
|
||||
/*
|
||||
** For the benefit of GNU folk...
|
||||
** `_(MSGID)' uses the current locale's message library string for MSGID.
|
||||
** The default is to use gettext if available, and use MSGID otherwise.
|
||||
*/
|
||||
|
||||
#ifndef _
|
||||
#define _(x) x
|
||||
#if HAVE_GETTEXT - 0
|
||||
#define _(msgid) gettext(msgid)
|
||||
#else /* !(HAVE_GETTEXT - 0) */
|
||||
#define _(msgid) msgid
|
||||
#endif /* !(HAVE_GETTEXT - 0) */
|
||||
#endif /* !defined _ */
|
||||
|
||||
#ifndef TZ_DOMAIN
|
||||
#define TZ_DOMAIN "tz"
|
||||
#endif /* !defined TZ_DOMAIN */
|
||||
|
||||
extern char ** environ;
|
||||
extern int getopt();
|
||||
extern char * optarg;
|
||||
@ -130,6 +145,13 @@ char * argv[];
|
||||
struct tm newtm;
|
||||
|
||||
INITIALIZE(cuttime);
|
||||
#if HAVE_GETTEXT - 0
|
||||
(void) setlocale(LC_MESSAGES, "");
|
||||
#ifdef TZ_DOMAINDIR
|
||||
(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
|
||||
#endif /* defined(TEXTDOMAINDIR) */
|
||||
(void) textdomain(TZ_DOMAIN);
|
||||
#endif /* HAVE_GETTEXT - 0 */
|
||||
progname = argv[0];
|
||||
vflag = 0;
|
||||
cutoff = NULL;
|
||||
|
78
time/zic.c
78
time/zic.c
@ -1,10 +1,11 @@
|
||||
#ifndef lint
|
||||
#ifndef NOID
|
||||
static char elsieid[] = "@(#)zic.c 7.60";
|
||||
static char elsieid[] = "@(#)zic.c 7.62";
|
||||
#endif /* !defined NOID */
|
||||
#endif /* !defined lint */
|
||||
|
||||
#include "private.h"
|
||||
#include "locale.h"
|
||||
#include "tzfile.h"
|
||||
#ifdef unix
|
||||
#include "sys/stat.h" /* for umask manifest constants */
|
||||
@ -135,6 +136,10 @@ static void usage P((void));
|
||||
static void writezone P((const char * name));
|
||||
static int yearistype P((int year, const char * type));
|
||||
|
||||
#if !HAVE_STRERROR
|
||||
static char * strerror P((int));
|
||||
#endif /* !HAVE_STRERROR */
|
||||
|
||||
static int charcnt;
|
||||
static int errors;
|
||||
static const char * filename;
|
||||
@ -351,7 +356,9 @@ memcheck(ptr)
|
||||
char * const ptr;
|
||||
{
|
||||
if (ptr == NULL) {
|
||||
(void) perror(progname);
|
||||
const char *e = strerror(errno);
|
||||
(void) fprintf(stderr, _("%s: Memory exhausted: %s\n"),
|
||||
progname, e);
|
||||
(void) exit(EXIT_FAILURE);
|
||||
}
|
||||
return ptr;
|
||||
@ -366,6 +373,20 @@ char * const ptr;
|
||||
** Error handling.
|
||||
*/
|
||||
|
||||
#if ! HAVE_STRERROR
|
||||
static char *
|
||||
strerror(errnum)
|
||||
int errnum;
|
||||
{
|
||||
extern char *sys_errlist[];
|
||||
extern int sys_nerr;
|
||||
|
||||
if (errnum > 0 && errnum <= sys_nerr)
|
||||
return sys_errlist[errnum];
|
||||
return "Unknown system error";
|
||||
}
|
||||
#endif /* ! HAVE_STRERROR */
|
||||
|
||||
static void
|
||||
eats(name, num, rname, rnum)
|
||||
const char * const name;
|
||||
@ -434,6 +455,13 @@ char * argv[];
|
||||
#ifdef unix
|
||||
(void) umask(umask(S_IWGRP | S_IWOTH) | (S_IWGRP | S_IWOTH));
|
||||
#endif /* defined unix */
|
||||
#if HAVE_GETTEXT - 0
|
||||
(void) setlocale(LC_MESSAGES, "");
|
||||
#ifdef TZ_DOMAINDIR
|
||||
(void) bindtextdomain(TZ_DOMAIN, TZ_DOMAINDIR);
|
||||
#endif /* defined TEXTDOMAINDIR */
|
||||
(void) textdomain(TZ_DOMAIN);
|
||||
#endif /* HAVE_GETTEXT - 0 */
|
||||
progname = argv[0];
|
||||
while ((c = getopt(argc, argv, "d:l:p:L:vsy:")) != EOF)
|
||||
switch (c) {
|
||||
@ -567,9 +595,10 @@ const char * const tofile;
|
||||
if (mkdirs(toname) != 0)
|
||||
(void) exit(EXIT_FAILURE);
|
||||
if (link(fromname, toname) != 0) {
|
||||
(void) fprintf(stderr, _("%s: Can't link from %s to "),
|
||||
progname, fromname);
|
||||
(void) perror(toname);
|
||||
const char *e = strerror(errno);
|
||||
(void) fprintf(stderr,
|
||||
_("%s: Can't link from %s to %s: %s\n"),
|
||||
progname, fromname, toname, e);
|
||||
(void) exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
@ -682,7 +711,8 @@ associate P((void))
|
||||
** Maybe we have a local standard time offset.
|
||||
*/
|
||||
eat(zp->z_filename, zp->z_linenum);
|
||||
zp->z_stdoff = gethms(zp->z_rule, "unruly zone", TRUE);
|
||||
zp->z_stdoff = gethms(zp->z_rule, _("unruly zone"),
|
||||
TRUE);
|
||||
/*
|
||||
** Note, though, that if there's no rule,
|
||||
** a '%s' in the format is a bad thing.
|
||||
@ -712,8 +742,9 @@ const char * name;
|
||||
name = _("standard input");
|
||||
fp = stdin;
|
||||
} else if ((fp = fopen(name, "r")) == NULL) {
|
||||
(void) fprintf(stderr, _("%s: Can't open "), progname);
|
||||
(void) perror(name);
|
||||
const char *e = strerror(errno);
|
||||
(void) fprintf(stderr, _("%s: Can't open %s: %s\n"),
|
||||
progname, name, e);
|
||||
(void) exit(EXIT_FAILURE);
|
||||
}
|
||||
wantcont = FALSE;
|
||||
@ -774,13 +805,14 @@ _("%s: panic: Invalid l_value %d\n"),
|
||||
ifree((char *) fields);
|
||||
}
|
||||
if (ferror(fp)) {
|
||||
(void) fprintf(stderr, _("%s: Error reading "), progname);
|
||||
(void) perror(filename);
|
||||
(void) fprintf(stderr, _("%s: Error reading %s\n"),
|
||||
progname, filename);
|
||||
(void) exit(EXIT_FAILURE);
|
||||
}
|
||||
if (fp != stdin && fclose(fp)) {
|
||||
(void) fprintf(stderr, _("%s: Error closing "), progname);
|
||||
(void) perror(filename);
|
||||
const char *e = strerror(errno);
|
||||
(void) fprintf(stderr, _("%s: Error closing %s: %s\n"),
|
||||
progname, filename, e);
|
||||
(void) exit(EXIT_FAILURE);
|
||||
}
|
||||
if (wantcont)
|
||||
@ -1048,7 +1080,7 @@ const int nfields;
|
||||
}
|
||||
dayoff = oadd(dayoff, eitol(day - 1));
|
||||
if (dayoff < 0 && !TYPE_SIGNED(time_t)) {
|
||||
error("time before zero");
|
||||
error(_("time before zero"));
|
||||
return;
|
||||
}
|
||||
t = (time_t) dayoff * SECSPERDAY;
|
||||
@ -1059,7 +1091,7 @@ const int nfields;
|
||||
error(_("time overflow"));
|
||||
return;
|
||||
}
|
||||
tod = gethms(fields[LP_TIME], "invalid time of day", FALSE);
|
||||
tod = gethms(fields[LP_TIME], _("invalid time of day"), FALSE);
|
||||
cp = fields[LP_CORR];
|
||||
{
|
||||
register int positive;
|
||||
@ -1161,7 +1193,7 @@ const char * const timep;
|
||||
break;
|
||||
}
|
||||
}
|
||||
rp->r_tod = gethms(dp, "invalid time of day", FALSE);
|
||||
rp->r_tod = gethms(dp, _("invalid time of day"), FALSE);
|
||||
ifree(dp);
|
||||
/*
|
||||
** Year work.
|
||||
@ -1303,9 +1335,9 @@ const char * const name;
|
||||
if (mkdirs(fullname) != 0)
|
||||
(void) exit(EXIT_FAILURE);
|
||||
if ((fp = fopen(fullname, "wb")) == NULL) {
|
||||
(void) fprintf(stderr, _("%s: Can't create "),
|
||||
progname);
|
||||
(void) perror(fullname);
|
||||
const char *e = strerror(errno);
|
||||
(void) fprintf(stderr, _("%s: Can't create %s: %s\n"),
|
||||
progname, fullname, e);
|
||||
(void) exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
@ -1369,8 +1401,8 @@ const char * const name;
|
||||
for (i = 0; i < typecnt; ++i)
|
||||
(void) putc(ttisgmts[i], fp);
|
||||
if (ferror(fp) || fclose(fp)) {
|
||||
(void) fprintf(stderr, _("%s: Write error on "), progname);
|
||||
(void) perror(fullname);
|
||||
(void) fprintf(stderr, _("%s: Error writing %s\n"),
|
||||
progname, fullname);
|
||||
(void) exit(EXIT_FAILURE);
|
||||
}
|
||||
}
|
||||
@ -1977,10 +2009,10 @@ char * const argname;
|
||||
** It doesn't seem to exist, so we try to create it.
|
||||
*/
|
||||
if (mkdir(name, 0755) != 0) {
|
||||
const char *e = strerror(errno);
|
||||
(void) fprintf(stderr,
|
||||
_("%s: Can't create directory "),
|
||||
progname);
|
||||
(void) perror(name);
|
||||
_("%s: Can't create directory %s: %s\n"),
|
||||
progname, name, e);
|
||||
ifree(name);
|
||||
return -1;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user