Remove various unused files from sysdeps/unix/bsd/.

This commit is contained in:
Joseph Myers 2013-12-17 18:12:52 +00:00
parent 029c7b2599
commit 2fc6557eb8
28 changed files with 28 additions and 1534 deletions

View File

@ -1,5 +1,33 @@
2013-12-17 Joseph Myers <joseph@codesourcery.com>
* sysdeps/unix/bsd/bits/posix_opt.h: Remove file.
* sysdeps/unix/bsd/bits/stat.h: Likewise.
* sysdeps/unix/bsd/bsd4.4/freebsd/bits/environments.h: Likewise.
* sysdeps/unix/bsd/bsd4.4/freebsd/bits/typesizes.h: Likewise.
* sysdeps/unix/bsd/bsd4.4/freebsd/sys/sysmacros.h: Likewise.
* sysdeps/unix/bsd/bsdstat.h: Likewise.
* sysdeps/unix/bsd/clock.c: Likewise.
* sysdeps/unix/bsd/i386/vfork.S: Likewise.
* sysdeps/unix/bsd/i386/wait3.S: Likewise.
* sysdeps/unix/bsd/init-posix.c: Likewise.
* sysdeps/unix/bsd/poll.c: Likewise.
* sysdeps/unix/bsd/ptsname.c: Likewise.
* sysdeps/unix/bsd/seekdir.c: Likewise.
* sysdeps/unix/bsd/setegid.c: Likewise.
* sysdeps/unix/bsd/seteuid.c: Likewise.
* sysdeps/unix/bsd/setgid.c: Likewise.
* sysdeps/unix/bsd/setrgid.c: Likewise.
* sysdeps/unix/bsd/setruid.c: Likewise.
* sysdeps/unix/bsd/setsid.c: Likewise.
* sysdeps/unix/bsd/setuid.c: Likewise.
* sysdeps/unix/bsd/sigaction.c: Likewise.
* sysdeps/unix/bsd/sigprocmask.c: Likewise.
* sysdeps/unix/bsd/sigsuspend.c: Likewise.
* sysdeps/unix/bsd/sys/reboot.h: Likewise.
* sysdeps/unix/bsd/telldir.c: Likewise.
* sysdeps/unix/bsd/times.c: Likewise.
* sysdeps/unix/bsd/usleep.c: Likewise.
* misc/Makefile (install-lib): Remove libbsd-compat.a.
($(objpfx)libbsd-compat.a): Remove rule.

View File

@ -1,5 +0,0 @@
#define _POSIX_JOB_CONTROL 1
#undef _POSIX_SAVED_IDS
#define _POSIX_CHOWN_RESTRICTED 1
#define _POSIX_NO_TRUNC -1
#define _POSIX_VDISABLE ((unsigned char) -1)

View File

@ -1,90 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#if !defined _SYS_STAT_H && !defined _FCNTL_H
# error "Never include <bits/stat.h> directly; use <sys/stat.h> instead."
#endif
#ifndef _BITS_STAT_H
#define _BITS_STAT_H 1
#include <bits/types.h>
/* Structure describing file characteristics. */
struct stat
{
/* This is a short instead of dev_t for compatibility with 4.3. */
short int st_dev; /* Device containing the file. */
__ino_t st_ino; /* File serial number. */
/* This is a short instead of mode_t for compatibility with 4.3. */
unsigned short int st_mode; /* File mode. */
__nlink_t st_nlink; /* Link count. */
/* These are shorts instead of uid_t/gid_t for compatibility with 4.3. */
unsigned short int st_uid; /* User ID of the file's owner. */
unsigned short int st_gid; /* Group ID of the file's group.*/
/* This is a short instead of dev_t for compatibility with 4.3. */
short int st_rdev; /* Device number, if device. */
__off_t st_size; /* Size of file, in bytes. */
__time_t st_atime; /* Time of last access. */
unsigned long int st_atime_usec;
__time_t st_mtime; /* Time of last modification. */
unsigned long int st_mtime_usec;
__time_t st_ctime; /* Time of last status change. */
unsigned long int st_ctime_usec;
__blksize_t st_blksize; /* Optimal block size for I/O. */
#define _STATBUF_ST_BLKSIZE /* Tell code we have this member. */
__blkcnt_t st_blocks; /* Number of 512-byte blocks allocated. */
long int st_spare[2];
};
/* 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_IFLNK 0120000 /* Symbolic link. */
#define __S_IFSOCK 0140000 /* Socket. */
#define __S_IFIFO 0010000 /* FIFO. */
/* 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. */
#endif /* bits/stat.h */

View File

@ -1,71 +0,0 @@
/* Copyright (C) 1999-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _UNISTD_H
# error "Never include this file directly. Use <unistd.h> instead"
#endif
#include <bits/wordsize.h>
/* This header should define the following symbols under the described
situations. A value `1' means that the model is always supported,
`-1' means it is never supported. Undefined means it cannot be
statically decided.
_POSIX_V6_ILP32_OFF32 32bit int, long, pointers, and off_t type
_POSIX_V6_ILP32_OFFBIG 32bit int, long, and pointers and larger off_t type
_POSIX_V6_LP64_OFF32 64bit long and pointers and 32bit off_t type
_POSIX_V6_LPBIG_OFFBIG 64bit long and pointers and large off_t type
The macros _XBS5_ILP32_OFF32, _XBS5_ILP32_OFFBIG, _XBS5_LP64_OFF32, and
_XBS5_LPBIG_OFFBIG were used in previous versions of the Unix standard
and are available only for compatibility.
*/
#if __WORDSIZE == 64
/* We can never provide environments with 32-bit wide pointers. */
# define _POSIX_V6_ILP32_OFF32 -1
# define _POSIX_V6_ILP32_OFFBIG -1
# define _XBS5_ILP32_OFF32 -1
# define _XBS5_ILP32_OFFBIG -1
/* We also have no use (for now) for an environment with bigger pointers
and offsets. */
# define _POSIX_V6_LPBIG_OFFBIG -1
# define _XBS5_LPBIG_OFFBIG -1
/* By default we have 64-bit wide `long int', pointers and `off_t'. */
# define _POSIX_V6_LP64_OFF64 1
# define _XBS5_LP64_OFF64 1
#else /* __WORDSIZE == 32 */
/* By default we have 32-bit wide `int', `long int', pointers
and 64-bit `off_t'. */
# define _POSIX_V6_ILP32_OFF32 -1
# define _POSIX_V6_ILP32_OFFBIG 1
# define _XBS5_ILP32_OFF32 -1
# define _XBS5_ILP32_OFFBIG 1
/* We can never provide environments with 64-bit wide pointers. */
# define _POSIX_V6_LP64_OFF64 -1
# define _POSIX_V6_LPBIG_OFFBIG -1
# define _XBS5_LP64_OFF64 -1
# define _XBS5_LPBIG_OFFBIG -1
#endif /* __WORDSIZE == 32 */

View File

@ -1,72 +0,0 @@
/* bits/typesizes.h -- underlying types for *_t. FreeBSD version.
Copyright (C) 2002-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _BITS_TYPES_H
# error "Never include <bits/typesizes.h> directly; use <sys/types.h> instead."
#endif
#ifndef _BITS_TYPESIZES_H
#define _BITS_TYPESIZES_H 1
/* See <bits/types.h> for the meaning of these macros. This file exists so
that <bits/types.h> need not vary across different GNU platforms. */
#define __DEV_T_TYPE __U32_TYPE
#define __UID_T_TYPE __U32_TYPE
#define __GID_T_TYPE __U32_TYPE
#define __INO_T_TYPE __U32_TYPE
#define __INO64_T_TYPE __UQUAD_TYPE
#define __MODE_T_TYPE __U16_TYPE
#define __NLINK_T_TYPE __U16_TYPE
#define __OFF_T_TYPE __SQUAD_TYPE
#define __OFF64_T_TYPE __SQUAD_TYPE
#define __PID_T_TYPE __S32_TYPE
#define __RLIM_T_TYPE __SQUAD_TYPE
#define __RLIM64_T_TYPE __SQUAD_TYPE
#define __BLKCNT_T_TYPE __SLONGWORD_TYPE
#define __BLKCNT64_T_TYPE __SQUAD_TYPE
#define __FSBLKCNT_T_TYPE __ULONGWORD_TYPE
#define __FSBLKCNT64_T_TYPE __UQUAD_TYPE
#define __FSFILCNT_T_TYPE __ULONGWORD_TYPE
#define __FSFILCNT64_T_TYPE __UQUAD_TYPE
#define __FSWORD_T_TYPE __SWORD_TYPE
#define __ID_T_TYPE __U32_TYPE
#define __CLOCK_T_TYPE __S32_TYPE
#define __TIME_T_TYPE __SLONGWORD_TYPE
#define __USECONDS_T_TYPE __U32_TYPE
#define __SUSECONDS_T_TYPE __SLONGWORD_TYPE
#define __DADDR_T_TYPE __S32_TYPE
#define __KEY_T_TYPE __S32_TYPE
#define __CLOCKID_T_TYPE __S32_TYPE
#define __TIMER_T_TYPE __S32_TYPE
#define __BLKSIZE_T_TYPE __U32_TYPE
#define __FSID_T_TYPE struct { int __val[2]; }
#define __SSIZE_T_TYPE __SWORD_TYPE
#define __SYSCALL_SLONG_TYPE __SLONGWORD_TYPE
#define __SYSCALL_ULONG_TYPE __ULONGWORD_TYPE
/* Tell the libc code that off_t and off64_t are actually the same type. */
#define __OFF_T_MATCHES_OFF64_T 1
/* Number of descriptors that can fit in an `fd_set'. */
#define __FD_SETSIZE 1024
#endif /* bits/typesizes.h */

