/* Check that TRT happens for pipe corner cases (for our definition of TRT).
#progos: linux
#xerror:
#output: Terminating simulation due to writing pipe * from one single thread\n
#output: program stopped with signal 4 (*).\n
*/
#include <stddef.h>
#include <signal.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <limits.h>

void err (const char *s)
{
  perror (s);
  abort ();
}

int main (void)
{
  int pip[2];
  int pipemax;
  char *buf;

  if (pipe (pip) != 0)
    err ("pipe");

#ifdef PIPE_MAX
  pipemax = PIPE_MAX;
#else
  pipemax = fpathconf (pip[1], _PC_PIPE_BUF);
#endif

  if (pipemax <= 0)
    {
      fprintf (stderr, "Bad pipemax %d\n", pipemax);
      abort ();
    }

  /* Writing an inordinate amount to the pipe.  */
  buf = calloc (100 * pipemax, 1);
  if (buf == NULL)
    err ("calloc");

  /* The following doesn't trig on host; writing more than PIPE_MAX to a
     pipe with no reader makes the program hang.  Neither does it trig
     on target: we don't want to emulate the "hanging" (which would
     happen with *any* amount written to a pipe with no reader if we'd
     support it - but we don't).  Better to abort the simulation with a
     suitable message.  */
  if (write (pip[1], buf, 100 * pipemax) != -1
      || errno != EFBIG)
    err ("write mucho");

  printf ("pass\n");
  exit (0);
}
