diff Objects/fileobject.c @ 2825:bebb0ea7de20 legacy-trunk

fix read(0), readline(0); make tuple for call_object args
author Guido van Rossum <guido@python.org>
date Mon, 10 Jul 1995 23:32:26 +0000
parents 0b7e14bb54ae
children 65d2d8e67da3
line wrap: on
line diff
--- a/Objects/fileobject.c	Mon Jul 10 13:52:21 1995 +0000
+++ b/Objects/fileobject.c	Mon Jul 10 23:32:26 1995 +0000
@@ -376,16 +376,12 @@
 	if (f->f_fp == NULL)
 		return err_closed();
 	if (args == NULL)
-		n = 0;
+		n = -1;
 	else {
 		if (!getargs(args, "i", &n))
 			return NULL;
-		if (n < 0) {
-			err_setstr(ValueError, "negative read count");
-			return NULL;
-		}
 	}
-	n2 = n != 0 ? n : BUFSIZ;
+	n2 = n >= 0 ? n : BUFSIZ;
 	v = newsizedstringobject((char *)NULL, n2);
 	if (v == NULL)
 		return NULL;
@@ -399,7 +395,7 @@
 		n1 += n3;
 		if (n1 == n)
 			break;
-		if (n == 0) {
+		if (n < 0) {
 			n2 = n1 + BUFSIZ;
 			RET_SAVE
 			if (resizestring(&v, n2) < 0)
@@ -561,10 +557,10 @@
 	else {
 		if (!getintarg(args, &n))
 			return NULL;
-		if (n < 0) {
-			err_setstr(ValueError, "negative readline count");
-			return NULL;
-		}
+		if (n == 0)
+			return newstringobject("");
+		if (n < 0)
+			n = 0;
 	}
 
 	return getline(f, n);
@@ -783,7 +779,7 @@
 	object *f;
 	int flags;
 {
-	object *writer, *value, *result;
+	object *writer, *value, *args, *result;
 	if (f == NULL) {
 		err_setstr(TypeError, "writeobject with NULL file");
 		return -1;
@@ -807,9 +803,16 @@
 		DECREF(writer);
 		return -1;
 	}
-	result = call_object(writer, value);
+	args = mkvalue("(O)", value);
+	if (value == NULL) {
+		DECREF(value);
+		DECREF(writer);
+		return -1;
+	}
+	result = call_object(writer, args);
+	DECREF(args);
+	DECREF(value);
 	DECREF(writer);
-	DECREF(value);
 	if (result == NULL)
 		return -1;
 	DECREF(result);