View File

@ -1,27 +0,0 @@
/* Definitions of macros to access `dev_t' values. FreeBSD version.
Copyright (C) 2002-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#ifndef _SYS_SYSMACROS_H
#define _SYS_SYSMACROS_H 1
/* For compatibility we provide alternative names. */
#define major(dev) ((int)(((unsigned int) (dev) >> 8) & 0xff))
#define minor(dev) ((int)((dev) & 0xffff00ff))
#define makedev(major, minor) (((major) << 8) | (minor))
#endif /* sys/sysmacros.h */

View File

@ -1,111 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <stddef.h>
#include <sys/types.h>
/* This will make it not define major, minor, makedev, and S_IF*. */
#undef __USE_BSD
#undef __USE_MISC
#include <sys/stat.h>
#undef stat
#undef fstat
#undef S_IRWXU
#undef S_IRUSR
#undef S_IWUSR
#undef S_IXUSR
#undef S_IRWXG
#undef S_IRGRP
#undef S_IWGRP
#undef S_IXGRP
#undef S_IRWXO
#undef S_IROTH
#undef S_IWOTH
#undef S_IXOTH
#undef S_ISBLK
#undef S_ISCHR
#undef S_ISDIR
#undef S_ISFIFO
#undef S_ISREG
#undef S_ISUID
#undef S_ISGID
#define stat system_stat
#define fstat system_fstat
#define KERNEL /* Try to avoid misc decls. */
#include "/usr/include/sys/stat.h"
#undef KERNEL
#undef stat
#undef fstat
#define member_same(statbufp, sysbufp, member) \
(offsetof(struct __stat, member) == offsetof(struct system_stat, member) && \
sizeof((statbufp)->member) == sizeof((sysbufp)->member))
#define need_stat_mapping(statbufp, sysbufp) \
(!(member_same(statbufp, sysbufp, st_dev) && \
member_same(statbufp, sysbufp, st_ino) && \
member_same(statbufp, sysbufp, st_mode) && \
member_same(statbufp, sysbufp, st_nlink) && \
member_same(statbufp, sysbufp, st_uid) && \
member_same(statbufp, sysbufp, st_gid) && \
member_same(statbufp, sysbufp, st_rdev) && \
member_same(statbufp, sysbufp, st_size) && \
member_same(statbufp, sysbufp, st_atime) && \
member_same(statbufp, sysbufp, st_mtime) && \
member_same(statbufp, sysbufp, st_ctime) && \
member_same(statbufp, sysbufp, st_blksize) && \
member_same(statbufp, sysbufp, st_blocks)))
/* Map a system `struct stat' to our `struct stat'. */
#ifdef __GNUC__
inline
#endif
static int
mapstat (sysbuf, statbuf)
const struct system_stat *sysbuf;
struct __stat *buf;
{
if (buf == NULL)
{
errno = EINVAL;
return -1;
}
if (!need_stat_mapping(buf, sysbuf))
/* Hopefully this will be optimized out. */
*buf = *(struct __stat *) sysbuf;
else
{
buf->st_dev = (dev_t) sysbuf->st_dev;
buf->st_ino = (ino_t) sysbuf->st_ino;
buf->st_mode = (mode_t) sysbuf->st_mode;
buf->st_nlink = (nlink_t) sysbuf->st_nlink;
buf->st_uid = (uid_t) sysbuf->st_uid;
buf->st_gid = (gid_t) sysbuf->st_gid;
buf->st_rdev = (dev_t) sysbuf->st_rdev;
buf->st_size = (size_t) sysbuf->st_size;
buf->st_atime = (time_t) sysbuf->st_atime;
buf->st_mtime = (time_t) sysbuf->st_mtime;
buf->st_ctime = (time_t) sysbuf->st_ctime;
buf->st_blksize = (size_t) sysbuf->st_blksize;
buf->st_blocks = (size_t) sysbuf->st_blocks;
}
return 0;
}

