--- a/ExternalStream.st Thu Jun 02 13:20:08 1994 +0200
+++ b/ExternalStream.st Thu Jun 02 13:21:56 1994 +0200
@@ -12,7 +12,7 @@
ReadWriteStream subclass:#ExternalStream
instanceVariableNames:'filePointer mode buffered binary useCRLF hitEOF'
- classVariableNames:'Lobby'
+ classVariableNames:'Lobby LastErrorNumber'
poolDictionaries:''
category:'Streams-External'
!
@@ -22,7 +22,7 @@
COPYRIGHT (c) 1988 by Claus Gittinger
All Rights Reserved
-$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.16 1994-05-17 10:07:23 claus Exp $
+$Header: /cvs/stx/stx/libbasic/ExternalStream.st,v 1.17 1994-06-02 11:20:13 claus Exp $
written 88 by claus
'!
@@ -71,6 +71,27 @@
reOpen in subclasses for more information.
For streams sitting on some communication channel (i.e. Pipes and Sockets) you should
reestablish the stream upon image restart (make someone dependent on ObjectMemory).
+
+ Instance variables:
+
+ filePointer <Integer> the unix FILE*; somehow mapped to an integer
+ (notice: not the fd)
+ mode <Symbol> #readwrite, #readonly or #writeonly
+ buffered <Boolean> true, if buffered (i.e. collects characters - does
+ not output immediately)
+ binary <Boolean> true if in binary mode (reads bytes instead of chars)
+ useCRLF <Boolean> true, if lines should be terminated with crlf instead
+ of lf. (i.e. if file is an MSDOS-type file)
+ hitEOF <Boolean> true, if EOF was reached
+
+
+ Class variables:
+ Lobby <Registry> keeps track of used ext-streams (to free up FILE*'s)
+
+ LastErrorNumber <Integer> the value of errno (only valid right after the error -
+ updated with next i/o operation)
+
+ Question: should lastErrorNumber be kept instance-specific ?
"
! !
@@ -153,6 +174,12 @@
!ExternalStream methodsFor:'error handling'!
+lastErrorNumber
+ "return the last error"
+
+ ^ LastErrorNumber
+!
+
errorNotOpen
"report an error, that the stream has not been opened"
@@ -415,7 +442,6 @@
int ret, ioNum, ioArg;
int savInt;
extern int _immediateInterrupt;
- extern OBJ ErrorNumber;
extern errno;
if (_INST(filePointer) != nil) {
@@ -431,7 +457,7 @@
if (ret >= 0) {
RETURN ( _MKSMALLINT(ret) );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN ( nil );
}
}
@@ -456,7 +482,6 @@
FILE *f;
int ret, ioNum, savInt;
extern int _immediateInterrupt;
- extern OBJ ErrorNumber;
extern errno;
if (_INST(filePointer) != nil) {
@@ -477,7 +502,7 @@
if (ret >= 0) {
RETURN ( _MKSMALLINT(ret) );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN ( nil );
}
}
@@ -499,7 +524,6 @@
FILE *f;
unsigned char byte;
int cnt, savInt;
- extern OBJ ErrorNumber;
extern errno;
extern int _immediateInterrupt;
@@ -523,7 +547,7 @@
RETURN ( _MKSMALLINT(byte) );
}
if (cnt < 0) {
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
}
_INST(hitEOF) = true;
RETURN ( nil );
@@ -566,7 +590,6 @@
int cnt, offs;
int objSize, nInstVars, nInstBytes, savInt;
char *cp;
- extern OBJ ErrorNumber;
extern errno;
OBJ pos;
extern int _immediateInterrupt;
@@ -613,7 +636,7 @@
_INST(hitEOF) = true;
RETURN ( _MKSMALLINT(cnt) );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN ( nil );
}
}
@@ -636,7 +659,6 @@
%{ /* NOCONTEXT */
extern int _immediateInterrupt;
- extern OBJ ErrorNumber;
int savInt;
if (_INST(binary) == true) {
@@ -663,7 +685,7 @@
if (cnt == 0)
_INST(hitEOF) = true;
else
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN ( nil );
}
do {
@@ -684,7 +706,7 @@
if (cnt == 0)
_INST(hitEOF) = true;
else
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN ( _MKSMALLINT(hi & 0xFF) );
}
if (_INST(position) != nil) {
@@ -1009,7 +1031,6 @@
FILE *f;
char c;
- extern OBJ ErrorNumber;
extern errno;
OBJ pos;
int cnt, savInt;
@@ -1043,7 +1064,7 @@
_INST(position) = _MKSMALLINT(_intVal(pos) + 1);
RETURN ( self );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN (nil);
}
}
@@ -1088,7 +1109,6 @@
int cnt, offs;
int objSize, nInstVars, nInstBytes;
char *cp;
- extern OBJ ErrorNumber;
extern errno;
OBJ oClass;
OBJ pos;
@@ -1141,7 +1161,7 @@
_INST(position) = _MKSMALLINT(_intVal(pos) + cnt);
RETURN ( _MKSMALLINT(cnt) );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN ( nil );
}
}
@@ -1165,7 +1185,6 @@
int num;
char bytes[2];
FILE *f;
- extern OBJ ErrorNumber;
extern errno;
int savInt;
extern int _immediateInterrupt;
@@ -1207,7 +1226,7 @@
}
RETURN ( self );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
return ( nil );
}
}
@@ -1229,7 +1248,6 @@
int num;
char bytes[4];
FILE *f;
- extern OBJ ErrorNumber;
extern errno;
int cnt, savInt;
extern int _immediateInterrupt;
@@ -1272,7 +1290,7 @@
}
RETURN ( self );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
return ( nil );
}
}
@@ -1440,7 +1458,6 @@
FILE *f;
char c;
- extern OBJ ErrorNumber;
extern errno;
int cnt;
OBJ pos;
@@ -1480,7 +1497,7 @@
}
RETURN ( self );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN ( nil );
}
} else {
@@ -1509,7 +1526,6 @@
FILE *f;
unsigned char *cp;
int len, cnt;
- extern OBJ ErrorNumber;
extern errno;
OBJ pos;
int savInt;
@@ -1566,7 +1582,7 @@
}
RETURN ( self );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN ( nil );
}
}
@@ -1585,7 +1601,6 @@
FILE *f;
unsigned char *cp;
int len, cnt, index1, index2;
- extern OBJ ErrorNumber;
extern errno;
int savInt;
extern int _immediateInterrupt;
@@ -1649,7 +1664,7 @@
}
RETURN ( self );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN ( nil );
}
}
@@ -1665,7 +1680,6 @@
%{ /* NOCONTEXT */
FILE *f;
- extern OBJ ErrorNumber;
extern errno;
extern int _immediateInterrupt;
int cnt, savInt;
@@ -1698,7 +1712,7 @@
}
RETURN ( self );
}
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
return ( nil );
}
}
@@ -1821,7 +1835,6 @@
int len, cnt;
OBJ pos;
char *s;
- extern OBJ ErrorNumber;
extern errno;
int savInt;
extern int _immediateInterrupt;
@@ -1869,7 +1882,7 @@
}
}
_immediateInterrupt = savInt;
- ErrorNumber = _MKSMALLINT(errno);
+ ExternalStream_LastErrorNumber = _MKSMALLINT(errno);
RETURN ( nil );
}
}