--- 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!