View File

@ -1,43 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sys/resource.h>
#include <sys/time.h>
#include <time.h>
#ifdef __GNUC__
__inline
#endif
static clock_t
timeval_to_clock_t (const struct timeval *tv)
{
return (clock_t) ((tv->tv_sec * CLOCKS_PER_SEC) +
(tv->tv_usec * CLOCKS_PER_SEC / 1000000));
}
/* Return the time used by the program so far (user time + system time). */
clock_t
clock (void)
{
struct rusage usage;
if (__getrusage (RUSAGE_SELF, &usage) < 0)
return (clock_t) -1;
return (timeval_to_clock_t (&usage.ru_stime) +
timeval_to_clock_t (&usage.ru_utime));
}

View File

@ -1,39 +0,0 @@
/* Copyright (C) 1993-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
/* Since vfork shares the address space between the parent and child,
we must take care to avoid the child unwinding the stack frame and
clobbering it for the parent. */
.text
ENTRY (__vfork)
popl scratch /* Save the return PC in a register. */
DO_CALL (vfork, 0) /* Do the system call. */
pushl scratch /* Put the return PC back on the stack. */
jb syscall_error /* Branch if error. */
/* R1 is now 0 for the parent and 1 for the child. Decrement it to
make it -1 (all bits set) for the parent, and 0 (no bits set)
for the child. Then AND it with R0, so the parent gets
R0&-1==R0, and the child gets R0&0==0. */
decl r1
andl r1, r0
ret
libc_hidden_def (__vfork)
weak_alias (__vfork, vfork)

View File

@ -1,43 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
/* <sysdeps/unix/bsd/sequent/i386/sysdep.h> defines this to put the first
two arguments into registers. Since the arguments to wait3 are
transferred magically through the same registers, we want to disable this.
This allows us to avoid rewriting this file for that system. */
#undef ARGS_2
#define ARGS_2 /* Special-case no-op. */
.text
.globl syscall_error
.align 4
ENTRY (__wait3)
mov 8(%esp), %ecx /* Flags. */
mov 12(%esp), %edx /* rusage pointer. */
pushl $0xdf; popf /* Set all the condition codes. */
DO_CALL (wait, 2) /* Do the system call. */
je syscall_error /* Check for error. */
mov 4(%esp), scratch /* Status pointer. */
orl scratch, scratch /* Is it nil? */
je done /* Yup; return. */
mov r1, 0(scratch) /* Non-nil; store the status in it. */
done: ret
weak_alias (__wait3, wait3)

View File

@ -1,32 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <stddef.h>
#include <time.h>
/* This must be initialized data or its presence will not be sufficient to
merit linkage of this file, which is necessary for the real
initialization function below to be called. */
time_t _posix_start_time = -1;
void
__init_posix (void)
{
_posix_start_time = time ((time_t *) NULL);
}
text_set_element(__libc_subinit, __init_posix);

View File

