Kaydet (Commit) d3f9a1ad authored tarafından Guido van Rossum's avatar Guido van Rossum

fix read(0), readline(0); make tuple for call_object args

üst 32120311
...@@ -376,16 +376,12 @@ file_read(f, args) ...@@ -376,16 +376,12 @@ file_read(f, args)
if (f->f_fp == NULL) if (f->f_fp == NULL)
return err_closed(); return err_closed();
if (args == NULL) if (args == NULL)
n = 0; n = -1;
else { else {
if (!getargs(args, "i", &n)) if (!getargs(args, "i", &n))
return NULL; 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); v = newsizedstringobject((char *)NULL, n2);
if (v == NULL) if (v == NULL)
return NULL; return NULL;
...@@ -399,7 +395,7 @@ file_read(f, args) ...@@ -399,7 +395,7 @@ file_read(f, args)
n1 += n3; n1 += n3;
if (n1 == n) if (n1 == n)
break; break;
if (n == 0) { if (n < 0) {
n2 = n1 + BUFSIZ; n2 = n1 + BUFSIZ;
RET_SAVE RET_SAVE
if (resizestring(&v, n2) < 0) if (resizestring(&v, n2) < 0)
...@@ -561,10 +557,10 @@ file_readline(f, args) ...@@ -561,10 +557,10 @@ file_readline(f, args)
else { else {
if (!getintarg(args, &n)) if (!getintarg(args, &n))
return NULL; return NULL;
if (n < 0) { if (n == 0)
err_setstr(ValueError, "negative readline count"); return newstringobject("");
return NULL; if (n < 0)
} n = 0;
} }
return getline(f, n); return getline(f, n);
...@@ -783,7 +779,7 @@ writeobject(v, f, flags) ...@@ -783,7 +779,7 @@ writeobject(v, f, flags)
object *f; object *f;
int flags; int flags;
{ {
object *writer, *value, *result; object *writer, *value, *args, *result;
if (f == NULL) { if (f == NULL) {
err_setstr(TypeError, "writeobject with NULL file"); err_setstr(TypeError, "writeobject with NULL file");
return -1; return -1;
...@@ -807,9 +803,16 @@ writeobject(v, f, flags) ...@@ -807,9 +803,16 @@ writeobject(v, f, flags)
DECREF(writer); DECREF(writer);
return -1; return -1;
} }
result = call_object(writer, value); args = mkvalue("(O)", value);
if (value == NULL) {
DECREF(value);
DECREF(writer); DECREF(writer);
return -1;
}
result = call_object(writer, args);
DECREF(args);
DECREF(value); DECREF(value);
DECREF(writer);
if (result == NULL) if (result == NULL)
return -1; return -1;
DECREF(result); DECREF(result);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment