[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[MiNT] fseek problem in MiNTlib



There's problems moving the buffer pointer around when using fseek in
MiNTlib.

I've seen problems with ranlib (and ar) that causes this "fast" path to
fail and the patch attached resorts back to the absolute method all the
time to avoid these problems.

Alan.
Index: stdio/fseek.c
===================================================================
RCS file: /mint/mintlib/stdio/fseek.c,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 fseek.c
--- stdio/fseek.c	12 Oct 2000 10:56:54 -0000	1.1.1.1
+++ stdio/fseek.c	1 Apr 2008 14:03:02 -0000
@@ -67,6 +67,9 @@
       __set_errno (EINVAL);
       return EOF;
 
+    case SEEK_SET:
+      break;
+
     case SEEK_END:
       /* We don't know where the end of the file is,
 	 so seek to the position in the file the user asked
@@ -92,50 +95,9 @@
 	  o = pos;
 	}
 
-      /* Fall through to try an absolute seek.  */
-
-    case SEEK_SET:
-      /* Make O be relative to the buffer.  */
-      o -= stream->__target;
-      /* Make O be relative to the current position in the buffer.  */
-      o -= stream->__bufp - stream->__buffer;
-
-      /* Fall through to see if we can do it by
-	 moving the pointer around in the buffer.  */
+      /* Fall through to an absolute seek.  */
 
     case SEEK_CUR:
-      /* If the offset is small enough, we can just
-	 move the pointer around in the buffer.  */
-
-#if 0	/* Why did I think this would ever work???  */
-      if (stream->__put_limit > stream->__buffer)
-	{
-	  /* We are writing.  */
-	  if (stream->__bufp + o >= stream->__buffer &&
-	      stream->__put_limit > stream->__bufp + o &&
-	      stream->__get_limit > stream->__bufp + o)
-	    {
-	      /* We have read all the data we will change soon.
-		 We can just move the pointer around.  */
-	      stream->__bufp += o;
-	      return 0;
-	    }
-	  else
-	    {
-	      /* Flush the buffer.  */
-	      if (__flshfp(stream, EOF) == EOF)
-		return EOF;
-	    }
-	} else
-#endif
-      if (o < 0 ?
-	  (-o <= stream->__bufp - stream->__buffer) :
-	  (o <= stream->__get_limit - stream->__bufp))
-	{
-	  stream->__bufp += o;
-	  return 0;
-	}
-
       /* Turn it into an absolute seek.  */
       o += stream->__bufp - stream->__buffer;
       o += stream->__target;