@ -1,197 +0,0 @@
/* Copyright (C) 1994-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <alloca.h>
#include <sys/poll.h>
#include <sys/types.h>
#include <errno.h>
#include <string.h>
#include <sys/time.h>
#include <sys/param.h>
#include <unistd.h>
/* Poll the file descriptors described by the NFDS structures starting at
FDS. If TIMEOUT is nonzero and not -1, allow TIMEOUT milliseconds for
an event to occur; if TIMEOUT is -1, block until an event occurs.
Returns the number of file descriptors with events, zero if timed out,
or -1 for errors. */
int
__poll (fds, nfds, timeout)
struct pollfd *fds;
nfds_t nfds;
int timeout;
{
static int max_fd_size;
struct timeval tv;
fd_set *rset, *wset, *xset;
struct pollfd *f;
int ready;
int maxfd = 0;
int bytes;
if (!max_fd_size)
max_fd_size = __getdtablesize ();
bytes = howmany (max_fd_size, __NFDBITS);
rset = alloca (bytes);
wset = alloca (bytes);
xset = alloca (bytes);
/* We can't call FD_ZERO, since FD_ZERO only works with sets
of exactly __FD_SETSIZE size. */
__bzero (rset, bytes);
__bzero (wset, bytes);
__bzero (xset, bytes);
for (f = fds; f < &fds[nfds]; ++f)
{
f->revents = 0;
if (f->fd >= 0)
{
if (f->fd >= max_fd_size)
{
/* The user provides a file descriptor number which is higher
than the maximum we got from the `getdtablesize' call.
Maybe this is ok so enlarge the arrays. */
fd_set *nrset, *nwset, *nxset;
int nbytes;
max_fd_size = roundup (f->fd, __NFDBITS);
nbytes = howmany (max_fd_size, __NFDBITS);
nrset = alloca (nbytes);
nwset = alloca (nbytes);
nxset = alloca (nbytes);
__bzero ((char *) nrset + bytes, nbytes - bytes);
__bzero ((char *) nwset + bytes, nbytes - bytes);
__bzero ((char *) nxset + bytes, nbytes - bytes);
rset = memcpy (nrset, rset, bytes);
wset = memcpy (nwset, wset, bytes);
xset = memcpy (nxset, xset, bytes);
bytes = nbytes;
}
if (f->events & POLLIN)
FD_SET (f->fd, rset);
if (f->events & POLLOUT)
FD_SET (f->fd, wset);
if (f->events & POLLPRI)
FD_SET (f->fd, xset);
if (f->fd > maxfd && (f->events & (POLLIN|POLLOUT|POLLPRI)))
maxfd = f->fd;
}
}
tv.tv_sec = timeout / 1000;
tv.tv_usec = (timeout % 1000) * 1000;
while (1)
{
ready = __select (maxfd + 1, rset, wset, xset,
timeout == -1 ? NULL : &tv);
/* It might be that one or more of the file descriptors is invalid.
We now try to find and mark them and then try again. */
if (ready == -1 && errno == EBADF)
{
fd_set *sngl_rset = alloca (bytes);
fd_set *sngl_wset = alloca (bytes);
fd_set *sngl_xset = alloca (bytes);
struct timeval sngl_tv;
/* Clear the original set. */
__bzero (rset, bytes);
__bzero (wset, bytes);
__bzero (xset, bytes);
/* This means we don't wait for input. */
sngl_tv.tv_sec = 0;
sngl_tv.tv_usec = 0;
maxfd = -1;
/* Reset the return value. */
ready = 0;
for (f = fds; f < &fds[nfds]; ++f)
if (f->fd != -1 && (f->events & (POLLIN|POLLOUT|POLLPRI))
&& (f->revents & POLLNVAL) == 0)
{
int n;
__bzero (sngl_rset, bytes);
__bzero (sngl_wset, bytes);
__bzero (sngl_xset, bytes);
if (f->events & POLLIN)
FD_SET (f->fd, sngl_rset);
if (f->events & POLLOUT)
FD_SET (f->fd, sngl_wset);
if (f->events & POLLPRI)
FD_SET (f->fd, sngl_xset);
n = __select (f->fd + 1, sngl_rset, sngl_wset, sngl_xset,
&sngl_tv);
if (n != -1)
{
/* This descriptor is ok. */
if (f->events & POLLIN)
FD_SET (f->fd, rset);
if (f->events & POLLOUT)
FD_SET (f->fd, wset);
if (f->events & POLLPRI)
FD_SET (f->fd, xset);
if (f->fd > maxfd)
maxfd = f->fd;
if (n > 0)
/* Count it as being available. */
++ready;
}
else if (errno == EBADF)
f->revents |= POLLNVAL;
}
/* Try again. */
continue;
}
break;
}
if (ready > 0)
for (f = fds; f < &fds[nfds]; ++f)
{
if (f->fd >= 0)
{
if (FD_ISSET (f->fd, rset))
f->revents |= POLLIN;
if (FD_ISSET (f->fd, wset))
f->revents |= POLLOUT;
if (FD_ISSET (f->fd, xset))
f->revents |= POLLPRI;
}
}
return ready;
}
#ifndef __poll
libc_hidden_def (__poll)
weak_alias (__poll, poll)
#endif

View File

@ -1,80 +0,0 @@
/* Copyright (C) 1998-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <paths.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
/* Static buffer for `ptsname'. */
static char buffer[sizeof (_PATH_TTY) + 2];
/* Return the pathname of the pseudo terminal slave associated with
the master FD is open on, or NULL on errors.
The returned storage is good until the next call to this function. */
char *
ptsname (int fd)
{
return __ptsname_r (fd, buffer, sizeof (buffer)) != 0 ? NULL : buffer;
}
/* Store at most BUFLEN characters of the pathname of the slave pseudo
terminal associated with the master FD is open on in BUF.
Return 0 on success, otherwise an error number. */
int
__ptsname_r (int fd, char *buf, size_t buflen)
{
int save_errno = errno;
int err;
struct stat st;
if (buf == NULL)
{
__set_errno (EINVAL);
return EINVAL;
}
if (!__isatty (fd))
/* We rely on isatty to set errno properly (i.e. EBADF or ENOTTY). */
return errno;
if (buflen < strlen (_PATH_TTY) + 3)
{
__set_errno (ERANGE);
return ERANGE;
}
err = __ttyname_r (fd, buf, buflen);
if (err != 0)
{
__set_errno (err);
return errno;
}
buf[sizeof (_PATH_DEV) - 1] = 't';
if (__stat (buf, &st) < 0)
return errno;
__set_errno (save_errno);
return 0;
}
weak_alias (__ptsname_r, ptsname_r)

