ExtStream.st
changeset 521 70533ec40482
parent 481 d183409441a4
child 530 07d0bce293c9
--- a/ExtStream.st	Fri Nov 10 16:44:24 1995 +0100
+++ b/ExtStream.st	Fri Nov 10 17:46:49 1995 +0100
@@ -24,7 +24,7 @@
 COPYRIGHT (c) 1988 by Claus Gittinger
 	      All Rights Reserved
 
-$Header: /cvs/stx/stx/libbasic/Attic/ExtStream.st,v 1.62 1995-11-04 14:40:24 cg Exp $
+$Header: /cvs/stx/stx/libbasic/Attic/ExtStream.st,v 1.63 1995-11-10 16:46:21 cg Exp $
 '!
 
 !ExternalStream primitiveDefinitions!
@@ -151,7 +151,7 @@
 
 version
 "
-$Header: /cvs/stx/stx/libbasic/Attic/ExtStream.st,v 1.62 1995-11-04 14:40:24 cg Exp $
+$Header: /cvs/stx/stx/libbasic/Attic/ExtStream.st,v 1.63 1995-11-10 16:46:21 cg Exp $
 "
 !
 
@@ -2188,10 +2188,11 @@
     FILE *f;
     int len;
     char buffer[1024];
-    char *rslt, *limit;
+    char *rslt, *nextPtr, *limit;
     int fd, ch;
     int _buffered;
     OBJ fp;
+    OBJ __MKSTRING_L();
 
     _INST(lastErrorNumber) = nil;
     if (((fp = _INST(filePointer)) != nil)
@@ -2220,7 +2221,7 @@
 	    } while ((rslt == NULL) && (errno == EINTR));
 #else
 
-	    rslt = buffer;
+	    rslt = nextPtr = buffer;
 	    limit = buffer + sizeof(buffer) - 2;
 
 	    for (;;) {
@@ -2256,29 +2257,29 @@
 			len = 0;
 		    } else {
 			len = 1;
-			*rslt = ch;
+			*nextPtr = ch;
 		    }
 		} else {
 		    do {
 			errno = 0;
-			len = read(fd, rslt, 1);
+			len = read(fd, nextPtr, 1);
 		    } while ((len < 0) && (errno == EINTR));
 		}
 		if (len <= 0) {
-		    if (rslt == buffer) {
+		    if (nextPtr == buffer) {
 			rslt = NULL;
 		    } else {
-			*rslt = '\0';
+			*nextPtr = '\0';
 		    }
 		    break;
 		}
-		rslt++;
-		if (*(rslt-1) == '\n') {
-		    *rslt = '\0';
+		if (*nextPtr == '\n') {
+		    *nextPtr = '\0';
 		    break;
 		}
-		if (rslt >= limit) {
-		    *rslt = '\0';
+		nextPtr++;
+		if (nextPtr >= limit) {
+		    *nextPtr = '\0';
 		    break;
 		}
 	    }
@@ -2286,20 +2287,24 @@
 	    __END_INTERRUPTABLE__
 	    if (rslt != NULL) {
 		/*
-		 * that strlen can be avoided and replaced by (rslt - buffer)
+		 * that strlen can be avoided and replaced by (nextPtr - buffer)
 		 */
-		len = strlen(buffer);
+		/* len = strlen(buffer); */
+		len = nextPtr-buffer;
+
 		if (_INST(position) != nil) {
-		    _INST(position) = __MKSMALLINT(__intVal(_INST(position)) + len + 1);
+		    _INST(position) = __MKSMALLINT(__intVal(_INST(position)) + len);
 		}
 		/* remove EOL character */
-		if ((len != 0) && (buffer[len-1] == '\n')) {
-		    buffer[--len] = '\0';
+		if (len != 0) {
+		    if (buffer[len-1] == '\n') {
+		        buffer[--len] = '\0';
+		    }
+		    if ((len != 0) && (buffer[len-1] == '\r')) {
+		        buffer[--len] = '\0';
+		    }
 		}
-		if ((len != 0) && (buffer[len-1] == '\r')) {
-		    buffer[--len] = '\0';
-		}
-		RETURN ( _MKSTRING(buffer COMMA_CON) );
+		RETURN ( __MKSTRING_L(buffer, len COMMA_CON) );
 	    }
 	    if (ferror(f) && (errno != 0)) {
 		_INST(lastErrorNumber) = __MKSMALLINT(errno);
@@ -3252,6 +3257,7 @@
     int ch;
     int cnt = 0;
     OBJ fp;
+    OBJ __MKSTRING_L();
 
     if (((fp = _INST(filePointer)) != nil)
      && (_INST(mode) != @symbol(writeonly))) {
@@ -3321,9 +3327,9 @@
 	if (_INST(position) != nil) {
 	    _INST(position) = __MKSMALLINT(__intVal(_INST(position)) + cnt);
 	}
-	buffer[len] = '\0';
 	if (len != 0) {
-	    RETURN ( _MKSTRING(buffer COMMA_CON) );
+	    buffer[len] = '\0';
+	    RETURN ( __MKSTRING_L(buffer, len COMMA_CON) );
 	}
 	RETURN ( nil );
     }
@@ -3361,6 +3367,7 @@
     REGISTER int index;
     int currSize;
     int inComment, inString, inPrimitive = 0;
+    OBJ __MKSTRING_L();
 
     if (!fastFlag && buffer) {
 	/*
@@ -3498,7 +3505,7 @@
     /*
      * make it a string
      */
-    retVal = _MKSTRING(buffer COMMA_CON);
+    retVal = __MKSTRING_L(buffer, index COMMA_CON);
 err:
     if (!fastFlag && buffer) {
 	free(buffer);