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