View File

@ -1 +0,0 @@
/* Because they share a private data structure, seekdir is in telldir.c. */

View File

@ -1,34 +0,0 @@
/* Copyright (C) 1995-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
int
setegid (gid)
gid_t gid;
{
if (gid == (gid_t) ~0)
{
__set_errno (EINVAL);
return -1;
}
return __setregid (-1, gid);
}
libc_hidden_def (setegid)

View File

@ -1,34 +0,0 @@
/* Copyright (C) 1995-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
int
seteuid (uid)
uid_t uid;
{
if (uid == (uid_t) ~0)
{
__set_errno (EINVAL);
return -1;
}
return __setreuid (-1, uid);
}
libc_hidden_def (seteuid)

View File

@ -1,34 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
/* Set the group ID of the calling process to GID.
If the calling process is the super-user, the real
and effective group IDs, and the saved set-group-ID to GID;
if not, the effective group ID is set to GID. */
int
__setgid (gid)
gid_t gid;
{
return __setregid (gid, gid);
}
weak_alias (__setgid, setgid)

View File

@ -1,26 +0,0 @@
/* Copyright (C) 1993-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <unistd.h>
#include <sys/types.h>
int
setrgid (gid)
gid_t gid;
{
return __setregid (gid, -1);
}

View File

@ -1,26 +0,0 @@
/* Copyright (C) 1993-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <unistd.h>
#include <sys/types.h>
int
setruid (uid)
uid_t uid;
{
return __setreuid (uid, -1);
}

View File

@ -1,57 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <fcntl.h>
/* Create a new session with the calling process as its leader.
The process group IDs of the session and the calling process
are set to the process ID of the calling process, which is returned. */
int
__setsid (void)
{
pid_t pid = getpid ();
int tty;
int save = errno;
if (__getpgid (pid) == pid)
{
/* Already the leader. */
__set_errno (EPERM);
return -1;
}
if (setpgid (pid, pid) < 0)
return -1;
tty = open ("/dev/tty", 0);
if (tty < 0)
{
__set_errno (save);
return 0;
}
(void) __ioctl (tty, TIOCNOTTY, 0);
(void) __close (tty);
__set_errno (save);
return 0;
}
weak_alias (__setsid, setsid)

View File

@ -1,34 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
/* Set the user ID of the calling process to UID.
If the calling process is the super-user, the real
and effective user IDs, and the saved set-user-ID to UID;
if not, the effective user ID is set to UID. */
int
__setuid (uid)
uid_t uid;
{
return __setreuid (uid, uid);
}
weak_alias (__setuid, setuid)

View File

@ -1,62 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <sysdep.h>
#include <errno.h>
#include <stddef.h>
#include <signal.h>
/* If ACT is not NULL, change the action for SIG to *ACT.
If OACT is not NULL, put the old action for SIG in *OACT. */
int
__sigaction (sig, act, oact)
int sig;
const struct sigaction *act;
struct sigaction *oact;
{
struct sigvec vec, ovec;
if (sig <= 0 || sig >= NSIG)
{
__set_errno (EINVAL);
return -1;
}
if (act != NULL)
{
vec.sv_mask = act->sa_mask;
vec.sv_handler = act->sa_handler;
vec.sv_flags = (((act->sa_flags & SA_ONSTACK) ? SV_ONSTACK : 0) |
(!(act->sa_flags & SA_RESTART) ? SV_INTERRUPT : 0));
}
if (__sigvec(sig, act != NULL ? &vec : (struct sigvec *) NULL, &ovec) < 0)
return -1;
if (oact != NULL)
{
oact->sa_handler = (void (*) (int)) ovec.sv_handler;
oact->sa_mask = ovec.sv_mask;
oact->sa_flags = (((ovec.sv_flags & SV_ONSTACK) ? SA_ONSTACK : 0) |
(!(ovec.sv_flags & SV_INTERRUPT) ? SA_RESTART : 0));
}
return 0;
}
libc_hidden_def (__sigaction)
weak_alias (__sigaction, sigaction)

View File

