Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5a2a683

Browse files
committed
* filemodule.c: added writelines() -- analogous to readlines()
* import.c: fixed core dump when out-of-date .pyc file encountered (again!)
1 parent 52c1f51 commit 5a2a683

2 files changed

Lines changed: 44 additions & 1 deletion

File tree

Objects/fileobject.c

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,47 @@ file_write(f, args)
541541
return None;
542542
}
543543

544+
static object *
545+
file_writelines(f, args)
546+
fileobject *f;
547+
object *args;
548+
{
549+
int i, n;
550+
if (f->f_fp == NULL)
551+
return err_closed();
552+
if (args == NULL || !is_listobject(args)) {
553+
err_setstr(TypeError,
554+
"writelines() requires list of strings");
555+
return NULL;
556+
}
557+
n = getlistsize(args);
558+
f->f_softspace = 0;
559+
BGN_SAVE
560+
errno = 0;
561+
for (i = 0; i < n; i++) {
562+
object *line = getlistitem(args, i);
563+
int len;
564+
int nwritten;
565+
if (!is_stringobject(line)) {
566+
RET_SAVE
567+
err_setstr(TypeError,
568+
"writelines() requires list of strings");
569+
return NULL;
570+
}
571+
len = getstringsize(line);
572+
nwritten = fwrite(getstringvalue(line), 1, len, f->f_fp);
573+
if (nwritten != len) {
574+
RET_SAVE
575+
err_errno(IOError);
576+
clearerr(f->f_fp);
577+
return NULL;
578+
}
579+
}
580+
END_SAVE
581+
INCREF(None);
582+
return None;
583+
}
584+
544585
static struct methodlist file_methods[] = {
545586
{"close", file_close},
546587
{"flush", file_flush},
@@ -552,6 +593,7 @@ static struct methodlist file_methods[] = {
552593
{"seek", file_seek},
553594
{"tell", file_tell},
554595
{"write", file_write},
596+
{"writelines", file_writelines},
555597
{NULL, NULL} /* sentinel */
556598
};
557599

Python/import.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,9 +250,10 @@ get_module(m, name, m_ret)
250250
fprintf(stderr,
251251
"# invalid precompiled file \"%s\"\n",
252252
namebuf);
253-
goto read_py;
254253
}
255254
}
255+
if (co == NULL)
256+
goto read_py;
256257
}
257258
else {
258259
read_py:

0 commit comments

Comments
 (0)