# HG changeset patch # User Bruno Haible # Date 1250426799 -7200 # Node ID d2f20b59cd425a6b09746b73b836e9e3b2113191 # Parent 04ea0561a820547d73f6eeb8f82adfc23d39c45f Tweak last commit. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-08-16 Bruno Haible + + * m4/fpurge.m4 (gl_FUNC_FPURGE): Don't compile fpurge.c if only the + declaration of fpurge is missing. + * tests/test-fpurge.c (main): Check that the file has not more contents + than expected. Close the file before removing it. + 2009-08-15 Eric Blake fpurge: don't wrap working cygwin implementation diff --git a/m4/fpurge.m4 b/m4/fpurge.m4 --- a/m4/fpurge.m4 +++ b/m4/fpurge.m4 @@ -1,4 +1,4 @@ -# fpurge.m4 serial 4 +# fpurge.m4 serial 5 dnl Copyright (C) 2007, 2009 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -34,12 +34,10 @@ [gl_cv_func_fpurge_works='guessing no'])]) if test "x$gl_cv_func_fpurge_works" != xyes; then REPLACE_FPURGE=1 + AC_LIBOBJ([fpurge]) fi fi if test "x$ac_cv_have_decl_fpurge" = xno; then HAVE_DECL_FPURGE=0 fi - if test "$REPLACE_FPURGE$HAVE_DECL_FPURGE" != 01; then - AC_LIBOBJ([fpurge]) - fi ]) diff --git a/tests/test-fpurge.c b/tests/test-fpurge.c --- a/tests/test-fpurge.c +++ b/tests/test-fpurge.c @@ -51,6 +51,8 @@ if (fclose (fp)) goto skip; + /* The file's contents is now "foobarsh". */ + /* Open it in read-write mode. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) @@ -82,22 +84,30 @@ ASSERT (getc (fp) == EOF); ASSERT (fclose (fp) == 0); + /* The file's contents is now "foogarsh". */ + /* Ensure that purging a read does not corrupt subsequent writes. */ fp = fopen (TESTFILE, "r+"); - ASSERT (fp); - ASSERT (fseek (fp, -1, SEEK_END) == 0); + if (fp == NULL) + goto skip; + if (fseek (fp, -1, SEEK_END)) + goto skip; ASSERT (getc (fp) == 'h'); ASSERT (getc (fp) == EOF); ASSERT (fpurge (fp) == 0); ASSERT (putc ('!', fp) == '!'); ASSERT (fclose (fp) == 0); fp = fopen (TESTFILE, "r"); - ASSERT (fp); + if (fp == NULL) + goto skip; { - char buf[9]; - ASSERT (fread (buf, 1, 9, fp) == 9); + char buf[10]; + ASSERT (fread (buf, 1, 10, fp) == 9); ASSERT (memcmp (buf, "foogarsh!", 9) == 0); } + ASSERT (fclose (fp) == 0); + + /* The file's contents is now "foogarsh!". */ remove (TESTFILE); return 0;