@ -1,65 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <stddef.h>
#include <signal.h>
/* If SET is not NULL, modify the current set of blocked signals
according to HOW, which may be SIG_BLOCK, SIG_UNBLOCK or SIG_SETMASK.
If OSET is not NULL, store the old set of blocked signals in *OSET. */
int
__sigprocmask (how, set, oset)
int how;
const sigset_t *set;
sigset_t *oset;
{
int mask;
if (set != NULL)
{
mask = *set;
switch (how)
{
case SIG_BLOCK:
mask = __sigblock (mask);
break;
case SIG_UNBLOCK:
mask = __sigblock (0) & ~mask;
/* Fall through. */
case SIG_SETMASK:
mask = __sigsetmask (mask);
break;
default:
__set_errno (EINVAL);
return -1;
}
}
else
mask = __sigblock (0);
if (oset != NULL)
*oset = mask;
return 0;
}
weak_alias (__sigprocmask, sigprocmask)

View File

@ -1,47 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <signal.h>
#include <stddef.h>
#include <unistd.h>
/* Change the set of blocked signals to SET,
wait until a signal arrives, and restore the set of blocked signals. */
int
__sigsuspend (set)
const sigset_t *set;
{
int mask;
int sig;
if (set == NULL)
{
__set_errno (EINVAL);
return -1;
}
mask = 0;
for (sig = 1; sig <= NSIG; ++sig)
if (__sigismember (set, sig))
mask |= sigmask (sig);
return __sigpause (mask, 0);
}
libc_hidden_def (__sigsuspend)
weak_alias (__sigsuspend, sigsuspend)

View File

@ -1,84 +0,0 @@
/*
* Copyright (c) 1982, 1986, 1988, 1993
* The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)reboot.h 8.1 (Berkeley) 6/2/93
*/
/*
* Arguments to reboot system call.
* These are passed to boot program in r11,
* and on to init.
*/
#define RB_AUTOBOOT 0 /* flags for system auto-booting itself */
#define RB_ASKNAME 0x01 /* ask for file name to reboot from */
#define RB_SINGLE 0x02 /* reboot to single user only */
#define RB_NOSYNC 0x04 /* don't sync before reboot */
#define RB_HALT 0x08 /* don't reboot, just halt */
#define RB_INITNAME 0x10 /* name given for /etc/init (unused) */
#define RB_DFLTROOT 0x20 /* use compiled-in rootdev */
#define RB_KDB 0x40 /* give control to kernel debugger */
#define RB_RDONLY 0x80 /* mount root fs read-only */
#define RB_DUMP 0x100 /* dump kernel memory before reboot */
#define RB_MINIROOT 0x200 /* mini-root present in memory at boot time */
/*
* Constants for converting boot-style device number to type,
* adaptor (uba, mba, etc), unit number and partition number.
* Type (== major device number) is in the low byte
* for backward compatibility. Except for that of the "magic
* number", each mask applies to the shifted value.
* Format:
* (4) (4) (4) (4) (8) (8)
* --------------------------------
* |MA | AD| CT| UN| PART | TYPE |
* --------------------------------
*/
#define B_ADAPTORSHIFT 24
#define B_ADAPTORMASK 0x0f
#define B_ADAPTOR(val) (((val) >> B_ADAPTORSHIFT) & B_ADAPTORMASK)
#define B_CONTROLLERSHIFT 20
#define B_CONTROLLERMASK 0xf
#define B_CONTROLLER(val) (((val)>>B_CONTROLLERSHIFT) & B_CONTROLLERMASK)
#define B_UNITSHIFT 16
#define B_UNITMASK 0xf
#define B_UNIT(val) (((val) >> B_UNITSHIFT) & B_UNITMASK)
#define B_PARTITIONSHIFT 8
#define B_PARTITIONMASK 0xff
#define B_PARTITION(val) (((val) >> B_PARTITIONSHIFT) & B_PARTITIONMASK)
#define B_TYPESHIFT 0
#define B_TYPEMASK 0xff
#define B_TYPE(val) (((val) >> B_TYPESHIFT) & B_TYPEMASK)
#define B_MAGICMASK ((u_long)0xf0000000)
#define B_DEVMAGIC ((u_long)0xa0000000)
#define MAKEBOOTDEV(type, adaptor, controller, unit, partition) \
(((type) << B_TYPESHIFT) | ((adaptor) << B_ADAPTORSHIFT) | \
((controller) << B_CONTROLLERSHIFT) | ((unit) << B_UNITSHIFT) | \
((partition) << B_PARTITIONSHIFT) | B_DEVMAGIC)

View File

