about summary refs log tree commit diff
path: root/sysdeps/posix/pipestream.c
diff options
context:
space:
mode:
authorRoland McGrath <roland@gnu.org>2002-04-30 22:00:59 +0000
committerRoland McGrath <roland@gnu.org>2002-04-30 22:00:59 +0000
commita8c017767721fec8fd4ee53c1937e31e35dfac08 (patch)
tree11c43b6158f98ebcce0ab0b5555faa3a35d43187 /sysdeps/posix/pipestream.c
parent8543f93de2a52f1e314051aa20f7394a7c13366f (diff)
downloadglibc-a8c017767721fec8fd4ee53c1937e31e35dfac08.tar.gz
glibc-a8c017767721fec8fd4ee53c1937e31e35dfac08.tar.xz
glibc-a8c017767721fec8fd4ee53c1937e31e35dfac08.zip
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/posix/pipestream.c')
-rw-r--r--sysdeps/posix/pipestream.c221
1 files changed, 0 insertions, 221 deletions
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 <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;
-}