diff options
author | Roland McGrath <roland@gnu.org> | 2002-04-30 22:00:59 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2002-04-30 22:00:59 +0000 |
commit | a8c017767721fec8fd4ee53c1937e31e35dfac08 (patch) | |
tree | 11c43b6158f98ebcce0ab0b5555faa3a35d43187 /sysdeps | |
parent | 8543f93de2a52f1e314051aa20f7394a7c13366f (diff) | |
download | glibc-a8c017767721fec8fd4ee53c1937e31e35dfac08.zip glibc-a8c017767721fec8fd4ee53c1937e31e35dfac08.tar.gz glibc-a8c017767721fec8fd4ee53c1937e31e35dfac08.tar.bz2 |
2002-04-30 Roland McGrath <roland@frob.com>
Removed old GNU stdio implementation; GNU libio is now the only option.
* configure.in: Removed --enable-libio option and @stdio@ subst var.
Define USE_IN_LIBIO unconditionally.
* configure: Regenerated.
* Makeconfig (stdio): Set to libio by default.
* config.make.in (stdio): Variable removed.
* sysdeps/unix/sysv/linux/configure.in: Don't set $stdio.
* sysdeps/unix/sysv/linux/configure: Regenerated.
* sysdeps/mach/hurd/configure.in: Don't test $stdio.
* sysdeps/mach/hurd/configure: Regenerated.
* stdio/.cvsignore: File removed.
* stdio/Makefile: File removed.
* stdio/Versions: File removed.
* stdio/__fbufsize.c: File removed.
* stdio/__flbf.c: File removed.
* stdio/__fpending.c: File removed.
* stdio/__fpurge.c: File removed.
* stdio/__freadable.c: File removed.
* stdio/__freading.c: File removed.
* stdio/__fsetlocking.c: File removed.
* stdio/__fwritable.c: File removed.
* stdio/__fwriting.c: File removed.
* stdio/clearerr.c: File removed.
* stdio/fclose.c: File removed.
* stdio/fcloseall.c: File removed.
* stdio/feof.c: File removed.
* stdio/ferror.c: File removed.
* stdio/fflush.c: File removed.
* stdio/fgetc.c: File removed.
* stdio/fgetpos.c: File removed.
* stdio/fgets.c: File removed.
* stdio/fileno.c: File removed.
* stdio/fmemopen.c: File removed.
* stdio/fopen.c: File removed.
* stdio/fopncook.c: File removed.
* stdio/fputc.c: File removed.
* stdio/fputs.c: File removed.
* stdio/fread.c: File removed.
* stdio/freopen.c: File removed.
* stdio/fseek.c: File removed.
* stdio/fsetpos.c: File removed.
* stdio/ftell.c: File removed.
* stdio/fwrite.c: File removed.
* stdio/getc.c: File removed.
* stdio/getchar.c: File removed.
* stdio/getdelim.c: File removed.
* stdio/gets.c: File removed.
* stdio/glue.c: File removed.
* stdio/internals.c: File removed.
* stdio/linewrap.c: File removed.
* stdio/linewrap.h: File removed.
* stdio/memstream.c: File removed.
* stdio/newstream.c: File removed.
* stdio/obstream.c: File removed.
* stdio/putc.c: File removed.
* stdio/putchar.c: File removed.
* stdio/puts.c: File removed.
* stdio/rewind.c: File removed.
* stdio/setbuf.c: File removed.
* stdio/setbuffer.c: File removed.
* stdio/setlinebuf.c: File removed.
* stdio/setvbuf.c: File removed.
* stdio/stdio.h: File removed.
* stdio/ungetc.c: File removed.
* stdio/vasprintf.c: File removed.
* stdio/vscanf.c: File removed.
* stdio/vsnprintf.c: File removed.
* stdio/vsprintf.c: File removed.
* stdio/vsscanf.c: File removed.
* sysdeps/generic/defs.c: File removed.
* sysdeps/generic/fdopen.c: File removed.
* sysdeps/generic/pipestream.c: File removed.
* sysdeps/generic/stdio_init.c: File removed.
* sysdeps/generic/sysd-stdio.c: File removed.
* sysdeps/generic/vdprintf.c: File removed.
* sysdeps/mach/hurd/defs.c: File removed.
* sysdeps/mach/hurd/fdopen.c: File removed.
* sysdeps/mach/hurd/pipestream.c: File removed.
* sysdeps/mach/hurd/stdio_init.c: File removed.
* sysdeps/mach/hurd/sysd-stdio.c: File removed.
* sysdeps/mach/hurd/vdprintf.c: File removed.
* sysdeps/posix/defs.c: File removed.
* sysdeps/posix/fdopen.c: File removed.
* sysdeps/posix/pipestream.c: File removed.
* sysdeps/posix/stdio_init.c: File removed.
* sysdeps/posix/vdprintf.c: File removed.
* sysdeps/unix/pipestream.c: File removed.
* sysdeps/unix/sysv/sysd-stdio.c: File removed.
* sysdeps/unix/sysv/sco3.2.4/pipestream.c: File removed.
* sysdeps/unix/sysv/sysv4/pipestream.c: File removed.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/generic/defs.c | 47 | ||||
-rw-r--r-- | sysdeps/generic/fdopen.c | 34 | ||||
-rw-r--r-- | sysdeps/generic/pipestream.c | 60 | ||||
-rw-r--r-- | sysdeps/generic/stdio_init.c | 30 | ||||
-rw-r--r-- | sysdeps/generic/sysd-stdio.c | 191 | ||||
-rw-r--r-- | sysdeps/generic/vdprintf.c | 33 | ||||
-rwxr-xr-x | sysdeps/mach/hurd/configure | 13 | ||||
-rw-r--r-- | sysdeps/mach/hurd/configure.in | 9 | ||||
-rw-r--r-- | sysdeps/mach/hurd/defs.c | 87 | ||||
-rw-r--r-- | sysdeps/mach/hurd/fdopen.c | 72 | ||||
-rw-r--r-- | sysdeps/mach/hurd/pipestream.c | 2 | ||||
-rw-r--r-- | sysdeps/mach/hurd/stdio_init.c | 62 | ||||
-rw-r--r-- | sysdeps/mach/hurd/sysd-stdio.c | 257 | ||||
-rw-r--r-- | sysdeps/mach/hurd/vdprintf.c | 57 | ||||
-rw-r--r-- | sysdeps/posix/defs.c | 74 | ||||
-rw-r--r-- | sysdeps/posix/fdopen.c | 75 | ||||
-rw-r--r-- | sysdeps/posix/pipestream.c | 221 | ||||
-rw-r--r-- | sysdeps/posix/stdio_init.c | 69 | ||||
-rw-r--r-- | sysdeps/posix/vdprintf.c | 49 | ||||
-rw-r--r-- | sysdeps/unix/pipestream.c | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/configure.in | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/sco3.2.4/pipestream.c | 3 | ||||
-rw-r--r-- | sysdeps/unix/sysv/sysd-stdio.c | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/sysv4/pipestream.c | 2 |
24 files changed, 6 insertions, 1448 deletions
diff --git a/sysdeps/generic/defs.c b/sysdeps/generic/defs.c deleted file mode 100644 index c71235d..0000000 --- a/sysdeps/generic/defs.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Definitions of global stdio data structures. - Copyright (C) 1991, 1995, 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 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdio.h> - -/* This file should define the following - variables as appropriate for the system. */ - -FILE *stdin, *stdout, *stderr; - -/* Pointer to the first stream in the list. */ -FILE *__stdio_head; - -/* This function MUST be in this file! - This is because we want _cleanup to go into the __libc_atexit set - when any stdio code is used (and to use any stdio code, one must reference - something defined in this file), and since only local symbols can be made - set elements, having the set element stab entry here and _cleanup elsewhere - loses; and having them both elsewhere loses because there is no reference - to cause _cleanup to be linked in. */ - -void -_cleanup () -{ - __fcloseall (); -} - - -#ifdef HAVE_GNU_LD -text_set_element (__libc_atexit, _cleanup); -#endif diff --git a/sysdeps/generic/fdopen.c b/sysdeps/generic/fdopen.c deleted file mode 100644 index d856d04..0000000 --- a/sysdeps/generic/fdopen.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Copyright (C) 1991, 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 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <stdio.h> - -/* Open a new stream on a given system file descriptor. */ -FILE * -__fdopen (fd, mode) - int fd; - const char *mode; -{ - __set_errno (ENOSYS); - return NULL; -} -weak_alias (__fdopen, fdopen) - -stub_warning (fdopen) -#include <stub-tag.h> diff --git a/sysdeps/generic/pipestream.c b/sysdeps/generic/pipestream.c deleted file mode 100644 index f30dbdd..0000000 --- a/sysdeps/generic/pipestream.c +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 1991, 1993, 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 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stddef.h> -#include <signal.h> -#include <stdio.h> -#include <errno.h> - - -/* Open a new stream that is a one-way pipe to a - child process running the given shell command. */ -FILE * -popen (command, mode) - const char *command; - const char *mode; -{ - if (command == NULL || mode == NULL || (*mode != 'r' && *mode != 'w')) - { - __set_errno (EINVAL); - return NULL; - } - - __set_errno (ENOSYS); - return NULL; -} - -/* Close a stream opened by popen and return its status. - Returns -1 if the stream was not opened by popen. */ -int -pclose (stream) - register FILE *stream; -{ - if (!__validfp (stream) || !stream->__ispipe) - { - __set_errno (EINVAL); - return -1; - } - - __set_errno (ENOSYS); - return -1; -} - -stub_warning (popen) -stub_warning (pclose) -#include <stub-tag.h> diff --git a/sysdeps/generic/stdio_init.c b/sysdeps/generic/stdio_init.c deleted file mode 100644 index 4269343..0000000 --- a/sysdeps/generic/stdio_init.c +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 1991, 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 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdio.h> - -/* Initialize STREAM as necessary. - This may change I/O functions, give a buffer, etc. - If no buffer is allocated, but the bufsize is set, - the bufsize will be used to allocate the buffer. */ -void -__stdio_init_stream (stream) - FILE *stream; -{ - stream->__bufsize = BUFSIZ; -} diff --git a/sysdeps/generic/sysd-stdio.c b/sysdeps/generic/sysd-stdio.c deleted file mode 100644 index 032ea60..0000000 --- a/sysdeps/generic/sysd-stdio.c +++ /dev/null @@ -1,191 +0,0 @@ -/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <stddef.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> - -extern __io_read_fn __stdio_read; -extern __io_write_fn __stdio_write; -extern __io_seek_fn __stdio_seek; -extern __io_close_fn __stdio_close; -extern __io_fileno_fn __stdio_fileno; - -/* Read N bytes into BUF from COOKIE. */ -int -__stdio_read (void *cookie, char *buf, size_t n) -{ - const int fd = (int) cookie; -#if defined EINTR && defined EINTR_REPEAT - int save = errno; - int nread; - - try:; - __set_errno (0); - nread = __read (fd, buf, (int) n); - if (nread < 0) - { - if (errno == EINTR) - goto try; - return -1; - } - __set_errno (save); - return nread; - -#else /* No EINTR. */ - return __read (fd, buf, n); -#endif -} - - -/* Write N bytes from BUF to COOKIE. */ -int -__stdio_write (void *cookie, const char *buf, size_t n) -{ - const int fd = (int) cookie; - register size_t written = 0; - - while (n > 0) - { - int count = __write (fd, buf, (int) n); - if (count > 0) - { - buf += count; - written += count; - n -= count; - } - else if (count < 0 -#if defined EINTR && defined EINTR_REPEAT - && errno != EINTR -#endif - ) - /* Write error. */ - return -1; - } - - return (int) written; -} - - -/* Move COOKIE's file position *POS bytes, according to WHENCE. - The new file position is stored in *POS. - Returns zero if successful, nonzero if not. */ -int -__stdio_seek (void *cookie, fpos_t *pos, int whence) -{ - off_t new; - new = __lseek ((int) cookie, (off_t) *pos, whence); - if (new < 0) - return 1; - *pos = (fpos_t) new; - return 0; -} - - -/* Close COOKIE. */ -int -__stdio_close (void *cookie) -{ - return __close ((int) cookie); -} - -/* 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 (void *cookie) -{ - return (int) cookie; -} - - -/* Open the given file with the mode given in the __io_mode argument. */ -int -__stdio_open (const char *filename, __io_mode m, void **cookieptr) -{ - int fd; - int mode; - - if (m.__read && m.__write) - mode = O_RDWR; - else - mode = m.__read ? O_RDONLY : O_WRONLY; - - if (m.__append) - mode |= O_APPEND; - if (m.__exclusive) - mode |= O_EXCL; - if (m.__truncate) - mode |= O_TRUNC; - - if (m.__create) - fd = __open (filename, mode | O_CREAT, - S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH); - else - fd = __open (filename, mode); - - if (fd < 0) - return -1; - - *cookieptr = (void *) fd; - 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 (const char *filename, __io_mode m, void **cookieptr, - __io_close_fn closefn) -{ - void *newcookie; - - /* We leave the old descriptor open while we open the file. - That way ``freopen ("/dev/stdin", "r", stdin)'' works. */ - - if (__stdio_open (filename, m, &newcookie)) - { - if (errno == ENFILE || errno == EMFILE) - { - /* We are out of file descriptors. Try closing the old one and - retrying the open. */ - (void) (*closefn) (*cookieptr); - if (__stdio_open (filename, m, &newcookie)) - return -1; - } - else - return -1; - } - - if (newcookie != *cookieptr) - { - if (closefn != __stdio_close || - /* Try to move the descriptor to the desired one. */ - __dup2 ((int) newcookie, (int) *cookieptr) < 0) - /* Didn't work. Give the caller the new cookie. */ - *cookieptr = newcookie; - } - - return 0; -} diff --git a/sysdeps/generic/vdprintf.c b/sysdeps/generic/vdprintf.c deleted file mode 100644 index d8bd3bc..0000000 --- a/sysdeps/generic/vdprintf.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 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 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <stdio.h> -#include <stdarg.h> - -/* Write formatted output to file descriptor D according to the format string - FORMAT, using the argument list in ARG. */ -int -vdprintf (int d, const char *format, va_list arg) -{ - __set_errno (ENOSYS); - return 0; -} - -stub_warning (vdprintf) -#include <stub-tag.h> diff --git a/sysdeps/mach/hurd/configure b/sysdeps/mach/hurd/configure index 93434c0..7017ea4 100755 --- a/sysdeps/mach/hurd/configure +++ b/sysdeps/mach/hurd/configure @@ -12,14 +12,9 @@ fi case "$machine" in i386*) - # With --enable-libio, the default oldest ABI is 2.2.6; - # without --enable-libio, the default oldest ABI is 2.0. + # The default oldest ABI is 2.2.6. # We only need a "yes" here if the oldest ABI supported will be < 2.2.6. - if if test "$stdio" = libio; then - test "$oldest_abi" != default && test "$oldest_abi" \< "2.2.6" - else - test "$oldest_abi" = default || test "$oldest_abi" \< "2.2.6" - fi; then + if test "$oldest_abi" != default && test "$oldest_abi" \< "2.2.6"; then libc_cv_gcc_unwind_find_fde=yes fi ;; @@ -29,7 +24,7 @@ esac # See if mig groks `retcode'. echo $ac_n "checking whether $MIG supports the retcode keyword""... $ac_c" 1>&6 -echo "configure:33: checking whether $MIG supports the retcode keyword" >&5 +echo "configure:28: checking whether $MIG supports the retcode keyword" >&5 if eval "test \"`echo '$''{'hurd_cv_mig_retcode'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -43,7 +38,7 @@ simpleroutine foobar_reply ( reply_port: reply_port_t; err: kern_return_t, RetCode); EOF -if { ac_try='CC="${CC}" ${MIG-false} -n conftest.defs 1>&5'; { (eval echo configure:47: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then +if { ac_try='CC="${CC}" ${MIG-false} -n conftest.defs 1>&5'; { (eval echo configure:42: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }; then hurd_cv_mig_retcode=yes else hurd_cv_mig_retcode=no diff --git a/sysdeps/mach/hurd/configure.in b/sysdeps/mach/hurd/configure.in index 26bdaf6..f5afe2f 100644 --- a/sysdeps/mach/hurd/configure.in +++ b/sysdeps/mach/hurd/configure.in @@ -14,14 +14,9 @@ fi case "$machine" in i386*) - # With --enable-libio, the default oldest ABI is 2.2.6; - # without --enable-libio, the default oldest ABI is 2.0. + # The default oldest ABI is 2.2.6. # We only need a "yes" here if the oldest ABI supported will be < 2.2.6. - if if test "$stdio" = libio; then - test "$oldest_abi" != default && test "$oldest_abi" \< "2.2.6" - else - test "$oldest_abi" = default || test "$oldest_abi" \< "2.2.6" - fi; then + if test "$oldest_abi" != default && test "$oldest_abi" \< "2.2.6"; then libc_cv_gcc_unwind_find_fde=yes fi ;; diff --git a/sysdeps/mach/hurd/defs.c b/sysdeps/mach/hurd/defs.c deleted file mode 100644 index 3999957..0000000 --- a/sysdeps/mach/hurd/defs.c +++ /dev/null @@ -1,87 +0,0 @@ -/* Definitions of global stdio data structures. - Copyright (C) 1991,92,93,94,95,97,2000 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdio.h> -#include <hurd/fd.h> -#include <unistd.h> - -FILE *stdin, *stdout, *stderr; - -/* Pointer to the first stream in the list. */ -FILE *__stdio_head = NULL; - -/* XXX should be __init_stdio? */ -static void -init_stdio (void) -{ - inline void init (FILE **streamptr, int fd) - { - /* We want to use the existing FILE object if one has been allocated. - (This will only be the case if our image came from something like - Emacs's unexec, where we were called in the first run.) */ - FILE *s = *streamptr ?: __newstream (); - struct hurd_fd *d = _hurd_fd_get (fd); - if (d == NULL) - { - /* There is no file descriptor allocated. We want the standard - streams to always refer to their standard file descriptors, even - if those descriptors are not set up until later. So allocate - the descriptor structure with no ports and store it in the - stream. Operations will fail until ports are installed in the - file descriptor. */ - if (d = _hurd_alloc_fd (NULL, fd)) - __spin_unlock (&d->port.lock); - } - if (s) - s->__cookie = d; - *streamptr = s; - } -#define S(NAME, FD, MODE) \ - init (&NAME, FD); if (NAME) NAME->__mode.__##MODE = 1; - - S (stdin, STDIN_FILENO, read); - S (stdout, STDOUT_FILENO, write); - S (stderr, STDERR_FILENO, write); - -#undef S - - if (stderr) - stderr->__userbuf = 1; /* stderr is always unbuffered. */ - - (void) &init_stdio; /* Avoid "defined but not used" warning. */ -} -/* This initializer will be run along with other vanilla libc initializers - in a normal Posixoid environment. The earlier Hurd-speciifc initializer - phases cannot use normal facilities like malloc (which stdio uses). */ -text_set_element (__libc_subinit, init_stdio); - -/* This function MUST be in this file! - This is because we want _cleanup to go into the __libc_atexit set - when any stdio code is used (and to use any stdio code, one must reference - something defined in this file), and since only local symbols can be made - set elements, having the set element stab entry here and _cleanup elsewhere - loses; and having them both elsewhere loses because there is no reference - to cause _cleanup to be linked in. */ - -void -_cleanup (void) -{ - __fcloseall (); -} -text_set_element (__libc_atexit, _cleanup); diff --git a/sysdeps/mach/hurd/fdopen.c b/sysdeps/mach/hurd/fdopen.c deleted file mode 100644 index 49cf0e6..0000000 --- a/sysdeps/mach/hurd/fdopen.c +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 1991, 1994, 1995, 1997, 2000 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <stdio.h> -#include <hurd/fd.h> -#include <fcntl.h> -#include <hurd/io.h> - -/* Defined in fopen.c. */ -extern int __getmode (const char *mode, __io_mode *mptr); - -/* Open a new stream on a given system file descriptor. */ -FILE * -__fdopen (fd, mode) - int fd; - const char *mode; -{ - FILE *stream; - __io_mode m; - struct hurd_fd *d; - error_t err; - int openmodes; - - if (!__getmode (mode, &m)) - return NULL; - - HURD_CRITICAL_BEGIN; - d = _hurd_fd_get (fd); - if (d == NULL) - err = EBADF; - else - err = HURD_FD_PORT_USE (d, __io_get_openmodes (port, &openmodes)); - HURD_CRITICAL_END; - - if (err) - return __hurd_dfail (fd, err), NULL; - - /* Check the access mode. */ - if ((m.__read && !(openmodes & O_READ)) || - (m.__write && !(openmodes & O_WRITE))) - { - errno = EBADF; - return NULL; - } - - stream = __newstream (); - if (stream == NULL) - return NULL; - - stream->__cookie = d; - stream->__mode = m; - - return stream; -} - -weak_alias (__fdopen, fdopen) diff --git a/sysdeps/mach/hurd/pipestream.c b/sysdeps/mach/hurd/pipestream.c deleted file mode 100644 index 548e1e7..0000000 --- a/sysdeps/mach/hurd/pipestream.c +++ /dev/null @@ -1,2 +0,0 @@ -/* Make sure NO_WAITPID is not set; sysdeps/unix/pipestream.c defines it. */ -#include <sysdeps/posix/pipestream.c> diff --git a/sysdeps/mach/hurd/stdio_init.c b/sysdeps/mach/hurd/stdio_init.c deleted file mode 100644 index 2da15ce..0000000 --- a/sysdeps/mach/hurd/stdio_init.c +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> -#include <hurd/fd.h> -#include <hurd/io.h> -#include <hurd/term.h> - -/* Initialize STREAM as necessary. - This may change I/O functions, give a buffer, etc. - If no buffer is allocated, but the bufsize is set, - the bufsize will be used to allocate the buffer. */ -void -__stdio_init_stream (FILE *stream) -{ - struct hurd_fd *const d = stream->__cookie; - struct stat statb; - error_t err; - - if (stream->__buffer != NULL || stream->__userbuf) - /* If's unbuffered by request, we can't do anything useful. */ - return; - - /* Find out what sort of file this is. */ - if (err = HURD_FD_PORT_USE (d, __io_stat (port, &statb))) - return; - - if (S_ISCHR (statb.st_mode)) - { - /* It's a character device. - Make it line-buffered if it's a terminal. */ - mach_port_t cttyid; - err = HURD_FD_PORT_USE (d, __term_getctty (port, &cttyid)); - if (! err) - { - __mach_port_deallocate (__mach_task_self (), cttyid); - stream->__linebuf = 1; - } - } - - /* Use the block-size field to determine - the system's optimal buffering size. */ - stream->__bufsize = statb.st_blksize; -} diff --git a/sysdeps/mach/hurd/sysd-stdio.c b/sysdeps/mach/hurd/sysd-stdio.c deleted file mode 100644 index 14a2aee..0000000 --- a/sysdeps/mach/hurd/sysd-stdio.c +++ /dev/null @@ -1,257 +0,0 @@ -/* Copyright (C) 1994,95,96,97,98,2001 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, 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> - -extern __io_read_fn __stdio_read; -extern __io_write_fn __stdio_write; -extern __io_seek_fn __stdio_seek; -extern __io_close_fn __stdio_close; -extern __io_fileno_fn __stdio_fileno; - - -/* Check ERR for wanting to generate a signal. */ - -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, -1)) - 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, -1)) - 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 (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; -} diff --git a/sysdeps/mach/hurd/vdprintf.c b/sysdeps/mach/hurd/vdprintf.c deleted file mode 100644 index 568fb6b..0000000 --- a/sysdeps/mach/hurd/vdprintf.c +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 1991, 1992, 1993, 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 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <limits.h> -#include <stdarg.h> -#include <stdio.h> -#include <string.h> -#include <hurd/fd.h> - -/* Write formatted output to file descriptor D according to the format string - FORMAT, using the argument list in ARG. */ -int -vdprintf (int d, const char *format, va_list arg) -{ - int done; - FILE f; - struct hurd_fd *fd; - - HURD_CRITICAL_BEGIN; - fd = _hurd_fd_get (d); - HURD_CRITICAL_END; - - if (!fd) - return 0; - - /* Create an unbuffered stream talking to D on the stack. */ - memset ((void *) &f, 0, sizeof (f)); - f.__magic = _IOMAGIC; - f.__mode.__write = 1; - f.__cookie = fd; - f.__room_funcs = __default_room_functions; - f.__io_funcs = __default_io_functions; - f.__seen = 1; - f.__userbuf = 1; - - /* vfprintf will use a buffer on the stack for the life of the call, - and flush it when finished. */ - done = vfprintf (&f, format, arg); - - return done; -} diff --git a/sysdeps/posix/defs.c b/sysdeps/posix/defs.c deleted file mode 100644 index 7fe1908..0000000 --- a/sysdeps/posix/defs.c +++ /dev/null @@ -1,74 +0,0 @@ -/* Definitions of global stdio data structures. - Copyright (C) 1991, 1993, 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 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stddef.h> -#include <stdio.h> -#include <unistd.h> - -/* This file defines all the global internal variables for stdio. */ - -/* Standard streams. */ -#define READ 1, 0 -#define WRITE 0, 1 -#define BUFFERED 0 -#define UNBUFFERED 1 -#define stdstream(name, next, fd, readwrite, unbuffered) \ - { \ - _IOMAGIC, \ - NULL, NULL, NULL, NULL, 0, \ - (void *) fd, \ - { readwrite, /* ... */ }, \ - { NULL, NULL, NULL, NULL, NULL }, \ - { NULL, NULL }, \ - -1, -1, \ - (next), \ - NULL, '\0', 0, \ - 0, 0, unbuffered, 0, 0, 0, 0 \ - } -static FILE stdstreams[3] = - { - stdstream (&stdstreams[0], &stdstreams[1], STDIN_FILENO, READ, BUFFERED), - stdstream (&stdstreams[1], &stdstreams[2], STDOUT_FILENO, WRITE, BUFFERED), - stdstream (&stdstreams[2], NULL, STDERR_FILENO, WRITE, UNBUFFERED), - }; -FILE *stdin = &stdstreams[0]; -FILE *stdout = &stdstreams[1]; -FILE *stderr = &stdstreams[2]; - -/* Pointer to the first stream in the list. */ -FILE *__stdio_head = &stdstreams[0]; - -/* This function MUST be in this file! - This is because we want _cleanup to go into the __libc_atexit set - when any stdio code is used (and to use any stdio code, one must reference - something defined in this file), and since only local symbols can be made - set elements, having the set element stab entry here and _cleanup elsewhere - loses; and having them both elsewhere loses because there is no reference - to cause _cleanup to be linked in. */ - -void -_cleanup (void) -{ - __fcloseall (); -} - - -#ifdef HAVE_GNU_LD -text_set_element(__libc_atexit, _cleanup); -#endif diff --git a/sysdeps/posix/fdopen.c b/sysdeps/posix/fdopen.c deleted file mode 100644 index af951db..0000000 --- a/sysdeps/posix/fdopen.c +++ /dev/null @@ -1,75 +0,0 @@ -/* 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 - 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <stdio.h> -#include <fcntl.h> - -/* Defined in fopen.c. */ -extern int __getmode (const char *mode, __io_mode *mptr); - -/* Open a new stream on a given system file descriptor. */ -FILE * -__fdopen (fd, mode) - int fd; - const char *mode; -{ - register FILE *stream; - __io_mode m; - int dflags; - - if (!__getmode (mode, &m)) - return NULL; - - /* Verify the FD is valid and allows the access MODE specifies. */ - - dflags = __fcntl (fd, F_GETFL); - if (dflags == -1) - /* FD was invalid; fcntl has already set errno. */ - return NULL; - - /* Check the access mode. */ - switch (dflags & O_ACCMODE) - { - case O_RDONLY: - if (!m.__read) - { - __set_errno (EBADF); - return NULL; - } - break; - case O_WRONLY: - if (!m.__write) - { - __set_errno (EBADF); - return NULL; - } - break; - } - - stream = __newstream (); - if (stream == NULL) - return NULL; - - stream->__cookie = (void *) fd; - stream->__mode = m; - - return stream; -} - -weak_alias (__fdopen, fdopen) diff --git a/sysdeps/posix/pipestream.c b/sysdeps/posix/pipestream.c deleted file mode 100644 index 94e09f1..0000000 --- a/sysdeps/posix/pipestream.c +++ /dev/null @@ -1,221 +0,0 @@ -/* Copyright (C) 1991, 1992, 1993, 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 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <stddef.h> -#include <signal.h> -#include <stdio.h> -#include <stdlib.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <unistd.h> -#include <fcntl.h> - -#define SH_PATH "/bin/sh" /* Shell to run. */ -#define SH_NAME "sh" /* Name to give it. */ - -/* Structure describing a popen child. */ -struct child - { - pid_t pid; /* PID of the child. */ - __ptr_t cookie; /* Original cookie from fdopen. */ - __io_functions funcs; /* Original functions from fdopen. */ - }; - -/* io_functions for pipe streams. - These all simply call the corresponding - original function with the original cookie. */ - -#define FUNC(type, name, proto, args) \ - static type __CONCAT(child_,name) proto \ - { \ - struct child *c = (struct child *) cookie; \ - { \ - __ptr_t cookie = c->cookie; \ - return (*c->funcs.__CONCAT(__,name)) args; \ - } \ - } - -FUNC (int, read, (void *cookie, char *buf, size_t n), (cookie, buf, n)) -FUNC (int, write, (void *cookie, const char *buf, size_t n), (cookie, buf, n)) -FUNC (int, seek, (void *cookie, fpos_t *pos, int whence), - (cookie, pos, whence)) -FUNC (int, close, (void *cookie), (cookie)) -FUNC (int, fileno, (void *cookie), (cookie)) - -static const __io_functions child_funcs - = { child_read, child_write, child_seek, child_close, child_fileno }; - -/* Open a new stream that is a one-way pipe to a - child process running the given shell command. */ -FILE * -popen (command, mode) - const char *command; - const char *mode; -{ - pid_t pid; - int pipedes[2]; - FILE *stream; - struct child *child; - - if (command == NULL || mode == NULL || (*mode != 'r' && *mode != 'w')) - { - __set_errno (EINVAL); - return NULL; - } - - /* Create the pipe. */ - if (pipe (pipedes) < 0) - return NULL; - - /* Fork off the child. */ - pid = __vfork (); - if (pid == (pid_t) -1) - { - /* The fork failed. */ - (void) close (pipedes[0]); - (void) close (pipedes[1]); - return NULL; - } - else if (pid == (pid_t) 0) - { - /* We are the child side. Make the write side of - the pipe be stdin or the read side be stdout. */ - - const char *new_argv[4]; - - if ((*mode == 'w' ? dup2(pipedes[STDIN_FILENO], STDIN_FILENO) : - dup2 (pipedes[STDOUT_FILENO], STDOUT_FILENO)) < 0) - _exit (127); - - /* Close the pipe descriptors. */ - (void) close (pipedes[STDIN_FILENO]); - (void) close (pipedes[STDOUT_FILENO]); - - /* Exec the shell. */ - new_argv[0] = SH_NAME; - new_argv[1] = "-c"; - new_argv[2] = command; - new_argv[3] = NULL; - (void) execve (SH_PATH, (char *const *) new_argv, environ); - /* Die if it failed. */ - _exit (127); - } - - /* We are the parent side. */ - - /* Close the irrelevant side of the pipe and open the relevant side as a - new stream. Mark our side of the pipe to close on exec, so new children - won't see it. */ - if (*mode == 'r') - { - (void) close (pipedes[STDOUT_FILENO]); - (void) fcntl (pipedes[STDIN_FILENO], F_SETFD, FD_CLOEXEC); - stream = fdopen (pipedes[STDIN_FILENO], mode); - } - else - { - (void) close (pipedes[STDIN_FILENO]); - (void) fcntl (pipedes[STDOUT_FILENO], F_SETFD, FD_CLOEXEC); - stream = fdopen (pipedes[STDOUT_FILENO], mode); - } - - if (stream == NULL) - goto error; - - child = (struct child *) malloc (sizeof (struct child)); - if (child == NULL) - goto error; - - { - /* Make sure STREAM has its functions set before - we try to squirrel them away in CHILD. */ - extern void __stdio_check_funcs __P ((FILE *)); - __stdio_check_funcs (stream); - } - - child->pid = pid; - child->cookie = stream->__cookie; - child->funcs = stream->__io_funcs; - stream->__cookie = (void *) child; - stream->__io_funcs = child_funcs; - stream->__ispipe = 1; - return stream; - - error: - { - /* The stream couldn't be opened or the child structure couldn't be - allocated. Kill the child and close the other side of the pipe. */ - int save = errno; - (void) kill (pid, SIGKILL); - if (stream == NULL) - (void) close (pipedes[*mode == 'r' ? STDOUT_FILENO : STDIN_FILENO]); - else - (void) fclose (stream); -#ifndef NO_WAITPID - (void) waitpid (pid, (int *) NULL, 0); -#else - { - pid_t dead; - do - dead = wait ((int *) NULL); - while (dead > 0 && dead != pid); - } -#endif - __set_errno (save); - return NULL; - } -} - -/* Close a stream opened by popen and return its status. - Returns -1 if the stream was not opened by popen. */ -int -pclose (stream) - register FILE *stream; -{ - struct child *c; - pid_t pid, dead; - int status; - - if (!__validfp (stream) || !stream->__ispipe) - { - __set_errno (EINVAL); - return -1; - } - - c = (struct child *) stream->__cookie; - pid = c->pid; - stream->__cookie = c->cookie; - stream->__io_funcs = c->funcs; - free ((void *) c); - stream->__ispipe = 0; - if (fclose (stream)) - return -1; - -#ifndef NO_WAITPID - dead = waitpid (pid, &status, 0); -#else - do - dead = wait (&status); - while (dead > 0 && dead != pid); -#endif - if (dead != pid) - status = -1; - - return status; -} diff --git a/sysdeps/posix/stdio_init.c b/sysdeps/posix/stdio_init.c deleted file mode 100644 index 99b4e80..0000000 --- a/sysdeps/posix/stdio_init.c +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 1991, 1992, 1993, 1995, 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 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.h> - -/* Initialize STREAM as necessary. - This may change I/O functions, give a buffer, etc. - If no buffer is allocated, but the bufsize is set, - the bufsize will be used to allocate the buffer. */ -void -__stdio_init_stream (FILE *stream) -{ - const int fd = (int) stream->__cookie; - struct stat statb; - - if (stream->__buffer != NULL || stream->__userbuf) - /* If's unbuffered by request, we can't do anything useful. */ - return; - - /* Find out what sort of file this is. */ - if (__fstat (fd, &statb) < 0) - return; - - if (S_ISCHR (statb.st_mode)) - { - /* It's a character device. - Make it line-buffered if it's a terminal. */ - if (__isatty (fd)) - { - stream->__linebuf = 1; - - /* Unix terminal devices have the bad habit of claiming to be - seekable. On systems I have tried, seeking on a terminal - device seems to set its file position as specified, such that - a later tell says the same thing. This is in no way related - to actual seekability--the ability to seek back and read old - data. Unix terminal devices will let you "seek back", and - then read more new data from the terminal. I can think of - nothing to do about this lossage except to preemptively disable - seeking on terminal devices. */ - - stream->__io_funcs.__seek = NULL; /* Seeks get ESPIPE. */ - } - } - -#ifdef _STATBUF_ST_BLKSIZE - /* Use the block-size field to determine - the system's optimal buffering size. */ - stream->__bufsize = statb.st_blksize; -#endif -} diff --git a/sysdeps/posix/vdprintf.c b/sysdeps/posix/vdprintf.c deleted file mode 100644 index f28bfdf..0000000 --- a/sysdeps/posix/vdprintf.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1991, 1992, 1993, 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 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, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <errno.h> -#include <limits.h> -#include <stdarg.h> -#include <stdio.h> -#include <string.h> - - -/* Write formatted output to file descriptor D according to the format string - FORMAT, using the argument list in ARG. */ -int -vdprintf (int d, const char *format, va_list arg) -{ - int done; - FILE f; - - /* Create an unbuffered stream talking to D on the stack. */ - memset ((void *) &f, 0, sizeof(f)); - f.__magic = _IOMAGIC; - f.__mode.__write = 1; - f.__cookie = (void *) (long int) d; /* Casting to long quiets GCC on Alpha.*/ - f.__room_funcs = __default_room_functions; - f.__io_funcs = __default_io_functions; - f.__seen = 1; - f.__userbuf = 1; - - /* vfprintf will use a buffer on the stack for the life of the call, - and flush it when finished. */ - done = vfprintf (&f, format, arg); - - return done; -} diff --git a/sysdeps/unix/pipestream.c b/sysdeps/unix/pipestream.c deleted file mode 100644 index 1d3308f..0000000 --- a/sysdeps/unix/pipestream.c +++ /dev/null @@ -1,2 +0,0 @@ -#define NO_WAITPID -#include <sysdeps/posix/pipestream.c> diff --git a/sysdeps/unix/sysv/linux/configure.in b/sysdeps/unix/sysv/linux/configure.in index d1d0d32..486b10d 100644 --- a/sysdeps/unix/sysv/linux/configure.in +++ b/sysdeps/unix/sysv/linux/configure.in @@ -2,9 +2,6 @@ sinclude(./aclocal.m4)dnl Autoconf lossage GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. # Local configure fragment for sysdeps/unix/sysv/linux. -# On Linux, the default is to use libio instead of stdio. -test $stdio = default && stdio=libio - # Don't bother trying to generate any glue code to be compatible with the # existing system library, because we are the only system library. inhibit_glue=yes diff --git a/sysdeps/unix/sysv/sco3.2.4/pipestream.c b/sysdeps/unix/sysv/sco3.2.4/pipestream.c deleted file mode 100644 index b768e62..0000000 --- a/sysdeps/unix/sysv/sco3.2.4/pipestream.c +++ /dev/null @@ -1,3 +0,0 @@ -/* SCO 3.2v4 does have `waitpid'. - Avoid unix/pipestream.c, which says we don't. */ -#include <sysdeps/posix/pipestream.c> diff --git a/sysdeps/unix/sysv/sysd-stdio.c b/sysdeps/unix/sysv/sysd-stdio.c deleted file mode 100644 index 7f82340..0000000 --- a/sysdeps/unix/sysv/sysd-stdio.c +++ /dev/null @@ -1,2 +0,0 @@ -#define EINTR_REPEAT -#include <sysdeps/generic/sysd-stdio.c> diff --git a/sysdeps/unix/sysv/sysv4/pipestream.c b/sysdeps/unix/sysv/sysv4/pipestream.c deleted file mode 100644 index 6a32f95..0000000 --- a/sysdeps/unix/sysv/sysv4/pipestream.c +++ /dev/null @@ -1,2 +0,0 @@ -/* We deliberately avoid having NO_WAITPID set. */ -#include <sysdeps/posix/pipestream.c> |