FileStream.st
changeset 15542 3a22ba499a82
parent 15489 6b39f710c80d
child 15573 36facee1072e
child 18078 7ef3221b036d
--- a/FileStream.st	Wed Jul 24 08:57:20 2013 +0000
+++ b/FileStream.st	Wed Jul 24 21:56:49 2013 +0200
@@ -230,19 +230,19 @@
     Therefore, the instance variable canPosition is set according to
     this and an error is raised, if a position: is attemted.
     I know, this is ugly, but what else could we do ?
-    Late note: who cares for VMS these days? 
-               (and how much useless effort has been put in the past, 
-                to support lousy operating systems?)
+    Late note: who cares for VMS these days?
+	       (and how much useless effort has been put in the past,
+		to support lousy operating systems?)
 
     [instance variables:]
-        pathName        <String>        the files path (if known)
-        canPosition     <Boolean>       positionable - read above comment
+	pathName        <String>        the files path (if known)
+	canPosition     <Boolean>       positionable - read above comment
 
     [author:]
-        Claus Gittinger
+	Claus Gittinger
 
     [see also:]
-        Filename DirectoryStream PipeStream Socket
+	Filename DirectoryStream PipeStream Socket
 "
 !
 
@@ -393,45 +393,45 @@
     "create atomically a new file and return the file stream - use this for temporary files.
      The created file has the name '/tmp/stxtmp_xx_nn' where xx is our
      unix process id, and nn is a unique number, incremented with every call to this method.
-     If any of the environment variables ST_TMPDIR or TMPDIR is set, 
+     If any of the environment variables ST_TMPDIR or TMPDIR is set,
      its value defines the temp directory."
 
     ^ self newTemporaryIn:Filename tempDirectory
 
     "
-     FileStream newTemporary    
-     FileStream newTemporary     
+     FileStream newTemporary
+     FileStream newTemporary
     "
 !
 
 newTemporaryIn:aDirectoryOrNil
     "create atomically a new file and return the file stream - use this for temporary files.
      The created file is in aDirectoryPrefix and named 'stxtmp_xx_nn',
-     where xx is our unix process id, and nn is a unique number, incremented 
+     where xx is our unix process id, and nn is a unique number, incremented
      with every call to this method."
 
     ^ self newTemporaryIn:aDirectoryOrNil nameTemplate:Filename tempFileNameTemplate
 
     "temp files in '/tmp':
 
-     FileStream newTemporary    
+     FileStream newTemporary
     "
 
-    "temp files somewhere 
+    "temp files somewhere
      (not recommended - use above since it can be controlled via shell variables):
 
-     FileStream newTemporaryIn:'/tmp'    
-     FileStream newTemporaryIn:'/tmp'  
-     FileStream newTemporaryIn:'/usr/tmp'    
-     FileStream newTemporaryIn:'/'  
+     FileStream newTemporaryIn:'/tmp'
+     FileStream newTemporaryIn:'/tmp'
+     FileStream newTemporaryIn:'/usr/tmp'
+     FileStream newTemporaryIn:'/'
     "
 
     "a local temp file:
 
-     FileStream newTemporaryIn:''         
-     FileStream newTemporaryIn:nil         
-     FileStream newTemporaryIn:'.'         
-     FileStream newTemporaryIn:('source' asFilename) 
+     FileStream newTemporaryIn:''
+     FileStream newTemporaryIn:nil
+     FileStream newTemporaryIn:'.'
+     FileStream newTemporaryIn:('source' asFilename)
     "
 !
 
@@ -445,48 +445,48 @@
     |nameString random prevRandom prevNameString newTempFilename stream|
 
     [
-        prevRandom := random.
-        prevNameString := nameString.
+	prevRandom := random.
+	prevNameString := nameString.
 
-        "Use random numbers in order to improve the security
-         by making the generated names less predictable"
-        [
-            random := RandomGenerator new nextInteger.
-        ] doWhile:[random = prevRandom].
+	"Use random numbers in order to improve the security
+	 by making the generated names less predictable"
+	[
+	    random := RandomGenerator new nextInteger.
+	] doWhile:[random = prevRandom].
 
-        nameString := template bindWith:(OperatingSystem getProcessId) with:random.
+	nameString := template bindWith:(OperatingSystem getProcessId) with:random.
 
-        aDirectoryOrNil isNil ifTrue:[
-            newTempFilename := nameString.
-        ] ifFalse:[
-            newTempFilename := aDirectoryOrNil asFilename constructString:nameString.
-        ].
+	aDirectoryOrNil isNil ifTrue:[
+	    newTempFilename := nameString.
+	] ifFalse:[
+	    newTempFilename := aDirectoryOrNil asFilename constructString:nameString.
+	].
 
-        [
-            stream := self open:newTempFilename withMode:#(CREATE_NEW GENERIC_READ_WRITE).
-        ] on:OpenError do:[:ex|
-            (OperatingSystem errorHolderForNumber:ex errorCode) errorCategory ~~ #existingReferentSignal ifFalse:[
-                "some fundamental error, raise exception"
-                ex reject.
-            ].
-            prevNameString = nameString ifTrue:[
-                "no more names - probably a bad template"
-                ex reject.
-            ].
-            "file exists, retry another one"
-        ].
+	[
+	    stream := self open:newTempFilename withMode:#(CREATE_NEW GENERIC_READ_WRITE).
+	] on:OpenError do:[:ex|
+	    (OperatingSystem errorHolderForNumber:ex errorCode) errorCategory ~~ #existingReferentSignal ifFalse:[
+		"some fundamental error, raise exception"
+		ex reject.
+	    ].
+	    prevNameString = nameString ifTrue:[
+		"no more names - probably a bad template"
+		ex reject.
+	    ].
+	    "file exists, retry another one"
+	].
     ] doWhile:[
-        stream isNil and:[prevNameString ~= nameString]   "/ if namestring didn't change, the template is bad
+	stream isNil and:[prevNameString ~= nameString]   "/ if namestring didn't change, the template is bad
     ].
     ^ stream
 
     "temp files in '/tmp':
 
-        FileStream newTemporaryIn:'/tmp' asFilename nameTemplate:'foo%1_%2'
+	FileStream newTemporaryIn:'/tmp' asFilename nameTemplate:'foo%1_%2'
 
      This must fail on the second try:
-        FileStream newTemporaryIn:'/tmp' asFilename nameTemplate:'foo'
-        FileStream newTemporaryIn:'c:\temp' asFilename nameTemplate:'foo'
+	FileStream newTemporaryIn:'/tmp' asFilename nameTemplate:'foo'
+	FileStream newTemporaryIn:'c:\temp' asFilename nameTemplate:'foo'
     "
 
     "temp files somewhere
@@ -507,16 +507,16 @@
     "
 !
 
-newTemporaryIn:aDirectoryOrNil withSuffix:aSuffixString 
+newTemporaryIn:aDirectoryOrNil withSuffix:aSuffixString
     "create atomically a new file and return the file stream - use this for temporary files.
      The created file is in aDirectoryPrefix and named 'stxtmp_xx_nn',
      where xx is our unix process id, and nn is a unique number, incremented
      with every call to this method."
-    
-    ^ self 
-        newTemporaryIn:aDirectoryOrNil
-        nameTemplate:(Filename tempFileNameTemplate asFilename 
-                                        withSuffix:aSuffixString) asString
+
+    ^ self
+	newTemporaryIn:aDirectoryOrNil
+	nameTemplate:(Filename tempFileNameTemplate asFilename
+					withSuffix:aSuffixString) asString
 
     "
      FileStream newTemporaryWithSuffix:'txt'
@@ -580,9 +580,9 @@
     |stream|
 
     stream := self new pathName:aFilenameString.
-    stream 
-        readwrite;        "/ assume read/write mode, but this depends on the args
-        openWithMode:anArrayOrString attributes:nil.
+    stream
+	readwrite;        "/ assume read/write mode, but this depends on the args
+	openWithMode:anArrayOrString attributes:nil.
 
     ^ stream
 !
@@ -731,7 +731,7 @@
 
     "
       'Make.proto' asFilename readingFileDo:[:s|
-          s accessRights
+	  s accessRights
       ]
     "
 !
@@ -742,18 +742,18 @@
      or FileStreamm>>#accessRights."
 
     (OperatingSystem changeAccessModeOfFd:self fileDescriptor to:opaqueData) ifFalse:[
-        ^ self fileName accessDeniedError:self
+	^ self fileName accessDeniedError:self
     ].
 
     "
       'Make.proto' asFilename readingFileDo:[:s|
-          s accessRights:s accessRights
+	  s accessRights:s accessRights
       ]
     "
 
     "
       '/' asFilename readingFileDo:[:s|
-          s accessRights:s accessRights
+	  s accessRights:s accessRights
       ]
     "
 ! !
@@ -859,7 +859,7 @@
 
     executor := super executor.
     removeOnClose == true ifTrue:[
-        executor setPathName:pathName removeOnClose:true.
+	executor setPathName:pathName removeOnClose:true.
     ].
     ^ executor
 ! !
@@ -1170,7 +1170,7 @@
      This is required to reposition nonPositionable streams, such
      as tape-streams or variable-record-RMS files under VMS.
      Caveat:
-         This should really be done transparently by the stdio library."
+	 This should really be done transparently by the stdio library."
 
     ^ self slowPosition0Based:newPos
 ! !
@@ -1197,8 +1197,8 @@
     aStream nextPutAll:'(FileStream oldFileNamed:'.
     aStream nextPutAll:pathName storeString.
     (self position ~~ 0) ifTrue:[
-        aStream nextPutAll:'; position:'.
-        self position storeOn:aStream
+	aStream nextPutAll:'; position:'.
+	self position storeOn:aStream
     ].
     aStream nextPut:$)
 
