mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-18 11:00:07 +00:00
ebbad4cc83
1997-05-26 22:51 Ulrich Drepper <drepper@cygnus.com> * configure.in: Use AC_PROG_CC_LOCAL instead of AC_PROC_CC. * aclocal.m4: Add AC_PROG_CC_LOCAL which does not fail for environments in which linking is not possible at configure time (since te libc is just build). Based on patches by Marcus G. Daniels <marcus@cathcart.sysc.pdx.edu>. * time/scheck.c (scheck): Make 2nd parameter const. * time/private.h: Likewise. 1997-05-26 18:58 Ulrich Drepper <drepper@cygnus.com> * stdlib/random_r.c (__initstate_r): Initialize randomizer type in state array only at right place. Reported by Sven Verdoolaege <skimo@breughel.ufsia.ac.be>. * stdlib/erand48_r.c (__erand48_r): Don't generate numbers in [0.5,1.0) but really in [0.0, 1.0). Patch by Oliver Gathmann <gathmann@scar.utoronto.ca>. 1997-05-22 12:50 Eric Delaunay <delaunay@lix.polytechnique.fr> * shlib-versions: Provide Linux/SPARC defaults. 1997-05-26 15:00 Matthias Urlichs <urlichs@noris.de> * stdlib/strtod_l.c: Add missing #include <xlocale.h>. * stdlib/strtof_l.c: Likewise. * stdlib/strtol_l.c: Likewise. * stdlib/strtold_l.c: Likewise. * stdlib/strtoll_l.c: Likewise. * stdlib/strtoul_l.c: Likewise. * stdlib/strtoull_l.c: Likewise. 1997-05-26 02:42 Zack Weinberg <zack@rabi.phys.columbia.edu> * hurd/dtable.c: De-ansidecl-fy. * math/test-math.c: Likewise. * signal/tst-signal.c: Likewise. * stdio/getc.c: Likewise. * stdio/obstream.c: Likewise. * stdio/putc.c: Likewise. * stdio-common/bug1.c: Likewise. * stdio-common/bug2.c: Likewise. * stdio-common/bug6.c: Likewise. * stdio-common/fscanf.c: Likewise. * stdlib/testsort.c: Likewise. * string/tester.c: Likewise. * sysdeps/am29k/ffs.c: Likewise. * sysdeps/generic/bb_init_func.c: Likewise. * sysdeps/generic/bcopy.c: Likewise. * sysdeps/generic/bzero.c: Likewise. * sysdeps/generic/div.c: Likewise. * sysdeps/generic/ffs.c: Likewise. * sysdeps/generic/memccpy.c: Likewise. * sysdeps/generic/memcpy.c: Likewise. * sysdeps/generic/memmove.c: Likewise. * sysdeps/generic/memset.c: Likewise. * sysdeps/generic/vfork.c: Likewise. * sysdeps/generic/vtimes.c: Likewise. * sysdeps/i386/bzero.c: Likewise. * sysdeps/i386/ffs.c: Likewise. * sysdeps/i960/ffs.c: Likewise. * sysdeps/m68k/ffs.c: Likewise. * sysdeps/m88k/ffs.c: Likewise. * sysdeps/mach/hurd/_exit.c: Likewise. * sysdeps/mach/hurd/accept.c: Likewise. * sysdeps/mach/hurd/access.c: Likewise. * sysdeps/mach/hurd/adjtime.c: Likewise. * sysdeps/mach/hurd/bind.c: Likewise. * sysdeps/mach/hurd/brk.c: Likewise. * sysdeps/mach/hurd/chdir.c: Likewise. * sysdeps/mach/hurd/chflags.c: Likewise. * sysdeps/mach/hurd/chmod.c: Likewise. * sysdeps/mach/hurd/chown.c: Likewise. * sysdeps/mach/hurd/chroot.c: Likewise. * sysdeps/mach/hurd/close.c: Likewise. * sysdeps/mach/hurd/connect.c: Likewise. * sysdeps/mach/hurd/defs.c: Likewise. * sysdeps/mach/hurd/dup2.c: Likewise. * sysdeps/mach/hurd/execve.c: Likewise. * sysdeps/mach/hurd/fchdir.c: Likewise. * sysdeps/mach/hurd/fchflags.c: Likewise. * sysdeps/mach/hurd/fchmod.c: Likewise. * sysdeps/mach/hurd/fchown.c: Likewise. * sysdeps/mach/hurd/fcntl.c: Likewise. * sysdeps/mach/hurd/fdopen.c: Likewise. * sysdeps/mach/hurd/flock.c: Likewise. * sysdeps/mach/hurd/fsync.c: Likewise. * sysdeps/mach/hurd/ftruncate.c: Likewise. * sysdeps/mach/hurd/getdtsz.c: Likewise. * sysdeps/mach/hurd/getegid.c: Likewise. * sysdeps/mach/hurd/geteuid.c: Likewise. * sysdeps/mach/hurd/getgid.c: Likewise. * sysdeps/mach/hurd/getgroups.c: Likewise. * sysdeps/mach/hurd/gethostid.c: Likewise. * sysdeps/mach/hurd/gethostname.c: Likewise. * sysdeps/mach/hurd/getitimer.c: Likewise. * sysdeps/mach/hurd/getlogin.c: Likewise. * sysdeps/mach/hurd/getpeername.c: Likewise. * sysdeps/mach/hurd/getpgid.c: Likewise. * sysdeps/mach/hurd/getpid.c: Likewise. * sysdeps/mach/hurd/getppid.c: Likewise. * sysdeps/mach/hurd/getsockname.c: Likewise. * sysdeps/mach/hurd/getsockopt.c: Likewise. * sysdeps/mach/hurd/getuid.c: Likewise. * sysdeps/mach/hurd/ioctl.c: Likewise. * sysdeps/mach/hurd/isatty.c: Likewise. * sysdeps/mach/hurd/link.c: Likewise. * sysdeps/mach/hurd/listen.c: Likewise. * sysdeps/mach/hurd/lseek.c: Likewise. * sysdeps/mach/hurd/mkdir.c: Likewise. * sysdeps/mach/hurd/open.c: Likewise. * sysdeps/mach/hurd/pipe.c: Likewise. * sysdeps/mach/hurd/read.c: Likewise. * sysdeps/mach/hurd/readlink.c: Likewise. * sysdeps/mach/hurd/reboot.c: Likewise. * sysdeps/mach/hurd/recv.c: Likewise. * sysdeps/mach/hurd/recvfrom.c: Likewise. * sysdeps/mach/hurd/rename.c: Likewise. * sysdeps/mach/hurd/rewinddir.c: Likewise. * sysdeps/mach/hurd/rmdir.c: Likewise. * sysdeps/mach/hurd/sbrk.c: Likewise. * sysdeps/mach/hurd/seekdir.c: Likewise. * sysdeps/mach/hurd/select.c: Likewise. * sysdeps/mach/hurd/setegid.c: Likewise. * sysdeps/mach/hurd/seteuid.c: Likewise. * sysdeps/mach/hurd/setgid.c: Likewise. * sysdeps/mach/hurd/setgroups.c: Likewise. * sysdeps/mach/hurd/sethostid.c: Likewise. * sysdeps/mach/hurd/sethostname.c: Likewise. * sysdeps/mach/hurd/setlogin.c: Likewise. * sysdeps/mach/hurd/setpgid.c: Likewise. * sysdeps/mach/hurd/setregid.c: Likewise. * sysdeps/mach/hurd/setreuid.c: Likewise. * sysdeps/mach/hurd/setrlimit.c: Likewise. * sysdeps/mach/hurd/setsid.c: Likewise. * sysdeps/mach/hurd/setsockopt.c: Likewise. * sysdeps/mach/hurd/settimeofday.c: Likewise. * sysdeps/mach/hurd/setuid.c: Likewise. * sysdeps/mach/hurd/shutdown.c: Likewise. * sysdeps/mach/hurd/sigaction.c: Likewise. * sysdeps/mach/hurd/sigaltstack.c: Likewise. * sysdeps/mach/hurd/sigpending.c: Likewise. * sysdeps/mach/hurd/sigprocmask.c: Likewise. * sysdeps/mach/hurd/sigstack.c: Likewise. * sysdeps/mach/hurd/sigsuspend.c: Likewise. * sysdeps/mach/hurd/socket.c: Likewise. * sysdeps/mach/hurd/socketpair.c: Likewise. * sysdeps/mach/hurd/stdio_init.c: Likewise. * sysdeps/mach/hurd/symlink.c: Likewise. * sysdeps/mach/hurd/sync.c: Likewise. * sysdeps/mach/hurd/sysd-stdio.c: Likewise. * sysdeps/mach/hurd/telldir.c: Likewise. * sysdeps/mach/hurd/truncate.c: Likewise. * sysdeps/mach/hurd/umask.c: Likewise. * sysdeps/mach/hurd/unlink.c: Likewise. * sysdeps/mach/hurd/wait4.c: Likewise. * sysdeps/mach/hurd/utimes.c: Likewise. * sysdeps/mach/hurd/write.c: Likewise. * sysdeps/mach/adjtime.c: Likewise. * sysdeps/mach/gettimeofday.c: Likewise. * sysdeps/mach/usleep.c: Likewise. * sysdeps/mips/__longjmp.c: Likewise. * sysdeps/posix/clock.c: Likewise. * sysdeps/posix/ctermid.c: Likewise. * sysdeps/posix/defs.c: Likewise. * sysdeps/posix/dup.c: Likewise. * sysdeps/posix/libc_fatal.c: Likewise. * sysdeps/posix/stdio_init.c: Likewise. * sysdeps/rs6000/ffs.c: Likewise. * sysdeps/sparc/e_sqrt.c: Likewise. * sysdeps/standalone/i386/force_cpu386/_exit.c: Likewise. * sysdeps/standalone/i386/force_cpu386/brdinit.c: Likewise. * sysdeps/standalone/i386/force_cpu386/console.c: Likewise. * sysdeps/standalone/i960/nindy960/_exit.c: Likewise. * sysdeps/standalone/i960/nindy960/brdinit.c: Likewise. * sysdeps/standalone/i960/nindy960/console.c: Likewise. * sysdeps/standalone/m68k/m68020/mvme136/_exit.c: Likewise. * sysdeps/standalone/m68k/m68020/mvme136/brdinit.c: Likewise. * sysdeps/standalone/brk.c: Likewise. * sysdeps/stub/_exit.c: Likewise. * sysdeps/stub/brdinit.c: Likewise. * sysdeps/stub/console.c: Likewise. * sysdeps/stub/defs.c: Likewise. * sysdeps/stub/errlist.c: Likewise. * sysdeps/stub/libc_fatal.c: Likewise. * sysdeps/stub/siglist.c: Likewise. * sysdeps/stub/stdio_init.c: Likewise. * sysdeps/stub/strtsupp.c: Likewise. * sysdeps/unix/bsd/bsd4.4/tcgetattr.c: Likewise. * sysdeps/unix/bsd/bsd4.4/tcsetattr.c: Likewise. * sysdeps/unix/bsd/bsd4.4/wait3.c: Likewise. * sysdeps/unix/bsd/sun/sunos4/tcflow.c: Likewise. * sysdeps/unix/bsd/sun/sunos4/tcflush.c: Likewise. * sysdeps/unix/bsd/sun/sunos4/tcgetattr.c: Likewise. * sysdeps/unix/bsd/sun/sunos4/tcsendbrk.c: Likewise. * sysdeps/unix/bsd/sun/sunos4/wait4.c: Likewise. * sysdeps/unix/bsd/ultrix4/mips/sigvec.c: Likewise. * sysdeps/unix/bsd/bsdstat.h: Likewise. * sysdeps/unix/bsd/clock.c: Likewise. * sysdeps/unix/bsd/gtty.c: Likewise. * sysdeps/unix/bsd/init-posix.c: Likewise. * sysdeps/unix/bsd/setgid.c: Likewise. * sysdeps/unix/bsd/setrgid.c: Likewise. * sysdeps/unix/bsd/setruid.c: Likewise. * sysdeps/unix/bsd/setuid.c: Likewise. * sysdeps/unix/bsd/stty.c: Likewise. * sysdeps/unix/bsd/telldir.c: Likewise. * sysdeps/unix/bsd/ualarm.c: Likewise. * sysdeps/unix/common/glue-ctype.c: Likewise. * sysdeps/unix/sparc/start.c: Likewise. * sysdeps/unix/sysv/irix4/fpathconf.c: Likewise. * sysdeps/unix/sysv/irix4/getgroups.c: Likewise. * sysdeps/unix/sysv/irix4/getrusage.c: Likewise. * sysdeps/unix/sysv/irix4/pathconf.c: Likewise. * sysdeps/unix/sysv/irix4/setgroups.c: Likewise. * sysdeps/unix/sysv/irix4/sigtramp.c: Likewise. * sysdeps/unix/sysv/irix4/start.c: Likewise. * sysdeps/unix/sysv/irix4/sysconf.c: Likewise. * sysdeps/unix/sysv/sco3.2.4/__setpgid.c: Likewise. * sysdeps/unix/sysv/sco3.2.4/getgroups.c: Likewise. * sysdeps/unix/sysv/sysv4/__getpgid.c: Likewise. * sysdeps/unix/sysv/sysv4/__setpgid.c: Likewise. * sysdeps/unix/sysv/sysv4/ftruncate.c: Likewise. * sysdeps/unix/sysv/sysv4/gethostname.c: Likewise. * sysdeps/unix/sysv/sysv4/getpgid.c: Likewise. * sysdeps/unix/sysv/sysv4/sethostname.c: Likewise. * sysdeps/unix/sysv/sysv4/setpgid.c: Likewise. * sysdeps/unix/sysv/sysv4/setsid.c: Likewise. * sysdeps/unix/sysv/gethostname.c: Likewise. * sysdeps/unix/sysv/tcgetpgrp.c: Likewise. * sysdeps/unix/sysv/tcsetpgrp.c: Likewise. * sysdeps/unix/alarm.c: Likewise. * sysdeps/unix/make_errlist.c: Likewise. * sysdeps/unix/rewinddir.c: Likewise. * sysdeps/unix/seekdir.c: Likewise. * sysdeps/unix/time.c: Likewise. * sysdeps/unix/utime.c: Likewise. * sysdeps/vax/__longjmp.c: Likewise. * sysdeps/vax/memccpy.c: Likewise. * time/strftime.c: Likewise. 1997-05-25 21:57 Miles Bader <miles@gnu.ai.mit.edu> * argp-parse.c (parser_init): For the special case where no parsing function is supplied for an argp, propagate its input to its first child, if any. * argp.h (struct argp_state): `argp' field renamed to `root_argp'. * argp-help.c (__argp_state_help, argp_args_usage, hol_help): Replace references to STATE->argp with STATE->root_argp. * argp-parse.c (parser_init): Likewise. 1997-05-26 14:17 Ulrich Drepper <drepper@cygnus.com> * manual/main.texi: Clarify situation for other not supported ports. Proposed by Andreas Jaeger <aj@arthur.rhein-neckar.de>. We recommend binutils 2.8. 1997-05-26 12:17 Ulrich Drepper <drepper@cygnus.com> * netinet/in.h: New file. Wrapper around inet/netinet/in.h. 1997-05-25 09:51 H.J. Lu <hjl@gnu.ai.mit.edu> * sysdeps/i386/elf/start.S: Change local label "nofini" to ".Lnofini". * sysdeps/i386/i386-mcount.S: Use GOT, instead of GOTOFF. 1997-05-24 17:45 H.J. Lu <hjl@gnu.ai.mit.edu> * gmon/gmon.c (_mcleanup): Free tostruct array allocated in monstartup. (dl_main): Define _dl_verbose based on DL_WARN environment variable.
254 lines
6.0 KiB
C
254 lines
6.0 KiB
C
/* Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
|
|
This file is part of the GNU C Library.
|
|
|
|
The GNU C Library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Library General Public License as
|
|
published by the Free Software Foundation; either version 2 of the
|
|
License, or (at your option) any later version.
|
|
|
|
The GNU C Library is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Library General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Library General Public
|
|
License along with the GNU C Library; see the file COPYING.LIB. If not,
|
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA. */
|
|
|
|
#include <errno.h>
|
|
#include <stdio.h>
|
|
#include <sys/types.h>
|
|
#include <hurd.h>
|
|
#include <fcntl.h>
|
|
#include <hurd/fd.h>
|
|
|
|
/* Check ERR for wanting to generate a signal. */
|
|
|
|
int __stdio_fileno (void *);
|
|
|
|
static inline int
|
|
fd_fail (struct hurd_fd *fd, error_t err)
|
|
{
|
|
int signo = _hurd_fd_error_signal (err);
|
|
if (signo)
|
|
{
|
|
const struct hurd_signal_detail detail
|
|
= { code: __stdio_fileno (fd), error: err, exc: 0 };
|
|
_hurd_raise_signal (NULL, signo, &detail);
|
|
}
|
|
errno = err;
|
|
return -1;
|
|
}
|
|
|
|
|
|
/* Read up to N chars into BUF from COOKIE.
|
|
Return how many chars were read, 0 for EOF or -1 for error. */
|
|
ssize_t
|
|
__stdio_read (cookie, buf, n)
|
|
void *cookie;
|
|
char *buf;
|
|
size_t n;
|
|
{
|
|
error_t err;
|
|
struct hurd_fd *fd = cookie;
|
|
|
|
if (! fd)
|
|
return __hurd_fail (EBADF);
|
|
|
|
if (err = _hurd_fd_read (fd, buf, &n))
|
|
return fd_fail (fd, err);
|
|
|
|
return n;
|
|
}
|
|
|
|
/* Write up to N chars from BUF to COOKIE.
|
|
Return how many chars were written or -1 for error. */
|
|
ssize_t
|
|
__stdio_write (cookie, buf, n)
|
|
void *cookie;
|
|
const char *buf;
|
|
size_t n;
|
|
{
|
|
error_t err;
|
|
size_t wrote, nleft;
|
|
struct hurd_fd *fd = cookie;
|
|
|
|
if (! fd)
|
|
return __hurd_fail (EBADF);
|
|
|
|
nleft = n;
|
|
do
|
|
{
|
|
wrote = nleft;
|
|
if (err = _hurd_fd_write (fd, buf, &wrote))
|
|
return fd_fail (fd, err);
|
|
buf += wrote;
|
|
nleft -= wrote;
|
|
} while (nleft > 0);
|
|
|
|
return wrote;
|
|
}
|
|
|
|
/* Move COOKIE's file position *POS bytes, according to WHENCE.
|
|
The current file position is stored in *POS.
|
|
Returns zero if successful, nonzero if not. */
|
|
int
|
|
__stdio_seek (cookie, pos, whence)
|
|
void *cookie;
|
|
fpos_t *pos;
|
|
int whence;
|
|
{
|
|
error_t err;
|
|
struct hurd_fd *fd = cookie;
|
|
if (! fd)
|
|
return __hurd_fail (EBADF);
|
|
err = HURD_FD_PORT_USE (fd, __io_seek (port, *pos, whence, pos));
|
|
return err ? fd_fail (fd, err) : 0;
|
|
}
|
|
|
|
/* Close the file associated with COOKIE.
|
|
Return 0 for success or -1 for failure. */
|
|
int
|
|
__stdio_close (cookie)
|
|
void *cookie;
|
|
{
|
|
error_t error = cookie ? _hurd_fd_close (cookie) : EBADF;
|
|
return error ? fd_fail (cookie, error) : 0;
|
|
}
|
|
|
|
|
|
static inline int
|
|
modeflags (__io_mode m)
|
|
{
|
|
int flags = 0;
|
|
if (m.__read)
|
|
flags |= O_READ;
|
|
if (m.__write)
|
|
flags |= O_WRITE;
|
|
if (m.__append)
|
|
flags |= O_APPEND;
|
|
if (m.__create)
|
|
flags |= O_CREAT;
|
|
if (m.__truncate)
|
|
flags |= O_TRUNC;
|
|
if (m.__exclusive)
|
|
flags |= O_EXCL;
|
|
return flags;
|
|
}
|
|
|
|
/* Open FILENAME with the mode in M. */
|
|
int
|
|
__stdio_open (filename, m, cookieptr)
|
|
const char *filename;
|
|
__io_mode m;
|
|
void **cookieptr;
|
|
{
|
|
int flags;
|
|
file_t port;
|
|
struct hurd_fd *d;
|
|
|
|
flags = modeflags (m);
|
|
port = __file_name_lookup (filename, flags, 0666 & ~_hurd_umask);
|
|
if (port == MACH_PORT_NULL)
|
|
return -1;
|
|
|
|
HURD_CRITICAL_BEGIN;
|
|
d = _hurd_alloc_fd (NULL, 0);
|
|
if (d != NULL)
|
|
{
|
|
_hurd_port2fd (d, port, flags);
|
|
__spin_unlock (&d->port.lock);
|
|
}
|
|
HURD_CRITICAL_END;
|
|
|
|
*cookieptr = d;
|
|
return 0;
|
|
}
|
|
|
|
|
|
/* Open FILENAME with the mode in M. Use the same magic cookie
|
|
already in *COOKIEPTR if possible, closing the old cookie with CLOSEFN. */
|
|
int
|
|
__stdio_reopen (filename, m, cookieptr)
|
|
const char *filename;
|
|
__io_mode m;
|
|
void **cookieptr;
|
|
__io_close_fn closefn;
|
|
{
|
|
int flags;
|
|
file_t port;
|
|
struct hurd_fd *d;
|
|
|
|
if (closefn != __stdio_close)
|
|
{
|
|
/* The old cookie is Not Of The Body.
|
|
Just close it and do a normal open. */
|
|
(*closefn) (*cookieptr);
|
|
return __stdio_open (filename, m, cookieptr);
|
|
}
|
|
|
|
/* Open a new port on the file. */
|
|
flags = modeflags (m);
|
|
port = __file_name_lookup (filename, flags, 0666 & ~_hurd_umask);
|
|
|
|
/* Install the new port in the same file descriptor slot the old cookie
|
|
points to. If opening the file failed, PORT will be MACH_PORT_NULL
|
|
and installing it in the descriptor will have the effect of closing
|
|
the old descriptor. */
|
|
|
|
d = *cookieptr;
|
|
HURD_CRITICAL_BEGIN;
|
|
__spin_lock (&d->port.lock);
|
|
_hurd_port2fd (d, port, flags);
|
|
__spin_unlock (&d->port.lock);
|
|
HURD_CRITICAL_END;
|
|
|
|
return port == MACH_PORT_NULL ? -1 : 0;
|
|
}
|
|
|
|
|
|
/* Write a message to the error output.
|
|
Try hard to make it really get out. */
|
|
void
|
|
__stdio_errmsg (msg, len)
|
|
const char *msg;
|
|
size_t len;
|
|
{
|
|
io_t server;
|
|
mach_msg_type_number_t wrote;
|
|
|
|
server = __getdport (2);
|
|
__io_write (server, msg, len, -1, &wrote);
|
|
__mach_port_deallocate (__mach_task_self (), server);
|
|
}
|
|
|
|
|
|
/* Return the POSIX.1 file descriptor associated with COOKIE,
|
|
or -1 for errors. If COOKIE does not relate to any POSIX.1 file
|
|
descriptor, this should return -1 with errno set to EOPNOTSUPP. */
|
|
int
|
|
__stdio_fileno (cookie)
|
|
void *cookie;
|
|
{
|
|
int fd;
|
|
|
|
if (! cookie)
|
|
return __hurd_fail (EBADF);
|
|
|
|
__mutex_lock (&_hurd_dtable_lock);
|
|
for (fd = 0; fd < _hurd_dtablesize; ++fd)
|
|
if (_hurd_dtable[fd] == cookie)
|
|
{
|
|
__mutex_unlock (&_hurd_dtable_lock);
|
|
return fd;
|
|
}
|
|
__mutex_unlock (&_hurd_dtable_lock);
|
|
|
|
/* This should never happen, because this function should not be
|
|
installed as a stream's __fileno function unless that stream's cookie
|
|
points to a file descriptor. */
|
|
errno = EGRATUITOUS;
|
|
return -1;
|
|
}
|