X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=tests%2Ftest-fwriting.c;h=a16213046373790b0cdf636d419641f14154cba2;hb=a7ebfd1caaa58b6a7bc0b1d1510b0255604e804a;hp=00b6870b4a31f7c2192c2c8b2f6d42377658e49f;hpb=503e2514a1404a19a00117845216993a3c2ccf5f;p=gnulib.git diff --git a/tests/test-fwriting.c b/tests/test-fwriting.c index 00b6870b4..a16213046 100644 --- a/tests/test-fwriting.c +++ b/tests/test-fwriting.c @@ -21,9 +21,19 @@ #include "fwriting.h" +#include #include -#define ASSERT(expr) if (!(expr)) abort (); +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + abort (); \ + } \ + } \ + while (0) #define TESTFILE "t-fwriting.tmp" @@ -73,6 +83,7 @@ main () fwriting is only deterministic after input or output, but this test case should be portable even on open, after reposition, and after fflush. */ + /* First a scenario with only fgetc, fseek, fputc. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) goto skip; @@ -91,12 +102,14 @@ main () if (fseek (fp, 0, SEEK_CUR) != 0) goto skip; ASSERT (!fwriting (fp)); - if (fputc ('z', fp) != 'z') + if (fputc ('x', fp) != 'x') goto skip; ASSERT (fwriting (fp)); if (fseek (fp, 0, SEEK_END)) goto skip; - /* fwriting (fp) is undefined here, but freading (fp) is false. */ + /* freading (fp) is undefined here, because on some implementations (e.g. + glibc) fseek causes a buffer to be read. + fwriting (fp) is undefined as well. */ if (fclose (fp)) goto skip; @@ -105,6 +118,7 @@ main () fwriting is only deterministic after input or output, but this test case should be portable even on open, after reposition, and after fflush. */ + /* Here a scenario that includes fflush. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) goto skip; @@ -120,7 +134,7 @@ main () ASSERT (!fwriting (fp)); fflush (fp); ASSERT (!fwriting (fp)); - if (fgetc (fp) != 'a') + if (fgetc (fp) != 'x') goto skip; ASSERT (!fwriting (fp)); /* This fseek call is necessary when switching from reading to writing. @@ -133,7 +147,9 @@ main () ASSERT (fwriting (fp)); if (fseek (fp, 0, SEEK_END)) goto skip; - /* fwriting (fp) is undefined here, but freading (fp) is false. */ + /* freading (fp) is undefined here, because on some implementations (e.g. + glibc) fseek causes a buffer to be read. + fwriting (fp) is undefined as well. */ if (fclose (fp)) goto skip;