@@ -1262,368 +1262,369 @@
     int pass = 0;
 
     if (!__isNonNilObject(encodedPathName)
-        || !(__isStringLike(openmode) || __isArrayLike(openmode)))
-            goto badArgument;
+	|| !(__isStringLike(openmode) || __isArrayLike(openmode)))
+	    goto badArgument;
 
 retry:
 #ifdef __VMS__
       if (__isStringLike(encodedPathName)) {
-        do {
-            /*
-             * allow passing additional RMS arguments.
-             * stupid: DEC does not seem to offer an interface for passing a char **.
-             */
-            __threadErrno = 0;
+	do {
+	    /*
+	     * allow passing additional RMS arguments.
+	     * stupid: DEC does not seem to offer an interface for passing a char **.
+	     */
+	    __threadErrno = 0;
 
-            {
-                if (__isArray(attributeSpec)) {
-                    OBJ *ap = __ArrayInstPtr(attributeSpec)->a_element;
-                    int numAttrib = 0;
-                    int i;
+	    {
+		if (__isArray(attributeSpec)) {
+		    OBJ *ap = __ArrayInstPtr(attributeSpec)->a_element;
+		    int numAttrib = 0;
+		    int i;
 
-                    numAttrib = __arraySize(attributeSpec);
-                    for (i=0; i<numAttrib;i++) {
-                        if (! __isStringLike(ap[i])) {
-                            __threadErrno = EINVAL; /* invalid argument */
-                            goto getOutOfHere;
-                        }
-                    }
-                    switch (numAttrib) {
-                        case 0:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode));
-                            __END_INTERRUPTABLE__
-                            break;
-                        case 1:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
-                                      __stringVal(ap[0]));
-                            __END_INTERRUPTABLE__
-                            break;
-                        case 2:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
-                                      __stringVal(ap[0]), __stringVal(ap[1]));
-                            __END_INTERRUPTABLE__
-                            break;
-                        case 3:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
-                                      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]));
-                            __END_INTERRUPTABLE__
-                            break;
-                        case 4:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
-                                      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
-                                      __stringVal(ap[3]));
-                            __END_INTERRUPTABLE__
-                            break;
-                        case 5:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
-                                      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
-                                      __stringVal(ap[3]), __stringVal(ap[4]));
-                            __END_INTERRUPTABLE__
-                            break;
-                        case 6:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
-                                      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
-                                      __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]));
-                            __END_INTERRUPTABLE__
-                            break;
-                        case 7:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
-                                      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
-                                      __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
-                                      __stringVal(ap[6]));
-                            __END_INTERRUPTABLE__
-                            break;
-                        case 8:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
-                                      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
-                                      __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
-                                      __stringVal(ap[6]), __stringVal(ap[7]));
-                            __END_INTERRUPTABLE__
-                            break;
-                        case 9:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
-                                      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
-                                      __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
-                                      __stringVal(ap[6]), __stringVal(ap[7]), __stringVal(ap[8]));
-                            __END_INTERRUPTABLE__
-                            break;
-                        case 10:
-                            __BEGIN_INTERRUPTABLE__
-                            f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
-                                      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
-                                      __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
-                                      __stringVal(ap[6]), __stringVal(ap[7]), __stringVal(ap[8]),
-                                      __stringVal(ap[9]));
-                            __END_INTERRUPTABLE__
-                            break;
-                        default:
-                            __threadErrno = E2BIG; /* too many args */
-                            goto getOutOfHere;
-                    }
-                } else if (attributeSpec != nil) {
-                    __threadErrno = EINVAL; /* invalid argument */
-                    goto getOutOfHere;
-                } else {
-                    /*
-                     * create file as sequential streamLF by default.
-                     */
-                    __BEGIN_INTERRUPTABLE__
-                    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode), "rfm=stmlf");
-                    __END_INTERRUPTABLE__
-                }
-            }
-        } while ((f == NULL) && (__threadErrno == EINTR));
+		    numAttrib = __arraySize(attributeSpec);
+		    for (i=0; i<numAttrib;i++) {
+			if (! __isStringLike(ap[i])) {
+			    __threadErrno = EINVAL; /* invalid argument */
+			    goto getOutOfHere;
+			}
+		    }
+		    switch (numAttrib) {
+			case 0:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode));
+			    __END_INTERRUPTABLE__
+			    break;
+			case 1:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+				      __stringVal(ap[0]));
+			    __END_INTERRUPTABLE__
+			    break;
+			case 2:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+				      __stringVal(ap[0]), __stringVal(ap[1]));
+			    __END_INTERRUPTABLE__
+			    break;
+			case 3:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+				      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]));
+			    __END_INTERRUPTABLE__
+			    break;
+			case 4:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+				      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+				      __stringVal(ap[3]));
+			    __END_INTERRUPTABLE__
+			    break;
+			case 5:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+				      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+				      __stringVal(ap[3]), __stringVal(ap[4]));
+			    __END_INTERRUPTABLE__
+			    break;
+			case 6:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+				      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+				      __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]));
+			    __END_INTERRUPTABLE__
+			    break;
+			case 7:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+				      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+				      __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
+				      __stringVal(ap[6]));
+			    __END_INTERRUPTABLE__
+			    break;
+			case 8:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+				      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+				      __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
+				      __stringVal(ap[6]), __stringVal(ap[7]));
+			    __END_INTERRUPTABLE__
+			    break;
+			case 9:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+				      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+				      __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
+				      __stringVal(ap[6]), __stringVal(ap[7]), __stringVal(ap[8]));
+			    __END_INTERRUPTABLE__
+			    break;
+			case 10:
+			    __BEGIN_INTERRUPTABLE__
+			    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode),
+				      __stringVal(ap[0]), __stringVal(ap[1]), __stringVal(ap[2]),
+				      __stringVal(ap[3]), __stringVal(ap[4]), __stringVal(ap[5]),
+				      __stringVal(ap[6]), __stringVal(ap[7]), __stringVal(ap[8]),
+				      __stringVal(ap[9]));
+			    __END_INTERRUPTABLE__
+			    break;
+			default:
+			    __threadErrno = E2BIG; /* too many args */
+			    goto getOutOfHere;
+		    }
+		} else if (attributeSpec != nil) {
+		    __threadErrno = EINVAL; /* invalid argument */
+		    goto getOutOfHere;
+		} else {
+		    /*
+		     * create file as sequential streamLF by default.
+		     */
+		    __BEGIN_INTERRUPTABLE__
+		    f = fopen((char *)__stringVal(pathName), (char *)__stringVal(openmode), "rfm=stmlf");
+		    __END_INTERRUPTABLE__
+		}
+	    }
+	} while ((f == NULL) && (__threadErrno == EINTR));
       }
 #else /* not VMS */
 
 # ifdef WIN32
     {
-          DWORD share = 0, access = 0, create = 0, attr = 0;
-          char * __openmode;
-          HANDLE handle;
-          SECURITY_ATTRIBUTES sa;
+	  DWORD share = 0, access = 0, create = 0, attr = 0;
+	  char * __openmode;
+	  HANDLE handle;
+	  SECURITY_ATTRIBUTES sa;
 
-          if (__isStringLike(openmode)) {
-              share = FILE_SHARE_READ|FILE_SHARE_WRITE;
-              __openmode = __stringVal(openmode);
-              if (strcmp(__openmode, "rb") == 0) {
-                  access = GENERIC_READ;
-                  create = OPEN_EXISTING;
-              } else if (strcmp(__openmode, "rb+") == 0) {
-                  access = GENERIC_READ | GENERIC_WRITE;
-                  create = OPEN_EXISTING;
-              } else if (strcmp(__openmode, "wb") == 0) {
-                  access = GENERIC_WRITE;
-                  create = CREATE_ALWAYS;
-              } else if (strcmp(__openmode, "wb+") == 0) {
-                  access = GENERIC_READ | GENERIC_WRITE;
-                  create = CREATE_ALWAYS;
-              } else if (strcmp(__openmode, "ab") == 0) {
-                  access = FILE_APPEND_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|
-                                STANDARD_RIGHTS_WRITE|SYNCHRONIZE;
-                  create = OPEN_ALWAYS;
-              } else if (strcmp(__openmode, "ab+") == 0) {
-                  access = GENERIC_READ |FILE_APPEND_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|
-                                STANDARD_RIGHTS_WRITE|SYNCHRONIZE;
-                  create = OPEN_ALWAYS;
-              } else {
-                  console_fprintf(stderr, "Win32OS [warning]: unsupported open mode\n");
-              }
-          } else if (__isArrayLike(openmode)) {
-              OBJ *ap = __arrayVal(openmode);
-              int numAttrib = __arraySize(openmode);
-              int i;
+	  if (__isStringLike(openmode)) {
+	      share = FILE_SHARE_READ|FILE_SHARE_WRITE;
+	      __openmode = __stringVal(openmode);
+	      if (strcmp(__openmode, "rb") == 0) {
+		  access = GENERIC_READ;
+		  create = OPEN_EXISTING;
+	      } else if (strcmp(__openmode, "rb+") == 0) {
+		  access = GENERIC_READ | GENERIC_WRITE;
+		  create = OPEN_EXISTING;
+	      } else if (strcmp(__openmode, "wb") == 0) {
+		  access = GENERIC_WRITE;
+		  create = CREATE_ALWAYS;
+	      } else if (strcmp(__openmode, "wb+") == 0) {
+		  access = GENERIC_READ | GENERIC_WRITE;
+		  create = CREATE_ALWAYS;
+	      } else if (strcmp(__openmode, "ab") == 0) {
+		  access = FILE_APPEND_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|
+				STANDARD_RIGHTS_WRITE|SYNCHRONIZE;
+		  create = OPEN_ALWAYS;
+	      } else if (strcmp(__openmode, "ab+") == 0) {
+		  access = GENERIC_READ |FILE_APPEND_DATA|FILE_WRITE_ATTRIBUTES|FILE_WRITE_EA|
+				STANDARD_RIGHTS_WRITE|SYNCHRONIZE;
+		  create = OPEN_ALWAYS;
+	      } else {
+		  console_fprintf(stderr, "Win32OS [warning]: unsupported open mode\n");
+	      }
+	  } else if (__isArrayLike(openmode)) {
+	      OBJ *ap = __arrayVal(openmode);
+	      int numAttrib = __arraySize(openmode);
+	      int i;
 
-              __openmode = "rb+";
+	      __openmode = "rb+";
 
-              for (i=0; i<numAttrib; i++) {
-                  OBJ attrSym = ap[i];
+	      for (i=0; i<numAttrib; i++) {
+		  OBJ attrSym = ap[i];
 
-                  if (attrSym == @symbol(FILE_SHARE_READ)) {
-                      share |= FILE_SHARE_READ;
-                  } else if (attrSym == @symbol(FILE_SHARE_WRITE)) {
-                      share |= FILE_SHARE_WRITE;
+		  if (attrSym == @symbol(FILE_SHARE_READ)) {
+		      share |= FILE_SHARE_READ;
+		  } else if (attrSym == @symbol(FILE_SHARE_WRITE)) {
+		      share |= FILE_SHARE_WRITE;
 
-                  } else if (attrSym == @symbol(GENERIC_READ)) {
-                      access |= GENERIC_READ;
-                  } else if (attrSym == @symbol(GENERIC_WRITE)) {
-                      access |= GENERIC_WRITE;
-                  } else if (attrSym == @symbol(GENERIC_READ_WRITE)) {
-                      access |= GENERIC_READ|GENERIC_WRITE;
+		  } else if (attrSym == @symbol(GENERIC_READ)) {
+		      access |= GENERIC_READ;
+		  } else if (attrSym == @symbol(GENERIC_WRITE)) {
+		      access |= GENERIC_WRITE;
+		  } else if (attrSym == @symbol(GENERIC_READ_WRITE)) {
+		      access |= GENERIC_READ|GENERIC_WRITE;
 
-                  } else if (attrSym == @symbol(CREATE_NEW)) {
-                      create |= CREATE_NEW;
-                  } else if (attrSym == @symbol(CREATE_ALWAYS)) {
-                      create |= CREATE_ALWAYS;
-                  } else if (attrSym == @symbol(OPEN_EXISTING)) {
-                      create |= OPEN_EXISTING;
-                  } else if (attrSym == @symbol(OPEN_ALWAYS)) {
-                      create |= OPEN_ALWAYS;
-                  } else if (attrSym == @symbol(TRUNCATE_EXISTING)) {
-                      create |= TRUNCATE_EXISTING;
+		  } else if (attrSym == @symbol(CREATE_NEW)) {
+		      create |= CREATE_NEW;
+		  } else if (attrSym == @symbol(CREATE_ALWAYS)) {
+		      create |= CREATE_ALWAYS;
+		  } else if (attrSym == @symbol(OPEN_EXISTING)) {
+		      create |= OPEN_EXISTING;
+		  } else if (attrSym == @symbol(OPEN_ALWAYS)) {
+		      create |= OPEN_ALWAYS;
+		  } else if (attrSym == @symbol(TRUNCATE_EXISTING)) {
+		      create |= TRUNCATE_EXISTING;
 
-                  } else if (attrSym == @symbol(FILE_ATTRIBUTE_HIDDEN)) {
-                      attr |= FILE_ATTRIBUTE_HIDDEN;
-                  } else if (attrSym == @symbol(FILE_ATTRIBUTE_READONLY)) {
-                      attr |= FILE_ATTRIBUTE_READONLY;
-                  } else if (attrSym == @symbol(FILE_FLAG_WRITE_THROUGH)) {
-                      attr |= FILE_FLAG_WRITE_THROUGH;
-                  } else if (attrSym == @symbol(FILE_FLAG_SEQUENTIAL_SCAN)) {
-                      attr |= FILE_FLAG_SEQUENTIAL_SCAN;
-                  } else if (attrSym == @symbol(FILE_FLAG_DELETE_ON_CLOSE)) {
-                      attr |= FILE_FLAG_DELETE_ON_CLOSE;
-                  } else if (!__isSymbol(attrSym) && __isStringLike(attrSym)) {
-                      __openmode = __stringVal(attrSym);
-                  } else {
-                      console_fprintf(stderr, "Win32OS [warning]: unsupported open mode\n");
-                  }
-              }
-          }
-          if (create == 0) {
+		  } else if (attrSym == @symbol(FILE_ATTRIBUTE_HIDDEN)) {
+		      attr |= FILE_ATTRIBUTE_HIDDEN;
+		  } else if (attrSym == @symbol(FILE_ATTRIBUTE_READONLY)) {
+		      attr |= FILE_ATTRIBUTE_READONLY;
+		  } else if (attrSym == @symbol(FILE_FLAG_WRITE_THROUGH)) {
+		      attr |= FILE_FLAG_WRITE_THROUGH;
+		  } else if (attrSym == @symbol(FILE_FLAG_SEQUENTIAL_SCAN)) {
+		      attr |= FILE_FLAG_SEQUENTIAL_SCAN;
+		  } else if (attrSym == @symbol(FILE_FLAG_DELETE_ON_CLOSE)) {
+		      attr |= FILE_FLAG_DELETE_ON_CLOSE;
+		  } else if (!__isSymbol(attrSym) && __isStringLike(attrSym)) {
+		      __openmode = __stringVal(attrSym);
+		  } else {
+		      console_fprintf(stderr, "Win32OS [warning]: unsupported open mode\n");
+		  }
+	      }
+	  }
+	  if (create == 0) {
 //              argumentError = @symbol(missingCreateMode);
-              goto badArgument;
-          }
-          if (attr == 0) {
-              attr = FILE_ATTRIBUTE_NORMAL;
-          }
+	      goto badArgument;
+	  }
+	  if (attr == 0) {
+	      attr = FILE_ATTRIBUTE_NORMAL;
+	  }
 
-          /*
-           * create security attributes - make handle inheritable by subprocesses
-           */
-          memset(&sa, 0, sizeof (sa));
-          sa.nLength = sizeof( sa );
-          sa.bInheritHandle = TRUE;
+	  /*
+	   * create security attributes - make handle inheritable by subprocesses
+	   */
+	  memset(&sa, 0, sizeof (sa));
+	  sa.nLength = sizeof( sa );
+	  // sa.bInheritHandle = TRUE;
+	  sa.bInheritHandle = FALSE;
 
-          if (__isStringLike(pathName)) {
-                char _aPathName[MAXPATHLEN];
+	  if (__isStringLike(pathName)) {
+		char _aPathName[MAXPATHLEN];
 
-                strncpy(_aPathName, __stringVal(pathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
-                do {
-                    __threadErrno = 0;
-                    handle = STX_API_NOINT_CALL7( "CreateFileA", CreateFileA, _aPathName, access, share, &sa, create, attr, 0 /* hTempl */);
-                    if (__threadErrno == EINTR) {
-                        handle = INVALID_HANDLE_VALUE;
-                    }
-                } while ((handle == INVALID_HANDLE_VALUE) && (__threadErrno == EINTR));
-          } else if (__isUnicode16String(pathName)) {
-                wchar_t _aPathName[MAXPATHLEN+1];
-                int i, l;
+		strncpy(_aPathName, __stringVal(pathName), MAXPATHLEN-1); _aPathName[MAXPATHLEN-1] = '\0';
+		do {
+		    __threadErrno = 0;
+		    handle = STX_API_NOINT_CALL7( "CreateFileA", CreateFileA, _aPathName, access, share, &sa, create, attr, 0 /* hTempl */);
+		    if (__threadErrno == EINTR) {
+			handle = INVALID_HANDLE_VALUE;
+		    }
+		} while ((handle == INVALID_HANDLE_VALUE) && (__threadErrno == EINTR));
+	  } else if (__isUnicode16String(pathName)) {
+		wchar_t _aPathName[MAXPATHLEN+1];
+		int i, l;
 
-                l = __unicode16StringSize(pathName);
-                if (l > MAXPATHLEN) l = MAXPATHLEN;
-                for (i=0; i<l; i++) {
-                    _aPathName[i] = __unicode16StringVal(pathName)[i];
-                }
-                _aPathName[i] = 0;
+		l = __unicode16StringSize(pathName);
+		if (l > MAXPATHLEN) l = MAXPATHLEN;
+		for (i=0; i<l; i++) {
+		    _aPathName[i] = __unicode16StringVal(pathName)[i];
+		}
+		_aPathName[i] = 0;
 
-                do {
-                    __threadErrno = 0;
-                    handle = STX_API_NOINT_CALL7( "CreateFileW", CreateFileW, _aPathName, access, share, &sa, create, attr, 0 /* hTempl */);
-                    if (__threadErrno == EINTR) {
-                        handle = INVALID_HANDLE_VALUE;
-                    }
-                } while ((handle == INVALID_HANDLE_VALUE) && (__threadErrno == EINTR));
-          }
-          if (handle != INVALID_HANDLE_VALUE) {
-              int fd;
-              extern void __stxWrapApiEnterCritical(), __stxWrapApiLeaveCritical();
+		do {
+		    __threadErrno = 0;
+		    handle = STX_API_NOINT_CALL7( "CreateFileW", CreateFileW, _aPathName, access, share, &sa, create, attr, 0 /* hTempl */);
+		    if (__threadErrno == EINTR) {
+			handle = INVALID_HANDLE_VALUE;
+		    }
+		} while ((handle == INVALID_HANDLE_VALUE) && (__threadErrno == EINTR));
+	  }
+	  if (handle != INVALID_HANDLE_VALUE) {
+	      int fd;
+	      extern void __stxWrapApiEnterCritical(), __stxWrapApiLeaveCritical();
 
-              __stxWrapApiEnterCritical();
-              fd = _open_osfhandle((long)handle, O_BINARY);
-              if (fd < 0) {
-                  if (__threadErrno == 0) {
-                      // no more file descriptors
-                      __threadErrno = EMFILE;
-                  }
-                  CloseHandle(handle);
-              } else {
-                  f = fdopen(fd, __openmode);
-              }
-              __stxWrapApiLeaveCritical();
-          }  else {
-            __threadErrno = __WIN32_ERR(GetLastError());
-          }
+	      __stxWrapApiEnterCritical();
+	      fd = _open_osfhandle((long)handle, O_BINARY);
+	      if (fd < 0) {
+		  if (__threadErrno == 0) {
+		      // no more file descriptors
+		      __threadErrno = EMFILE;
+		  }
+		  CloseHandle(handle);
+	      } else {
+		  f = fdopen(fd, __openmode);
+	      }
+	      __stxWrapApiLeaveCritical();
+	  }  else {
+	    __threadErrno = __WIN32_ERR(GetLastError());
+	  }
       }
 # else /* not WIN32 */
 
       if (__isStringLike(encodedPathName)) {
-          int accessMode = 0666;        // default access mode of fopen(), relies on umask()
-          int flags = 0;
-          int fd;
-          char * __openmode;
+	  int accessMode = 0666;        // default access mode of fopen(), relies on umask()
+	  int flags = 0;
+	  int fd;
+	  char * __openmode;
 
-          if (__isStringLike(openmode)) {
-              __openmode = __stringVal(openmode);
-              if (strcmp(__openmode, "r") == 0) {
-                  flags = O_RDONLY;
-              } else if (strcmp(__openmode, "r+") == 0) {
-                  flags = O_RDWR;
-              } else if (strcmp(__openmode, "w") == 0) {
-                  flags = O_WRONLY | O_CREAT | O_TRUNC;
-              } else if (strcmp(__openmode, "w+") == 0) {
-                  flags = O_RDWR | O_CREAT | O_TRUNC;
-              } else if (strcmp(__openmode, "a") == 0) {
-                  flags = O_WRONLY | O_CREAT | O_APPEND;
-              } else if (strcmp(__openmode, "a+") == 0) {
-                  flags = O_RDWR | O_CREAT| O_APPEND;
-              } else {
-                  console_fprintf(stderr, "UNIXOS [warning]: unsupported open mode\n");
-              }
-          } else if (__isArrayLike(openmode)) {
-              OBJ *ap = __arrayVal(openmode);
-              int numAttrib = __arraySize(openmode);
-              int i;
+	  if (__isStringLike(openmode)) {
+	      __openmode = __stringVal(openmode);
+	      if (strcmp(__openmode, "r") == 0) {
+		  flags = O_RDONLY;
+	      } else if (strcmp(__openmode, "r+") == 0) {
+		  flags = O_RDWR;
+	      } else if (strcmp(__openmode, "w") == 0) {
+		  flags = O_WRONLY | O_CREAT | O_TRUNC;
+	      } else if (strcmp(__openmode, "w+") == 0) {
+		  flags = O_RDWR | O_CREAT | O_TRUNC;
+	      } else if (strcmp(__openmode, "a") == 0) {
+		  flags = O_WRONLY | O_CREAT | O_APPEND;
+	      } else if (strcmp(__openmode, "a+") == 0) {
+		  flags = O_RDWR | O_CREAT| O_APPEND;
+	      } else {
+		  console_fprintf(stderr, "UNIXOS [warning]: unsupported open mode\n");
+	      }
+	  } else if (__isArrayLike(openmode)) {
+	      OBJ *ap = __arrayVal(openmode);
+	      int numAttrib = __arraySize(openmode);
+	      int i;
 
-              __openmode = "r+";
+	      __openmode = "r+";
 
-              for (i=0; i<numAttrib; i++) {
-                  OBJ attrSym = ap[i];
+	      for (i=0; i<numAttrib; i++) {
+		  OBJ attrSym = ap[i];
 
-                  if (attrSym == @symbol(FILE_SHARE_READ)) {
-                      // ignore
-                  } else if (attrSym == @symbol(FILE_SHARE_WRITE)) {
-                     // ignore
-                  } else if (attrSym == @symbol(GENERIC_READ)) {
-                      flags |= O_RDONLY;
-                  } else if (attrSym == @symbol(GENERIC_WRITE)) {
-                      flags |= O_WRONLY;
-                  } else if (attrSym == @symbol(GENERIC_READ_WRITE)) {
-                      flags |= O_RDWR;
+		  if (attrSym == @symbol(FILE_SHARE_READ)) {
+		      // ignore
+		  } else if (attrSym == @symbol(FILE_SHARE_WRITE)) {
+		     // ignore
+		  } else if (attrSym == @symbol(GENERIC_READ)) {
+		      flags |= O_RDONLY;
+		  } else if (attrSym == @symbol(GENERIC_WRITE)) {
+		      flags |= O_WRONLY;
+		  } else if (attrSym == @symbol(GENERIC_READ_WRITE)) {
+		      flags |= O_RDWR;
 
-                  } else if (attrSym == @symbol(CREATE_NEW)) {
-                      flags |= O_CREAT|O_EXCL;
-                      accessMode = 0600;     // simulate mkstemp()
-                  } else if (attrSym == @symbol(CREATE_ALWAYS)) {
-                      flags |= O_CREAT|O_TRUNC;
-                  } else if (attrSym == @symbol(OPEN_EXISTING)) {
-                      // nothing to be set
-                  } else if (attrSym == @symbol(OPEN_ALWAYS)) {
-                      flags |= O_CREAT;
-                  } else if (attrSym == @symbol(TRUNCATE_EXISTING)) {
-                      flags |= O_TRUNC;
+		  } else if (attrSym == @symbol(CREATE_NEW)) {
+		      flags |= O_CREAT|O_EXCL;
+		      accessMode = 0600;     // simulate mkstemp()
+		  } else if (attrSym == @symbol(CREATE_ALWAYS)) {
+		      flags |= O_CREAT|O_TRUNC;
+		  } else if (attrSym == @symbol(OPEN_EXISTING)) {
+		      // nothing to be set
+		  } else if (attrSym == @symbol(OPEN_ALWAYS)) {
+		      flags |= O_CREAT;
+		  } else if (attrSym == @symbol(TRUNCATE_EXISTING)) {
+		      flags |= O_TRUNC;
 
-                  } else if (attrSym == @symbol(FILE_ATTRIBUTE_HIDDEN)) {
-                      // ignore
-                  } else if (attrSym == @symbol(FILE_ATTRIBUTE_READONLY)) {
-                      accessMode &= 0444;
-                  } else if (attrSym == @symbol(FILE_FLAG_WRITE_THROUGH)) {
+		  } else if (attrSym == @symbol(FILE_ATTRIBUTE_HIDDEN)) {
+		      // ignore
+		  } else if (attrSym == @symbol(FILE_ATTRIBUTE_READONLY)) {
+		      accessMode &= 0444;
+		  } else if (attrSym == @symbol(FILE_FLAG_WRITE_THROUGH)) {
 #ifdef O_DIRECT
-                      flags |= O_DIRECT;
+		      flags |= O_DIRECT;
 #endif
-                  } else if (attrSym == @symbol(FILE_FLAG_SEQUENTIAL_SCAN)) {
-                      // ignore
-                  } else if (attrSym == @symbol(FILE_FLAG_DELETE_ON_CLOSE)) {
-                      // ignore;
-                  } else if (!__isSymbol(attrSym) && __isStringLike(attrSym)) {
-                      __openmode = __stringVal(attrSym);
-                  } else {
-                      console_fprintf(stderr, "UNIXOS [warning]: unsupported open mode\n");
-                  }
-              }
-          }
-          do {
-              __BEGIN_INTERRUPTABLE__
-              fd = open((char *) __stringVal(encodedPathName), flags, accessMode);
-              __END_INTERRUPTABLE__
-          } while ((fd < 0) && (__threadErrno == EINTR));
+		  } else if (attrSym == @symbol(FILE_FLAG_SEQUENTIAL_SCAN)) {
+		      // ignore
+		  } else if (attrSym == @symbol(FILE_FLAG_DELETE_ON_CLOSE)) {
+		      // ignore;
+		  } else if (!__isSymbol(attrSym) && __isStringLike(attrSym)) {
+		      __openmode = __stringVal(attrSym);
+		  } else {
+		      console_fprintf(stderr, "UNIXOS [warning]: unsupported open mode\n");
+		  }
+	      }
+	  }
+	  do {
+	      __BEGIN_INTERRUPTABLE__
+	      fd = open((char *) __stringVal(encodedPathName), flags, accessMode);
+	      __END_INTERRUPTABLE__
+	  } while ((fd < 0) && (__threadErrno == EINTR));
 
-          if (fd >= 0) {
-              __threadErrno = 0;
-              f = fdopen(fd, __openmode);
-              if (f == NULL) {
-                  close(fd);            // fdopen failed, close before retry.
-              }
-          }
+	  if (fd >= 0) {
+	      __threadErrno = 0;
+	      f = fdopen(fd, __openmode);
+	      if (f == NULL) {
+		  close(fd);            // fdopen failed, close before retry.
+	      }
+	  }
       }
 
 # endif /* not WIN32 */
@@ -1631,80 +1632,80 @@
 
 
     if (f == NULL) {
-        /*
-         * If no filedescriptors available, try to finalize
-         * possibly collected fd's and try again.
-         */
-        if (pass == 0 && (__threadErrno == ENFILE || __threadErrno == EMFILE)) {
-            pass = 1;
-            __SSEND0(@global(ObjectMemory), @symbol(scavenge), 0);
-            __SSEND0(@global(ObjectMemory), @symbol(finalize), 0);
-            goto retry;
-        }
+	/*
+	 * If no filedescriptors available, try to finalize
+	 * possibly collected fd's and try again.
+	 */
+	if (pass == 0 && (__threadErrno == ENFILE || __threadErrno == EMFILE)) {
+	    pass = 1;
+	    __SSEND0(@global(ObjectMemory), @symbol(scavenge), 0);
+	    __SSEND0(@global(ObjectMemory), @symbol(finalize), 0);
+	    goto retry;
+	}
     badArgument:
     getOutOfHere:
-        __INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
-        __INST(position) = nil;
+	__INST(lastErrorNumber) = __mkSmallInteger(__threadErrno);
+	__INST(position) = nil;
     } else {
 #ifdef __VMS__
-        /*
-         * check to see if this is positionable ...
-         */
-        __INST(canPosition) = false;
+	/*
+	 * check to see if this is positionable ...
+	 */
+	__INST(canPosition) = false;
 # ifndef _POSIX_C_SOURCE
-        {
-            struct stat statBuffer;
+	{
+	    struct stat statBuffer;
 
-            if (fstat(fileno(f), &statBuffer) >= 0) {
-                switch (statBuffer.st_fab_rfm) {
-                    case FAB$C_UDF: /* undefined (also stream binary)   */
-                    case FAB$C_VAR: /* variable length records          */
-                    case FAB$C_VFC: /* variable fixed control           */
-                    case FAB$C_STM: /* RMS-11 stream (valid only for sequen) */
-                    default:
-                        __INST(canPosition) = false;
-                        break;
+	    if (fstat(fileno(f), &statBuffer) >= 0) {
+		switch (statBuffer.st_fab_rfm) {
+		    case FAB$C_UDF: /* undefined (also stream binary)   */
+		    case FAB$C_VAR: /* variable length records          */
+		    case FAB$C_VFC: /* variable fixed control           */
+		    case FAB$C_STM: /* RMS-11 stream (valid only for sequen) */
+		    default:
+			__INST(canPosition) = false;
+			break;
 
-                    case FAB$C_FIX: /* fixed length records             */
-                    case FAB$C_STMLF: /* LF stream (valid only for sequential) */
-                    case FAB$C_STMCR: /* CR stream (valid only for sequential) */
-                        __INST(canPosition) = true;
-                        break;
-                }
-            }
-        }
+		    case FAB$C_FIX: /* fixed length records             */
+		    case FAB$C_STMLF: /* LF stream (valid only for sequential) */
+		    case FAB$C_STMCR: /* CR stream (valid only for sequential) */
+			__INST(canPosition) = true;
+			break;
+		}
+	    }
+	}
 # endif
 #else /* not VMS */
-        __INST(canPosition) = true;
+	__INST(canPosition) = true;
 #endif /* not VMS */
 
-        if (@global(FileOpenTrace) == true) {
-            console_fprintf(stderr, "fopen %s [FileStream] -> %x\n", __stringVal(pathName), f);
-        }
-        if (f != NULL) {
-            OBJ fp;
+	if (@global(FileOpenTrace) == true) {
+	    console_fprintf(stderr, "fopen %s [FileStream] -> %x\n", __stringVal(pathName), f);
+	}
+	if (f != NULL) {
+	    OBJ fp;
 
-            wasBlocked = __BLOCKINTERRUPTS();
+	    wasBlocked = __BLOCKINTERRUPTS();
 #if 0
-            // The original code was:
-            __INST(handle) = fp = __MKEXTERNALADDRESS(f); __STORE(self, fp);
-            // but for that, gcc generates wrong code, which loads self (volatile) into
-            // a register (bp), then calls __MKEXTERNALADDRESS, then stores indirect bp.
-            // That is wrong if a scavenge occurs in __MKEXTERNALADDRESS, as bp is now still pointing to the old
-            // object.
+	    // The original code was:
+	    __INST(handle) = fp = __MKEXTERNALADDRESS(f); __STORE(self, fp);
+	    // but for that, gcc generates wrong code, which loads self (volatile) into
+	    // a register (bp), then calls __MKEXTERNALADDRESS, then stores indirect bp.
+	    // That is wrong if a scavenge occurs in __MKEXTERNALADDRESS, as bp is now still pointing to the old
+	    // object.
 #else
-            fp = __MKEXTERNALADDRESS(f);
-            __INST(handle) = fp;
-            __STORE(self, fp);
+	    fp = __MKEXTERNALADDRESS(f);
+	    __INST(handle) = fp;
+	    __STORE(self, fp);
 #endif
-        }
+	}
     }
 %}.
     handle notNil ifTrue:[
-        position := 0.
-        handleType := #filePointer.
-        Lobby register:self.
-        wasBlocked == false ifTrue:[OperatingSystem unblockInterrupts].
+	position := 0.
+	handleType := #filePointer.
+	Lobby register:self.
+	wasBlocked == false ifTrue:[OperatingSystem unblockInterrupts].
     ].
     ^ handle
 !
@@ -1779,14 +1780,14 @@
 
     handle := self openFile:pathName withMode:openmode attributes:attributeSpec.
     handle isNil ifTrue:[
-        "
-         the open failed for some reason ...
-        "
-        ^ self openError:lastErrorNumber.
+	"
+	 the open failed for some reason ...
+	"
+	^ self openError:lastErrorNumber.
     ].
     position := 0.
     buffered isNil ifTrue:[
-        buffered := true.       "default is buffered"
+	buffered := true.       "default is buffered"
     ].
 !
 
@@ -1997,11 +1998,11 @@
 !FileStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.166 2013-07-08 19:22:38 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.167 2013-07-24 19:56:49 cg Exp $'
 !
 
 version_CVS
-    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.166 2013-07-08 19:22:38 stefan Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/FileStream.st,v 1.167 2013-07-24 19:56:49 cg Exp $'
 ! !