@ -1,115 +0,0 @@
/* Copyright (C) 1994-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <stddef.h>
#include <dirent.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include "dirstream.h"
/* Internal data structure for telldir and seekdir. */
struct record
{
struct record *next; /* Link in chain. */
off_t cookie; /* Value returned by `telldir'. */
off_t pos;
size_t offset;
};
#define NBUCKETS 32
static struct record *records[32];
static off_t lastpos;
__libc_lock_define_initialized(static, lock) /* Locks above data. */
/* Return the current position of DIRP. */
long int
telldir (dirp)
DIR *dirp;
{
struct record *new;
long int pos;
new = malloc (sizeof *new);
if (new == NULL)
return -1l;
__libc_lock_lock (lock);
new->pos = dirp->filepos;
new->offset = dirp->offset;
new->cookie = ++lastpos;
new->next = records[new->cookie % NBUCKETS];
records[new->cookie % NBUCKETS] = new;
pos = new->cookie;
__libc_lock_unlock (lock);
return pos;
}
/* Seek to position POS in DIRP. */
void
seekdir (dirp, pos)
DIR *dirp;
long int pos;
{
struct record *r, **prevr;
__libc_lock_lock (lock);
for (prevr = &records[pos % NBUCKETS], r = *prevr;
r != NULL;
prevr = &r->next, r = r->next)
if (r->cookie == pos)
{
__libc_lock_lock (dirp->__lock);
if (dirp->filepos != r->pos || dirp->offset != r->offset)
{
dirp->size = 0; /* Must read a fresh buffer. */
/* Move to the saved position. */
__lseek (dirp->fd, r->pos, SEEK_SET);
dirp->filepos = r->pos;
dirp->offset = 0;
/* Read entries until we reach the saved offset. */
while (dirp->offset < r->offset)
{
struct dirent *scan;
__libc_lock_unlock (dirp->__lock);
scan = readdir (dirp);
__libc_lock_lock (dirp->__lock);
if (! scan)
break;
}
}
__libc_lock_unlock (dirp->__lock);
/* To prevent leaking memory, cookies returned from telldir
can only be used once. So free this one's record now. */
*prevr = r->next;
free (r);
break;
}
__libc_lock_unlock (lock);
/* If we lost there is no way to indicate it. Oh well. */
}

View File

@ -1,71 +0,0 @@
/* Copyright (C) 1991-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <errno.h>
#include <stddef.h>
#include <sys/resource.h>
#include <sys/times.h>
#include <sys/time.h>
#include <time.h>
/* Time the program started. */
extern time_t _posix_start_time;
#ifdef __GNUC__
__inline
#endif
static clock_t
timeval_to_clock_t (const struct timeval *tv, clock_t clk_tck)
{
return (clock_t) ((tv->tv_sec * clk_tck) +
(tv->tv_usec * clk_tck / 1000000L));
}
/* Store the CPU time used by this process and all its
dead children (and their dead children) in BUFFER.
Return the elapsed real time, or (clock_t) -1 for errors.
All times are in CLK_TCKths of a second. */
clock_t
__times (buffer)
struct tms *buffer;
{
struct rusage usage;
clock_t clk_tck;
if (buffer == NULL)
{
__set_errno (EINVAL);
return (clock_t) -1;
}
clk_tck = __getclktck ();
if (__getrusage (RUSAGE_SELF, &usage) < 0)
return (clock_t) -1;
buffer->tms_utime = (clock_t) timeval_to_clock_t (&usage.ru_utime, clk_tck);
buffer->tms_stime = (clock_t) timeval_to_clock_t (&usage.ru_stime, clk_tck);
if (__getrusage (RUSAGE_CHILDREN, &usage) < 0)
return (clock_t) -1;
buffer->tms_cutime = (clock_t) timeval_to_clock_t (&usage.ru_utime, clk_tck);
buffer->tms_cstime = (clock_t) timeval_to_clock_t (&usage.ru_stime, clk_tck);
return (time ((time_t *) NULL) - _posix_start_time) * clk_tck;
}
weak_alias (__times, times)

View File

@ -1,34 +0,0 @@
/* Copyright (C) 1992-2013 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 Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 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
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
#include <unistd.h>
#include <sys/types.h>
#include <sys/time.h>
/* Sleep USECONDS microseconds, or until a previously set timer goes off. */
int
usleep (useconds)
useconds_t useconds;
{
struct timeval delay;
delay.tv_sec = 0;
delay.tv_usec = useconds;
return __select (0, (fd_set *) NULL, (fd_set *) NULL, (fd_set *) NULL,
&delay);
}