|  | #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" |