freading has an undefined value after repositioning a read-write stream.
authorBruno Haible <bruno@clisp.org>
Sun, 29 Apr 2007 08:38:22 +0000 (08:38 +0000)
committerBruno Haible <bruno@clisp.org>
Sun, 29 Apr 2007 08:38:22 +0000 (08:38 +0000)
ChangeLog
lib/freading.h
lib/fwriting.h
tests/test-freading.c
tests/test-fwriting.c

index e538c9c..f819138 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
 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.
 
 2007-04-28  Bruno Haible  <bruno@clisp.org>
index 1845de1..9bd2eaf 100644 (file)
    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.  */
 
index b354186..cba2b13 100644 (file)
    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.  */
 
index 3d69c40..b2f6fc7 100644 (file)
@@ -97,7 +97,9 @@ main ()
   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 @@ main ()
   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;
 
index 690a35f..0f97df5 100644 (file)
@@ -97,7 +97,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;
 
@@ -135,7 +137,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;