text: #include <mcheck.h>
  #include <stdio.h>
  
  
  #ifndef CHAR_T
  # define CHAR_T char
  # define W(o) o
  # define OPEN_MEMSTREAM open_memstream
  #endif
  
  #define S(s) S1 (s)
  #define S1(s) #s
  
  
  static void
  mcheck_abort (enum mcheck_status ev)
  {
    printf ("mecheck failed with status %d\n", (int) ev);
    exit (1);
  }
  
  
  static int
  do_test (void)
  {
    mcheck_pedantic (mcheck_abort);
  
    CHAR_T *buf = (CHAR_T *) 1l;
    size_t len = 12345;
    FILE *fp = OPEN_MEMSTREAM (&buf, &len);
    if (fp == NULL)
      {
        printf ("%s failed\n", S(OPEN_MEMSTREAM));
        return 1;
      }
  
    if (fflush (fp) != 0)
      {
        puts ("fflush failed");
        return 1;
      }
  
    if (len != 0)
      {
        puts ("string after no write not empty");
        return 1;
      }
    if (buf == (CHAR_T *) 1l)
      {
        puts ("buf not updated");
        return 1;
      }
    if (buf[0] != W('\0'))
      {
        puts ("buf[0] != 0");
        return 1;
      }
  
    buf = (CHAR_T *) 1l;
    len = 12345;
    if (fclose (fp) != 0)
      {
        puts ("fclose failed");
        return 1;
      }
  
    if (len != 0)
      {
        puts ("string after close with no write not empty");
        return 1;
      }
    if (buf == (CHAR_T *) 1l)
      {
        puts ("buf not updated");
        return 1;
      }
    if (buf[0] != W('\0'))
      {
        puts ("buf[0] != 0");
        return 1;
      }
  
    free (buf);
  
    return 0;
  }
  
  #define TEST_FUNCTION do_test ()
  #include "../test-skeleton.c"
  