1/* psize.c - Find pipe size. */
2
3/* Copyright (C) 1987, 1991 Free Software Foundation, Inc.
4
5   This file is part of GNU Bash, the Bourne Again SHell.
6
7   Bash is free software; you can redistribute it and/or modify it
8   under the terms of the GNU General Public License as published by
9   the Free Software Foundation; either version 2, or (at your option)
10   any later version.
11
12   Bash is distributed in the hope that it will be useful, but WITHOUT
13   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
15   License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with Bash; see the file COPYING.  If not, write to the Free
19   Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
20
21/*  Write output in 128-byte chunks until we get a sigpipe or write gets an
22    EPIPE.  Then report how many bytes we wrote.  We assume that this is the
23    pipe size. */
24#include <config.h>
25
26#if defined (HAVE_UNISTD_H)
27#  ifdef _MINIX
28#    include <sys/types.h>
29#  endif
30#  include <unistd.h>
31#endif
32
33#include <stdio.h>
34#ifndef _MINIX
35#include "../bashtypes.h"
36#endif
37#include <signal.h>
38#include <errno.h>
39
40#include "../command.h"
41#include "../general.h"
42#include "../sig.h"
43
44#ifndef errno
45extern int errno;
46#endif
47
48int nw;
49
50sighandler
51sigpipe (sig)
52     int sig;
53{
54  fprintf (stderr, "%d\n", nw);
55  exit (0);
56}
57
58int
59main (argc, argv)
60     int argc;
61     char **argv;
62{
63  char buf[128];
64  register int i;
65
66  for (i = 0; i < 128; i++)
67    buf[i] = ' ';
68
69  signal (SIGPIPE, sigpipe);
70
71  nw = 0;
72  for (;;)
73    {
74      int n;
75      n = write (1, buf, 128);
76      nw += n;
77    }
78  return (0);
79}
80