rel5 migration
authorClaus Gittinger <cg@exept.de>
Thu, 03 Aug 2000 01:07:04 +0200
changeset 5493 4efa5b89498b
parent 5492 11d7a1839cfe
child 5494 35f624eaf060
rel5 migration
FileStream.st
--- a/FileStream.st	Wed Aug 02 22:54:04 2000 +0200
+++ b/FileStream.st	Thu Aug 03 01:07:04 2000 +0200
@@ -665,6 +665,7 @@
 position:newPos
     "set the read/write position in the file"
 
+    |rslt|
 %{
 
     HFILE f;
@@ -674,55 +675,60 @@
 
     if ((__INST(canPosition) != false) 
      || (newPos == __MKSMALLINT(1))) {
-	if ((fp = __INST(filePointer)) != nil) {
-	    if (__isSmallInteger(newPos)) {
-		f = __FILEVal(fp);
-		nP = (long)__intVal(newPos);
+        if ((fp = __INST(filePointer)) != nil) {
+            if (__isSmallInteger(newPos)) {
+                f = __FILEVal(fp);
+                nP = (long)__intVal(newPos);
 
-		/*
-		 * notice: Smalltalk index starts at 1
-		 */
-		nP--;
+                /*
+                 * notice: Smalltalk index starts at 1
+                 */
+                nP--;
 
-		do {
+                do {
 #ifdef WIN32
-		    SEEK(ret,f,nP,__INST(buffered) == true);
+                    SEEK(ret,f,nP,__INST(buffered) == true);
 #else
-		    if (__INST(buffered) == true) {
-			ret = fseek(f, nP, SEEK_SET);
-		    } else {
-			ret = lseek(fileno(f), nP, SEEK_SET);
-		    }
+                    if (__INST(buffered) == true) {
+                        ret = fseek(f, nP, SEEK_SET);
+                    } else {
+                        ret = lseek(fileno(f), nP, SEEK_SET);
+                    }
 #endif
-		} while ((ret < 0) && (__threadErrno == EINTR));
-		if (ret >= 0) {
-		    __INST(position) = newPos;
-		    /*
-		     * just to make certain ...
-		     */
-		    __INST(hitEOF) = false;
-		    RETURN ( self );
-		}
-		__INST(lastErrorNumber) = __MKSMALLINT(__threadErrno);
-	    }
-	}
+                } while ((ret < 0) && (__threadErrno == EINTR));
+                if (ret >= 0) {
+                    __INST(position) = newPos;
+                    /*
+                     * just to make certain ...
+                     */
+                    __INST(hitEOF) = false;
+                    RETURN ( self );
+                }
+                __INST(lastErrorNumber) = __MKSMALLINT(__threadErrno);
+            }
+        }
     }
 %}.
     canPosition == false ifTrue:[
-	"/ position by rewinding & re-reading everything up-to
-	"/ that point.
-	^ self slowPosition:newPos
+        "/ position by rewinding & re-reading everything up-to
+        "/ that point.
+        ^ self slowPosition:newPos
     ].
     lastErrorNumber notNil ifTrue:[
-	(OperatingSystem errorSymbolForNumber:lastErrorNumber) == #EINVAL ifTrue:[
-	    "/ invalid position
-	    ^ self positionError
-	].
-	"/ assume I/O error
-	^ self ioError
+        (OperatingSystem errorSymbolForNumber:lastErrorNumber) == #EINVAL ifTrue:[
+            "/ invalid position
+            ^ self positionError
+        ].
+        "/ assume I/O error
+        ^ self ioError
     ].
     filePointer isNil ifTrue:[^ self errorNotOpen].
-    ^ self primitiveFailed
+    rslt := self positionFile:filePointer position:newPos.
+    rslt >= 0 ifTrue:[
+        position := newPos.
+    ] ifFalse:[
+        hitEOF := true.
+    ]
 !
 
 setToEnd
@@ -1281,6 +1287,16 @@
     "Modified: 4.10.1997 / 18:01:09 / cg"
 ! !
 
+!FileStream methodsFor:'rel5 protocol'!
+
+positionFile:filePointer position:newPos
+    "for migration to rel5 only"
+
+    self primitiveFailed
+
+
+! !
+
 !FileStream methodsFor:'testing'!
 
 isFileStream
@@ -1293,6 +1309,6 @@
 !FileStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.73 2000-07-02 12:51:07 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.74 2000-08-02 23:07:04 cg Exp $'
 ! !
 FileStream initialize!