From a8c017767721fec8fd4ee53c1937e31e35dfac08 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Tue, 30 Apr 2002 22:00:59 +0000 Subject: 2002-04-30 Roland McGrath 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. --- sysdeps/posix/defs.c | 74 --------------- sysdeps/posix/fdopen.c | 75 --------------- sysdeps/posix/pipestream.c | 221 --------------------------------------------- sysdeps/posix/stdio_init.c | 69 -------------- sysdeps/posix/vdprintf.c | 49 ---------- 5 files changed, 488 deletions(-) delete mode 100644 sysdeps/posix/defs.c delete mode 100644 sysdeps/posix/fdopen.c delete mode 100644 sysdeps/posix/pipestream.c delete mode 100644 sysdeps/posix/stdio_init.c delete mode 100644 sysdeps/posix/vdprintf.c (limited to 'sysdeps/posix') diff --git a/sysdeps/posix/defs.c b/sysdeps/posix/defs.c deleted file mode 100644 index 7fe1908531..0000000000 --- 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 -#include -#include - -/* 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 af951db5a2..0000000000 --- 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 -#include -#include - -/* 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 94e09f1b9d..0000000000 --- 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 -#include -#include -#include -#include -#include -#include -#include -#include - -#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 99b4e807a4..0000000000 --- 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 -#include -#include -#include - -/* 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 f28bfdfd55..0000000000 --- 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 -#include -#include -#include -#include - - -/* 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; -} -- cgit v1.2.3