changeset 8753:10d7922803f5

freading has an undefined value after repositioning a read-write stream.
author Bruno Haible <bruno@clisp.org>
date Sun, 29 Apr 2007 08:38:22 +0000
parents 3d1951b8600f
children 1f57552cdb11
files ChangeLog lib/freading.h lib/fwriting.h tests/test-freading.c tests/test-fwriting.c
diffstat 5 files changed, 31 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-04-29  Bruno Haible  <bruno@clisp.org>
+
+	* lib/freading.h: Improve comments.
+	* lib/fwriting.h: Likewise.
+	* tests/test-freading.c (main): Don't check freading immediately after
+	repositioning. Needed for glibc.
+
 2007-04-29  Bruno Haible  <bruno@clisp.org>
 
 	* lib/freading.c (freading): Trivial simplification.
--- a/lib/freading.h
+++ b/lib/freading.h
@@ -24,10 +24,12 @@
    writing and there is no current read operation (such as fputc).
 
    freading and fwriting will never both be true.  If STREAM supports
-   both reads and writes, then both freading and fwriting might be
-   false when the stream is first opened, after repositioning (such as
-   fseek, fsetpos, or rewind), after read encounters EOF, or after
-   fflush, depending on the underlying implementation.
+   both reads and writes, then:
+     - both freading and fwriting might be false when the stream is first
+       opened, after read encounters EOF, or after fflush,
+     - freading might be false or true and fwriting might be false
+       after repositioning (such as fseek, fsetpos, or rewind),
+   depending on the underlying implementation.
 
    STREAM must not be wide-character oriented.  */
 
--- a/lib/fwriting.h
+++ b/lib/fwriting.h
@@ -25,10 +25,12 @@
    as fputc).
 
    freading and fwriting will never both be true.  If STREAM supports
-   both reads and writes, then both freading and fwriting might be
-   false when the stream is first opened, after repositioning (such as
-   fseek, fsetpos, or rewind), after read encounters EOF, or after
-   fflush, depending on the underlying implementation.
+   both reads and writes, then:
+     - both freading and fwriting might be false when the stream is first
+       opened, after read encounters EOF, or after fflush,
+     - freading might be false or true and fwriting might be false
+       after repositioning (such as fseek, fsetpos, or rewind),
+   depending on the underlying implementation.
 
    STREAM must not be wide-character oriented.  */
 
--- a/tests/test-freading.c
+++ b/tests/test-freading.c
@@ -97,7 +97,9 @@
   ASSERT (!freading (fp));
   if (fseek (fp, 0, SEEK_END))
     goto skip;
-  ASSERT (!freading (fp));
+  /* 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;
 
@@ -135,7 +137,9 @@
   ASSERT (!freading (fp));
   if (fseek (fp, 0, SEEK_END))
     goto skip;
-  ASSERT (!freading (fp));
+  /* 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;
 
--- a/tests/test-fwriting.c
+++ b/tests/test-fwriting.c
@@ -97,7 +97,9 @@
   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;
 
@@ -135,7 +137,9 @@
   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;