This is the mail archive of the cygwin@sourceware.cygnus.com mailing list for the Cygwin project. See the Cygwin home page for more information.
[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index] [Subject Index] [Author Index] [Thread Index]

Cygwin B20 - fseek under gcc fails to reposition on text files



Consider a text file (CR/LF line endings).  Read a line, save the
current position, seek to end-of-file, seek to the saved position,
read a line.  The second read does not return the second line of
the file.

A shell script which tests the problem is included below:
---------------------------------------------------------------------
#!/bin/sh
#
# Test fseek bug
# On Cygwin 20.1, a file is not correctly repositioned after seeking to the
# end-of-file on a text file (CR/LF line endings).

cat > tfrepos.c << EoF
#include <stdio.h>
int main (int argc, char *argv[])
{
  FILE *fp;
  long int pos, size;
  char line[200];
  char *p;

  fp = fopen (argv[1], "r");
  p = fgets (line, 200, fp);
  printf (" Line: %s", p);

  pos = ftell (fp);
  fseek (fp, 0L, SEEK_END);
  fseek (fp, pos, SEEK_SET);

  p = fgets (line, 200, fp);
  printf (" Line: %s", p);

  return 0;
}
EoF

# Run the test program with the c-program as input
gcc tfrepos.c -o tfrepos
./tfrepos tfrepos.c

# Clean up
rm -f tfrepos tfrepos.c
---------------------------------------------------------------------

Peter Kabal  kabal@ECE.McGill.CA
Dept. Electrical & Computer Eng.
McGill University